[SCM] UNNAMED PROJECT branch, upstream, updated. upstream/4.4.0.alpha6

Clint Adams schizo at debian.org
Tue Jun 23 00:29:01 UTC 2009


The following commit has been merged in the upstream branch:
commit b97078c9b14ba690d68e44cd14831e7e58b4fdf0
Author: Clint Adams <schizo at debian.org>
Date:   Mon Jun 22 19:11:32 2009 -0400

    Imported Upstream version 4.4.0~alpha6

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5195908
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,27 @@
+*~
+*.o
+.deps/
+Makefile
+Makefile.in
+aclocal.m4
+autom4te.cache/
+cmail
+./config.h
+config.log
+config.status
+configure
+copyright.info
+config.h.in
+depcomp
+mdate-sh
+missing
+./parser.c
+stamp-h
+stamp-h1
+stamp-vti
+texinfo.tex
+version.texi
+xboard
+xboard.info
+xboard.man
+ylwrap
\ No newline at end of file
diff --git a/AUTHORS b/AUTHORS
index 67b1e4a..25e88e6 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -120,3 +120,30 @@ xboard.c, and xboard.man.
 9. Hugh Fisher <Hugh.Fisher at cs.anu.edu.au>
 
 Additions to backend.c and xboard.c.
+
+10. Allessandro Scotti
+
+Made many additions to the WinBoard user interface and graphics 
+capabilities, such as new windows for engine output, board textures 
+and font-based piece rendering. These changes became collectively known
+as Winboard_x.
+
+11. H.G. Muller <h.g.muller AT hccnet DOT nl>
+
+Heaviliy modified winboard.c, backend.c, moves.c and parser.l, to
+allow board sizes other than 8x8, and many non-orthodox Chess pieces,
+so that WinBoard is now capable of playing variants like Shogi and Xiangqi.
+Also implemented displaying of the Crazyhouse holdings, and many adjudication
+and other backend options. This version of WinBoard, (4.3.xx) containing all 
+of the WinBoard_x options, became known as WinBoard_F.
+
+12. Arun Persaud <arun AT nubati DOT net> 
+ 
+fix for parser.l
+updated autotools files
+
+13. Eric Mullins <emwine AT earthlink DOT net>
+
+Makefiles for different compilers for windows, several changes for those compilers
+
+backend.c, winboard/Winboard.dev, winboard/makefile.gcc, winboard/makefile.ms, winboard/res/winboard.exe.manifest, winboard/resource.h, winboard/wevalgraph.c, winboard/winboard.c, winboard/winboard.dsp, winboard/winboard.dsw, winboard/winboard.h, winboard/winboard.rc, winboard/woptions.c                
diff --git a/COPYING b/COPYING
index a3f6b12..94a9ed0 100644
--- a/COPYING
+++ b/COPYING
@@ -1,286 +1,626 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
 
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                          59 Temple Place - Suite 330, Boston, MA
-                          02111-1307, USA.
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-			    Preamble
+                            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
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  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.
+them 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.
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
 
   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.
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  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.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
 
   The precise terms and conditions for copying, distribution and
 modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey 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;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
 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
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If 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
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
 be similar in spirit to the present version, but may differ in detail to
 address new problems or concerns.
 
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	Appendix: How to Apply These Terms to Your New Programs
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  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.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+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.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     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
@@ -288,15 +628,15 @@ 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
+state 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>
+    Copyright (C) <year>  <name of author>
 
-    This program is free software; you can redistribute it and/or modify
+    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
+    the Free Software Foundation, either version 3 of the License, or
     (at your option) any later version.
 
     This program is distributed in the hope that it will be useful,
@@ -305,36 +645,30 @@ the "copyright" line and a pointer to where the full notice is found.
     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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 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:
+  If the program does terminal interaction, 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'.
+    <program>  Copyright (C) <year>  <name of author>
+    This program 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.
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU 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 Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/COPYRIGHT b/COPYRIGHT
index accde17..c0127ab 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -3,8 +3,10 @@ XBoard -- a graphical chessboard for X
 Original authors:  Dan Sears and Chris Sears
 Enhancements (Version 2.0 and later):  Tim Mann
 
-Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
-Enhancements Copyright 1992-98 Free Software Foundation, Inc.
+Copyright 1991 by Digital Equipment Corporation, Maynard,
+Massachusetts.  Enhancements Copyright
+1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+Foundation, Inc.
 
 XBoard's alternative piece bitmaps (bitmaps.xchess) are derived from the
 bitmaps in the XChess program, which was written and is copyrighted by
@@ -35,17 +37,16 @@ SOFTWARE.
 The following terms apply to the enhanced version of XBoard distributed
 by the Free Software Foundation:
 ------------------------------------------------------------------------
-This program is free software; you can redistribute it and/or modify
+GNU XBoard 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.
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+along with this program. If not, see http://www.gnu.org/licenses/.  *
 ------------------------------------------------------------------------
diff --git a/ChangeLog b/ChangeLog
old mode 100755
new mode 100644
index 313e8f1..7338258
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3331 +1,4373 @@
-ChangeLog for XBoard/WinBoard
-
-* 11/26/2003: In WinBoard, setting the -debug flag now logs ICS output
-to WinBoard.debug too.  (This isn't needed in xboard because ICS
-output already goes to stdout, so it's easy to capture along with the
-debug output on stderr.)  This was issue #280 in the ToDo file.
-
-* 11/23/2003: Cleaned up some minor problems in cygwin.mak.  Thanks to
-Hans Werner Strube for the problem report.
-
-* 11/23/2003: Updated the default list of chess servers in
-winboard/defaults.h.  Deleted two that appear to be dead and added a
-new one that is active.
-
-* 11/19/2003: Swapped icon_white.bm and icon_black.bm in XBoard.
-Hopefully this will get them the right way around by default on more X
-window managers.  I wish I understood this better.
-
-* 11/18/2003: Implemented a simple 32-bit random number generator for
-WinBoard, replacing the Windows rand(), which ranges only up to
-0x7fff.  Formerly on Windows, only zippy.lines sayings that started in
-the first 32767 bytes of the file could ever be used.  This was issue
-#505 from the ToDo file.
-
-* 11/16/2003: The xboard man page and info files are now built from a
-common set of texinfo source files, and the xboard man page now covers
-cmail as well.  Formerly, ever since the texinfo file was first
-contributed to the project, it was separate from the man page and the
-two files had to be updated in parallel, making for a maintenance
-nightmare.  To make combining the files possible, I took the Perl
-script "texi2man" from the GNU Units project and added support for a
-larger subset of the texinfo markup language.  I then carefully
-compared the old man page and old texinfo file to make sure the latest
-and clearest words survived into the new combined texinfo file.  It
-would be great to merge in WinBoard's help file too, but that's a
-larger project.  It would have to be heavily conditionalized to
-deal with differences in features between XBoard and WinBoard.
-
-* 11/15/2003: Cleaned up and applied a small patch from Daniel
-Mehrmann, to stop overly long PVs in thinking output from causing a
-buffer overflow crash in backend.c.
-	
-* 11/5/2003: When a chess engine sends a "telluser" command (including
-the cases where "tellall" or "tellopponent" acts like telluser), the
-information now goes into a nonmodel popup that is automatically
-dismissed when the user clicks anywhere on the board.  This fix is
-more significant on WinBoard, where formerly you got a fully modal
-dialog that had to be dismissed by clicking on OK before anything else
-could happen.  The bug was issue #406 in the ToDo file.
-
-* 11/1/2003: Removed email addresses from this file to reduce spam
-load, as it gets linked to from the Web.
-
-* 11/1/2003: Updated READ_ME and winboard/READ_ME.txt.
-
-* Modified xboard and winboard makefiles to be able to build the
-project in the new combined directory structure.
-
-* Applied a small security fix to pxboard, from Martin Maeok.
-
-* Fixed a bug in the game list dialog.  The change in 4.2.6 to opening
-games in text mode (meant to avoid getting extra \r's into comments)
-caused a new bug in determining seek offsets when parsing a game file
-to form the game list.  Also, the change was incomplete; on some code
-paths games were still being opened in binary mode.  Thanks to Lenik
-Terenin for reporting the offset bug.  I've now gone back to always
-using binary mode when reading game files, and I've fixed the comment
-bug by adding code to remove \r's from parsed comments explicitly.  I
-still use text mode for writing game files so that games written by
-WinBoard will have Windows-style line endings.
-
-* Fix for minor bug in WinBoard installer.  If you chose a non-default
-destination directory, the default directory was still used for a
-couple of unimportant things, namely setting the App Paths registry
-keys (unused by WinBoard) and trying to copy the existing WinBoard.ini
-file to WinBoard.old.  I inherited this bug from the InstallShield 5
-sample template.  Thanks to "l.d." for noticing the incorrect keys.
-
-* Patch from Chris Priest: when two engines are being run through rsh,
-avoid reusing the same stderr port for both.  I'm not sure why this
-should be needed, but it's harmless, at least.
-
-* Bugfix: The kludge to deal with old engines that give an error
-message because they don't know the "st" command was too sloppy; it
-could hit on an "st" substring anywhere in an error message.  GNU
-Chess 4 is the only engine I know of where the kludge was needed, so I
-changed the kludge to match a longer, more GNU-specific string.
-
-* Changed the WinBoard self-extracting installer to choose a unique
-temporary subdirectory name within the Windows temp directory instead
-of always putting wb-setup directly in temp.  Besides being better
-practice, this avoids the need to deltree wb-setup first, which
-occasionally alarms someone who thinks that deltree is only used by
-trojans to delete all your files.  (Yes, I'm serious.)
-
-* Fixed a bug where FICS-style "wild/0" strings were not parsed as the
-proper wild type.  The "/" was not being skipped.
-
-* Fixed a WinBoard bug where temporary files created by game
-copy/paste were being created in the root directory of the current
-drive instead of the TMP directory and were not always deleted on exit.
-
-* Fixed a small bug in winboard.c's ErrorDialog() function.  Thanks to
-"Ron" (no last name given).  The bug might have caused a problem when
-pressing OK or Cancel in an error dialog when more than one error
-dialog was being displayed, but I'm not really sure.
-
-* Removed a hack that worked around a bug in very old versions of
-Crafty, where it would sometimes reply "illegal move" to a "."
-command.  The hack kept us from recognizing real illegal move messages
-in analyze mode from engines that don't respond to the "." command.
-Thanks to Fabien Letouzey for the report.
-
-* Fixed a bug in the xboard version of GetDelayedEvent.  It would
-return the most recently scheduled event even if it had already fired.
-This caused at least one visible error: in -ics -xreuse mode, starting
-the engine again and seeing another "feature done=1" would re-run the
-initialization code in InitBackEnd3, including the code that opens the
-connection to ICS.  The WinBoard version didn't have this bug.  Thanks
-to Bob Hyatt for the bug report.
-
-* The promotion popup for ICC wild 26 (giveaway) now includes King.
-Thanks to Fredrik Josefsson for the bug report.
-
-* The first game in a file (or being pasted from the clipboard) can
-now start with a bare move -- no PGN tags, no move number "1", etc.
-Suggested by Shane Harrelson.  One could imagine taking this farther
-and accepting something like "e4 e5 1/2-1/2 d4 d5" as two games, but
-I haven't done that.
-
-* Bug fix: xboard didn't really accept a paste of multiple games,
-contrary to what I wrote when adding the feature to WinBoard in
-4.2.4.  Now it works in both.
-
-* Fixed generic start/end of game messages to work on chess.net, where
-they put ratings in parens after the player names.
-
-* Updated config.sub and config.guess to newer versions from
-automake-1.4p5-2.  This makes configure work with MacOS X + X11.
-
-* Bugfix: when examining a game fragment on FICS where black plays
-first, don't show two "(0:00.000)" times on the initial "none" move.
-
-* If TestLegality is on and one of the engines makes an illegal move
-in TwoMachines mode, it forfeits immediately.  Formerly the game would
-get stuck at that point and the engine that made the illegal move
-would eventually lose on time.
-
-xboard/WinBoard 4.2.6 -- Fri Feb  1 22:26:31 PST 2002
-Tim Mann
-
-Another small bugfix release.
-
-* Put in a small change from Alexander Mai to allow xboard to build in
-an OS/2 EMX environment.
-
-* Fix WinBoard-only bug where editing a PGN file with comments would
-insert more \r characters before the \n after every Load/Save cycle.
-For some unknown reason we were reading the files in "rb" mode but
-writing them in "a" mode, so we kept the \r characters on reading and
-added an extra one on writing.  Fix: change the "rb" to "r".  Thanks
-to Joel (last name not given) for the bug report.
-
-* Put the arguments to rsh/remsh in the right order for better
-portability.  Thanks to Michael Kalisz.
-
-* FreezeUI is now implemented in WinBoard; it was previously only
-implemented in xboard.  This function prevents the user from entering
-moves or other commands while we are waiting for an engine to
-initialize itself.  Implementing it fixes a bug where the user could
-start a game (etc.) during feature negotiation.  One of the symptoms
-of this bug was that we could send "new" one or move moves *after* the
-first game started!
-
-* Fixed some handle leaks (WinBoard only), including a nasty one that
-leaked one handle per command sent to ICS.  Thanks to several folks
-who helped characterize the bug and tried to look for leaks.
-
-* We now install and look for the info file in ${prefix}/share/info
-instead of ${prefix}/info.  The latter is still the default in
-autoconf, but the former is currently used in Red Hat Linux and
-probably elsewhere.
-
-xboard/WinBoard 4.2.5 -- Sat Dec 15 11:42:51 PST 2001
-Tim Mann
-
-* Changed the bundled GNU Chess 5.02 in the WinBoard package to
-include a much smaller book and to use much less hash table space by
-default (8 MB transposition table, 0.5 MB pawn evaluation table).  The
-large book included with 4.2.4 made the WinBoard download too big for
-some people, and the default hash tables were larger than the
-available physical memory on some people's computers. I built the
-small book by running Crafty's "small.zip" book line collection
-through a Perl script that makes it look enough like real PGN games
-that the GNU Chess book builder will accept it.  The script and some
-minor patches to GNU Chess 5 are available in the WinBoard source
-distribution and at http://www.tim-mann.org/gnuchess.html.
-
-* Fixed a bug in the code that deals with engines that complain that
-"time" and "otim" are illegal moves.  This was a new bug in 4.2.4.
-
-* Revamped the implementation of ToStart in analysis mode.  Formerly
-there was some ill-conceived code that would try to get back to the
-start of the game by doing a "new" command (and all the followup
-commands that requires) while remaining in analysis mode.  This is
-problematic for engine authors to support, though it works with
-Crafty.  This code was trying to solve the problem of ToStart being
-slow because the engine would try to start an analysis after every
-"undo" command all the way back to the start.  But ToEnd already had a
-much better solution to this problem, and now ToStart does the same
-thing: we exit from analysis mode and enter force mode instead,
-make/unmake moves to get to the end/start of the game, and then
-reenter analysis mode.
-
-* Formerly, Zippy could try to start playing a game before the engine
-was initialized; that is, during the initial timeout for protover 1
-engines, or before "feature done=1" for protover 2 engines.  We now
-wait until the engine is initialized before connecting to ICS, which
-fixes this in the common case.  If you turn off engine reuse for
-multiple games (that is, if you give the -xreuse option), there could
-still be problems; see item 503 in the ToDo file.  Thanks to Dieter
-Buerssner for the bug report.
-
-* Bugfix: All WinBoard versions since the merge with WinBoard Plus
-(but not xboard) have had a bug in changing the PeriodicUpdates,
-PonderNextMove, and ShowThinking options from the menu.  The bug
-mostly just caused changing these options during a game to not take
-effect until after the next reset.  For TwoMachines games, though,
-changing PonderNextMove just before the game would take effect
-immediately for the second engine but not until the next game for the
-first engine.  Thanks to Koundinya Veluri for the bug report.
-
-* Bugfix: In 4.2.4, we sometimes got confused when trying to leave and
-reenter analyze mode.  One symptom was that Analyze File did not work.
-Thanks to Igor Syry for the bug report.
-
-xboard/WinBoard 4.2.4 -- Sun Dec  9 14:56:30 PST 2001
-Tim Mann
-	
-* WinBoard now includes GNU Chess 5.02 in place of GNU Chess 5.00.
-
-* WinBoard's PasteGameFromClipboard will now handle a paste with
-multiple games in it, popping up the game list dialog.  xboard
-already did this.  Suggested by Robert Gerstman.
-
-* We now use the "clearboard" command on ICC where appropriate.
-
-* Bugfix: don't generate a bogus "variant normal" command to an engine
-for the loadable ICC wild types that we internally flag as
-VariantLoadable.  Also clarified the message that Zippy sends when
-declining such wild games -- it can't deal with the possibility of
-loading an arbitrary position into the game.  Thanks to Dieter
-Buerssner for reporting the problem.  It would be nice to be able to
-actually play these wild types some day; presumably there would have
-to be an option to either send "loadgame" with a specified position,
-or to deal with an opponent sending it.
-
-* If we get a holdings message from ICS when we thought we were
-playing normal chess, we now try asking for a move list so that we can
-find out from the header what's really happening.  Formerly we guessed
-bughouse in this case.  Response to a comment from Gian-Carlo
-Pascutto.
-
-* Fixed two longstanding bugs in the clock code.  These affected only
-play between a user and a local engine, or between two local engines,
-not ICS play.  (1) The last fractional second used by a player before
-moving and virtually pushing his clock was being charged to his
-opponent instead of to him.  (2) The time and otim commands were being
-sent to an engine before the (buggy) fractional second update was
-done.  The second bug was pretty harmless in itself, but the first one
-was serious.  Many thanks to Peter Rosendahl for carefully diagnosing
-and reporting these bugs!
-
-* Changed WinBoard timestamp key.  Nothing is changed other than the
-key and a recompilation.  ICC may phase out the old key soon; if they
-do, you'll need to use the timestamp.exe from WinBoard 4.2.4 or later
-to connect to chessclub.com.
-
-* Fixed an xboard-only bug where most dialogs would not take keyboard
-input unless the mouse was actually over the dialog, even if the
-dialog window had focus.  Thanks to Jason Varsoke for the bug report.
-
-* Bugfix; Remember to send time and otim commands to engine before
-sending playother.  Thanks to Bob Hyatt for the bug report.  Also
-fixed a bug where time and otim were sometimes sent even with feature
-time=0.
-
-* Added small patches from Wilkin Ng that are meant to fix a crash in
-CopyGameToClipboard and a "can't unlock clipboard memory" error in
-PasteTextFromClipboard, under Windows 2000.
-
-* Changed cygwin.mak to not use -mno-cygwin.  In other words, it now
-uses cygwin1.dll instead of the mingw libraries.  This works around
-bugs in fileno() and stat() that I encountered in mingw.  (fileno
-seems to always return 0.  stat fails because the library routine uses
-a different definition of struct stat than the header files provide.)
-Thanks to Robert Gerstman for reporting the symptoms these bugs caused
-when WinBoard was compiled with Cygwin.
-
-* Added -showButtonBar option.  This lets you delete the << < P > >>
-buttons and thus widen the message widget a bit.
-
-* Added code to address a very obscure bug.  If an engine dies and
-needs to be restarted while in one of the analyze modes, it was not
-getting put back into analyze mode.  This bug should not really ever
-have gotten tickled unless reuse was turned off and the engine sends
-game end commands (such as 1-0) when a game ends by rule while in
-analyze mode.  The next version of the protocol spec will say that
-engines should not do that, but version 2 and earlier didn't address
-the issue.
-
-* We now use the FICS "iset ms 1" feature to get times in ms instead
-of seconds.  Thanks to DAV for email telling me about this feature.
-
-* Changed clock display to show tenths of seconds for 9.9 seconds and
-less, instead of 0.9 seconds and less as before.
-
-* It has been discovered that Zippy can play simuls on ICC (but not on
-FICS).  If you arrange for Zippy to send the ICC command "simulize" in
-the -zippyGameStart string, it will accept additional games while
-playing.  Zippy will use the same engine for every game, so whenever
-it switches opponents, the engine's state will be reset with the "new"
-command.  This will of course weaken its play, so don't enable simuls
-if you want your engine to have the highest possible rating.  Zippy
-was never designed to work with simuls; it just works by accident, and
-it hasn't been tested much.  So please report any bugs you notice, but
-don't expect them to be fixed rapidly.  Thanks to Paul McGuire for
-noticing that this works.
-	
-* Bugfix: Suppress the direct command to engine popup if there is no
-engine.  In WinBoard this case used to cause a crash.  Thanks to
-"Dargon" for the bug report.
-
-* Bugfix: formerly we did part of the engine initialization for the
-very first game too soon, before feature negotiation.  One result of
-this is that engines would never get the "ics" command for the first
-game.
-
-* Lengthened timeout to detect protocol version 1 chess engines to 10
-seconds.  This should reduce problems with protocol version 2 engines
-that are slow to initialize missing the timeout and not getting a
-chance to send their feature commands before the first game starts.
-
-* Klaus Friedel says that adding a short sleep to WinBoard after
-starting a new chess engine solves a problem that occurs under Windows
-2000, in which engines sometimes don't see the initial command(s) from
-WinBoard and hang.  I don't understand how that can happen, but the
-sleep is harmless, so I've put it in.  Others have also reported what
-may be the same problem, so hopefully this will fix it for them too.
-
-* Bugfix: editing the Result field in EditTags will no longer cause a
-later crash.  Thanks to DAV for a clear bug report that let me
-reproduce the problem.
-
-* ICC wild 28 is now recognized as shatranj, but it is not supported.
-You might be able to play it by turning off Test Legality.
-
-* Formerly we would always turn off "feature time" if the engine
-printed an error message with the string "time" or "otim" in it; now
-we do that only if the message comes before the engine makes its first
-move.  This change is useful because some engines spew a lot of bogus
-error messages about commands they don't fully parse, so something
-like "result 0-1 {White lost on time}" could generate such a message.
-Engines shouldn't do that, but if they do, mysteriously turning off
-"feature time" is not a good way to react.
-
-* Fixed an infrequently occurring Zippy bug: formerly, resuming from
-adjournment by position (that is, with GetMoveList turned off) or
-starting/resuming a wild game (nonstandard starting position) would
-try to set up the position without putting the engine into force mode
-first.  That was probably tolerated by most engines, but if the
-position was black-to-play and the engine hadn't set feature
-setboard=1, then the fake "a2a3" move (which we use as a kludge to get
-black to be on move before sending the edit command) would appear to
-be a real move, and the engine might reply to it!  This bug could also
-be seen when trying to use Zippy to play a simul -- something that
-Zippy was never designed to support, but which seems to mostly work
-anyway.  Thanks to Paul McGuire for sending a WinBoard.debug file that
-showed the bug occurring.  Some other cases of resuming adjournments
-or starting games from nonstandard positions may have been broken too;
-I think I've straightened out the problems.
-
-* Agreeing to a draw in the human vs. local engine case formerly did
-not work if the human offered first; now it does.  A human's
-unsolicited offer is considered valid until he makes another move.
-Thanks to Bruce Moreland for the bug report.
-
-* Bugfix: We used to look for just "fr" in Event tags or strings from
-ICSes to recognize Fischer Random games.  This caused a lot of false
-matches.  Now we look for "wild/fr" instead, which is what FICS uses.
-
-* Bugfix: Clicking on a move in the MoveList window only updated the
-displayed position; if a chess engine was active, its state was not
-updated.  Thanks to Alejandro Dubrovsky for the bug report.
-	
-* Bugfix: The "resign" command from engine to xboard formerly did not
-work in ICS (Zippy) mode.
-
-* Bugfix: Formerly we would register a garbage premove if the user
-clicked on a piece, then clicked on an edge or outside the board.  Now
-such an errant click is ignored.
-
-* Bugfix: GameEnds would send "exit" to an engine in analyze mode even
-if we did not actually want to leave analyze mode.
-
-* Bugfix: "feature pause" was being rejected.  We don't currently use
-it, but that is no reason to reject it.  Thanks to Gian-Carlo Pascutto
-for the bug report.
-
-* Bugfix: when "partner" needed to be sent both to ICS and the engine,
-Zippy was erroneously sending the ICS prefix character to the engine
-too.  Thanks to Gian-Carlo Pascutto for the bug report.
-
-* Zippy now declines challenges when the engine is not yet ready to
-play again, instead of ignoring them.  This is needed so that the
-server will let the opponent repeat the challenge.  It might be better
-to remember such challenges and accept them when the engine is ready,
-but that would be a bit more complicated to implement.
-
-* Bugfix: Zippy's emotes didn't work on FICS because there, "i" is a
-built-in alias for "it", not a real command.  So sending "$i foo" gave
-an error message instead of doing "it foo".  We now leave out the
-alias-suppressing prefix for emotes.
-
-xboard/WinBoard 4.2.3 -- Mon Feb 19 19:55:05 PST 2001
-Tim Mann
-
-* Bugfix: The error message "Variant X not supported by gnuchessx"
-formerly could pop up even in -ncp mode.
-
-* Fixed an xboard bug in premove highlighting.  If you had
-HighlightLastMove turned on, premoves got highlighted in
-highlightSquareColor (yellow) instead of premoveHighlightColor (red).
-
-* Modified premove again.  Now we are back to displaying the move
-locally immediately after sending it to the server, as in versions
-prior to 4.2.1.  This is good because it lets you register your next
-premove sooner.  As a better fix to the problem that the change in
-4.2.1 had been trying to address, we now suppress animating the
-opponent's move if you have a premove reply pending.  However, it's
-probably still a good idea for you to turn off AnimateMoves entirely
-if you are trying to play extremely fast games.
-	
-* Removed an erroneous patch that left zombie chess engines around
-when both sigterm and reuse were turned off.  (Bug was in xboard only,
-not winboard.)
-
-* Bugfix: loading a game with autostepping did not work for games with
-PGN result "*" (unfinished).  This bug was introduced in 4.1.0, caused
-by some outdated code that was supposed to leave you in EditGame mode
-after loading an unfinished game.  I fixed this, and also changed it
-to leave you in EditGame mode after loading *any* game, but without
-changing the tags to say it's an edited game.  It's not really clear
-whether that is the best thing is to do here -- ideally, perhaps, the
-tags should change to say "edited game" if you actually make any
-changes, but that is harder to make work.
-
-xboard/WinBoard 4.2.2 -- Tue Feb  6 20:00:00 PST 2001
-Tim Mann
-
-* Fixed a problem introduced in 4.2.1.  In -zippyPlay mode, 4.2.1
-started sending the initString immediately after the old game ended,
-but then when the next game started, it would still send "force" and
-another initString.  Another problem was that the first initString put
-the engine out of sync with the displayed board position, though that
-might not usually have been noticeable.  This is now changed to do a
-full Reset at the end of the previous game, and avoid doing a Reset at
-the start of a new game if we are still in BeginningOfGame mode.
-
-* Fixed some limitations in -zippyPlay mode.  The engine was not being
-fed the moves or history of games that were displayed but not being
-played, so it would get confused if you tried to do something like
-examine a game, then enter EditGame mode from somewhere in the middle
-of the game.
-
-* Made a small change so that cygwin can compile xboard for Windows
-(an X server is required to run it).  Thanks to Volker Zell.  Most
-people would probably prefer to run WinBoard on Windows, however; note
-that cygwin could already compile WinBoard.
-
-* Added some missing documentation to engine-intf.html: It is okay to
-send "feature done=0" even before you receive the xboard and protover
-commands, if this is needed to give your engine enough time to
-initialize.  See engine-intf.html for more discussion.
-
-* Bugfix: "feature done=0" did not work for the second engine; now it does.
-
-xboard/WinBoard 4.2.1 -- Sat Feb  3 19:52:26 PST 2001
-Tim Mann
-
-* Bugfix: in Zippy mode with feature san=1, the elapsed time was being
-sent to the engine after the SAN move; for example, "e4 (0:01)" was
-sent instead of just "e4".
-
-* It seems that scroll wheel mice with incompletely installed software
-(under Windows 95, at least) can send repeated middle button up events
-when the wheel is turned.  Moved QuickPaste from middle button up to
-middle button down to avoid problems with this.
-
-* A premove is now sent *before* the opponent's move that it replies
-to is animated.  The premove itself is no longer displayed (or
-animated) when sent; instead, it is displayed when the chess server
-echoes it back as a board update.
-
-* Bug fix: in -xreuse mode, xboard was only sending command line
-arguments to the engine the first time it was started.  (WinBoard
-didn't have this bug.)
-
-* In -zippyPlay mode, we now initialize the chess engine for a new
-game immediately after the old game ends.  (In -xreuse mode, this
-means starting a new engine process; in the default -reuse mode, it
-just means sending "new".)  If the engine supports ping, we don't
-accept challenges until the "new" has finished.  This should help
-avoid losing time (re)initializing the engine after the game starts.
-
-* We now handle the new FICS field in style 12 that says whether the
-clocks are ticking.
-
-* whiteFlag and blackFlag are now reset whenever an ICS board image
-arrives, giving autoflag a fresh chance to work.
-
-* Suppressed "geometry error" debug messages unless -debug flag is given.
-
-* Bugfix: avoid core dump on Solaris with -debug flag, caused by
-passing NULL to a %s format in GameEnds.
-
-* Added -firstProtocolVersion and -secondProtocolVersion.  This will
-allow use of extremely broken engines that hang or die when given the
-"protover 2" command.  It should be rarely if ever needed.
-
-* Zippy now strips highlights from player names in the Creating
-message; previously the ratings would not be extracted from this
-message properly if you had set the highlight variable.
-
-* Bug fix: Zippy with -zp but not -zt used to be fooled by false
-partner tells inside channel tells; e.g.: 
-Garf(24): Garf (your partner) tells you: sit
-
-* Bug fix: when an engine reported its name with the new "feature
-myname=" command, we had been putting just that name into the window
-title even when in TwoMachines mode.
-
-* By default, WinBoard no longer uses the new feature introduced in
-4.2.0beta of keeping the ICS menu, ICS server list, and lists of chess
-engine command lines in separate files; instead, the lists are back in
-the winboard.ini file.  This gets rid of some problems where the
-separate files could not be opened because the working directory was
-not set to WinBoard's installation directory.
-
-* WinBoard command lines and ini files now have another optional
-syntax for quoting an option value.  All characters within { } curly
-braces are interpreted literally except for '}' itself.  SaveSettings
-now uses this syntax for string values that contain a backslash or
-newline and do not contain a '}'.  This should address the problem
-that the separate .ini files had been meant to fix; engine command
-line lists can now be written without \-escapes.
-	
-* Fixed three bugs in relaying moves between engines in TwoMachines
-mode: an engine would be sent SAN if the *other* engine had set
-feature san=1, a relayed SAN move did not end with a newline, and
-feature usermove was not implemented for relayed moves.
-
-* Fixed several bugs in exiting: File/Exit would sometimes hang;
-timestamp/timeseal would not get killed off; an engine crash would
-cause error messages to be printed recursively until stack overflow.
-
-* Fixed a bug in the code to detect which ICS is in use and adapt to
-it; the chess.net case was broken.
-
-* Removed the leading alias-suppression character when sending a move
-to ICS, because it seemed to break accuclock on chess.net.
-
-* Fixed a bug where a FICS prompt like "10:01_fics%" would be matched
-as finger note number 10, causing a problem detecting when the user is
-logged in.
-
-* Added tellicsnoalias command to protocol.
-
-* Changed st command in protocol back to old behavior.
-
-* Added done=0 feature to protocol, to lengthen initial timeout.
-
-* Added missing -colorSeek command line option to xboard.  (Was
-present in WinBoard.)
-
-* Bug fix: setting feature reuse=0 was not working.
-
-xboard/WinBoard 4.2.0beta -- Sat Dec 16 16:34:56 PST 2000
-Tim Mann
-
-* Setting -searchTime no longer turns off -clockMode.  Note that when
--searchTime is set, some engines may search for the lesser of
-searchTime and the amount of time their normal clock management would
-dictate, while others will disable their normal clock management and
-always search for exactly searchTime.
-
-* Fixed WinBoard bug where on Windows 2000 (and maybe Windows 98) the
-ICS Interaction window would scroll back to the top whenever it filled
-to capacity and WinBoard trimmed some text off the top.
-
-* Changed xboard dragging so that the center of the dragged piece is
-forced to be over the mouse cursor.  (WinBoard dragging already worked
-that way.)  This should avoid confusing cases when you start a drag
-with the mouse near the edge of a square -- formerly most or all of
-the piece could be over one square but the mouse cursor over another.
-Suggested by DAV.
-
-* Added move list window for xboard.  Code contributed by Manuel
-Hoelss and re-hacked a bit by me.  Performance of this window is poor,
-because the implementation regenerates the entire window contents
-whenever anything changes.  It's hard to avoid this when using the
-Athena List widget, though we could be a little smarter and notice
-when the current move number has changed but the move list has not.
-There are also several drawing problems caused by bugs in the Athena
-Form and List widgets.  The window should not really allow a
-horizontal scroll bar, but the bugs are much worse if I turn it off.
-In both Xaw and Xaw3d, the List widget tries to resize itself when
-XawListChange is called, even if you tell it not to; and what's worse,
-if the widget cannot resize itself to be large enough to avoid
-clipping any of the list item, it does not change the list!  Arrgh.
-On top of that, the Xaw Form widget is very buggy in XFree86 4.0.1
-(X11R6.4.3).
-
-* The OK button in the WinBoard startup dialog is now simply disabled
-if none of the radio buttons is selected, instead of bringing up an
-error dialog.  Suggested by Ted Milbaugh.
-	
-* Used ping to address the worst of the race conditions in the
-protocol.  Now if an engine supports ping, we ping it after sending
-the "new" command and after trying to place it in force mode at the
-end of a game.  When a ping has been sent and the corresponding pong
-has not yet come back, we (1) ignore or undo any moves the engine
-sends, (2) ignore game end messages (such as "offer draw", etc.) from
-the engine, (3) ignore thinking output from the engine, (4) delay
-starting the next game if in -matchGames mode, (5) in -zippyPlay mode,
-respond to challenges with a polite message to try again soon instead
-of accepting them.  There are a few more things that should be done
-(and item 5 might not be quite what we want), but it's hard to fit
-them all into the existing code.
-	
-* Patched the version of GNU Chess 5.00 included with WinBoard to
-support protover, feature, setboard, and ping, and to fix some minor
-bugs.  See gnu500+.patch.
-
-* Changed the GNU Chess 4 kludges for missing "st" and "sd" commands
-to be invoked only if the engine gives an error message for "st" or
-"sd", and to always use protocol commands instead of engine
-command-line options.  See "Idioms" in engine-intf.html.
-
-* Added new protocol command "protover 2" to tell the engine what
-version of the protocol is in use.  Version 2 is still compatible with
-old engines; see engine-intf.html.
-
-* Add new protocol command "feature ..."  The engine can send this in
-response to the protover command command, to say what extended
-protocol features it would like to enable, etc.  xboard responds
-"accepted F" or "rejected F" for each feature F that is set.  See
-engine-intf.html.
-
-* Added new protocol command "setboard <fen>".  This is an alternative
-to "edit", used only if the engine says "feature setboard=1".
-
-* Added new protocol command "ping <msg>".  The engine is supposed to
-respond "pong <msg>".  This gives us a tool to fix some race
-conditions in the protocol, but it is not used to the fullest yet.
-
-* Added new protocol command "tellopponent".  This will do a "say" if
-you're on a chess server in Zippy mode, or pop up an information
-dialog otherwise.
-
-* Added new protocol command "tellall".  This will do a "kibitz" if
-you're on a chess server in Zippy mode, or pop up an information
-dialog otherwise.
-
-* Added new protocol command "tellothers".  This will do a "whisper" if
-you're on a chess server in Zippy mode, or do nothing otherwise.
-
-* Changed the WinBoard /icsNames, /icsMenu, /firstChessProgramNames,
-and /secondChessProgramNames options to accept a filename preceded by
-"@", meaning to find the value in the file.  Changed the defaults to
-use this feature, with filenames icsnames.ini, icsmenu.ini, fcp.ini,
-and scp.ini.  This should make it easier for users to edit the values,
-since one less level of quoting is needed, and each value is in its
-own file, not mixed into winboard.ini.  Those who upgrade from an
-older winboard version and already have a winboard.ini file will not
-automatically have these values moved to a file; that has to be done
-by hand if desired.
-
-* We now strip .exe from engine names for "name" command, tags, etc.
-
-* Allowed WinBoard input widget to hold more than one line.  You can get
-a newline into the widget with copy/paste or with Ctrl+Enter.
-
-* Fixed an xboard bug where the [P] button would appear in the
-opposite highlight state from what it should be after being pressed.
-
-* We now use the "/" or "$" alias suppression feature on the chess
-servers, to avoid problems if the user inadvertently aliases a
-needed command to something else.
-
-* Changed the method used to deiconize xboard in AutoRaise and cmail.
-This may fix bugs under some window managers where after
-deiconization, the board window was mapped but nothing was drawn
-inside.
-
-* Preliminary, partial support for playing several chess variants
-against a local engine or editing variant games.  The -variant option
-must be given on the command line or WinBoard startup dialog; there is
-no menu.  The current variant is not displayed (except in the
-Tags/EditTags window).  Many variants will not work quite right even
-if the engine supports them; see item 326 in the ToDo file for
-details.
-
-* Added a workaround to detect the variant type when examining a
-scratch wild game on an ICS.
-
-* Fixed two cases where "variant" command should be sent to the engine
-when necessary but was not: loading a game from a file and restarting
-a dead engine.  Thanks to Gian-Carlo Pascutto.
-
-* Added missing support for FICS games that start from a bsetup position
-with Black moving first.
-
-* Fixed a bug in loading a file from the game list window while in
-Analysis or AnalyzeFile mode.  This now leaves us in AnalyzeFile
-mode, analyzing the new file.
-
-* Fixed a bug in loading games with a comment before the first move.
-
-* Fixed a bug in handling LoadGame (or -lgf) with -td 0.
-
-* Added a command line option to select an initial minor mode from the
-Mode menu.  This should satisfy requests from a couple of users with
-special applications.
-
-* Fixed a problem where some things in WinBoard's General Options
-dialog box were grayed out at the wrong time.
-
-* We look for a few messages from the chess engine pipe that are
-intended to catch problems starting an engine via rsh, such as "No
-such file".  Moved code so that these strings won't match until other
-protocol messages have been looked for, and documented the messages in
-engine-intf.html.
-
-* Fixed the WinBoard bug that sometimes made the console input box
-white-on-white even when not in password-entry mode.
-
-* Small changes to WinBoard to be compilable with the latest Cygwin
-net release (as of 10-16-2000).  Thanks to Mark Schoenberg.
-
-* Recompiled GNU Chess 5.0 for WinBoard with the latest Cygwin net
-release (as of 10-16-2000).  Also rebuilt the book just to be sure,
-since I had one bug report about it.  It came out identical and seems
-to work fine.
-
-* Added messages for some common InstallShield errors instead of just
-printing InstallShield's stupid error code numbers.
-
-* Added -firstComputerString and -secondComputerString, allowing you
-to suppress or change the command that is sent to a chess engine when
-its opponent is another computer.
-
-* Added "configure --with-Xaw3d" to allow use of Xaw3d widgets instead
-of Xaw widgets in xboard.  Thanks to Johnny C. Lam of the NetBSD
-project.  I've left Xaw as the default because Xaw3d is too ugly.
-	
-* The version of the Xaw Form widget released in XFree86 4.0.1
-(X11R6.4.3) has a bug that causes xboard to display the button bar
-on top of the message widget.  I've reported the bug and have
-installed a kludge workaround into xboard.
-
-xboard/WinBoard 4.1.0 -- Sun Sep 17 17:30:14 PDT 2000
-Tim Mann
-
-* Merged Winboard Plus 4.0.8 from Mark Williams into xboard
-  source pool.  Status of Winboard Plus features in xboard:
-
-  - White pieces now have borders, but the implementation is
-    completely different from WinBoard's; see below.
-
-  - Options menu not changed, probably won't be.
-
-  - Copy&paste support working, using Mark's changes to backend.c, Ben
-    Nye's changes to xboard.c for FEN positions, and some code of my
-    own in xboard.c for PGN games.
-
-  - Premove hooked up and working.  No pre-first-move, though.
-
-  - ICS Alarm hooked up and working.
-
-  - Auto-flip working.
-
-  - PGN Training mode hooked up and working.
-
-  - Improved menu item enable/disable working.
-
-  - Improved >> button working.
-
-  - Auto activate board working.  I changed this to be optional; you
-    might not always want it, especially in Zippy mode.
-
-  - Blindfold working.
-
-  - Documentation updated.
-
-* Fixed more colorization bugs.  Commands like "message foo tells you:
-xxx" and "tell 33 tells you: xxx" will no longer generate bogus
-colorization.
-
-* Added low-tech sound support to xboard, by invoking an external
-program on a filename for each sound to be played.
-	
-* ICC wild 27 is now recognized as VariantAtomic, and it sets the
-"ignore check" flag, but is not otherwise supported.
-
-* Converted the piece bitmaps from .bm to .xpm for use with xboard's
-xpm support.  (An .xim version was not created.)  Wrote a shell script
-using ImageMagick to do the conversion and to bucket fill from
-coordinate 0,0 with the background color.  Used xpaint by hand to
-clean up a few pieces where background color "leaked" into the inside
-or didn't flow all the way around the outside, then a sed script to
-fix up color names and bitmap names in the xpaint output.  If any more
-sizes are added later, they should be straightforward to convert with
-reference to the existing scripts.  With this conversion, not only do
-the white pieces now have dark borders, but (unlike with WinBoard) the
-light details on the black pieces are opaque.
-
-* If the XPM library is found when building xboard, the new xpm pieces
-are compiled in as the default.  External bitmap (or xpm) pieces can
-still be used by giving the -bitmapDirectory (or -xpmDirectory)
-option.  If the XPM library is not found, the old bitmap pieces are
-the default.  In this case external bitmap (or xim) pieces can be used
-by giving the -bitmapDirectory (or -xpmDirectory) option.  There is no
-way to compile in xim pieces.
-
-Winboard Plus 4.0.8 -- Sat Aug 5 15:51 PDT 2000 
-Mark Williams
-
-* Bugfix release.
-
-* Main menu now visible in Win NT.  Thanks to Microsoft for creating a 
-compiler which auto-mutilates the WinBoard.rc file so that the menu is
-displayed under Win 98 but not Win NT.  I fixed the problem by hand editing the
-.rc file.  Sigh.
-
-* "Reset game" now works properly when invoked from Analysis mode when two
-engines are present. Correction of bug introduced in Winboard Plus. Thanks to
-Mogens Larsen for reporting the bug.
-
-* Pasting a FEN position with Black to move now works in all modes.
-Thanks to Mogens Larsen for reporting the bug.
-
-* Added gnuchess.dat to the distribution and a couple of text files that were
-missing in 4.0.7.
-
-*** Merged in the following changes from Tim Mann:
-
-* Bugfix: Highlights would sometimes not be taken down, at least in
-xboard.  The problem is that SetHighlight works in chess coordinates,
-not view coordinates, so if flipView has been toggled since the
-highlight was put up, it gets taken down from the wrong square.  Fixed
-by being careful to call ClearHighlights before toggling flipView, not
-after.  Ugh.
-
-* Bugfix: HighlightLastMove would sometimes highlight square a1 after
-a FICS "tomove black" command.
-
-* Bugfix: a move list with initial position that has black to play was
-not being handled correctly.
-
-* Removed "decline abort" and "decline adjourn" commands from Zippy.
-The syntax is changing on FICS, and Zippy really doesn't have to
-explicitly decline the requests anyway; it's sufficient to not accept
-them.
-
-* ICC wild 26 is now recognized as VariantSuicide (the FICS name; ICC
-calls it "giveaway").
-
-* Bugfix: PGN games with black to move in the initial position weren't
-being legality checked correctly.  I think this was introduced in
-4.0.6 when I fixed a different PGN bug.  Thanks to Mark Williams for
-spotting the bug and suggesting a fix.
-	
-* Bugfix: the initial "name(" of a kibitz wasn't being colorized.
-
-Winboard Plus 4.0.7 -- Thu May 12 17:57 PDT 2000 
-Mark Williams
-
-* New white pieces with black borders.
-
-* Major overhaul to Options menu. New dialogs for setting General Options,
-  Board Options, ICS Options, Sounds, Fonts, Colors.
-
-* Clipboard support for PGN game scores and FEN positions.
-
-* Optional ICS Premove with user-specified first moves for White and Black.
-
-* New sound events: ICS Win, ICS Loss, ICS Draw, ICS Unfinished, ICS Alarm.
-
-* New auto-flip option when playing against a chess program.
-
-* Added PGN Training mode.
-
-* Certain menu options now disabled while program is thinking.
-
-* ">>" button now always goes to the end of the game.
-
-* In ICS mode, the board is automatically activated at the start of a
-new game.
-
-4.0.7 -- Sun Mar  5 17:17:49 PST 2000  Tim Mann
-
-* Fixed a nasty bug in parsing ICS game histories that was introduced
-in 4.0.6.
-	
-4.0.6 -- Fri Mar  3 16:20:11 PST 2000  Tim Mann
-
-* Fixed bugs in Zippy's code for responding to messages sent with the
-ICS "message" command.
-	
-* Fixed bugs where xboard could still create dialogs partially off the
-top of the screen.  Fixed unwanted interactions between initial sizes
-and positions of various unrelated xboard dialogs.  Deleted
-borderXoffset and borderYoffset resources.
-
-* Fixed restoring the xterm name on exit to work in more cases.
-	
-* Small fix to the WinBoard self-extracting installer: when it starts
-up, it now always deletes any old wb-setup directory left over from a
-previous installation.  Formerly this worked only on Windows 95/98, so
-on NT the self-extractor would sometimes stop and ask the user whether
-it was OK to overwrite the old wb-setup files.
-
-* Modified WinBoard to be compilable with the free Cygwin tools
-available from http://sourceware.cygnus.com/cygwin/.  Based on work by
-Mark Schoenberg.  (His mods were enough to get WinBoard through the
-compiler, but a few things were broken along the way, so I reworked them.)
-	
-* Merged changes from Don Fong to make WinBoard compilable with
-Borland C++ 4.5.  I do not have Borland C++ and am unable to test with
-it, but I did make sure the changes don't stop it working with MSVC++
-5.0 and Cygwin.
-
-* Forbade entering TwoMachines mode from MachineWhite or MachineBlack
-mode when machine is on move.  This used to confuse the engine and
-cause problems, because when we try to get the engine to stop, it
-might make a move first, and it might not do that immediately.
-	
-* Variant classification now deals with new ICC wild 25, classifying
-it as "3check".  Also, we are now conservative about new wild numbers
-we don't know about, classifying them as "unknown" instead of
-"normal".
-
-* Replaced bad GNU Chess 5.00 book in WinBoard distribution with a
-correct one.  1.e4 now no longer takes GNU Chess 5.00 out of book!
-Thanks to Pete Galati.
-
-* Made move parser accept and ignore nonstandard ep suffix on PGN moves,
-e.g., "exf6ep" or "exf6e.p."
-
-* Fixed bugs in parsing PGN files starting with no move number, or
-with a move number other than "1." (including "1...").  Thanks to
-Michael Soulier and Stefan Zipproth for example PGN files
-demonstrating the bugs.
-	
-* Changed InitComboStringsFromString to not modify the input string;
-this caused an exception when WinBoard was compiled with MSVC++ 6.
-Thanks to Bert Tuyt for the report.
-
-* In WinBoard, dragging a piece off the edge of the board without
-releasing the mouse button no longer instantly aborts the move.  You
-still must release the mouse button inside a square to complete a
-move, but you can now drag off the edge and come back inside.
-	
-* WinBoard bugfix: If you went into EditGame or EditPosition mode
-while observing or playing an ICS game, and a new move came in
-(snapping you back to ICSClient mode) while you were dragging a piece
-around, the drag state would not be reset, causing the piece you were
-dragging to remain on the board wherever you dropped it.  Thanks to
-David Brinegar for the bug report.
-
-* WinBoard bugfix: If you moved or resized the board while your
-opponent was moving, and you had AnimateMoving on, his move would not
-be displayed until after your next move.  Thanks to DAV for reporting
-the bug repeatedly until I finally understood it.
-
-* Added a Zippy "farewell" feature; see zippy.README.
-	
-* Fixed a bug (xboard only) in processing -zippyReplayTimeout on the
-command line.  Thanks to Steve Beer for the report and patch.
-
-* Send "computer" command to both sides in TwoMachines matches.
-	
-* Fixed a Y2K bug in Evan's cmail code!  Thanks to Brian Mays for the
-report and patch.
-	
-* Bugfix: Initialize variant field of GameInfo struct in gameinfo.c.
-This could cause crashes in LoadGame.  Thanks to Andrzej Nagorko.
-	
-* Fixed several pattern matching problems: Finger notes and formula
-vars no longer get replied to by zippyTalk or colorized.  Channel
-tells by players with many titles are now colorized fully, and
-zippyTalk handles channel tells by such players correctly.  The shout
-"--> foo(99): bar" no longer gets colorized as a channel tell.  Code
-is cleaned up a bit, and autocomment capture now uses the same
-criteria as colorization.
-
-* xboard fix: Enter key now closes error popups as in WinBoard.
-Especially nice for the "Exiting: Connection closed by ICS" popup.
-
-4.0.5 -- Tue Dec  7 10:30:40 PST 1999  Tim Mann
-
-* Added missing documentation of SIGTERM usage into engine-intf.html.
-
-* Bugfix: New -zippyReplayTimeout option was misspelled in WinBoard as
--zippyReplyTimeout.  Thanks to Francesco Di Tolla.
-	
-* xboard -ics now restores the xterm's original title upon exit, at
-least if $WINDOWID is set.
-
-* Bugfix: -matchGames mode wasn't terminating properly.  Final score
-popup would come up twice and engines would not be killed off.  Thanks
-to Frank Quisinsky for the bug report.  Bug was introduced in 4.0.4.
-
-* Bugfix: "tell 50 foo shouts: bar" no longer gets colored as a shout;
-similarly for "...s-shouts:" and "...c-shouts:".  Thanks to David Lee
-for the bug report.
-
-4.0.4 -- Fri Dec  3 17:51:27 PST 1999  Tim Mann
-
-* Bug fix: formerly if you invoked SaveGame from EditPosition mode
-with black to play, the position was not saved properly.  As a quick
-fix, SaveGame now takes you out of EditPosition mode before saving.
-
-* Changed -matchGames to keep track of the score (won-lost-drawn) and
-display it in the banner.  The final score is displayed in a modal
-popup before the program exits.
-
-* Changed "Connection closed by ICS" to display in a model popup
-before the program exits.
-
-* Added -popupExitMessage option, default on.  Setting this to false
-suppresses the modal popups that you sometimes get just before
-xboard/winboard exits -- both the two new ones listed above and the
-existing Fatal Error popup.  This is useful when running Zippy
-unattended from a shell script (or .bat file) that loops and starts a
-new copy after a time delay when there is an error.
-
-* In xboard, added missing support for WM_DELETE_WINDOW to all
-windows.  This makes xboard a better citizen, and is much needed with
-the newer X window managers that put an [X] button on every window and
-bind it to "kill application" if the applicationd does not support
-"delete window".  We can't allow xboard to be thoughtlessly killed,
-since that leaves the chess engine running in the background.
-
-* We now avoid positioning tops of xboard dialog boxes offscreen.
-
-* zippy.lines can now use the caret ('^') character as an inter-saying
-separator. You no longer need to dig up a text editor that can put NUL
-('\000') characters in text files.
-
-* Bugfix: In traditional chess clock mode, White now gets time added
-to its clock as soon as it makes time control.  Previously both White
-and Black got their time added only when Black made time control,
-which would cause some engines to make their 41st move as White too
-quickly, thinking they were low on time.
-
-* The zippyAcceptOnly feature no longer sends a decline command or
-a tell.  Thus you can use it to put Zippy into a manual accept mode.
-
-* Bugfix: "tell 50 foo tells you: bar" no longer gets colored as a
-personal tell; similarly for "...whispers:" and "...kibitzes:".
-
-* WinBoard no longer blanks the message line when you start a new
-move, unless there was an error message there from the previous move.
-
-* WinBoard now never puts the white piece drop menu on the middle
-mouse button.  Both colors are always on the right button.  Windows
-users often don't think to look for a middle button menu, or don't
-really have a working middle button despite what Windows says.
-
-* Guest login handles on ICC are now parsed again; an ICC wording
-change had broken this feature.
-	
-* Autodetect when the engine does not support the "draw" command and
-don't relay the command to it in that case.  Needed because sending an
-unsupported command to GNU Chess makes it move immediately, so people
-could make Zippy move without thinking by continually offering a draw.
-Thanks to Frank Walker for the problem report.
-
-* Small changes based on code from Robert Jurjevic: The WinBoard
-analysis window can be minimized (though not to the taskbar).  The
-WinBoard ICS Interaction window will autoscroll if you drag the mouse
-above or below the window while selecting, and password entry mode
-leaves the entry line as the background color instead of using 75%
-gray.  Seeks are now colorized with a new color of their own.
-
-* Added -zippyMaxGames feature.
-	
-* -zippyNoplayCrafty command line option was missing in xboard; fixed.
-Thanks to John Perry.
-
-* Fixed bug in detecting when Zippy loses his bughouse partner.
-Thanks to Ben Dean-Kawamura.
-
-* allobs fix in 4.0.3 didn't work; corrected it.
-
-* WinBoard will now update the board immediately if a move is made
-while the window is being moved or resized.
-	
-4.0.3 -- Sun Aug 15 18:44:39 PDT 1999  Tim Mann
-
-* Bugfix: moved winboard wizard functions that send a command directly
-to the chess engine from Ctrl+Alt+1 and Ctrl+Alt+2 to Alt+1 and Alt+2.
-Ctrl+Alt is equivalent to the European AltGr key, so the old assignments
-conflicted with typing an @-sign on some keyboards.
-	
-* Bugfix: prevent "If this message stays up, your chess program does
-not support analysis" from appearing if AnalysisMode is selected when
-already in Analysis or AnalyzeFile mode.  Also, deleting analysis window
-in WinBoard now switches you to EditGame mode, to avoid the anomaly of
-being in an analysis mode with no analysis window present.
-	
-* Change all Zippy environment variables to work as command line
-options.  For now they still work as environment variables too, but
-the environment variables are deprecated.
-
-* Use unsigned long to hold node counts from engines.
-
-* Print error instead of crashing on attempts to use xpm or xim pieces
-in monochrome mode.  Thanks to Jim Torrance for the bug report.
-
-* Tightened pattern recognition for ICS messages sent to Zippy; should
-no longer match ICC allobs output.  Fixed recognition of when Zippy is
-sent a message; small change to FICS output had broken it.
-	
-* Zippy now exits if the engine dies unexpectedly.
-
-* Added Zippy "spoofedby" feature; see zippy.README.
-	
-* Narrowed the margins on some older WinBoard dialogs to make their
-style uniform with the newer ones.
-
-* Bugfix: Changing Ponder Next Move from the Options menu did not take
-effect until the next game.  This bug was in WinBoard only.  Thanks to
-Stefan Zipproth for the bug report.
-
-* Got rid of "Internal error: bad move type" message when the engine
-makes a move that we can parse but think is illegal.  Now the move is
-just passed on (which also may be the wrong thing to do).
-
-4.0.2 -- Thu Feb 25 19:55:32 PST 1999  Tim Mann
-
-* Added one more built-in sound choice to WinBoard: move.wav from Pete
-Galati.
-	
-* Added new larger piece sizes: big, huge, giant, colossal, titanic.
-	
-* Modified the xboard font searcher to be able to use scalable fonts.
-The new -fontSizeTolerance flag controls how closely a nonscalable
-font must match to be used in preference to a scalable font.
-	
-* Zippy environment variables ZIPPYABORT and ZIPPYADJOURN now control
-whether Zippy will accept abort and adjourn requests.
-
-* We now determine the variant type being played on ICS, send it as a
-command "variant VARTYPE" to the chess engine (if in Zippy mode), and
-put it in the PGN tags.  See engine-intf.txt for variant names.  See
-ZIPPYVARIANTS in zippy.README to control what variants Zippy will
-accept.  Note that this now applies to bughouse, too.
-
-* Zippy now won't do -zippyTalk in a channel unless his handle is
-mentioned there.
-
-* Zippy now ignores bughouse holdings if not actually playing, instead
-of stupidly trying to abort the game.  Let me know if other strange
-things happen when Zippy is observing a game.
-
-* Set ICS Interaction title bar to "user at server".  User name is
-determined by parsing message during the login sequence.  Zippy now
-uses this method to get its name too, so ZIPPYNAME is eliminated.
-Problem: with xboard, the title bar gets set to "xterm" upon exit,
-since we didn't know what it was to start with.
-
-* Fixed xboard-only bug in -colorChannel1 command line option.  Thanks
-to Fredrik Sandstrom for the bug report and fix.
-
-* Check for overflow of MAX_MOVES.  Still not sure this is checked for
-everywhere it needs to be.
-
-* Added .epd to suffixes recognized by WinBoard as position files.
-This is a bit of a kludge, as the .fen reading code was not written
-with .epd files in mind, but reading them with it is said to work.
-
-* Added ZIPPYGAMESTART feature, suggested by Jason Hoblit.  See
-zippy.README.
-
-* Restored the feature of soaking up the moves from a user-typed "moves",
-"oldmoves", or "smoves" ICS command when xboard/WinBoard is idle, but
-changed it so that the move list is also echoed to the screen.  Some folks
-still liked the old feature since it is faster than examine mode, and
-printing the moves to the screen should eliminate the confusion it caused
-for other people.
-
-* Bugfix: in WinBoard, starting a click-click move and then clicking on
-a black line would cause the source square to be forgotten without taking
-the highlight down.  Now the errant click is ignored.
-
-* Corrected shortcut key labels for LoadNext/PrevPosition in WinBoard's
-File menu.  Thanks to Andreas Stabel for the bug report.
-
-* Bugfix: if you had a completely full ICS context menu in WinBoard
-(90 items), the last one would do nothing if selected.
-
-* The "computer" engine command added in 4.0.1 was not working; I had
-left out part of the code patch.  Oops.
-
-4.0.1 -- Fri Feb 12 21:24:15 PST 1999  Tim Mann
-
-This is a minor bugfix release.  The first item listed below is the
-only interesting new feature.
-
-* You can now type in moves from the keyboard in WinBoard.  Either
-select TypeInMove from Step menu, or (if you are not in ICS mode),
-just start typing.  In ICS mode you can type moves into the ICS
-interaction window anyway, so I've retained the feature that typing
-switches you there.  Not implemented in xboard.
-
-* Removed the "noise 1000" command that used to be sent to the chess
-engine when entering analysis modes.
-
-* Deleted the feature where we soak up the output of a user-typed ICS
-"moves" or "oldmoves" command.  This ancient feature is not really
-useful anymore, now that "examine" exists, and it caused a lot of
-complaints.
-
-* Increased maximum size of ICS text menu to 90 entries and added
-overflow checking.
-
-* The command sent to ICS by Zippy at the end of each game can now be
-customized with the ZIPPYGAMEEND environment variable.
-
-* We treat xboard.info as a pseudo-source since most people don't have
-the tools to rebuild it.  But "make install" erroneously had a
-dependency on it, even though "make all" did not.  Fixed.
-
-* Miscellaneous minor updates and clarifications to engine-intf.txt.
-In particular, documented the st and sd commands (support for command
-line options -searchTime and -searchDepth), warts and all.
-
-* Added a small code patch from Bob Hyatt to detect when Zippy's ICS
-opponent is a computer and send the command "computer" to the engine.
-Added this command to engine-intf.txt.  Thanks, Bob.
-
-* Bugfix: configure was looking for usleep(), but config.h.in didn't
-have an entry for it, so HAVE_USLEEP was never defined.  Also, in the
-non-HAVE_USLEEP case, there was a possible race condition between the
-signal handler and the pause() call.  Thanks to Ben Dean-Kawamura for
-the bug reports.
-
-* Bugfix: a "1..." preceding Black's first move (usually present if
-there is a comment on White's first move) would cause the parser
-to think a new game started there and report "End of game" on the
-current game.  Thanks to Dell Garner for the bug report.
-
-* Changed the abbreviation for -searchDepth from -sd to -depth to fix
-a clash with -secondDirectory.
-
-* Changed -searchDepth to be orthogonal to the various timing options.
-Previously it would search for an unlimited time to the given depth;
-now the engine is allowed to choose its search time in the normal way,
-but is told to cut off the search early if it reaches the given depth.
-
-* Bugfix: SaveSettings in WinBoard was saving both the long form
-option highlightSquareColor and its abbreviation (hsc).
-
-* Fixed a redisplay bug in DisplayBothClocks that could cause White's
-clock to be highlighted in EditPosition mode when Black's should have been.
-
-* Fixed Zippy's feature of passing on draw offers from the ICS opponent.
-The colorization code was eating the offer before Zippy saw it, so I disabled
-colorization of offers while in -zp or -zt mode.  (Other types of
-colorization are already disabled in Zippy mode for similar reasons.)
-
-* Added some more commands to the default ICS context menu in WinBoard,
-and put "(name)" on the ones that insert a playername (or game number).
-
-* Added missing documentation to WinBoard help file: PonderNextMove, the
--ponder/-xponder argument, and the up/down arrow history feature in the
-ICS Interaction window.
-
-* Fixed	ZIPPYNOPLAYCRAFTY feature to fire only if the opponent is Crafty,
-not if some other Crafty is observing the game and kibitzes.
-
-* Fixed bugs in generating "partner" commands when Zippy is playing
-bughouse.
-
-4.0.0 -- Sat Jun 20 16:59:47 PDT 1998  Tim Mann
-
-* Fixed WinBoard resizing so that the edges you do not drag remain in
-place, even when the final size is different from what you dragged to.
-(This doesn't work on NT 3.51 or earlier, if anyone cares.)
-
-* Fixed problems with resizing WinBoard on Windows NT: you no longer get
-whitespace around the board, a clipped board, or a lot of flashing during
-the drag.
-
-* Added customization for highlight-square color.
-
-* Bugfix: backend.c wrote to stderr in a few obscure places, which doesn't
-work in WinBoard.
-
-* Added Index Number field back to LoadGame/LoadPosition dialog boxes in
-WinBoard.  This required some extra code to work with both the
-Explorer-style dialog boxes and the old-style NT 3.51 dialog boxes.  Ugh.
-
-* WinBoard startup dialog now understands -zp mode.  The first chess
-engine selector is enabled and the value is used.
-
-* Bugfix: ResetGame would send "exit" to engine twice if it was in an
-analysis mode.
-
-* Bugfix: The response "Illegal move: bk" to the "bk" command, indicating
-that it is not implemented, would confuse xboard.
-
-* Bugfix: Ignore empty hints ("Hint:\n") instead of printing a message
-saying that some bogus string (often "Hint:") is illegal.
-
-* Bugfix: LoadNextGame/LoadPreviousGame/ReloadSameGame were broken.
-
-3.6.12 -- Sat Jun 13 14:57:10 PDT 1998  Tim Mann
-
-Beta test release of xboard and WinBoard.
-
-* Spruced up xboard man page a bit.
-
-* Added Highlight Last Move to xboard too.
-
-* The revamped xboard mouse click code had several more bugs than the
-previous version, so I revamped it again.  All fixed now, I hope.
-
-* xboard bugfix: crash in CreatePieceMenu.
-
-* Oops.  winboard-3_6_11beta.exe installed 3.6.10beta, not the new version.
-
-3.6.11 -- Fri Jun 12 20:00:48 PDT 1998  Tim Mann
-
-Beta test release of xboard and WinBoard.
-
-* Major reorganization to engine-intf.txt.  Some new features added,
-many existing features clarified and hints for engine programmers added.
-Support for new features added to program.
-
-* Changed defaults for -scp (etc.) back to being independent of -fcp, as
-in 3.6.2. That is, the default is no longer to copy the value from -fcp if
--scp is not specified.  This will sometimes make command lines longer but
-will remove some confusing situations.
-
-* Split -reuseChessPrograms into two options: -reuseFirst and
--reuseSecond.  Fixed obscure bugs when reuse is off.
-
-* Detect ICC and change some command usage slightly there: only ICC has
-set-quietly; only FICS has iset and bsetup clear.  With this feature, we
-can now safely use bsetup clear when appropriate instead of deleting each
-piece one by one.
-
-* Added indent to lines that are wrapped by WinBoard ICS Interaction
-window.  This seems to tickle a Microsoft bug in the RichEdit control:
-occasionally the start of the next line after the wrapped line is indented
-too.  I think the wrapped indent feature is useful enough that it's worth
-having in spite of the bug.
-
-* WinBoard bugfix: bounding box for the board was computed incorrectly by
-mouse code.  It would think you moved off the bottom of the board before
-you really did, so it was hard to drag pieces along the bottom rank on
-smaller board sizes.
-
-* Fixed obscure parser.l bug: ambiguity between capture using : instead of
-x and email header line.  Also removed or simplified a lot of complex
-patterns for English (as opposed to PGN) end-of-game indications while I
-was in there.
-
-* Added PonderNextMove option.
-
-* xboard EditPosition piece menus now let you set the side to play by
-selecting the "White" or "Black" label at the top of the menu, like
-WinBoard.  (Both xboard and WinBoard still let you set the side to play by
-clicking on the clock.)
-
-* Merged documentation of Crafty and GNU Chess thinking output in
-engine-intf.txt.  Corrected code in backend.c to match documentation; it
-used to require the PV to start in column 27 (!).
-
-* Fixed bug that caused crashes in "-reuseChessProgram false" mode.
-
-* Draw by agreement in Two Machines mode now works as it is supposed to.
-Other minor bugs in handling game end messages from machines are also
-fixed, and engine-intf.txt is revised in this area.
-
-* Revamped xboard code for handling mouse clicks on the board.  In
-particular, it had a bug if a click-click promotion move was made.
-
-* Fixed and reinstated optimization for << in analysis modes: send
-initString and re-send the board if needed.  Sending repeated undos
-is bad because Crafty prints some analysis after every one.
-
-* Don't go into a spin loop while pausing between xboard animation frames.
-This caused problems, especially when compiling with -O2 on HP-UX.
-
-* WinBoard Options/Colors/RevertToDefaults now also turns off Monochrome
-if it was on, and similarly for Options/ICSInteractionColors/RevertToDefaults.
-This seemed to confuse people before.
-
-* Bugfix: ICS Interaction context menu items with neither of the two
-optional flags set did not work.
-
-* Bugfix: PGN move numbers are optional, but we were insisting on "1"
-right after the tags.
-
-* Bugfix: only the first game of an -mg match was loading -lpf or -lgf.
-
-* Other minor fixes and code cleanup.
-
-3.6.10 -- Mon Jun  1 01:32:31 PDT 1998  Tim Mann
-
-* Added ZIPPYNOPLAYCRAFTY feature; see zippy.README.
-
-* Added timestamps for chess engine interaction to -debug output.
-
-* Now allow 10 seconds (was 5) between games in match mode for engines to
-respond to "force" command that ended previous game.
-
-* When a game is picked from the game list and the names of White and
-Black are known, display them in the window banner instead of the filename
-and game number.
-
-* Changed default for -scp and -sd to be the values of -fcp and -fd.
-
-* Added boxes for both engines to WinBoard startup dialog.  Changed to
-dropdown boxes whose content can be set from winboard.ini, similar to
-the box for ICS name.
-
-* Accept "offer draw" (or "*offer*draw*") from engine to offer a draw.
-
-* Accept "move mmmm" from engine as well as silly "1. ... mmmm" syntax.
-
-* Added support for bughouse engines (Zippy mode only).
-
-* Move bombproofing for engines sending illegal or out of turn moves.
-
-* Always send "xboard\n" to engine as first command.  Eliminates need
-to run crafty as "crafty xboard".
-
-* Rewrote xboard code for input from engines to fix longstanding bugs.
-Previously an engine that sent one line in two separate writes with 
-some time lapse in between (or perhaps that sent several lines in one
-write) could make xboard hang.  WinBoard did not have this bug.
-
-* Fixed minor bugs in dealing with illegal moves.
-
-* Added "iset startpos 1" for FICS.
-
-* Removed special support to put "GNU Chess" or "Crafty" in the window
-banner instead of the engine's base filename.  This gives a more level
-playing field for other engines.  Also fixed bugs in the code that finds the
-engine's base filename.
-
-* Bugfix: Abort or Resign at the very start of a game in chess engine mode
-would fail to send "force" to the engine.
-
-* Fixed some minor bugs in new "result" messages, and changed format to
-include a trailing PGN comment giving the reason the game ended.
-
-* Changed syntax of /font options in WinBoard; old syntax was assuming
-that a font name can't contain a digit, which is wrong.  Old font names in
-WinBoard.ini files are still accepted.
-
-* Serious further work on getting WinBoard to read/write files in the
-"right" directories and documenting exactly what it does.
-
-* Added LoadPreviousPosition, LoadNextPosition, ReloadSamePosition.
-
-* Misc. tiny fixes and cleanup.
-
-3.6.9 -- Sun May 24 20:53:08 PDT 1998  Tim Mann
-
-xboard and WinBoard beta release.
-
-* Tightened up illegal move handling.  Illegal or meaningless moves from a
-file or chess engine should no longer get translated into a1a1 and blindly
-applied.  Explicit moves to the same square (like a1a1) no longer make the
-piece on that square capture itself and vanish.
-
-* Added AlwaysOnTop feature to winboard.
-
-* Fixed bug in winboard "@" command line indirection operator.
-
-* Removed buggy "optimization" code for ToStart in analysis modes.
-
-* Fixed typo bug in zippy.c that would often cause winboard to crash
-right after starting a game in -zp mode.
-
-3.6.8 -- Sat May 23 22:23:19 PDT 1998  Tim Mann
-
-xboard and WinBoard beta release.
-
-* Added -firstDirectory and -secondDirectory so that chess engines can
-be started in a different directory from xboard/WinBoard itself.
-
-* Added -matchGames to allow more than one game in -matchMode.  The games
-are played with colors alternating between the two chess engines.  Had to
-add a time delay at the end of each game to catch up with game ending
-messages from both chess engines -- yuck.
-
-* Changed TwoMachines mode to have firstChessProgram play White by
-default.  Added -firstPlaysBlack to restore old behavior.
-
-* Major rework of code in backend.c for dealing with first and second
-chess engines.  Generalized the code and created a struct type with one
-instance for each engine.  Several small bugs fixed along the way. 
-
-* Fixed bugs in Abort in local chess engine mode.
-
-* Tightened pattern matching to recognize moves from machine.  Should cure
-bogus "Illegal move" errors while Crafty is pondering with Show Thinking
-on, among other things.
-
-* WinBoard keeps focus in board window after popping up a comment due to
-Forward/Backward/ToStart/ToEnd commands.
-
-* Finally got rid of warnings on compiling moves.c under Windows.
-
-* Fixed so WinBoard will compile on machines where WM_MOUSELEAVE is not
-defined.
-
-* Removed various bits of unused code.
-
-* Parse (and ignore) NAGs in PGN files.
-
-* Updated engine-intf.txt.
-
-* Send "result R" to the chess program at the end of each game, where
-R is the PGN result 1-0, 0-1, 1/2-1/2, or *.
-
-* Bugfix: suppress animation when loading a game with timeDelay=0.
-
-* Bug fix: pondering output from Crafty that contained "..." could be
-mistaken for a move, causing bogus error messages and general chaos.
-
-* xboard "make clean" bug fix: moved things created by configure to be
-removed only by "make distclean".
-
-* Fixed a remaining case where move was being animated before being
-relayed to opponent.
-
-* Backend was reversing time/otim commands to the chess program (new bug),
-and was often not sending them on the first move of a game or the first
-move after a mode change (old bug).  Fixing the latter required a kludge
-to work with both GNU Chess and Crafty, because Crafty swaps white and
-black clock times when it swaps sides, while GNU Chess does not.  The
-kludge is that we always make sure the chess engine thinks its opponent is
-on move before we set the clock.  This will sometimes result in sequences
-like "white\ntime xxx\notim yyy\nblack\ngo", or the same with white and
-black interchanged.
-
-* Removed last trace of old -whiteString and -blackString arguments.
-
-* Fixed so that you can type "bd" into the Direct Command dialog when
-debugging gnuchess, without having xboard parse the clock display
-(starting with "White") as "White wins" and end the game.
-
-* Changed moves.c to make a distinction between IllegalMove (where we
-could tell what move was intended, but it violates the chess rules) and
-MeaninglessMove (where we could not tell).  This is a step towards getting
-rid of cases where we translate meaningless moves into "a1a1", but some
-work is probably needed to track them all down.
-
-* Fixed bug in WinBoard monoMode dragging.
-
-* Changed WinBoard to new style file dialogs.  In the process, disabled
-the feature that let you enter the index number of a game or position within
-the file in the dialog.  This is no loss in LoadGame, as you can pick your
-game from the game list dialog that follows, but it does remove some
-functionality from LoadPosition.
-
-3.6.7 -- Mon May 18 21:25:00 PDT 1998  Tim Mann
-
-xboard and WinBoard beta test release.  I've been unable to reproduce some
-reported drawing bugs, so they may still not be fixed.
-
-* Changed PopUpErrors option to PopupMoveErrors, which is more useful, and
-changed default to off.  Errors other than move errors should always be in
-popups; they are often too big for the message area and too important to
-put where they can be easily missed.  But it seems good to get rid of the
-popups for move errors by default.
-
-* xboard analysis window no longer forces itself to top whenever there is
-new output.  Also, now uses built-in Xaw word wrapping instead of trying
-to do its own; works better.
-
-* Bugfix: Reset did not take Crafty out of analyze mode.
-
-* A chess engine no longer has to claim to be Crafty to be able to use
-AnalysisMode and AnalyzeFile; it just has to implement the analyze
-command as Crafty does.  Put in heuristics to generate more informative
-error messages if the engine does not support analyze, and checked that
-they work at least with GNU Chess.
-
-* Added click-click moving, HighlightLastMove, and HighlightDragging to
-WinBoard.  The highlight features are unlikely to go into xboard unless
-the xboard drawing code is cleaned up to do *all* drawing on the board
-from DrawPosition, as WinBoard does.  This is low priority for me.
-
-* Eliminated bogus "Error gathering move list: no header" popup.  You
-could get this by observing two fast games at once without turning off
-GetMoveList.
-
-* Disable WinBoard Sounds menu entirely in -ncp mode, since not even
-MoveSound is used in that mode.
-
-* WinBoard bugfix: Several problems were caused if the user changed 
-WinBoard's current directory in a Load, Save, or Browse dialog.  In
-particular, WinBoard.ini would get saved in the wrong directory, and
-sound .wav file names would not get saved with a full pathname.  I think
-all such problems are now fixed.
-
-* WinBoard bugfix: iconizing the board after an aborted mouse resize would
-(partially) resize it to Tiny.
-
-* WinBoard bugfix: board was not being drawn in color on 256-color
-displays.  This bug was introduced in 3.6.6.
-
-3.6.6 -- Tue May 12 17:43:43 PDT 1998  Tim Mann
-
-xboard and WinBoard beta release.  Note: not all reported bugs are fixed.
-
-* Move animation in WinBoard, programmed by Henrik Gram.  Great stuff!
-
-* Animate backward moves too.
-
-* xboard bugfix: -font (and friends) can now specify a font alias (such
-as "fixed"), not just a full X Consortium name pattern.  Previously this
-would give a resource conversion error message.
-
-* Some coding style cleanup in xboard.c.
-
-* Earlier error check for moving wrong color piece in EditGame mode.
-
-* Completed fix to pattern matching; see 3.6.5.
-
-* Fixed some software rot bugs in Zippy.
-
-* Split AnimateDragging as separate option from AnimateMoves.
-
-* Added FlashMoves to options menu and -flash/-xflash to command line
-options (xboard only).
-
-* Some preliminary work on visible bughouse holding support.  Most of the
-code is not present in this release because I have not gotten it working
-properly yet; my first approach went down a blind alley and I had to
-remove most of the partially working code in preparation for a rewrite.
-
-3.6.5 -- Fri May  8 14:22:09 PDT 1998  Tim Mann
-
-Not generally released.
-
-* Pack bughouse holdings display in banner more tightly when board is one
-of the smaller sizes (when smallLayout or tinyLayout is true, that is).
-An interim measure, but should help.
-
-* Completed fix to make move list parsing recognize the end condition and
-final comment.
-
-* Fixed pattern matching for chatter (tells, etc.) to be more reliable.
-This should reduce the incidence of colors starting in the wrong place and
-of incorrectly matching things that look like other patterns inside
-chatter, such as "shout <12>".  (These errors were already rare.)
-
-* WinBoard now lets you customize the list of ICS's in the startup dialog.
-For now, at least, requires editing WinBoard.ini with a text editor.
-
-* Bug fix: WinBoard window sizing and position setting save/restore did
-not work right when the taskbar was at the top (or left side) of the
-screen and not in autohide mode.
-
-* Merged xboard click/click mode and drag mode, and deleted
-ClickClickMoving option on menu.  Now if you click on a piece, it
-highlights and a further click on another square will move it.  (A second
-click on the same square takes down the highlight.)  Or if you press down
-on a piece and start to drag, you can drag it to a new square.
-
-* When making click/click style moves, if your second click is on a piece
-of the same color, instead of saying "Illegal move", we now cancel the first
-starting square, replace it with the second, and wait for another click to
-finish the move.
-
-* Separate -secondInitString.  Default: same as -initString.  Suggested by
-Remi Coulom.
-
-* Patch from Frank McIngvale to make animation work with XIMs.  Yay!
-
-* Changed move animation to happen after move is passed on to ICS or the
-chess engine, where applicable.  Fixed problems with updating moveList
-that this uncovered.
-
-* Changed game list to show PGN result token for each game.
-
-* The usual minor bug fixes.
-
-3.6.4 -- Thu Apr 30 23:14:43 PDT 1998  Tim Mann
-
-xboard and WinBoard beta test release.
-
-* xboard documentation updated, both man page and info file.  An attempt
-to generate both from the same source with LinuxDocSGML was abandoned, at
-least for now.  WinBoard doc updated too.
-
-* Merged updates to animation code from Hugh.  Fixed a couple of remaining
-bugs, mostly to do with handling Pause mode correctly.
-
-* Added SaveSettingsOnExit to WinBoard.
-
-* WinBoard now saves the last screen position of the Comment, Edit Tags,
-Game List, and Analysis windows (in addition to the board and ICS
-Interaction windows) in WinBoard.ini.
-
-* WinBoard now provides a way to customize the right-button context menu
-in the output area of the ICS Interaction window.  For now, requires
-editing WinBoard.ini with a text editor.  
-
-* Various minor fixes to ICS message recognition, most affecting only Zippy.
-
-* Colorize the notification when someone sends you a message while you are
-logged in, not the output of the "messages" command.
-
-* Fixed colorization to turn off at the right place more reliably.
-
-* Added a new color and WinBoard sound for "requests": abort, adjourn,
-draw, pause, and takeback.  The same color and sound are used for all of
-these.
-
-* Added GUI to change sounds in WinBoard.
-
-* Suppressed WinBoard error popup when a sound can't be played.  They were
-popping up when two separate WinBoards tried to play a sound at the same
-time (such as during a bughouse match).
-
-* Fixed WinBoard crash when a sound file didn't exist.
-
-* WinBoard ports of timestamp and timeseal now produce decent error
-messages if they fail to connect, and WinBoard captures the messages and
-puts them into a popup.  Previously WinBoard would exit with no message on
-such errors.
-
-* WinBoard resizing with mouse improved; now accurately picks the largest
-size that fits in the new area.
-
-* Added option to turn off error message popups.
-
-* Added sizes slim, dinky, and teeny.
-
-* Fixed some minor problems with error message wording.
-
-3.6.3 -- Mon Feb 23 19:08:57 PST 1998  Tim Mann
-
-xboard beta test release only.  Man page is updated for the changes, but info
-file is not.
-
-* Bug fix: LoadGame could not load a PGN game whose first move was
-castling (which is possible from setup positions).
-
-* Bug fix: we were ignoring illegal move messages from chess engines in
-modes where the engine is refereeing but not participating (EditGame,
-LoadGame, AnalyzeFile).  The problem was in a workaround for a Crafty bug,
-where Crafty generates a bogus illegal move message if a "." (used by
-the PeriodicUpdates feature) is sent in analysis mode when the current
-analysis reveals a forced mate.  Installed a different workaround (that
-works in most but not all cases) and reported the Crafty bug.  Bob Hyatt
-replied with a fix, so the Crafty bug should be gone in Crafty 14.12 or so.
-
-* WinBoard only: enabled resizing board with the mouse.  It snaps to the
-nearest (but not too much larger) predefined size.
-
-* The xboard default font is now sized according to piece size, just as
-clockFont and coordFont have always been.
-
-* Added more sizes: bulky, moderate, average, middling, mediocre, petite.
-	
-* xboard only: Added Animate Moves and Click-Click Moving to Options menu.  
-
-* xboard only: Added code to animate piece movement, from Hugh Fisher.
-
-* New feature: autoflag is implemented in MachineWhite, MachineBlack, and
-TwoMachines modes.  If it is on and either a chess program or the user
-oversteps his time, xboard will automatically call the flag and end the
-game.  This feature was requested by someone who runs matches between
-programs and wants to penalize GNU Chess for its habit of running slightly
-over at the end of a time control.  I personally think it's pointless.
-
-* Fixed a bug in Zippy's pattern matching; he can now reply to ICC
-messages again.
-
-* Generate prettier notation for illegal moves.  If a move is illegal only
-because it leaves the player in check, generate notation as if that were
-not illegal.  For instance, if two knights are a knight's move away from
-f3, one on g1 and one on e5 that is pinned, the notation would be Nf3 to
-move the g1 knight, Nef3 to move the e5 knight.  (Suggested by Philippe
-Schnoebelen.)  In addition, if a move is illegal because the type of piece
-moved cannot go that way, would be jumping over another piece, etc., we
-give fully disambiguated coordinate notation; for example, Ng1g3, Ke1xe8,
-d2xd8=Q, etc.  An alternative would be to still write Ng3 if there is only
-one knight on the board, or Ngg3 if the other knight is not on the g file,
-but life is too short to code up all this stuff, and perhaps the way I did
-it is better as it emphasizes that this move was really made despite being
-illegal.  I wonder if the new PGN standard revision will speak to notation
-of illegal moves?
-
-* Fixed gross bug from 3.6.2: if a chess program said "checkmate" and
-White was left on move, the PGN outcome was "1-0 {Black mates}" instead
-of "0-1 {Black mates}"!  The bug occurred only for that specific string.
-
-3.6.2 -- Wed Jul 23 16:47:29 PDT 1997  Tim Mann
-
-* There was a bug in backing up from the end of a game against a chess
-engine, introduced when -reuse mode was added.  Fixed.
-
-* Recognize "{" as terminating an ICS move list.  Previously we needed to
-see a prompt (containing %), but occasionally ICC can send more stuff
-right after a move list with no prompt in between.
-
-* In WinBoard, -mm now implies -cp, so you don't get the startup dialog.
-
-* WinBoard startup dialog no longer sets -scp.  People used to get
-confused because they would give the -fcp and -scp arguments, but omit
--cp.  This would bring up the startup dialog, which would set both -fcp
-and -scp to the value in the engine name box.  Now you can change -scp
-only with the command-line argument.  That will confuse some people too,
-but hopefully fewer.  I think overall it's better than putting spaces for
-both -fcp and -scp in the dialog, which would puzzle newbies.
-
-* Bug fix: Analyze File mode now works in WinBoard.
-
-* Bug fix: WinBoard window no longer cuts off part of the bottom row if
-the menu bar wraps to a second line.
-
-* Accept game end messages of the form "PGN-result {comment}" from the
-chess engine, where PGN-result is 0-1, 1-0, or 1/2-1/2.  Accept "resign"
-or "computer resigns" from the chess engine as a synonym for "0-1 {White
-resigns}" or "1-0 {Black resigns}". Accept any message from the chess
-engine containing "game is a draw" as a synonym for "1/2-1/2 {Draw}".
-Accept "White resigns" or "Black resigns".
-
-* Enable "Action / Draw" menu item in chess engine mode.  It sends the
-command "draw" to the engine.  Accept any message from the chess engine
-containing "offers a draw" as a draw offer.  WARNING: Draw offers from the
-user and the engine (or from two engines) are not yet matched up by xboard
-in chess engine mode.  Two engines could get into a loop offering each
-other draws.
-
-* Bug fix: Game end messages from the chess engine are always ignored in
-Zippy mode.  Previously they could sometimes be processed, which was
-sometimes making Zippy hang at the start of a new game that followed
-quickly after an old one.
-
-* Zippy can now respond to titled players in channels.  Zippy will avoid
-talking to himself in a channel if he knows his own name.
-
-* Bug fix: in colorization arguments, the bold setting was being ignored
-if the background color was defaulted.  (xboard only.)
-
-* Extended ParseFEN to accept Crafty 12.2's interpretation of FEN.
-If fewer than 8 squares are given in a row, or fewer than 8 rows are
-given, the uncovered squares are empty.  Also, there can be a / after the
-8th row.
-
-3.6.1 -- Sat May 17 01:02:33 PDT 1997  Tim Mann
-
-* Bug fix: Hitting escape while entering a password on WinBoard no longer
-sets the font color back to black (which made further typing visible).
-
-* Bug fix: On Windows NT 4.0, WinBoard /ics /icshelper=timestamp would
-often hang if you tried to exit with the Exit menu item, the [X] button,
-etc.  The same fix may also have corrected the problem where running a
-chess program with /xreuse would sometimes crash Windows 95 (but not NT)
-when the chess program was killed and quickly restarted.
-
-* Bug fix: Periodic Updates would not work if turned on after having been
-off.  Also, the default was needlessly "off" in WinBoard.
-
-* Zippy bug fix: Continuing an adjourned game was totally broken.  The
-wrong moves, or no moves at all, were being fed to the chess program.
-
-* WinBoard change: Giving -ics without -icshost now pops up the startup
-dialog with "Use an Internet Chess Server" pre-selected, so that you get a
-menu of chess servers instead of going directly to ICC.
-
-* Bug fix: WinBoard's SaveSettings was saving -icshost, -icsport, and
--icshelper in winboard.ini.  This causes a problem if you use a different
-icshost later that needs the default values for icsport (5000) and
-icshelper ("", meaning none).
-
-* Disabled complaints about unexpected "[Ii]llegal move" messages from
-the chess program; we still get them at times.
-
-* Greatly simplified the code for Move Now and SIGINT (ATTENTION).  Fixes
-the bug where Move Now did not work with GNU Chess in WinBoard, and
-several more obscure bugs as well.  Reintroduces a minor bug: GNU Chess might
-not think on your time after a Move Now command.  Trying to fix this
-causes too many other problems.  Documented change in engine-intf.txt.
-
-* Cleaned up code for obtaining ratings from ICS.  It was kludgey and may
-have had bugs on systems with no "Creating:" message.  It should fail
-gracefully there, just not finding the ratings.
-
-3.6.0 -- Thu May  8 19:55:58 PDT 1997  Tim Mann
-
-* WinBoard now has right-button context menus in the ICS Interaction
-window.  Some of the items do immediate commands on the player name you
-have selected or pointed to.  (Suggested by Paolo Casaschi.)  Also, the
-middle button or shift+right does a immediate Copy and Paste.
-
-* Fixed a bug in Zippy's wild rejection.  The bug was causing Zippy to
-reject all forms of wild.  Now it rejects only 1, 9, 16, 17, and 24, as
-was intended.  These variants have different rules, while the other
-variants defined so far only have different starting positions.
-(Actually, wild 2, 3, and 4 never allow castling, but may sometimes by
-chance have king and rook start on squares where castling appears legal.
-This could cause a problem later.)
-
-* Zippy now resumes adjourned games by feeding the chess program 
-the move list instead of the position.  Setting -getMoveList to False 
-restores the old behavior.  Feeding in the move list is better because 
-it enables the chess program to correctly handle en passant legality, 
-castling legality, draw by repetition, and draw by the 50 move rule. 
-
-* Added a WinBoard startup dialog for people who run WinBoard.exe without
-using the Start menu or reading the help file.  Instead of being dumped
-directly into GNU Chess mode, you now get a menu of choices.  You now have
-to give the new WinBoard -cp option to go directly into chess engine mode.
-I did not add this feature to xboard.
-
-* Handling of "illegal move" from Crafty is now back on.  (It was turned
-off in 3.4.6; see below.)  Crafty 12.0 doesn't seem to send bogus ones
-anymore.  I did have to suppress sending time and otim in analyze mode to
-make this work, but there is no harm in that.
-
-* Zippy now sends "gameend" to ICS at the end of each game.  You can alias
-this to "seek" or whatever you like.
-
-* Added Crafty support for Move Now, using the "?" command.  We test
-whether this command exists by trying it once at the start of the first
-game, before it really makes sense.  If we don't get a message like
-"Illegal move ... ?", we assume it's OK.  (We're careful about this
-because sending a "?" to GNU Chess on Move Now keeps it from pondering the
-next move as it should.)
-
-* Added support for a tellusererror command from the chess engine.  See
-engine-intf.txt.
-
-* Attempted to make engine-intf.txt complete.
-
-* Minor fixes/cleanup to GameEnds code, to be sure we always interrupt
-when needed, and always undo an extra move generated by stopping the chess
-program while it is thinking.
-
-3.5.7 -- Sat May 03 22:37:44 PDT 1997  Tim Mann
-
-Beta release of both xboard and WinBoard.
-
-* Updated xboard documentation.  I really wish the man page was built from
-the info file instead of being separate!  It's a pain to update them both.
-
-* Updated documentation of the interface between XBoard/WinBoard and chess
-programs, and renamed it to engine-intf.txt.
-
-* Added support for tellics, telluser, and askuser commands from the chess
-engine.  See engine-intf.txt.
-
-* Various bug fixes.  On WinBoard, 256 color displays are finally handled
-right; no more color flashing when you switch windows unless the colors
-really need to be updated.  Also, I think the problem of the console font
-failing to change or changing back by itself is finally fixed.
-
-3.5.6 -- Tue Apr 29 03:08:00 PDT 1997
-
-Beta release, WinBoard only.  ChangeLog was out of date in release,
-updated here.
-
-* Added ICC timestamp and FICS timeseal to WinBoard distribution.  These
-are my own ports to Win32, based on and used by permission of the owners
-of the proprietary source code (Daniel Sleator for timestamp, Henrik Gram
-for timeseal).  The owners permit these programs to be distributed only in
-binary form (to help prevent cheating), so to avoid running afoul of the
-GPL, I have kept them as separate programs, not linked into the WinBoard
-address space.  Updated Start menu icons to use them.
-
-* Miscellaneous smaller changes.
-
-3.5.5 -- Fri Apr 25 03:06:00 PDT 1997
-
-Beta release, WinBoard only.  ChangeLog was out of date in release;
-updated here.
-
-* Added simple sound support to WinBoard.
-
-* Updated WinBoard documentation.
-
-* Internal implementation of the telnet protocol is now more complete.
-You can now hop through a VMS host on the way to ICS.  For example, do
-"xboard -ics -icshost vms.host.edu -icsport 23", then log in.  Do not use
-the -telnet flag; that says to use an *external* telnet program.  To avoid
-double echoes, you need to force character mode in VMS telnet after
-connecting from VMS to ICS.  Do "^]^Mset mode char^M^M".
-
-* Display opponent names in the title bar for MachineWhite, MachineBlack,
-and TwoMachines modes.
-
-* WinBoard now has an installer, built with InstallShield.  The installer
-works with a binary-only distribution.  Sources are still freely
-available, but now separately.
-
-* Added SaveSettings to WinBoard, which saves current option settings to
-winboard.ini.  Made sure all options can be saved and loaded, including
-fonts and com port settings.
-
-* If the game ends while you are dragging a piece, we now don't let you
-finish the move.  Formerly the move was accepted and your opponent's clock
-would start running again.
-
-3.5.4 -- Fri Apr 18 01:15:24 PDT 1997  Tim Mann
-
-Beta test release of WinBoard and xboard.  The documentation remains
-out of date.
-
-* Many fixes and improvements to new WinBoard user interface code.
-
-* In Zippy mode, avoid sending another copy of the same move to the chess
-program if ICS sends us another copy of the board image.  Hard to believe
-it took me until now to diagnose and fix this problem!
-
-3.5.3 -- Sat Apr 12 19:49:33 PDT 1997  Tim Mann
-
-Beta test release of WinBoard and xboard.
-
-* Fixed fatal bug in WinBoard input handling.
-
-* Made code to stop chess program for reuse a bit smarter.  Removed kludge
-of "white" in initString; it didn't work well, and is unneeded
-with Crafty 11.21 and later.
-
-3.5.2 -- Sat Apr 12 15:40:01 PDT 1997  Tim Mann
-
-Beta test release of WinBoard.
-
-* Ignore check and permit promotion to King during suicide games; no need
-to turn off TestLegality.
-
-* Renamed CheckLegality to TestLegality to avoid confusion with the chess
-term "check".
-
-* Added Rematch to Action menu.
-
-* WinBoard now has a custom ICS interaction window with scrollback, a
-separate line for input, and colorization.  Accelerators that conflict
-with normal editing keys were changed (by requiring Alt+) so they can work
-in both the console and the main window.
-
-* WinBoard error popups are now non-modal and disappear when you make a
-new move, as in xboard.
-
-* Configure now defaults to --disable-ptys on all systems.  If anyone has
-an ancient SysV system where pipes don't work with select, they can still
-do "configure --enable-ptys" explicitly.  I would appreciate getting a bug
-report if this happens to anyone, with complete output from configure and
-"uname -a".
-
-* "make install" now makes the installation directories too.
-
-* Fixed a bug that would cause an "Illegal move" message for Black from
-GNU Chess to be incorrectly considered bogus.
-
-* Handle name changes during an ICS game (FICS bname and wname commands).
-
-* You can force both chess programs to be killed at the end of each game
-by turning off the reuseChessPrograms option.  There are still some
-problems with reusing Crafty even in version 11.20.
-
-* Now the second chess program stays around by default too, if it ever
-gets started.
-
-3.5.1 -- Sat Apr  5 16:47:48 PST 1997  Tim Mann
-
-Beta test release.
-
-* Don't kill off and restart the chess program for each game; keep the
-same one running, using the "new" command to start a new game.  This
-change works around the problem in Windows 95 that makes WinBoard crash it
-at times, and is generally desirable to make new games start faster.  The
-second chess program (for TwoMachines) is still killed at the end of the
-game, and unfortunately this can still crash Windows 95.  Temporarily
-added "white" to the initString to make this work with Crafty 11.20, which
-has a minor bug in "new".  Older versions of Crafty have worse bugs in
-"new"; they should not be used with this version of xboard.
-
-* Support for FICS suicide chess: Parse illegal moves (that leave King in
-check) in game history.  If CheckLegality is off, allow promotion to King
-and illegal moves in game files.  We still generate e2e4 style notation
-for illegal moves.
-
-* Handle FICS "has timeseal; checking" message.
-
-* Changed the coords from white back to black; this was a bug.
-
-* Fixed problems compiling with K&R compilers.
-
-* Fixed an old bug in RegisterMove that was crashing cmail on some systems
-(notably linux).
-
-3.5.0 -- Thu Jan  2 16:59:49 PST 1997  Tim Mann
-
-Thanks to Frank McIngvale for much of the work on versions 3.4.4 and above!
-
-* Fix Crafty resumed game time bug (frankm)
-
-* Word wrap text in Analysis window (frankm)
-
-* More debug info for XPM loading (frankm)
-
-* Replaced config.sub, config.guess, etc., with up-to-date versions from
-autoconf 2.12.  Hopefully this will fix problems on Pentium Pro machines.
-
-* Removed some Makefile gunk that was causing looping for one person.
-
-3.4.7 -- Thu Dec 19 14:22:41 PST 1996  Tim Mann
-
-All changes from Frank:
-
-* Retrieve ratings from ICC (and FICS, etc., when they add the Creating:
-message), save them in the PGN tags, and pass them to Crafty in Zippy mode.
-
-* Add settable time delay between characters in ICS login script.
-
-* Colorize messages like personal tells.  Fix false recognition of channel
-tells.
-
-* Pass "tells" from Crafty through to ICS (in Zippy mode).
-
-* Implement ~/ filename convention from C shell for game and position file
-names.
-
-* ZIPPYACCEPTONLY feature for testing.
-
-3.4, patchlevel 6 -- Sat Nov 23 16:58:50 PST 1996  Tim Mann
-
-* Put recognition of "illegal move" messages from Crafty for
-illegal castling, etc., inside an #if that is currently turned off,
-because of a bug in Crafty that generates bogus "illegal move" messages
-after some moves that are actually legal and accepted by Crafty.
-
-* Added -checkLegality option; previously this could not be turned off.
-
-* Fixed an old bug in finding default board size parameters.
-
-* Differentiated among channel tell, kibitz/whisper, and personal tell/say.
-
-* Fixed a bug in detecting Xpm in the configure script.
-
-3.4, patchlevel 5 -- Mon Nov 18 16:22:53 PST 1996  Tim Mann
-
-* Added zic2xpm to the kit; it had been omitted by mistake.
-
-* Added some default colors for -colorize
-
-3.4, patchlevel 4 -- Sat Nov 16 18:10:17 PST 1996  Tim Mann
-
-This is meant to be a beta release in preparation for version 3.5.
-
-* Added InfoXBoard and ManXBoard to the Help menu.
-
-* Made Frank's ICS input box optional, defaulting to off.
-
-* Merged in Frank McIngvale's XbKit.  Many new features, including
--clickClick mode, the Analysis modes, piece flashing, ZIICS import,
-ICS text colorization, and the ICS input box.  Many thanks to Frank for
-supplying and documenting this code.
-
-3.4, patchlevel 3 -- Mon Nov 11 18:23:14 PST 1996  Tim Mann
-
-Small set of changes made while Frank McIngvale was working on XbKit in
-parallel.  Unreleased in this form.
-
-* Updated zippy.README.
-
-* Removed useless X event handler and removed strange code for copying
-form translation table to board that worked around the bug it caused.
-This makes changing bindings in .Xdefaults more straightforward.
-
-* Now pressing the Control key steps back one move, and releasing it steps
-forward again.
-
-* Moved quit from "q" to "Q" for greater safety.
-
-* Use "unobserve" instead of "observe" to stop observing; needed on FICS.
-
-* Support for interface variable.
-
-* Strip titles from people who are talking to us, so (for example) Zippy
-won't try things like "tell Darooha(*) hello".  Needed on FICS.
-
-3.4, patchlevel 2 -- Tue Jul  9 19:06:42 PDT 1996  Tim Mann
-
-This patchlevel is not planned to be an announced release.  It's in
-preparation for integrating Frank McIngvale's XbKit.  It mostly contains
-minor fixes I've accumulated since 3.4.pl1.
-
-* WinBoard /telnet option now fires up an external program, as
-with xboard, instead of trying to use a feature of NT 3.1 that does not
-exist in later versions of NT or in Windows 95.  ChangeLog for 3.4.pl1
-said this had been implemented there, but it really wasn't.
-
-* Indicating player to move by the icon color now works under Windows 95.
-
-* WinBoard now kills the chess program when you exit using the system menu
-or the [X] button.  Thanks to Michael Lowe.
-
-* Minor changes to Zippy, including: Now understands wild challenges on
-FICS; these used to crash it.  Removed limit on how fast a game will be
-accepted.  Use "set formula ..." on the chess server to limit this if you
-are using GNU Chess.  Now sends correct opponent name to Crafty.
-
-* Added some missing default values to documentation.  Thanks to Stuart
-Cracraft.
-
-* Bugfix: Trying to print "No fonts match pattern" error message would
-crash.  This can happen to Linux users who don't install Helvetica, for
-example. 
-
-* Bugfix: Defaulting feature in -size n,n,n,n,n,n would put us in an
-infinite loop.
-
-* Added more directories to search for Athena widgets on HPUX.
-
-* New cmail (3.12) from Evan Welsh; includes small fix from Kayvan Sylvan.
-
-* Recognize "illegal move" messages from Crafty for illegal castling, etc.
-
-* Bugfix: "name" command added to zippy.c for Crafty was producing error
-message if GNU Chess was in use.
-
-* In bughouse mode, suppress holding messages from console window; show
-holdings only in banner.
-
-* Minor fixes/cleanup to Makefile.in and configure.in.
-
-3.4, patchlevel 1 -- Mon Dec 11 13:43:12 PST 1995  Tim Mann
-
-* This patchlevel updates WinBoard to match xboard, and includes a few
-fixes and minor improvements.  "-size tiny" and "-size n,n,n,n,n,n"
-are still not implemented for WinBoard.
-
-* Installed support for Crafty based on code from Bob Hyatt.
-Currently the only documentation for this is in the FAQ, and a few
-things don't work with Crafty 8.23.  Please do not report these
-problems as bugs in either xboard or Crafty.  Bob and I know about
-them.  The worst ones (if not all of them) should be fixed in Crafty
-8.24.
-
-* Changed the kludge command we send when gnuchess wants to print
-something that doesn't end with a newline, from "help" to "bogus".
-This works because the error message gnuchess prints ends with a
-newline.  It also improves compatibility with Crafty, which doesn't
-need the kludge, but for which sending "help" causes a problem.
-
-* Don't draw grid at all if lineGap is 0; previously we drew the grid
-with X "0-width" lines (usually 1 pixel wide) and then overwrote it.
-
-* Makefile: Removed xboard.info from "all" target so we won't try to
-rebuild it, because this fails on hosts that don't have makeinfo
-installed.  Other minor fixes to "clean" targets, etc.
-
-* Fixes and cleanup to Auto Comment code that handles continuation
-lines and highlighting.
-
-* Auto Observe now tries to observe the game from the point of view of
-the player who was on your gnotify list.  Requested by rng.
-Limitations: We can't tell which player it was unless you have ICS
-highlighting turned on.  Also, currently "observe foo" works as
-required (observing from foo's point of view) only on ICC, but FICS
-will probably implement this soon.
-
-* "-size tiny" now makes the default font smaller automatically.  This
-was implemented by introducing an extra Form widget in the hierarchy
-for all xboard windows, named either normalLayout, smallLayout, or
-tinyLayout.  So you can have resource specifications that apply only
-to certain layouts; in particular, XBoard*tinyLayout*font.
-
-* Bug fix: EditGame or EditPosition while playing or examining still was
-not really being permitted.
-
-* WinBoard bug fix: On the EditPosition menu, King did not work.
-
-* Added text catalog of WinSock error messages to WinBoard, because
-Microsoft still has not put them in the system message catalog.
-
-* Removed support for older ICS game-ending messages that do not have
-a PGN result token (*, 0-1, 1-0, or 1/2-1/2) after the closing '}'.
-The code for older messages was sometimes firing on the newer
-messages, due to parsing ambiguity.  If the current code sees an old
-message, it will understand that the game is over, but will always
-display * as a result token instead of trying to guess the result by
-interpreting the text message.
-
-3.4, patchlevel 0 -- Tue Nov 21 01:02:50 PST 1995  Tim Mann
-
-* This patchlevel was released for xboard only.
-
-* Updated the info file.  It should now be as up-to-date as the man page,
-with good English except in the parts that pertain only to AmyBoard.
-
-* Added "-size tiny", requested by Bob Hyatt.  Also cleaned up bitmap
-support and added "-size n,n,n,n,n,n" to allow arbitrary-sized bitmaps,
-if the actual bitmaps are supplied by the user.
-
-* Updated bughouse support.
-
-3.3, patchlevel 4 -- Sat Nov 18 02:27:21 PST 1995  Tim Mann
-
-* Unreleased beta that works with preliminary FICS bughouse code.  Will
-need changes before release to track FICS message changes.
-
-* Removed use of .EX macro from man page.  It is not supported by some
-nroff -man macro packages, notably the one on Slackware Linux.  Switched
-to boldface for references to xboard and other commands within the man
-page, as this seems to be the modern way.
-
-* Bug fix: If ICS rejected a move, it was correctly undone on the board,
-but the message widget still displayed the bad move.  Reported by DAV.
-
-* Normally, xboard in ICS mode fetches the move list whenever the board
-display switches to a new game.  Doing this is now an option
-(getMoveList) that can be turned off, which is useful if you are watching
-multiple blitz games.  Requested by rng.
-
-* Move list fetching code is now smarter: it ignores a move list if it is
-not for the right game.
-
-* Added support for bughouse as implemented on FICS.  Holdings are shown
-in the window title in place of the strength numbers.  A menu on mouse
-buttons 2 and 3 (same on both) lets you drop pieces.  There is no checking
-as to whether you actually hold the piece you are trying to drop; we rely
-on ICS to check that.  Notation of the form P at f7 is generated and parsed.
-The mate detector does not understand that non-contact mate is not really
-mate in bughouse, but this does no real harm.  It results in a "#"
-suffix being displayed on the move notation, but xboard does not assume the
-game is over.
-
-* Bug fix: Promotion to a knight was not working with ICC!  Thanks to
-Wendigo for the report.
-
-* Bug fix: Special pty code for host types *-*-aix3* and *-*-irix3*
-(supplied from configure.in) had a bug that would cause childio.c to
-fail to compile, due to a "continue" that was not within a loop.
-
-* Bug fix: In pgntags.c, memory was being freed while still in use.  One
-symptom this caused was that on some machines, cmail would fail with a
-message that it could not find the BlackNA tag.  The error was in some
-submitted code that I included in version 3.2.pl3 without reading
-carefully enough.  Anders Forberg noticed the symptoms, and Evan Welsh
-(who had nothing to do with causing the bug) found the bug and submitted a
-fix; thanks to them both.
-
-* Removed restriction against using EditGame while playing, observing,
-or examining on ICS.  You still get a warning popup.
-
-3.3, patchlevel 3 -- Sat Sep 16 11:44:05 PDT 1995  Tim Mann
-
-* Bug fix: Going directly from MachineWhite to TwoMachines mode would kill
-off the second chess program after Black's first move.
-
-* Added -timeIncrement feature.  Thanks to Joel Rivat.
-
-* Deleted code that tries to keep you from observing more than one game,
-or observing while playing or examining.  There is actually no problem in
-doing this, except that every time an update comes in from a different
-game than is currently being displayed, xboard fetches the history of the
-new game, which may be time-consuming if you are on a slow link.
-
-* Fixed configure so as not to crash when neither lex nor flex is found.
-lex or flex is needed only if the user wants to rebuild parser.c.  Thanks
-to Phil Humpherys for reporting the crash.
-
-* Bug fix: config.h.in used #define instead of #undef for some macros used
-in the pty code in childio.c.  This causes the code to fail to compile on
-some architectures, because the symbols are supposed to be undefined, not
-defined to empty, when they are not set in configure.  Bug originated in
-3.3.pl0 when config.h was introduced.  Thanks to Phil Humpherys for report.
-
-* Bug fix: ShowThinking would not show anything when current position had
-no move to display in the move window.  E.g., if position was created by
-LoadPosition or EditPosition.
-
-3.3, patchlevel 2 -- Mon Aug 28 11:11:11 PDT 1995  Tim Mann
-
-* Zippy code was omitted from xboard-3.3.pl1 by mistake; now included.
-
-* For WinBoard, added hint to help file that you may need to turn off
-LocalLineEditing while typing dialing commands to your modem.
-
-3.3, patchlevel 1 -- Sat Aug 19 15:13:30 PDT 1995  Tim Mann
-
-* Zippy distribution is no longer separate from regular xboard distribution.
-
-* Deal properly with Show Thinking output from GNU Chess when it is
-thinking on its opponent's time.  In TwoMachines mode this output is
-suppressed to avoid interfering with the output from the machine that is
-on move; in other modes it is displayed (including the move that GNU Chess
-is predicting the user will make next).  GNU Chess produces this output
-only if it is built without -DQUIETBACKGROUND defined; this symbol is
-defined by default in patchlevels before pl75, but undefined by default in
-pl75.
-
-* Bug fix: Handling of initial board position in move list for wild games
-was broken, so wild games could not be observed and adjourned wild games
-could not be continued.  Thanks to "Maximum Entropy" for the bug report.
-
-* Added feature: algebraic notation now shows "+" indicator for check
-and "#" for checkmate, as called for in PGN standard.  Thanks to Kevin
-Maher for the suggestion.
-
-3.3, patchlevel 0 -- Thu Jul 27 22:21:07 PDT 1995  Tim Mann
-
-* Changed configuration to use a config.h file instead of passing zillions
-of -D options on the cc command line.
-
-* Merged a small fix and some updates to the texinfo file from Jochen
-Wiedmann.  The texinfo file still needs work.
-
-3.2, patchlevel 5 -- Tue Jul 18 20:29:39 PDT 1995  Tim Mann
-
-* Beta test release of xboard only.
-
-* Updated WinBoard code to include new xboard features.
-
-* Added texinfo file from Jochen Wiedmann to the release, but not as the
-primary documentation.  It needs updating, and the English needs work.
-I did make a few improvements, mostly to change incorrect uses of @var to
-either @samp or @code as appropriate.
-
-* Merged in code changes to 3.2.pl4beta from Jochen Wiedmann.
-
-* Fixed EditComment; did not pop up window in previous beta.
-
-* Added AutoComment feature.
-
-* Added GameListDestroy to disable the outdated game list popup in cases
-where we load a new game file without building a new popup.
-
-* Added yyskipmoves feature to parser.l to speed up building of gamelist.
-
-* gamelist.c wouldn't compile with a non-ANSI compiler.  Fixed.
-
-* Change to yy_text handling in patchlevel 3 still had problems.  Can't
-use AC_DECL_YYTEXT in configure.in, because that defines YYTEXT_POINTER
-according to whether the lexer on the current host makes yytext a pointer.
-But most people will be using a parser.c that was generated on another
-host and shipped with the package.
-
-3.2, patchlevel 4 -- Sun Jun 25 19:13:43 PDT 1995  Tim Mann
-
-* Beta test release of xboard only.  
-
-* Added FIREWALLS section to man page.
-
-* Changed -icsport to be a string.  Now with the -telnet option,
-specifying -icsport "" suppresses the second argument to telnet.
-
-* Added EditTags feature.  Removed AboutGame from menu, because EditTags
-subsumes it.  EditTags suggested by Jochen Wiedmann and first implemented by
-him in AmyBoard.  xboard implementation is my own.
-
-* Fixed some missing or incorrect prototypes.
-
-3.2, patchlevel 3 -- Sat Jun  3 18:57:38 1995  Tim Mann 
-
-* Beta test release of xboard only.  
-
-* New version of cmail from Evan Welsh, to fix compatibility problems with
-perl 5.0.
-
-* Added game list feature on Load Game, based on code from Jochen
-Wiedmann.  Integrated it with cmail.
-
-* Several bug fixes from Jochen Wiedmann, including one to my yy_text
-workaround for the difference in the type of yytext between lex and flex.
-
-* Handle clock pause on FICS.
-
-* Suppress clocks in untimed FICS games (time control 0 0).
-
-* Rebuilt configure script with autoconf 2.3.  This fixes a bug in
-configuring for X11R6, where -lSM -lICE would not be added when needed.
-
-* Fixed inconsistent type declarations on IntSigHandler and
-CmailSigHandler.  Bug report from Josh Daynard.
-
-* backend.c wouldn't compile with a non-ANSI compiler.  Fixed.
-
-3.2, patchlevel 2 -- Tue Feb  7 14:50:30 1995  Tim Mann 
-
-* Minor release of both xboard and WinBoard.
-
-* Added recognition of some FICS messages.  On the other hand FICS is also
-changing some of its messages to match what xboard already recognizes.
-
-* Temporarily went back to using "promote" command on ICS instead of
-"a7a8=Q", because FICS doesn't implement the latter yet.
-
-* We now avoid using overlapped I/O on pipes in WinBoard, to make Windows
-95 beta 2 happy.  This lets WinBoard work with GNU Chess on Windows 95!
-
-* Installed patches from Jochen Wiedmann to coordinate with Amiga XBoard.
-
-* Installed patch to cmail bug in LoadGame from Evan Welsh.
-
-* Bugfix: checkmate and stalemate moves entered with EditGame in ICS mode
-were not being handled correctly.  Bug was in GameEnds().
-
-* Implemented EchoOn and EchoOff for xboard, using system("stty echo\n").
-Now passwords won't be echoed when you connect directly to ICS.  Also,
-telnet negotiation characters aren't displayed (when possible).
-
-* Implemented more of the telnet protocol.  Now connecting to a telnet
-server with "-icsport 23" should work even without giving the -telnet
-option.  The telnet is in "old line-by-line mode".
-
-3.2, patchlevel 1 -- Sat Dec 10 13:50:46 1994  Tim Mann 
-
-* This patchlevel released for WinBoard only.
-
-* winboard.c: Fixed ConsoleInputThread().  Needed to change CRLF to LF,
-not to CR.  This was stopping normal /ics mode from working.  Thanks to
-Asher Kobin for the bug report.
-
-* winboard.c: Fixed Raw(), EchoOn(), EchoOff().  Now they take effect
-immediately, not on the next console read after the one in progress.
-
-* winboard.c: Attempted to make WinBoard work with gnuchessx running
-directly on Windows (not remotely via rsh).  It now works on NT, but only
-if gnuchess is told not to think on its opponent's time ("easy\n" removed
-from initString).  The problem seems to be that GenerateConsoleCtrlEvent
-is not doing anything.  On Windows 95 beta 2, we get error messages on
-both reading and writing to gnuchessx; I didn't investigate why.
-
-3.2, patchlevel 0 -- Wed Dec  7 13:23:36 1994  Tim Mann 
-
-* Thanks to all the beta testers who gave me feedback: Josef Nelissen,
-Steve Booth, Evan Welsh, Dima Dakhnovsky, Chris Petroff, Peter Jansen,
-Derek Terveer, Michel van der List, Richard Lloyd, Shelly Mistry, and Mike
-Lee.  Sorry if I forgot anyone.  Thanks to Virendra Kumar Mehta for
-information about DYNIX/ptx.
-
-* Don't exit on keyboard EOF unless we get two in a row.
-
-* WinBoard only: added -localLineEdit switch to allow turning off local
-line editing if you really want to.  It is still a bad idea to let the
-echoing be done remotely, however; see below.
-
-* Fixed some configure problems on HP-UX.  [Steve Booth]
-
-* Fixed (I hope) configure problem on SunOS 5.3/Solaris 2.3.  [Josef Nelissen]
-
-* cmail bugfix from Evan Welsh (cmail 3.4).
-
-3.1, patchlevel 9 -- Fri Dec  2 23:54:56 1994  Tim Mann 
-
-* Beta distribution only
-
-* Always do local echo/edit of user typing in ICS mode.  Doing the echo
-downstream may seem nicer in some modes, and it can be hard to turn that
-echo off, but the echoed characters can be interleaved with ICS output
-and make it impossible to parse correctly.  For xboard this involved only
-a change to recommendations in the man page, as Raw() isn't implemented.
-For WinBoard, removing Raw() made a real difference.  Added code in 
-WinBoard to change /r/n back into /r on keyboard input, as we get the 
-former when Raw() is not called.
-
-* Do not issue ICS "refresh" command after we start to observe a game
-unless we get to the next prompt without seeing a board image.  Newest
-version of ICS doesn't require this refresh, but old versions around still
-do.
-
-* cmail bugfix and small code cleanup in LoadGame, from Evan Welsh.
-
-* Added keyboard accelerators N/P for LoadNextGame/LoadPreviousGame.  Evan
-Welsh request.
-
-* Using "-" on the command line as a filename for loading (saving) games
-or positions specifies the standard input (standard output).  Alain Picard
-suggestion.
-
-* On WinBoard only, a command line option without a leading '-' or '/' is
-now taken as the value of -lgf.
-
-* Changed to not use stdin, stdout, stderr as initializers in backend.c;
-needed for GNU libc compatibility.  You also must build parser.c with flex
-(not lex) if you are using GNU libc, to avoid having the same problem
-there.
-
-* Changed WinBoard to avoid using "overlapped" input on the console.  It
-now seems to fully work on Windows 95 beta 2.
-
-* Improved comment popups on WinBoard.  Now newlines are handled properly,
-and the plain Comment popup window doesn't disappear and reappear when we
-step to a new move with a new comment.
-
-* Fixed bugs in detecting the absence of the time and otim commands.
-
-* Added built-in implementation of rcmd protocol to WinBoard.  Windows NT
-does not implement passing signals through rsh, and Windows 95 does not
-have rsh at all.
-
-* Added -remoteUser option.
-
-3.1, patchlevel 8 -- Mon Nov 28 15:26:07 1994  Tim Mann 
-
-* Beta distribution only
-
-* Rearranged ChangeLog file into reverse chronological order to be closer
-to GNU standards.
-
-* Integrated new cmail code from Evan Welsh (including cmail RCS rev 3.2).
-Includes a bug fix to TruncateGame.
-
-* Updated ICS address to be chess.lm.com.
-
-* Bug fixes to handling the aftermath of FatalError.  Thanks to Chris
-Petroff for the bug report.
-
-* Test for remsh before rsh, other fixes for HP-UX.  Thanks to Richard
-Lloyd.  I wasn't able to do all the things he suggested, so there may
-still be some rough edges in building on HP-UX.  See the FAQ file for hints.
-
-* Bug fix; added missing check for HAVE_SYS_SYSTEMINFO.  Thanks to Josef
-Nelissen for testing on Solaris 2.x.
-
-* Updated WinBoard to match xboard.  (WinBoard still has a few option
-dialogs that don't exist in xboard.)
-
-* Changed Hint output to a popup.
-
-* ShowThinking output and move output no longer overwrite each other.
-ShowThinking output won't appear if the displayed position is not current. 
-ShowThinking output in TwoMachines mode made clearer and documented.
-
-* Implemented --enable-ptys and --disable-ptys arguments to configure.
-
-* Fixed Book and Hint code to work over a pty with echo enabled and tabs
-expanded to spaces.  Thanks to Dima Dahknovsky for the bug report.
-
-* Moved Attention calls from all over xboard to one place, inside
-SendToProgram.
-
-* Added bulletproofing to ShowThinkingEvent.
-
-* Added code to handle "refresh N" boards that come in from ICS properly,
-assuming ICS is changed to mark them with a new relation code (-3).
-
-3.1, patchlevel 7 -- Sun Nov 13 22:16:01 PST 1994 -- Tim Mann
-
-* Beta distribution only
-
-* Changed ShowThinking to just show the current best line in the
-DisplayMessage area, instead of dumping everything to stdout.
-
-* Installed new cmail (RCS rev 3.1) and cmail.man (RCS rev 1.10), and
-changes to cmail code in backend.c, from Evan Welsh.
-
-* Miscellaneous minor fixes.
-
-3.1, patchlevel 6 -- Fri Nov  4 12:53:53 PST 1994 -- Tim Mann
-
-* This patchlevel was not actually released to anyone.
-
-* Updated the pty code to be based on GNU Emacs 19.24, and moved it to a
-separate file.  It was hard to split out just the pty configuration from
-all the stuff emacs does with its custom configure script and .h files,
-but I did my best.
-
-* Converted from imake to GNU autoconf.  This was a serious upheaval.  
-
-* Put in code to help trap "error gathering move list" problem reported by
-Michel van der List if it recurs.  I couldn't reproduce it.
-
-3.1, patchlevel 5 -- Mon Oct 31 21:12:00 PST 1994 -- Tim Mann
-
-* Beta distribution only.
-
-* We now test for checkmate or stalemate in EditGame mode after every user
-move, and in LoadGame mode whenever we hit the end of a game without
-seeing a PGN end marker.  cmail needs an update to deal with this
-correctly; Evan promises one.
-
-* Bugfixes in new move generator.  Thanks to Mike Lee for reporting one of
-the bugs.
-
-* Imakefile was omitted from patchlevel 4.
-
-3.1, patchlevel 4 -- Mon Sep 19 18:19:46 PDT 1994 -- Tim Mann
-
-* Beta distribution only.
-
-* The move generator includes a mate tester.  Initially this is used only
-by cmail, and even that usage needs further work.
-
-* Wrote a true move generator and used it to replace all the move
-disambiguation and legality checking code in parser.l.  The move generator
-is capable of dealing correctly with en passant and castling availability,
-but the rest of the program still does not keep track of this information.
-
-* Bug fix: xboard did not handle "foo has made you an examiner of game 23"
-message.  Thus you could not use examine features until the next board
-came in, showing your new relation to the game.  Thanks to POOKIEWOOKIE on ICS
-for the bug report.
-
-* Added AutoObserve feature.  Thanks to Chris Petroff for the idea.
-
-* Added Book feature to use new gnuchess "bk" command.  Mike McGann request.
-
-* Redid code to handle missing "time" command in gnuchess, because latest
-gnuchess no longer sends a response to this command.  
-
-* Eliminated need for -DFLEX.  Thanks to Michael Shields (Vladimir?) for
-the idea.
-
-* Added missing code to implement MoveNow in TwoMachines mode.
-
-* Added ShowThinking feature.  Thanks to Richard Lloyd for the idea.
-
-* Applied patches from Evan Welsh; some fixes and improvements to the
-cmail code.
-
-* Fixed bug in moving from EndOfGame mode to MachineWhite or MachineBlack,
-introduced in previous patchlevel.  Also fixed related bug in ending a
-game in ICS mode; was entering EndOfGame mode instead of IcsIdle.
-
-* Added patch to implement internetChessServerLogonScript flag, from Kevin
-O'Connor.  Thanks!
-
-3.1, patchlevel 3 -- Wed Sep  7 13:22:07 PDT 1994 -- Tim Mann
-
-* Beta distribution only.
-
-* Merged in new cmail code from Evan Welsh.  He added the ability to have
-more than one game per message, needed for official IECG matches.  I added
-the ability to resign or offer/accept/decline a draw in a cmail game.
-
-* Bugfix: invalid -tc option caused segmentation fault; DisplayFatalError
-was called too early in initialization.  Georges Honore reported this bug.
-
-* Decided to keep EndOfGame mode as an element of the user interface---it
-means that a gnuchess game or loaded game has ended, and the user must
-explicitly select EditGame to edit it, rather than just being able to
-enter more moves freely.  But internally there is no longer an invariant
-tying this mode to whether the chess program is running.
-
-* Zippy bugfix: Was saving only the final position in the -sgf file when
-the game ended by something other than resignation or flag.  Also fixed
-the longstanding bug that Zippy would think the final board of such a game
-was a new game and restart the chess program.
-
-* Now does a better job of faking castling availability in FEN.  We still
-don't really keep track of it, but now at least we don't say that castling
-is still available when the king or rook is not on its home square.
-
-* Bugfix: Initial board of game history for wild games was going through
-too much processing, causing us to forget the game length, which is now
-needed by ParseGameHistory.  This was causing problems with resuming
-adjourned wild games.
-
-* Updated ICS host to ics.onenet.net.
-
-* Zippy now accepts challenges where the opponent specified his color.
-
-* Added ZIPPYPASSWORD2 to let operator give commands directly to gnuchess.
-
-* Bitmap directory can include alternative icons now, too.
-
-* Handle "Game * (*) has no examiners" message from ICS.
-
-* Revamped window title and icon name selection.
-
-3.1, patchlevel 2 -- Sun Jun 12 17:16:28 PDT 1994 -- Tim Mann
-
-* "Beta" distribution for Zippy users only.
-
-* Bugfix: common.h was assuming that X11 type Boolean is char, which is
-not always true.  This might have caused all sorts of obscure bugs!
-
-* Installed new bitmaps from Elmar Bartel as the default.  Many thanks!
-The old bitmaps can be used by changing the "bitmaps" symbolic link before
-compiling xboard, or by using the -bitmapDirectory option at runtime.
-
-* Loading a game that ends with the PGN unfinished symbol ("*") now always
-leaves you in EditGame mode.
-
-* Added documentation of -icscomm to man page.  Thanks to Maarten Remkes
-for the linux script.
-
-* ^C now kills gnuchess as well as xboard.  Thanks to Dima Dakhnovsky for
-reminding me how to do this.
-
-* Bitmap icon color now indicates player to move.  Stuart Cracraft
-suggestion.
-
-* Changed piece bitmap flags to have just one flag, which points to a
-directory full of bitmaps, instead of a flag for each bitmap.  Also
-changed bitmap naming convention.
-
-* "Connection closed by ICS" is no longer a FatalError popup.  This was
-too annoying in the normal case where the user typed "quit".
-
-* Changed default font to 14 pixels instead of 10 points.  This seems to
-make it close to the size I want it to be on more displays.
-
-* Major mode (GNU Chess, etc.) appears in title bar.  Stuart Cracraft
-request.
-
-* Bug fix: EditGameEvent, MachineBlackEvent, MachineWhiteEvent, and
-TwoMachinesEvent were calling PauseEvent to get out of pause mode, which
-now has undesired side effects, such as advancing the display to the
-forwardMostMove.  It works fine to just set pausing = FALSE instead.
-
-* IcsExamining mode now lets you access ICS edit position commands using
-the same popup menus as xboard's EditPosition mode.  Thanks to DAV on ICS
-for inspiring the idea.
-
-* Corrected test for gcc on HP in Imakefile; thanks to Richard Lloyd.
-
-3.1, patchlevel 1 -- Wed Jun  1 16:25:11 PDT 1994 -- Tim Mann
-
-* Added parser.c.lex and parser.c.flex to the distribution.
-
-* Added HP gcc options to Imakefile, from Mats Nylen.
-
-* EndOfGame mode no longer highlights EditGame mode indicator, because the
-modes really do differ.  I would like to get rid of EndOfGame mode in the
-future, at least as far as users can see.
-
-* Larger %a in parser.l, needed for RS/6000 users.
-
-* Minor improvements to Mail Move error messages.
-
-* When -debug flag is given to xboard, -v is passed to cmail.
-
-* Old Save Style uses "1. ..." instead of "1..." when black moves after a
-comment; more like xboard 3.0's actual style.
-
-* New version of cmail from Evan Welsh.  Looks for UCB Mail in a more
-portable way and has some minor bug fixes.
-
-* Bug fix: Saving a FEN position while in EditPosition mode with black to
-play was showing white to play in the saved position.
-
-3.1, patchlevel 0 -- Fri May 20 16:36:15 PDT 1994 -- Tim Mann
-
-* This is the first general release since 3.0, patchlevel 9.  Releases
-since then have been limited-distribution or beta releases.
-
-* Thanks to my version 3.1 beta testers: Dmitry Dakhnovsky, Ed Hanway,
-Richard Lloyd, Mike McGann, Shelly Mistry, Josef Nelissen, Chris Petroff,
-Jack Robertson, Michel van der List, Ky Macpherson, Derek Terveer, and
-Evan Welsh.  Sorry if I've forgotten anyone who gave me feedback.
-
-* Updated man page.
-
-* Minor cleanup on menu sensitivity code.
-
-* Integrated another even better version of cmail from Evan Welsh,
-including some code he supplied in xboard itself.
-
-* A few more fixes to cmail support.
-
-* Automatically update clocks after an ICS "moretime" command.
-
-* Handle ICS automatic examine mode (set examine 1) after a game.
-
-3.0, patchlevel 14 -- Tue May 17 13:41:44 PDT 1994 -- Tim Mann
-
-* Beta test release only.
-
-* Don't suppress prompt on first board of game being examined; otherwise
-it looks like nothing happened at all (i.e., like you're lagged).
-
-* Added StopExamining and StopObserving (Chris Petroff suggestion).
-
-* Made Reset do a refresh on ICS.  John Chanak's original ICS code for
-xboard tried to do this; I finally decided it was a good idea after all.
-
-* Fixed bugs in handling updates that come in while you are pausing in
-examine mode.  This is pretty tricky to do right.
-
-* Made un-Pausing immediately pop you to the current position.  This is
-always necessary in examine mode, since the game may have changed under
-you; your remembered moves might no longer be right.  So I made it do the
-same in all modes.
-
-* Took Detach Examine mode back out...used Pause mode for this instead!
-
-* Put in a trap for the GNU Chess bug of printing an Illegal Move message
-when its own hint move is illegal.
-
-* Attempted to fix a Zippy bug; bogus "exited unexpectedly" messages after
-it checkmates its opponent.  This involved adding an argument to GameEnds
-to say who says it ended (ICS, GNU, etc.)  and taking different actions in
-different cases.  Unfortunately, this just restored an older Zippy bug, where
-Zippy restarts gnuchess when it gets the board with the final position,
-because GameEnds still puts xboard in EndOfGame mode.  Sigh.
-
-* We now capture elapsed time on last move when getting game history.
-(Josef Nelissen bug report)
-
-* Rewrote code to redisplay last file title so it really works.
-
-* Fixed bug in oldSaveStyle.
-
-* Larger %a and %o were needed for lex.
-
-3.0, patchlevel 13 -- Mon May 16 16:26:22 PDT 1994 -- Tim Mann
-
-* Beta test release only.
-
-* FatalError popups stay on the screen now.  If the error is really fatal,
-all functions are disabled, and the program exits when you press OK.
-
-* Redisplay last file title when using Load (Next/Previous/Same) Game.
-
-* Zippy understands new match challenge message format on ICS.
-
-* Added Revert command.
-
-* When examining a game on ICS, < > buttons do ICS backward/forward
-commands, unless you set the Detach Examine option.  Thanks to Dima
-Dakhnovsky for the idea.
-
-* Fixed various minor problems in cmail mode.
-
-* cmail generates the tags now.  New version of cmail from Evan Welsh.
-
-* cmail mode won't let you do MailMove unless the currently displayed
-position is exactly one move past the end of the game you loaded.
-
-* Fixed building of man pages in Imakefile
-
-* Updates to INSTALL file
-
-3.0, patchlevel 12 -- Sat May  7 21:10:03 PDT 1994 -- Tim Mann 
-
-* Beta test release only.
-
-* Brought man page up to date.
-
-* Added Shift+R to resign from keyboard.
-
-* Some items on Action menu available in GNU Chess mode now.
-
-* Revamped Action menu.
-
-* Reordered functions in backend.c as a small step toward reorganizing
-this whole mess.
-
-* Generate TimeControl PGN tag.
-
-* Get type of ICS game (e.g., rated blitz) and save in PGN tags.
-
-* Bug fix: Clocks were not redisplayed when entering EditGame mode.
-
-* Bug fix: Clocks were not being redisplayed after loading a game file
-with -td 0, so they could show the wrong color active.
-
-* Bug fix: Chess programs would be killed and match mode would exit
-prematurely when loading a PGN game fragment ending with "*".
-
-* ICS command "sposition" no longer confuses xboard.
-
-* Integrated new version of cmail (with support code in xboard) from Evan
-Welsh.
-
-* Added TruncateGame, MoveNow, RetractMove, and QuietPlay.
-
-* Bug fix: switching between MachineWhite and MachineBlack was not calling
-Attention().  Reported by Dino Dini.
-
-* More improvements to INSTALL and Imakefile.
-
-* Pack moves into 79 character lines in PGN output.  We don't generate
-check indications, and we always break the line before the result,
-so this is not quite PGN export format.
-
-* Use FEN tag in PGN.
-
-* Improved finding and counting of game starts in save files.
-
-* Negative position or game numbers in -lpi/-lgi mean to seek to that byte
-offset.  Hook for possible future features, not in man page.
-
-* Detect and handle absence of either "time" or "otim" commands in
-gnuchess.
-
-* Don't use "promote" command to ICS anymore.
-
-* Handle switching sides and taking back moves on FICS.
-
-* Handle flip state flag in style 12 board.
-
-* Handle examine mode on ICS.
-
-* Improved error popups for various kinds of illegal moves.
-
-* Suppress unasked-for hints from gnuchess (which it generates in post
-mode).
-
-* Load/save position functions use FEN.  Old style also supported.
-
-* Added detailed error messages if loading a bitmap file fails.
-
-* Small board has 2-pixel lines between squares instead of 3-pixel.
-
-* Added OldSaveStyle and AboutGame.
-
-* Renamed ForceMoves to EditGame.
-
-3.0, patchlevel 11 -- Tue Sep 21 15:25:36 PDT 1993 -- Tim Mann 
-
-* The following changes were present in xboard 3.0, patchlevel 11, but the
-first group did not make it into WinBoard 3.0 until later.  xboard
-3.0.pl11 was a limited-distribution release only, mostly to Zippy users.
-
-* Man page minor fixes.
-
-* Added a missing file close.
-
-* Removed automatic error popdown on Reset, which was destroying some
-error messages before they could be read.
-
-* Fixed char vs. unsigned char warnings on bitmaps.
-
-* Use ICS board style 12.  Some improvements to ICS parsing.
-
-* Comment window is now labelled with the move the comment is on, and
-comments don't pop down when you step to the next move.
-
-* Save files now in PGN format.
-
-* Support for loading PGN files.  PGN tags pop up when a PGN game file
-is loaded.
-
-* More info in INSTALL and Imakefile about building for Suns (and
-other systems).
-
-* WinBoard 3.0 patchlevel 11 split off from an early version of xboard
-3.0 patchlevel 11, so it does not have all the features of that
-patchlevel.  The following changes made it into both xboard and
-WinBoard:
-
-* Made Comment dialog non-modal in WinBoard.
-
-* EndOfGame mode is now more transparent.  It looks like ForceMoves
-mode except that there is no chess program running.
-
-* Small bug fixes in clock management.  Most noticeably, pausing when
-it is gnuchess's move now works as documented (again).
-
-* Add minimal support for -icscomm option.  Not documented yet because
-I haven't sorted out the issues with setting the tty modes on the comm
-port device, or with locking it properly.  But it's usable by wizards.
-
-* Don't restart the chess program upon Backward event from EndOfGame mode.
-
-* Suppress extra prompt after ICS sends us a board.
-
-3.0, patchlevel 10 -- Sat Sep 11 18:44:03 PDT 1993 -- Tim Mann 
-
-* Beta test release only.
-
-* Zippy now plays chess.  zippy.c and zippy.h are still not included
-in the standard distribution, but are available on request.
-
-* Switched to using style 12 on ICS.
-
-* Updated man page, and documented use of XBoard*form.translations to
-add more shortcut keys.
-
-* Added shortcut keys "d" to claim/offer/accept a draw, and "t" to
-call flag.  Suggested by venu on ICS.
-
-* More explicit instructions in INSTALL file.
-
-3.0, patchlevel 9 -- Tue Sep  7 14:02:00 PDT 1993 -- Tim Mann
-
-* General release, minor update to 3.0.pl8.
-
-* Loosened checking on whether it's okay to start a move, to satisfy
-ICS ultra-blitz players.  Now we don't check whether it's your turn
-until you let go of the piece.
-
-* Parser now recognizes "+-+" as meaning the game ended in a draw.
-
-* Got rid of S_NONE symbol, which seems to conflict with some symbol
-Sun defines.
-
-* Tweaked the man page.  Clarified that there is currently no way for
-two people running copies of xboard to play each other without going
-through the Internet Chess Server.
-
-* Fixed a bug in color name conversion.  Asking for two different
-colors whose names were the same in the first four characters would
-get you two copies of the first one.  Thanks to Volker Zink for the
-bug report.
-
-* Improved confusing Usage() message.
-
-* Added a bunch of Sun information to the Imakefile and INSTALL file.
-Thanks to Ed Hanway, Arik Klingensmith, and others who responded.
-
-* Test for defined(WIN32) instead of !defined(unix).
-
-* Avoid using (void *) type with non-ANSI C compilers.  Thanks to
-James Altucher for the bug report.
-
-3.0, patchlevel 8 -- Thu Sep  2 12:23:01 PDT 1993 -- Tim Mann
-
-* Note: Patchlevel 8 was the first non-beta release of xboard 3.0
-
-* Added cmail to distribution.  Contributed (and still maintained) by
-Evan Welsh.
-
-* Bug fix: -queen option wasn't initializing menu check.  Reported by
-Pat Surry.
-
-3.0, patchlevel 7 -- Thu Aug 26 13:23:24 PDT 1993 -- Tim Mann
-
-* Sent WinBoard 3.0.pl7 to Torre on ICS
-
-* Added parser.h to hold the interface to parser.l
-
-* Upgraded COPYING file and copyright notices to GNU GPL version 2.
-
-3.0, patchlevel 6 -- Tue Aug 24 15:16:13 PDT 1993 -- Tim Mann
-
-* We no longer display intermediate positions or intermediate comments
-while loading a game file with -timeDelay 0 or loading an opening to
-start up a -matchMode game.
-
-* Loading an empty game from an xboard save file now gives a status
-message "No moves in game" instead of an error popup saying "Game not
-found in file."
-
-* Added comment.awk to distribution.
-
-3.0, patchlevel 5 -- Tue Aug 17 16:45:54 PDT 1993 -- Tim Mann
-
-* Bug fix:  xboard would crash if it couldn't get all its colors; now
-it switches to monoMode instead.  Also, xboard was trying to convert
-color resources even when using a b/w display.  Reported by Larry
-Rogers.
-
-* Bug fix: Declared fields of TimeMark as signed so that we get signed
-instead of unsigned arithmetic.  SubtractTimeMarks was breaking on
-Alpha AXP (which has 64-bit longs) with old declarations.  Reported by
-Michel van der List.
-
-* Bug fixes:  Keyboard accelerators now work after EditComment window is
-popped down.  Iconize keyboard accelerator now works even if xboard
-was started with -iconic flag and later deiconized.
-
-* Bug fix:  The routine that tests whether a move is illegal because it
-would leave you in check was not handling e.p. captures properly.
-Reported by Patrick Surry.
-
-* Bug (?) fix:  Was adding time to clocks at time control even when
-loading a game file.  Actually it's not entirely clear how time
-controls should be dealt with when some moves are loaded from a file
-or clicked in with ForceMoves.  For now ForceMoves mode does add the
-time (because it can be used to change moves during a live game), but
-LoadGame mode does not.
-
-* Updated usage message.
-
-* Previous attempted fix to matchMode had broken TwoMachines mode and
-generally needed more work.  Also simplified command line interface to
-matchMode.
-
-3.0, patchlevel 4 -- Thu Aug  5 14:17:18 PDT 1993 -- Tim Mann
-
-* Thanks again to the beta testers listed for 3.0 patchlevel 3, and also
-Desnogues, Steve Cariglia, Niklas Engsner, Mark Silver, and Roger Rowe.
-
-* Reorganized man page, splitting OPTIONS into subsections.
-
-* matchMode was very broken; fixed.
-
-* Changed convention for turning off command line options from --opt
-to -xopt, to be less inconsistent with GNU standards.  Also changed
-the long command line options to take True/False arguments like
-resources; seems to make more sense this way.
-
-* Added AlwaysQueen option -- suppresses promotion dialog and always
-promotes to a queen if you move a pawn to the last rank.  Has no
-effect on gnuchess (or your ICS opponents!) -- they can still
-underpromote.
-
-* Subtracted an extra fudge term when determining how wide message and
-title widgets should be.  This fixes a problem some beta testers had.
-Wish I knew why it's needed.
-
-* Bugfix in parser; symptom was that you couldn't do LoadGame after
-observing a game on ICS.
-
-* Bugfix in Forward; didn't work after game ended while Pause was turned on.
-
-* Removed bogus execute bits on .h files.
-
-* Use REMOTE_SHELL and TELNET_PROGRAM definitions.
-
-* MachineWhite and MachineBlack now work from TwoMachines mode.
-
-* Popping down an error message with the [ok] button was not turning off
-the errorUp flag, so the next move would cause xboard to try to pop it
-down again, resulting in a wild memory reference and sometimes a crash.
-
-3.0, patchlevel 3 -- Tue Aug  3 17:40:27 1993  -- Tim Mann
-
-* Thanks to my beta testers: Patrick Surry, Takuya Kojima, Robert J. Luoma,
-Chris L.  Petroff, Richard K. Lloyd, Michel van der List, Craig Metz,
-Antoon Frehe, Simon Clift, Shelly, Eric Peterson, Christopher Mitchell,
-Martin Koch, Ed Hanway, Steve Booth, Udo, Ken Hobday, and Joseph Duhamel.
-
-* Improved error messages for trying to move the wrong color pieces or
-to move when it's not your turn.
-
-* Special code for monoMode on 1-bit displays now understands displays
-where 1=white and 0=black.
-
-* Declare getenv() if <stdlib.h> not included; avoids a compiler warning.
-
-* Documented borderXoffset and borderYoffset.
-
-* Added -titleInWindow option for use with X window managers that
-don't let us set the title in the window banner.
-
-* Fixed error message printing in WinBoard; system error messages no
-longer appear as numeric codes.
-
-* The error message popup is now non-modal; you don't have to press the
-[ok] button before you can do something else.  In addition, the popup is
-positioned so that it doesn't cover up the board (too much), and making a
-move or otherwise clicking on the board pops it down.  (Not implemented in
-WinBoard.)
-
-* You can now call your opponent's flag in ICS mode by clicking on his
-clock. 
-
-* Fixed minor bugs in -flipView option and documented exactly how xboard
-decides which way to flip the view.
-
-3.0, patchlevel 2 -- Fri Jul 30 22:20:23 PDT 1993 -- Tim Mann
-
-* Added Autosave to Options menu.  Would be better to have Save
-Options dialog as in WinBoard, but this was quick to do and gives the
-most-needed functionality.
-
-* Changed "Reload Game" on menu to "Reload Same Game".
-
-3.0, patchlevel 1 -- Thu Jul  8 21:22:59 PDT 1993 -- Tim Mann
-
-* Sent a copy of patchlevel 1 to Patrick Surry to beta-test.
-
-* Added -cmail option that sets appData.cmailMode.  Currently a no-op.
-In the future this may set special modes for use by the cmail script
-for playing chess by email.
-
-* Added LoadNextGame, LoadPreviousGame, and ReloadGame to File menu.
-ReloadGame suggested by Patrick Surry.
-
-* Added -flipView command-line option.  Suggested by Patrick Surry.
-
-* Fixed bugs in parser.l:  (1) Pattern for "# xboard game file ..."
-needed to match to end of line.  (2) Start of a new file was not matching
-the ^ start-of-line character.  The fix for this is a kludge.
-
-* Made game counting code in LoadGame more robust, and made LoadGame
-able to detect the end of a saved partial game (by noticing the start
-of the next game) in game files created by XBoard itself.  We don't
-try to find the start of the next game that way in other kinds of game
-files, because the only way I can think of to do that is to look for
-another move #1, and that technique gets too many false hits.
-
-* Fixed recently introduced bug in LoadGame when game starts with a
-position diagram.
-
-3.0, patchlevel 0 -- Fri Jun 25 14:17:17 PDT 1993 -- Tim Mann
-
-* Changes in this patchlevel were too numerous to list.  Larger ones are
-listed below.
-
-* Added a popup dialog to enter and edit comments.  Inspired by some
-code from Patrick Surry.  Changed the normal read-only comment popup
-to the same style.
-
-* Added ICS init script feature from Karl Schwamb.
-
-* Added some ESIX fixes and OMIT_SOCKETS ifdef option, from Kayvan Sylvan.
-
-* Revamped code to allow use of flex instead of lex on parser.l.
-Using flex requires adding -DFLEX to defines in Imakefile.
-
-* Source code is split into front end (xboard.c), which knows about X
-and Unix, and back end (backend.c), which knows about chess, gnuchess,
-and the ICS.  There is also a front end for Windows NT.
-
-* Boolean command line options now use "-foo" to turn on and "--foo"
-to turn off instead of "-foo true" and "-foo false".  [Later -xfoo;
-see above.] 
-
-* Added menu commands to control autoflag, bell, and coords options.
-
-* User interface has a new look: (1) Menu bar instead of array of
-buttons.  A few very commonly used features have small buttons in
-addition to being on the menus. (2) Large font for clock.  (3) Pop-up
-dialogs for errors.
-
+ChangeLog for XBoard/WinBoard
+
+* 04/15/2009: Updated the winboard.rtf of 4.3.15 with the 4.3.16
+additions, and a more fitting description of ICS-analysis mode.
+
+* 04/15/2009: Added internationalization to xengineoutput.c and
+xoptions.c. Fixed missing */ in xboard.c.
+
+* 04/13/2009: transferred all changes since 4.2.7 to 4.3.pre16, to make 
+4.4.pre1, which should lead to a full merger of the 4.2 and 4.3 line
+
+* 02/28/2009: fixed an error in the parser. This should fix bug #22812. 
+ 
+* 06/12/2005: bugfix some more possible buffer overflows. 
+ 
+* 06/27/2004: added simple icsEngineAnalyze for xboard
+
+* 06/26/2004: added icsEngineAnalyze for winboard: Analyze observe games 
+with a chessprogram on a Internet Chess Server (ICS) 
+
+* 02/12/2004: Bugfix ICS interaction console crashed while chess 
+engine starting and user type in some stuff. We wait now to finish 
+the engine boot.
+
+* 02/11/2004: Winboard: Added color lines for the ics interaction 
+console if zippy used 
+ 
+* 02/09/2004: Added mousewheel support for winboard. Play moves 
+backward and forward with the mousewheel. 
+ 
+xboard/WinBoard 4.2.7 -- Fri Nov 28 13:36:00 PST 2003 -- Tim Mann
+
+* 11/26/2003: In WinBoard, setting the -debug flag now logs ICS output
+to WinBoard.debug too.  (This isn't needed in xboard because ICS
+output already goes to stdout, so it's easy to capture along with the
+debug output on stderr.)  This was issue #280 in the ToDo file.
+
+* 11/23/2003: Cleaned up some minor problems in cygwin.mak.  Thanks to
+Hans Werner Strube for the problem report.
+
+* 11/23/2003: Updated the default list of chess servers in
+winboard/defaults.h.  Deleted two that appear to be dead and added a
+new one that is active.
+
+* 11/19/2003: Swapped icon_white.bm and icon_black.bm in XBoard.
+Hopefully this will get them the right way around by default on more X
+window managers.  I wish I understood this better.
+
+* 11/18/2003: Implemented a simple 32-bit random number generator for
+WinBoard, replacing the Windows rand(), which ranges only up to
+0x7fff.  Formerly on Windows, only zippy.lines sayings that started in
+the first 32767 bytes of the file could ever be used.  This was issue
+#505 from the ToDo file.
+
+* 11/16/2003: The xboard man page and info files are now built from a
+common set of texinfo source files, and the xboard man page now covers
+cmail as well.  Formerly, ever since the texinfo file was first
+contributed to the project, it was separate from the man page and the
+two files had to be updated in parallel, making for a maintenance
+nightmare.  To make combining the files possible, I took the Perl
+script "texi2man" from the GNU Units project and added support for a
+larger subset of the texinfo markup language.  I then carefully
+compared the old man page and old texinfo file to make sure the latest
+and clearest words survived into the new combined texinfo file.  It
+would be great to merge in WinBoard's help file too, but that's a
+larger project.  It would have to be heavily conditionalized to
+deal with differences in features between XBoard and WinBoard.
+
+* 11/15/2003: Cleaned up and applied a small patch from Daniel
+Mehrmann, to stop overly long PVs in thinking output from causing a
+buffer overflow crash in backend.c.
+	
+* 11/5/2003: When a chess engine sends a "telluser" command (including
+the cases where "tellall" or "tellopponent" acts like telluser), the
+information now goes into a nonmodel popup that is automatically
+dismissed when the user clicks anywhere on the board.  This fix is
+more significant on WinBoard, where formerly you got a fully modal
+dialog that had to be dismissed by clicking on OK before anything else
+could happen.  The bug was issue #406 in the ToDo file.
+
+* 11/1/2003: Removed email addresses from this file to reduce spam
+load, as it gets linked to from the Web.
+
+* 11/1/2003: Updated READ_ME and winboard/READ_ME.txt.
+
+* Modified xboard and winboard makefiles to be able to build the
+project in the new combined directory structure.
+
+* Applied a small security fix to pxboard, from Martin Maeok.
+
+* Fixed a bug in the game list dialog.  The change in 4.2.6 to opening
+games in text mode (meant to avoid getting extra \r's into comments)
+caused a new bug in determining seek offsets when parsing a game file
+to form the game list.  Also, the change was incomplete; on some code
+paths games were still being opened in binary mode.  Thanks to Lenik
+Terenin for reporting the offset bug.  I've now gone back to always
+using binary mode when reading game files, and I've fixed the comment
+bug by adding code to remove \r's from parsed comments explicitly.  I
+still use text mode for writing game files so that games written by
+WinBoard will have Windows-style line endings.
+
+* Fix for minor bug in WinBoard installer.  If you chose a non-default
+destination directory, the default directory was still used for a
+couple of unimportant things, namely setting the App Paths registry
+keys (unused by WinBoard) and trying to copy the existing WinBoard.ini
+file to WinBoard.old.  I inherited this bug from the InstallShield 5
+sample template.  Thanks to "l.d." for noticing the incorrect keys.
+
+* Patch from Chris Priest: when two engines are being run through rsh,
+avoid reusing the same stderr port for both.  I'm not sure why this
+should be needed, but it's harmless, at least.
+
+* Bugfix: The kludge to deal with old engines that give an error
+message because they don't know the "st" command was too sloppy; it
+could hit on an "st" substring anywhere in an error message.  GNU
+Chess 4 is the only engine I know of where the kludge was needed, so I
+changed the kludge to match a longer, more GNU-specific string.
+
+* Changed the WinBoard self-extracting installer to choose a unique
+temporary subdirectory name within the Windows temp directory instead
+of always putting wb-setup directly in temp.  Besides being better
+practice, this avoids the need to deltree wb-setup first, which
+occasionally alarms someone who thinks that deltree is only used by
+trojans to delete all your files.  (Yes, I'm serious.)
+
+* Fixed a bug where FICS-style "wild/0" strings were not parsed as the
+proper wild type.  The "/" was not being skipped.
+
+* Fixed a WinBoard bug where temporary files created by game
+copy/paste were being created in the root directory of the current
+drive instead of the TMP directory and were not always deleted on exit.
+
+* Fixed a small bug in winboard.c's ErrorDialog() function.  Thanks to
+"Ron" (no last name given).  The bug might have caused a problem when
+pressing OK or Cancel in an error dialog when more than one error
+dialog was being displayed, but I'm not really sure.
+
+* Removed a hack that worked around a bug in very old versions of
+Crafty, where it would sometimes reply "illegal move" to a "."
+command.  The hack kept us from recognizing real illegal move messages
+in analyze mode from engines that don't respond to the "." command.
+Thanks to Fabien Letouzey for the report.
+
+* Fixed a bug in the xboard version of GetDelayedEvent.  It would
+return the most recently scheduled event even if it had already fired.
+This caused at least one visible error: in -ics -xreuse mode, starting
+the engine again and seeing another "feature done=1" would re-run the
+initialization code in InitBackEnd3, including the code that opens the
+connection to ICS.  The WinBoard version didn't have this bug.  Thanks
+to Bob Hyatt for the bug report.
+
+* The promotion popup for ICC wild 26 (giveaway) now includes King.
+Thanks to Fredrik Josefsson for the bug report.
+
+* The first game in a file (or being pasted from the clipboard) can
+now start with a bare move -- no PGN tags, no move number "1", etc.
+Suggested by Shane Harrelson.  One could imagine taking this farther
+and accepting something like "e4 e5 1/2-1/2 d4 d5" as two games, but
+I haven't done that.
+
+* Bug fix: xboard didn't really accept a paste of multiple games,
+contrary to what I wrote when adding the feature to WinBoard in
+4.2.4.  Now it works in both.
+
+* Fixed generic start/end of game messages to work on chess.net, where
+they put ratings in parens after the player names.
+
+* Updated config.sub and config.guess to newer versions from
+automake-1.4p5-2.  This makes configure work with MacOS X + X11.
+
+* Bugfix: when examining a game fragment on FICS where black plays
+first, don't show two "(0:00.000)" times on the initial "none" move.
+
+* If TestLegality is on and one of the engines makes an illegal move
+in TwoMachines mode, it forfeits immediately.  Formerly the game would
+get stuck at that point and the engine that made the illegal move
+would eventually lose on time.
+
+xboard/WinBoard 4.2.6 -- Fri Feb  1 22:26:31 PST 2002
+Tim Mann
+
+Another small bugfix release.
+
+* Put in a small change from Alexander Mai to allow xboard to build in
+an OS/2 EMX environment.
+
+* Fix WinBoard-only bug where editing a PGN file with comments would
+insert more \r characters before the \n after every Load/Save cycle.
+For some unknown reason we were reading the files in "rb" mode but
+writing them in "a" mode, so we kept the \r characters on reading and
+added an extra one on writing.  Fix: change the "rb" to "r".  Thanks
+to Joel (last name not given) for the bug report.
+
+* Put the arguments to rsh/remsh in the right order for better
+portability.  Thanks to Michael Kalisz.
+
+* FreezeUI is now implemented in WinBoard; it was previously only
+implemented in xboard.  This function prevents the user from entering
+moves or other commands while we are waiting for an engine to
+initialize itself.  Implementing it fixes a bug where the user could
+start a game (etc.) during feature negotiation.  One of the symptoms
+of this bug was that we could send "new" one or move moves *after* the
+first game started!
+
+* Fixed some handle leaks (WinBoard only), including a nasty one that
+leaked one handle per command sent to ICS.  Thanks to several folks
+who helped characterize the bug and tried to look for leaks.
+
+* We now install and look for the info file in ${prefix}/share/info
+instead of ${prefix}/info.  The latter is still the default in
+autoconf, but the former is currently used in Red Hat Linux and
+probably elsewhere.
+
+xboard/WinBoard 4.2.5 -- Sat Dec 15 11:42:51 PST 2001
+Tim Mann
+
+* Changed the bundled GNU Chess 5.02 in the WinBoard package to
+include a much smaller book and to use much less hash table space by
+default (8 MB transposition table, 0.5 MB pawn evaluation table).  The
+large book included with 4.2.4 made the WinBoard download too big for
+some people, and the default hash tables were larger than the
+available physical memory on some people's computers. I built the
+small book by running Crafty's "small.zip" book line collection
+through a Perl script that makes it look enough like real PGN games
+that the GNU Chess book builder will accept it.  The script and some
+minor patches to GNU Chess 5 are available in the WinBoard source
+distribution and at http://www.tim-mann.org/gnuchess.html.
+
+* Fixed a bug in the code that deals with engines that complain that
+"time" and "otim" are illegal moves.  This was a new bug in 4.2.4.
+
+* Revamped the implementation of ToStart in analysis mode.  Formerly
+there was some ill-conceived code that would try to get back to the
+start of the game by doing a "new" command (and all the followup
+commands that requires) while remaining in analysis mode.  This is
+problematic for engine authors to support, though it works with
+Crafty.  This code was trying to solve the problem of ToStart being
+slow because the engine would try to start an analysis after every
+"undo" command all the way back to the start.  But ToEnd already had a
+much better solution to this problem, and now ToStart does the same
+thing: we exit from analysis mode and enter force mode instead,
+make/unmake moves to get to the end/start of the game, and then
+reenter analysis mode.
+
+* Formerly, Zippy could try to start playing a game before the engine
+was initialized; that is, during the initial timeout for protover 1
+engines, or before "feature done=1" for protover 2 engines.  We now
+wait until the engine is initialized before connecting to ICS, which
+fixes this in the common case.  If you turn off engine reuse for
+multiple games (that is, if you give the -xreuse option), there could
+still be problems; see item 503 in the ToDo file.  Thanks to Dieter
+Buerssner for the bug report.
+
+* Bugfix: All WinBoard versions since the merge with WinBoard Plus
+(but not xboard) have had a bug in changing the PeriodicUpdates,
+PonderNextMove, and ShowThinking options from the menu.  The bug
+mostly just caused changing these options during a game to not take
+effect until after the next reset.  For TwoMachines games, though,
+changing PonderNextMove just before the game would take effect
+immediately for the second engine but not until the next game for the
+first engine.  Thanks to Koundinya Veluri for the bug report.
+
+* Bugfix: In 4.2.4, we sometimes got confused when trying to leave and
+reenter analyze mode.  One symptom was that Analyze File did not work.
+Thanks to Igor Syry for the bug report.
+
+xboard/WinBoard 4.2.4 -- Sun Dec  9 14:56:30 PST 2001
+Tim Mann
+	
+* WinBoard now includes GNU Chess 5.02 in place of GNU Chess 5.00.
+
+* WinBoard's PasteGameFromClipboard will now handle a paste with
+multiple games in it, popping up the game list dialog.  xboard
+already did this.  Suggested by Robert Gerstman.
+
+* We now use the "clearboard" command on ICC where appropriate.
+
+* Bugfix: don't generate a bogus "variant normal" command to an engine
+for the loadable ICC wild types that we internally flag as
+VariantLoadable.  Also clarified the message that Zippy sends when
+declining such wild games -- it can't deal with the possibility of
+loading an arbitrary position into the game.  Thanks to Dieter
+Buerssner for reporting the problem.  It would be nice to be able to
+actually play these wild types some day; presumably there would have
+to be an option to either send "loadgame" with a specified position,
+or to deal with an opponent sending it.
+
+* If we get a holdings message from ICS when we thought we were
+playing normal chess, we now try asking for a move list so that we can
+find out from the header what's really happening.  Formerly we guessed
+bughouse in this case.  Response to a comment from Gian-Carlo
+Pascutto.
+
+* Fixed two longstanding bugs in the clock code.  These affected only
+play between a user and a local engine, or between two local engines,
+not ICS play.  (1) The last fractional second used by a player before
+moving and virtually pushing his clock was being charged to his
+opponent instead of to him.  (2) The time and otim commands were being
+sent to an engine before the (buggy) fractional second update was
+done.  The second bug was pretty harmless in itself, but the first one
+was serious.  Many thanks to Peter Rosendahl for carefully diagnosing
+and reporting these bugs!
+
+* Changed WinBoard timestamp key.  Nothing is changed other than the
+key and a recompilation.  ICC may phase out the old key soon; if they
+do, you'll need to use the timestamp.exe from WinBoard 4.2.4 or later
+to connect to chessclub.com.
+
+* Fixed an xboard-only bug where most dialogs would not take keyboard
+input unless the mouse was actually over the dialog, even if the
+dialog window had focus.  Thanks to Jason Varsoke for the bug report.
+
+* Bugfix; Remember to send time and otim commands to engine before
+sending playother.  Thanks to Bob Hyatt for the bug report.  Also
+fixed a bug where time and otim were sometimes sent even with feature
+time=0.
+
+* Added small patches from Wilkin Ng that are meant to fix a crash in
+CopyGameToClipboard and a "can't unlock clipboard memory" error in
+PasteTextFromClipboard, under Windows 2000.
+
+* Changed cygwin.mak to not use -mno-cygwin.  In other words, it now
+uses cygwin1.dll instead of the mingw libraries.  This works around
+bugs in fileno() and stat() that I encountered in mingw.  (fileno
+seems to always return 0.  stat fails because the library routine uses
+a different definition of struct stat than the header files provide.)
+Thanks to Robert Gerstman for reporting the symptoms these bugs caused
+when WinBoard was compiled with Cygwin.
+
+* Added -showButtonBar option.  This lets you delete the << < P > >>
+buttons and thus widen the message widget a bit.
+
+* Added code to address a very obscure bug.  If an engine dies and
+needs to be restarted while in one of the analyze modes, it was not
+getting put back into analyze mode.  This bug should not really ever
+have gotten tickled unless reuse was turned off and the engine sends
+game end commands (such as 1-0) when a game ends by rule while in
+analyze mode.  The next version of the protocol spec will say that
+engines should not do that, but version 2 and earlier didn't address
+the issue.
+
+* We now use the FICS "iset ms 1" feature to get times in ms instead
+of seconds.  Thanks to DAV for email telling me about this feature.
+
+* Changed clock display to show tenths of seconds for 9.9 seconds and
+less, instead of 0.9 seconds and less as before.
+
+* It has been discovered that Zippy can play simuls on ICC (but not on
+FICS).  If you arrange for Zippy to send the ICC command "simulize" in
+the -zippyGameStart string, it will accept additional games while
+playing.  Zippy will use the same engine for every game, so whenever
+it switches opponents, the engine's state will be reset with the "new"
+command.  This will of course weaken its play, so don't enable simuls
+if you want your engine to have the highest possible rating.  Zippy
+was never designed to work with simuls; it just works by accident, and
+it hasn't been tested much.  So please report any bugs you notice, but
+don't expect them to be fixed rapidly.  Thanks to Paul McGuire for
+noticing that this works.
+	
+* Bugfix: Suppress the direct command to engine popup if there is no
+engine.  In WinBoard this case used to cause a crash.  Thanks to
+"Dargon" for the bug report.
+
+* Bugfix: formerly we did part of the engine initialization for the
+very first game too soon, before feature negotiation.  One result of
+this is that engines would never get the "ics" command for the first
+game.
+
+* Lengthened timeout to detect protocol version 1 chess engines to 10
+seconds.  This should reduce problems with protocol version 2 engines
+that are slow to initialize missing the timeout and not getting a
+chance to send their feature commands before the first game starts.
+
+* Klaus Friedel says that adding a short sleep to WinBoard after
+starting a new chess engine solves a problem that occurs under Windows
+2000, in which engines sometimes don't see the initial command(s) from
+WinBoard and hang.  I don't understand how that can happen, but the
+sleep is harmless, so I've put it in.  Others have also reported what
+may be the same problem, so hopefully this will fix it for them too.
+
+* Bugfix: editing the Result field in EditTags will no longer cause a
+later crash.  Thanks to DAV for a clear bug report that let me
+reproduce the problem.
+
+* ICC wild 28 is now recognized as shatranj, but it is not supported.
+You might be able to play it by turning off Test Legality.
+
+* Formerly we would always turn off "feature time" if the engine
+printed an error message with the string "time" or "otim" in it; now
+we do that only if the message comes before the engine makes its first
+move.  This change is useful because some engines spew a lot of bogus
+error messages about commands they don't fully parse, so something
+like "result 0-1 {White lost on time}" could generate such a message.
+Engines shouldn't do that, but if they do, mysteriously turning off
+"feature time" is not a good way to react.
+
+* Fixed an infrequently occurring Zippy bug: formerly, resuming from
+adjournment by position (that is, with GetMoveList turned off) or
+starting/resuming a wild game (nonstandard starting position) would
+try to set up the position without putting the engine into force mode
+first.  That was probably tolerated by most engines, but if the
+position was black-to-play and the engine hadn't set feature
+setboard=1, then the fake "a2a3" move (which we use as a kludge to get
+black to be on move before sending the edit command) would appear to
+be a real move, and the engine might reply to it!  This bug could also
+be seen when trying to use Zippy to play a simul -- something that
+Zippy was never designed to support, but which seems to mostly work
+anyway.  Thanks to Paul McGuire for sending a WinBoard.debug file that
+showed the bug occurring.  Some other cases of resuming adjournments
+or starting games from nonstandard positions may have been broken too;
+I think I've straightened out the problems.
+
+* Agreeing to a draw in the human vs. local engine case formerly did
+not work if the human offered first; now it does.  A human's
+unsolicited offer is considered valid until he makes another move.
+Thanks to Bruce Moreland for the bug report.
+
+* Bugfix: We used to look for just "fr" in Event tags or strings from
+ICSes to recognize Fischer Random games.  This caused a lot of false
+matches.  Now we look for "wild/fr" instead, which is what FICS uses.
+
+* Bugfix: Clicking on a move in the MoveList window only updated the
+displayed position; if a chess engine was active, its state was not
+updated.  Thanks to Alejandro Dubrovsky for the bug report.
+	
+* Bugfix: The "resign" command from engine to xboard formerly did not
+work in ICS (Zippy) mode.
+
+* Bugfix: Formerly we would register a garbage premove if the user
+clicked on a piece, then clicked on an edge or outside the board.  Now
+such an errant click is ignored.
+
+* Bugfix: GameEnds would send "exit" to an engine in analyze mode even
+if we did not actually want to leave analyze mode.
+
+* Bugfix: "feature pause" was being rejected.  We don't currently use
+it, but that is no reason to reject it.  Thanks to Gian-Carlo Pascutto
+for the bug report.
+
+* Bugfix: when "partner" needed to be sent both to ICS and the engine,
+Zippy was erroneously sending the ICS prefix character to the engine
+too.  Thanks to Gian-Carlo Pascutto for the bug report.
+
+* Zippy now declines challenges when the engine is not yet ready to
+play again, instead of ignoring them.  This is needed so that the
+server will let the opponent repeat the challenge.  It might be better
+to remember such challenges and accept them when the engine is ready,
+but that would be a bit more complicated to implement.
+
+* Bugfix: Zippy's emotes didn't work on FICS because there, "i" is a
+built-in alias for "it", not a real command.  So sending "$i foo" gave
+an error message instead of doing "it foo".  We now leave out the
+alias-suppressing prefix for emotes.
+
+xboard/WinBoard 4.2.3 -- Mon Feb 19 19:55:05 PST 2001
+Tim Mann
+
+* Bugfix: The error message "Variant X not supported by gnuchessx"
+formerly could pop up even in -ncp mode.
+
+* Fixed an xboard bug in premove highlighting.  If you had
+HighlightLastMove turned on, premoves got highlighted in
+highlightSquareColor (yellow) instead of premoveHighlightColor (red).
+
+* Modified premove again.  Now we are back to displaying the move
+locally immediately after sending it to the server, as in versions
+prior to 4.2.1.  This is good because it lets you register your next
+premove sooner.  As a better fix to the problem that the change in
+4.2.1 had been trying to address, we now suppress animating the
+opponent's move if you have a premove reply pending.  However, it's
+probably still a good idea for you to turn off AnimateMoves entirely
+if you are trying to play extremely fast games.
+	
+* Removed an erroneous patch that left zombie chess engines around
+when both sigterm and reuse were turned off.  (Bug was in xboard only,
+not winboard.)
+
+* Bugfix: loading a game with autostepping did not work for games with
+PGN result "*" (unfinished).  This bug was introduced in 4.1.0, caused
+by some outdated code that was supposed to leave you in EditGame mode
+after loading an unfinished game.  I fixed this, and also changed it
+to leave you in EditGame mode after loading *any* game, but without
+changing the tags to say it's an edited game.  It's not really clear
+whether that is the best thing is to do here -- ideally, perhaps, the
+tags should change to say "edited game" if you actually make any
+changes, but that is harder to make work.
+
+xboard/WinBoard 4.2.2 -- Tue Feb  6 20:00:00 PST 2001
+Tim Mann
+
+* Fixed a problem introduced in 4.2.1.  In -zippyPlay mode, 4.2.1
+started sending the initString immediately after the old game ended,
+but then when the next game started, it would still send "force" and
+another initString.  Another problem was that the first initString put
+the engine out of sync with the displayed board position, though that
+might not usually have been noticeable.  This is now changed to do a
+full Reset at the end of the previous game, and avoid doing a Reset at
+the start of a new game if we are still in BeginningOfGame mode.
+
+* Fixed some limitations in -zippyPlay mode.  The engine was not being
+fed the moves or history of games that were displayed but not being
+played, so it would get confused if you tried to do something like
+examine a game, then enter EditGame mode from somewhere in the middle
+of the game.
+
+* Made a small change so that cygwin can compile xboard for Windows
+(an X server is required to run it).  Thanks to Volker Zell.  Most
+people would probably prefer to run WinBoard on Windows, however; note
+that cygwin could already compile WinBoard.
+
+* Added some missing documentation to engine-intf.html: It is okay to
+send "feature done=0" even before you receive the xboard and protover
+commands, if this is needed to give your engine enough time to
+initialize.  See engine-intf.html for more discussion.
+
+* Bugfix: "feature done=0" did not work for the second engine; now it does.
+
+xboard/WinBoard 4.2.1 -- Sat Feb  3 19:52:26 PST 2001
+Tim Mann
+
+* Bugfix: in Zippy mode with feature san=1, the elapsed time was being
+sent to the engine after the SAN move; for example, "e4 (0:01)" was
+sent instead of just "e4".
+
+* It seems that scroll wheel mice with incompletely installed software
+(under Windows 95, at least) can send repeated middle button up events
+when the wheel is turned.  Moved QuickPaste from middle button up to
+middle button down to avoid problems with this.
+
+* A premove is now sent *before* the opponent's move that it replies
+to is animated.  The premove itself is no longer displayed (or
+animated) when sent; instead, it is displayed when the chess server
+echoes it back as a board update.
+
+* Bug fix: in -xreuse mode, xboard was only sending command line
+arguments to the engine the first time it was started.  (WinBoard
+didn't have this bug.)
+
+* In -zippyPlay mode, we now initialize the chess engine for a new
+game immediately after the old game ends.  (In -xreuse mode, this
+means starting a new engine process; in the default -reuse mode, it
+just means sending "new".)  If the engine supports ping, we don't
+accept challenges until the "new" has finished.  This should help
+avoid losing time (re)initializing the engine after the game starts.
+
+* We now handle the new FICS field in style 12 that says whether the
+clocks are ticking.
+
+* whiteFlag and blackFlag are now reset whenever an ICS board image
+arrives, giving autoflag a fresh chance to work.
+
+* Suppressed "geometry error" debug messages unless -debug flag is given.
+
+* Bugfix: avoid core dump on Solaris with -debug flag, caused by
+passing NULL to a %s format in GameEnds.
+
+* Added -firstProtocolVersion and -secondProtocolVersion.  This will
+allow use of extremely broken engines that hang or die when given the
+"protover 2" command.  It should be rarely if ever needed.
+
+* Zippy now strips highlights from player names in the Creating
+message; previously the ratings would not be extracted from this
+message properly if you had set the highlight variable.
+
+* Bug fix: Zippy with -zp but not -zt used to be fooled by false
+partner tells inside channel tells; e.g.: 
+Garf(24): Garf (your partner) tells you: sit
+
+* Bug fix: when an engine reported its name with the new "feature
+myname=" command, we had been putting just that name into the window
+title even when in TwoMachines mode.
+
+* By default, WinBoard no longer uses the new feature introduced in
+4.2.0beta of keeping the ICS menu, ICS server list, and lists of chess
+engine command lines in separate files; instead, the lists are back in
+the winboard.ini file.  This gets rid of some problems where the
+separate files could not be opened because the working directory was
+not set to WinBoard's installation directory.
+
+* WinBoard command lines and ini files now have another optional
+syntax for quoting an option value.  All characters within { } curly
+braces are interpreted literally except for '}' itself.  SaveSettings
+now uses this syntax for string values that contain a backslash or
+newline and do not contain a '}'.  This should address the problem
+that the separate .ini files had been meant to fix; engine command
+line lists can now be written without \-escapes.
+	
+* Fixed three bugs in relaying moves between engines in TwoMachines
+mode: an engine would be sent SAN if the *other* engine had set
+feature san=1, a relayed SAN move did not end with a newline, and
+feature usermove was not implemented for relayed moves.
+
+* Fixed several bugs in exiting: File/Exit would sometimes hang;
+timestamp/timeseal would not get killed off; an engine crash would
+cause error messages to be printed recursively until stack overflow.
+
+* Fixed a bug in the code to detect which ICS is in use and adapt to
+it; the chess.net case was broken.
+
+* Removed the leading alias-suppression character when sending a move
+to ICS, because it seemed to break accuclock on chess.net.
+
+* Fixed a bug where a FICS prompt like "10:01_fics%" would be matched
+as finger note number 10, causing a problem detecting when the user is
+logged in.
+
+* Added tellicsnoalias command to protocol.
+
+* Changed st command in protocol back to old behavior.
+
+* Added done=0 feature to protocol, to lengthen initial timeout.
+
+* Added missing -colorSeek command line option to xboard.  (Was
+present in WinBoard.)
+
+* Bug fix: setting feature reuse=0 was not working.
+
+xboard/WinBoard 4.2.0beta -- Sat Dec 16 16:34:56 PST 2000
+Tim Mann
+
+* Setting -searchTime no longer turns off -clockMode.  Note that when
+-searchTime is set, some engines may search for the lesser of
+searchTime and the amount of time their normal clock management would
+dictate, while others will disable their normal clock management and
+always search for exactly searchTime.
+
+* Fixed WinBoard bug where on Windows 2000 (and maybe Windows 98) the
+ICS Interaction window would scroll back to the top whenever it filled
+to capacity and WinBoard trimmed some text off the top.
+
+* Changed xboard dragging so that the center of the dragged piece is
+forced to be over the mouse cursor.  (WinBoard dragging already worked
+that way.)  This should avoid confusing cases when you start a drag
+with the mouse near the edge of a square -- formerly most or all of
+the piece could be over one square but the mouse cursor over another.
+Suggested by DAV.
+
+* Added move list window for xboard.  Code contributed by Manuel
+Hoelss and re-hacked a bit by me.  Performance of this window is poor,
+because the implementation regenerates the entire window contents
+whenever anything changes.  It's hard to avoid this when using the
+Athena List widget, though we could be a little smarter and notice
+when the current move number has changed but the move list has not.
+There are also several drawing problems caused by bugs in the Athena
+Form and List widgets.  The window should not really allow a
+horizontal scroll bar, but the bugs are much worse if I turn it off.
+In both Xaw and Xaw3d, the List widget tries to resize itself when
+XawListChange is called, even if you tell it not to; and what's worse,
+if the widget cannot resize itself to be large enough to avoid
+clipping any of the list item, it does not change the list!  Arrgh.
+On top of that, the Xaw Form widget is very buggy in XFree86 4.0.1
+(X11R6.4.3).
+
+* The OK button in the WinBoard startup dialog is now simply disabled
+if none of the radio buttons is selected, instead of bringing up an
+error dialog.  Suggested by Ted Milbaugh.
+	
+* Used ping to address the worst of the race conditions in the
+protocol.  Now if an engine supports ping, we ping it after sending
+the "new" command and after trying to place it in force mode at the
+end of a game.  When a ping has been sent and the corresponding pong
+has not yet come back, we (1) ignore or undo any moves the engine
+sends, (2) ignore game end messages (such as "offer draw", etc.) from
+the engine, (3) ignore thinking output from the engine, (4) delay
+starting the next game if in -matchGames mode, (5) in -zippyPlay mode,
+respond to challenges with a polite message to try again soon instead
+of accepting them.  There are a few more things that should be done
+(and item 5 might not be quite what we want), but it's hard to fit
+them all into the existing code.
+	
+* Patched the version of GNU Chess 5.00 included with WinBoard to
+support protover, feature, setboard, and ping, and to fix some minor
+bugs.  See gnu500+.patch.
+
+* Changed the GNU Chess 4 kludges for missing "st" and "sd" commands
+to be invoked only if the engine gives an error message for "st" or
+"sd", and to always use protocol commands instead of engine
+command-line options.  See "Idioms" in engine-intf.html.
+
+* Added new protocol command "protover 2" to tell the engine what
+version of the protocol is in use.  Version 2 is still compatible with
+old engines; see engine-intf.html.
+
+* Add new protocol command "feature ..."  The engine can send this in
+response to the protover command command, to say what extended
+protocol features it would like to enable, etc.  xboard responds
+"accepted F" or "rejected F" for each feature F that is set.  See
+engine-intf.html.
+
+* Added new protocol command "setboard <fen>".  This is an alternative
+to "edit", used only if the engine says "feature setboard=1".
+
+* Added new protocol command "ping <msg>".  The engine is supposed to
+respond "pong <msg>".  This gives us a tool to fix some race
+conditions in the protocol, but it is not used to the fullest yet.
+
+* Added new protocol command "tellopponent".  This will do a "say" if
+you're on a chess server in Zippy mode, or pop up an information
+dialog otherwise.
+
+* Added new protocol command "tellall".  This will do a "kibitz" if
+you're on a chess server in Zippy mode, or pop up an information
+dialog otherwise.
+
+* Added new protocol command "tellothers".  This will do a "whisper" if
+you're on a chess server in Zippy mode, or do nothing otherwise.
+
+* Changed the WinBoard /icsNames, /icsMenu, /firstChessProgramNames,
+and /secondChessProgramNames options to accept a filename preceded by
+"@", meaning to find the value in the file.  Changed the defaults to
+use this feature, with filenames icsnames.ini, icsmenu.ini, fcp.ini,
+and scp.ini.  This should make it easier for users to edit the values,
+since one less level of quoting is needed, and each value is in its
+own file, not mixed into winboard.ini.  Those who upgrade from an
+older winboard version and already have a winboard.ini file will not
+automatically have these values moved to a file; that has to be done
+by hand if desired.
+
+* We now strip .exe from engine names for "name" command, tags, etc.
+
+* Allowed WinBoard input widget to hold more than one line.  You can get
+a newline into the widget with copy/paste or with Ctrl+Enter.
+
+* Fixed an xboard bug where the [P] button would appear in the
+opposite highlight state from what it should be after being pressed.
+
+* We now use the "/" or "$" alias suppression feature on the chess
+servers, to avoid problems if the user inadvertently aliases a
+needed command to something else.
+
+* Changed the method used to deiconize xboard in AutoRaise and cmail.
+This may fix bugs under some window managers where after
+deiconization, the board window was mapped but nothing was drawn
+inside.
+
+* Preliminary, partial support for playing several chess variants
+against a local engine or editing variant games.  The -variant option
+must be given on the command line or WinBoard startup dialog; there is
+no menu.  The current variant is not displayed (except in the
+Tags/EditTags window).  Many variants will not work quite right even
+if the engine supports them; see item 326 in the ToDo file for
+details.
+
+* Added a workaround to detect the variant type when examining a
+scratch wild game on an ICS.
+
+* Fixed two cases where "variant" command should be sent to the engine
+when necessary but was not: loading a game from a file and restarting
+a dead engine.  Thanks to Gian-Carlo Pascutto.
+
+* Added missing support for FICS games that start from a bsetup position
+with Black moving first.
+
+* Fixed a bug in loading a file from the game list window while in
+Analysis or AnalyzeFile mode.  This now leaves us in AnalyzeFile
+mode, analyzing the new file.
+
+* Fixed a bug in loading games with a comment before the first move.
+
+* Fixed a bug in handling LoadGame (or -lgf) with -td 0.
+
+* Added a command line option to select an initial minor mode from the
+Mode menu.  This should satisfy requests from a couple of users with
+special applications.
+
+* Fixed a problem where some things in WinBoard's General Options
+dialog box were grayed out at the wrong time.
+
+* We look for a few messages from the chess engine pipe that are
+intended to catch problems starting an engine via rsh, such as "No
+such file".  Moved code so that these strings won't match until other
+protocol messages have been looked for, and documented the messages in
+engine-intf.html.
+
+* Fixed the WinBoard bug that sometimes made the console input box
+white-on-white even when not in password-entry mode.
+
+* Small changes to WinBoard to be compilable with the latest Cygwin
+net release (as of 10-16-2000).  Thanks to Mark Schoenberg.
+
+* Recompiled GNU Chess 5.0 for WinBoard with the latest Cygwin net
+release (as of 10-16-2000).  Also rebuilt the book just to be sure,
+since I had one bug report about it.  It came out identical and seems
+to work fine.
+
+* Added messages for some common InstallShield errors instead of just
+printing InstallShield's stupid error code numbers.
+
+* Added -firstComputerString and -secondComputerString, allowing you
+to suppress or change the command that is sent to a chess engine when
+its opponent is another computer.
+
+* Added "configure --with-Xaw3d" to allow use of Xaw3d widgets instead
+of Xaw widgets in xboard.  Thanks to Johnny C. Lam of the NetBSD
+project.  I've left Xaw as the default because Xaw3d is too ugly.
+	
+* The version of the Xaw Form widget released in XFree86 4.0.1
+(X11R6.4.3) has a bug that causes xboard to display the button bar
+on top of the message widget.  I've reported the bug and have
+installed a kludge workaround into xboard.
+
+xboard/WinBoard 4.1.0 -- Sun Sep 17 17:30:14 PDT 2000
+Tim Mann
+
+* Merged Winboard Plus 4.0.8 from Mark Williams into xboard
+  source pool.  Status of Winboard Plus features in xboard:
+
+  - White pieces now have borders, but the implementation is
+    completely different from WinBoard's; see below.
+
+  - Options menu not changed, probably won't be.
+
+  - Copy&paste support working, using Mark's changes to backend.c, Ben
+    Nye's changes to xboard.c for FEN positions, and some code of my
+    own in xboard.c for PGN games.
+
+  - Premove hooked up and working.  No pre-first-move, though.
+
+  - ICS Alarm hooked up and working.
+
+  - Auto-flip working.
+
+  - PGN Training mode hooked up and working.
+
+  - Improved menu item enable/disable working.
+
+  - Improved >> button working.
+
+  - Auto activate board working.  I changed this to be optional; you
+    might not always want it, especially in Zippy mode.
+
+  - Blindfold working.
+
+  - Documentation updated.
+
+* Fixed more colorization bugs.  Commands like "message foo tells you:
+xxx" and "tell 33 tells you: xxx" will no longer generate bogus
+colorization.
+
+* Added low-tech sound support to xboard, by invoking an external
+program on a filename for each sound to be played.
+	
+* ICC wild 27 is now recognized as VariantAtomic, and it sets the
+"ignore check" flag, but is not otherwise supported.
+
+* Converted the piece bitmaps from .bm to .xpm for use with xboard's
+xpm support.  (An .xim version was not created.)  Wrote a shell script
+using ImageMagick to do the conversion and to bucket fill from
+coordinate 0,0 with the background color.  Used xpaint by hand to
+clean up a few pieces where background color "leaked" into the inside
+or didn't flow all the way around the outside, then a sed script to
+fix up color names and bitmap names in the xpaint output.  If any more
+sizes are added later, they should be straightforward to convert with
+reference to the existing scripts.  With this conversion, not only do
+the white pieces now have dark borders, but (unlike with WinBoard) the
+light details on the black pieces are opaque.
+
+* If the XPM library is found when building xboard, the new xpm pieces
+are compiled in as the default.  External bitmap (or xpm) pieces can
+still be used by giving the -bitmapDirectory (or -xpmDirectory)
+option.  If the XPM library is not found, the old bitmap pieces are
+the default.  In this case external bitmap (or xim) pieces can be used
+by giving the -bitmapDirectory (or -xpmDirectory) option.  There is no
+way to compile in xim pieces.
+
+Winboard Plus 4.0.8 -- Sat Aug 5 15:51 PDT 2000 
+Mark Williams
+
+* Bugfix release.
+
+* Main menu now visible in Win NT.  Thanks to Microsoft for creating a 
+compiler which auto-mutilates the WinBoard.rc file so that the menu is
+displayed under Win 98 but not Win NT.  I fixed the problem by hand editing the
+.rc file.  Sigh.
+
+* "Reset game" now works properly when invoked from Analysis mode when two
+engines are present. Correction of bug introduced in Winboard Plus. Thanks to
+Mogens Larsen for reporting the bug.
+
+* Pasting a FEN position with Black to move now works in all modes.
+Thanks to Mogens Larsen for reporting the bug.
+
+* Added gnuchess.dat to the distribution and a couple of text files that were
+missing in 4.0.7.
+
+*** Merged in the following changes from Tim Mann:
+
+* Bugfix: Highlights would sometimes not be taken down, at least in
+xboard.  The problem is that SetHighlight works in chess coordinates,
+not view coordinates, so if flipView has been toggled since the
+highlight was put up, it gets taken down from the wrong square.  Fixed
+by being careful to call ClearHighlights before toggling flipView, not
+after.  Ugh.
+
+* Bugfix: HighlightLastMove would sometimes highlight square a1 after
+a FICS "tomove black" command.
+
+* Bugfix: a move list with initial position that has black to play was
+not being handled correctly.
+
+* Removed "decline abort" and "decline adjourn" commands from Zippy.
+The syntax is changing on FICS, and Zippy really doesn't have to
+explicitly decline the requests anyway; it's sufficient to not accept
+them.
+
+* ICC wild 26 is now recognized as VariantSuicide (the FICS name; ICC
+calls it "giveaway").
+
+* Bugfix: PGN games with black to move in the initial position weren't
+being legality checked correctly.  I think this was introduced in
+4.0.6 when I fixed a different PGN bug.  Thanks to Mark Williams for
+spotting the bug and suggesting a fix.
+	
+* Bugfix: the initial "name(" of a kibitz wasn't being colorized.
+
+Winboard Plus 4.0.7 -- Thu May 12 17:57 PDT 2000 
+Mark Williams
+
+* New white pieces with black borders.
+
+* Major overhaul to Options menu. New dialogs for setting General Options,
+  Board Options, ICS Options, Sounds, Fonts, Colors.
+
+* Clipboard support for PGN game scores and FEN positions.
+
+* Optional ICS Premove with user-specified first moves for White and Black.
+
+* New sound events: ICS Win, ICS Loss, ICS Draw, ICS Unfinished, ICS Alarm.
+
+* New auto-flip option when playing against a chess program.
+
+* Added PGN Training mode.
+
+* Certain menu options now disabled while program is thinking.
+
+* ">>" button now always goes to the end of the game.
+
+* In ICS mode, the board is automatically activated at the start of a
+new game.
+
+4.0.7 -- Sun Mar  5 17:17:49 PST 2000  Tim Mann
+
+* Fixed a nasty bug in parsing ICS game histories that was introduced
+in 4.0.6.
+	
+4.0.6 -- Fri Mar  3 16:20:11 PST 2000  Tim Mann
+
+* Fixed bugs in Zippy's code for responding to messages sent with the
+ICS "message" command.
+	
+* Fixed bugs where xboard could still create dialogs partially off the
+top of the screen.  Fixed unwanted interactions between initial sizes
+and positions of various unrelated xboard dialogs.  Deleted
+borderXoffset and borderYoffset resources.
+
+* Fixed restoring the xterm name on exit to work in more cases.
+	
+* Small fix to the WinBoard self-extracting installer: when it starts
+up, it now always deletes any old wb-setup directory left over from a
+previous installation.  Formerly this worked only on Windows 95/98, so
+on NT the self-extractor would sometimes stop and ask the user whether
+it was OK to overwrite the old wb-setup files.
+
+* Modified WinBoard to be compilable with the free Cygwin tools
+available from http://sourceware.cygnus.com/cygwin/.  Based on work by
+Mark Schoenberg.  (His mods were enough to get WinBoard through the
+compiler, but a few things were broken along the way, so I reworked them.)
+	
+* Merged changes from Don Fong to make WinBoard compilable with
+Borland C++ 4.5.  I do not have Borland C++ and am unable to test with
+it, but I did make sure the changes don't stop it working with MSVC++
+5.0 and Cygwin.
+
+* Forbade entering TwoMachines mode from MachineWhite or MachineBlack
+mode when machine is on move.  This used to confuse the engine and
+cause problems, because when we try to get the engine to stop, it
+might make a move first, and it might not do that immediately.
+	
+* Variant classification now deals with new ICC wild 25, classifying
+it as "3check".  Also, we are now conservative about new wild numbers
+we don't know about, classifying them as "unknown" instead of
+"normal".
+
+* Replaced bad GNU Chess 5.00 book in WinBoard distribution with a
+correct one.  1.e4 now no longer takes GNU Chess 5.00 out of book!
+Thanks to Pete Galati.
+
+* Made move parser accept and ignore nonstandard ep suffix on PGN moves,
+e.g., "exf6ep" or "exf6e.p."
+
+* Fixed bugs in parsing PGN files starting with no move number, or
+with a move number other than "1." (including "1...").  Thanks to
+Michael Soulier and Stefan Zipproth for example PGN files
+demonstrating the bugs.
+	
+* Changed InitComboStringsFromString to not modify the input string;
+this caused an exception when WinBoard was compiled with MSVC++ 6.
+Thanks to Bert Tuyt for the report.
+
+* In WinBoard, dragging a piece off the edge of the board without
+releasing the mouse button no longer instantly aborts the move.  You
+still must release the mouse button inside a square to complete a
+move, but you can now drag off the edge and come back inside.
+	
+* WinBoard bugfix: If you went into EditGame or EditPosition mode
+while observing or playing an ICS game, and a new move came in
+(snapping you back to ICSClient mode) while you were dragging a piece
+around, the drag state would not be reset, causing the piece you were
+dragging to remain on the board wherever you dropped it.  Thanks to
+David Brinegar for the bug report.
+
+* WinBoard bugfix: If you moved or resized the board while your
+opponent was moving, and you had AnimateMoving on, his move would not
+be displayed until after your next move.  Thanks to DAV for reporting
+the bug repeatedly until I finally understood it.
+
+* Added a Zippy "farewell" feature; see zippy.README.
+	
+* Fixed a bug (xboard only) in processing -zippyReplayTimeout on the
+command line.  Thanks to Steve Beer for the report and patch.
+
+* Send "computer" command to both sides in TwoMachines matches.
+	
+* Fixed a Y2K bug in Evan's cmail code!  Thanks to Brian Mays for the
+report and patch.
+	
+* Bugfix: Initialize variant field of GameInfo struct in gameinfo.c.
+This could cause crashes in LoadGame.  Thanks to Andrzej Nagorko.
+	
+* Fixed several pattern matching problems: Finger notes and formula
+vars no longer get replied to by zippyTalk or colorized.  Channel
+tells by players with many titles are now colorized fully, and
+zippyTalk handles channel tells by such players correctly.  The shout
+"--> foo(99): bar" no longer gets colorized as a channel tell.  Code
+is cleaned up a bit, and autocomment capture now uses the same
+criteria as colorization.
+
+* xboard fix: Enter key now closes error popups as in WinBoard.
+Especially nice for the "Exiting: Connection closed by ICS" popup.
+
+4.0.5 -- Tue Dec  7 10:30:40 PST 1999  Tim Mann
+
+* Added missing documentation of SIGTERM usage into engine-intf.html.
+
+* Bugfix: New -zippyReplayTimeout option was misspelled in WinBoard as
+-zippyReplyTimeout.  Thanks to Francesco Di Tolla.
+	
+* xboard -ics now restores the xterm's original title upon exit, at
+least if $WINDOWID is set.
+
+* Bugfix: -matchGames mode wasn't terminating properly.  Final score
+popup would come up twice and engines would not be killed off.  Thanks
+to Frank Quisinsky for the bug report.  Bug was introduced in 4.0.4.
+
+* Bugfix: "tell 50 foo shouts: bar" no longer gets colored as a shout;
+similarly for "...s-shouts:" and "...c-shouts:".  Thanks to David Lee
+for the bug report.
+
+4.0.4 -- Fri Dec  3 17:51:27 PST 1999  Tim Mann
+
+* Bug fix: formerly if you invoked SaveGame from EditPosition mode
+with black to play, the position was not saved properly.  As a quick
+fix, SaveGame now takes you out of EditPosition mode before saving.
+
+* Changed -matchGames to keep track of the score (won-lost-drawn) and
+display it in the banner.  The final score is displayed in a modal
+popup before the program exits.
+
+* Changed "Connection closed by ICS" to display in a model popup
+before the program exits.
+
+* Added -popupExitMessage option, default on.  Setting this to false
+suppresses the modal popups that you sometimes get just before
+xboard/winboard exits -- both the two new ones listed above and the
+existing Fatal Error popup.  This is useful when running Zippy
+unattended from a shell script (or .bat file) that loops and starts a
+new copy after a time delay when there is an error.
+
+* In xboard, added missing support for WM_DELETE_WINDOW to all
+windows.  This makes xboard a better citizen, and is much needed with
+the newer X window managers that put an [X] button on every window and
+bind it to "kill application" if the applicationd does not support
+"delete window".  We can't allow xboard to be thoughtlessly killed,
+since that leaves the chess engine running in the background.
+
+* We now avoid positioning tops of xboard dialog boxes offscreen.
+
+* zippy.lines can now use the caret ('^') character as an inter-saying
+separator. You no longer need to dig up a text editor that can put NUL
+('\000') characters in text files.
+
+* Bugfix: In traditional chess clock mode, White now gets time added
+to its clock as soon as it makes time control.  Previously both White
+and Black got their time added only when Black made time control,
+which would cause some engines to make their 41st move as White too
+quickly, thinking they were low on time.
+
+* The zippyAcceptOnly feature no longer sends a decline command or
+a tell.  Thus you can use it to put Zippy into a manual accept mode.
+
+* Bugfix: "tell 50 foo tells you: bar" no longer gets colored as a
+personal tell; similarly for "...whispers:" and "...kibitzes:".
+
+* WinBoard no longer blanks the message line when you start a new
+move, unless there was an error message there from the previous move.
+
+* WinBoard now never puts the white piece drop menu on the middle
+mouse button.  Both colors are always on the right button.  Windows
+users often don't think to look for a middle button menu, or don't
+really have a working middle button despite what Windows says.
+
+* Guest login handles on ICC are now parsed again; an ICC wording
+change had broken this feature.
+	
+* Autodetect when the engine does not support the "draw" command and
+don't relay the command to it in that case.  Needed because sending an
+unsupported command to GNU Chess makes it move immediately, so people
+could make Zippy move without thinking by continually offering a draw.
+Thanks to Frank Walker for the problem report.
+
+* Small changes based on code from Robert Jurjevic: The WinBoard
+analysis window can be minimized (though not to the taskbar).  The
+WinBoard ICS Interaction window will autoscroll if you drag the mouse
+above or below the window while selecting, and password entry mode
+leaves the entry line as the background color instead of using 75%
+gray.  Seeks are now colorized with a new color of their own.
+
+* Added -zippyMaxGames feature.
+	
+* -zippyNoplayCrafty command line option was missing in xboard; fixed.
+Thanks to John Perry.
+
+* Fixed bug in detecting when Zippy loses his bughouse partner.
+Thanks to Ben Dean-Kawamura.
+
+* allobs fix in 4.0.3 didn't work; corrected it.
+
+* WinBoard will now update the board immediately if a move is made
+while the window is being moved or resized.
+	
+4.0.3 -- Sun Aug 15 18:44:39 PDT 1999  Tim Mann
+
+* Bugfix: moved winboard wizard functions that send a command directly
+to the chess engine from Ctrl+Alt+1 and Ctrl+Alt+2 to Alt+1 and Alt+2.
+Ctrl+Alt is equivalent to the European AltGr key, so the old assignments
+conflicted with typing an @-sign on some keyboards.
+	
+* Bugfix: prevent "If this message stays up, your chess program does
+not support analysis" from appearing if AnalysisMode is selected when
+already in Analysis or AnalyzeFile mode.  Also, deleting analysis window
+in WinBoard now switches you to EditGame mode, to avoid the anomaly of
+being in an analysis mode with no analysis window present.
+	
+* Change all Zippy environment variables to work as command line
+options.  For now they still work as environment variables too, but
+the environment variables are deprecated.
+
+* Use unsigned long to hold node counts from engines.
+
+* Print error instead of crashing on attempts to use xpm or xim pieces
+in monochrome mode.  Thanks to Jim Torrance for the bug report.
+
+* Tightened pattern recognition for ICS messages sent to Zippy; should
+no longer match ICC allobs output.  Fixed recognition of when Zippy is
+sent a message; small change to FICS output had broken it.
+	
+* Zippy now exits if the engine dies unexpectedly.
+
+* Added Zippy "spoofedby" feature; see zippy.README.
+	
+* Narrowed the margins on some older WinBoard dialogs to make their
+style uniform with the newer ones.
+
+* Bugfix: Changing Ponder Next Move from the Options menu did not take
+effect until the next game.  This bug was in WinBoard only.  Thanks to
+Stefan Zipproth for the bug report.
+
+* Got rid of "Internal error: bad move type" message when the engine
+makes a move that we can parse but think is illegal.  Now the move is
+just passed on (which also may be the wrong thing to do).
+
+4.0.2 -- Thu Feb 25 19:55:32 PST 1999  Tim Mann
+
+* Added one more built-in sound choice to WinBoard: move.wav from Pete
+Galati.
+	
+* Added new larger piece sizes: big, huge, giant, colossal, titanic.
+	
+* Modified the xboard font searcher to be able to use scalable fonts.
+The new -fontSizeTolerance flag controls how closely a nonscalable
+font must match to be used in preference to a scalable font.
+	
+* Zippy environment variables ZIPPYABORT and ZIPPYADJOURN now control
+whether Zippy will accept abort and adjourn requests.
+
+* We now determine the variant type being played on ICS, send it as a
+command "variant VARTYPE" to the chess engine (if in Zippy mode), and
+put it in the PGN tags.  See engine-intf.txt for variant names.  See
+ZIPPYVARIANTS in zippy.README to control what variants Zippy will
+accept.  Note that this now applies to bughouse, too.
+
+* Zippy now won't do -zippyTalk in a channel unless his handle is
+mentioned there.
+
+* Zippy now ignores bughouse holdings if not actually playing, instead
+of stupidly trying to abort the game.  Let me know if other strange
+things happen when Zippy is observing a game.
+
+* Set ICS Interaction title bar to "user at server".  User name is
+determined by parsing message during the login sequence.  Zippy now
+uses this method to get its name too, so ZIPPYNAME is eliminated.
+Problem: with xboard, the title bar gets set to "xterm" upon exit,
+since we didn't know what it was to start with.
+
+* Fixed xboard-only bug in -colorChannel1 command line option.  Thanks
+to Fredrik Sandstrom for the bug report and fix.
+
+* Check for overflow of MAX_MOVES.  Still not sure this is checked for
+everywhere it needs to be.
+
+* Added .epd to suffixes recognized by WinBoard as position files.
+This is a bit of a kludge, as the .fen reading code was not written
+with .epd files in mind, but reading them with it is said to work.
+
+* Added ZIPPYGAMESTART feature, suggested by Jason Hoblit.  See
+zippy.README.
+
+* Restored the feature of soaking up the moves from a user-typed "moves",
+"oldmoves", or "smoves" ICS command when xboard/WinBoard is idle, but
+changed it so that the move list is also echoed to the screen.  Some folks
+still liked the old feature since it is faster than examine mode, and
+printing the moves to the screen should eliminate the confusion it caused
+for other people.
+
+* Bugfix: in WinBoard, starting a click-click move and then clicking on
+a black line would cause the source square to be forgotten without taking
+the highlight down.  Now the errant click is ignored.
+
+* Corrected shortcut key labels for LoadNext/PrevPosition in WinBoard's
+File menu.  Thanks to Andreas Stabel for the bug report.
+
+* Bugfix: if you had a completely full ICS context menu in WinBoard
+(90 items), the last one would do nothing if selected.
+
+* The "computer" engine command added in 4.0.1 was not working; I had
+left out part of the code patch.  Oops.
+
+4.0.1 -- Fri Feb 12 21:24:15 PST 1999  Tim Mann
+
+This is a minor bugfix release.  The first item listed below is the
+only interesting new feature.
+
+* You can now type in moves from the keyboard in WinBoard.  Either
+select TypeInMove from Step menu, or (if you are not in ICS mode),
+just start typing.  In ICS mode you can type moves into the ICS
+interaction window anyway, so I've retained the feature that typing
+switches you there.  Not implemented in xboard.
+
+* Removed the "noise 1000" command that used to be sent to the chess
+engine when entering analysis modes.
+
+* Deleted the feature where we soak up the output of a user-typed ICS
+"moves" or "oldmoves" command.  This ancient feature is not really
+useful anymore, now that "examine" exists, and it caused a lot of
+complaints.
+
+* Increased maximum size of ICS text menu to 90 entries and added
+overflow checking.
+
+* The command sent to ICS by Zippy at the end of each game can now be
+customized with the ZIPPYGAMEEND environment variable.
+
+* We treat xboard.info as a pseudo-source since most people don't have
+the tools to rebuild it.  But "make install" erroneously had a
+dependency on it, even though "make all" did not.  Fixed.
+
+* Miscellaneous minor updates and clarifications to engine-intf.txt.
+In particular, documented the st and sd commands (support for command
+line options -searchTime and -searchDepth), warts and all.
+
+* Added a small code patch from Bob Hyatt to detect when Zippy's ICS
+opponent is a computer and send the command "computer" to the engine.
+Added this command to engine-intf.txt.  Thanks, Bob.
+
+* Bugfix: configure was looking for usleep(), but config.h.in didn't
+have an entry for it, so HAVE_USLEEP was never defined.  Also, in the
+non-HAVE_USLEEP case, there was a possible race condition between the
+signal handler and the pause() call.  Thanks to Ben Dean-Kawamura for
+the bug reports.
+
+* Bugfix: a "1..." preceding Black's first move (usually present if
+there is a comment on White's first move) would cause the parser
+to think a new game started there and report "End of game" on the
+current game.  Thanks to Dell Garner for the bug report.
+
+* Changed the abbreviation for -searchDepth from -sd to -depth to fix
+a clash with -secondDirectory.
+
+* Changed -searchDepth to be orthogonal to the various timing options.
+Previously it would search for an unlimited time to the given depth;
+now the engine is allowed to choose its search time in the normal way,
+but is told to cut off the search early if it reaches the given depth.
+
+* Bugfix: SaveSettings in WinBoard was saving both the long form
+option highlightSquareColor and its abbreviation (hsc).
+
+* Fixed a redisplay bug in DisplayBothClocks that could cause White's
+clock to be highlighted in EditPosition mode when Black's should have been.
+
+* Fixed Zippy's feature of passing on draw offers from the ICS opponent.
+The colorization code was eating the offer before Zippy saw it, so I disabled
+colorization of offers while in -zp or -zt mode.  (Other types of
+colorization are already disabled in Zippy mode for similar reasons.)
+
+* Added some more commands to the default ICS context menu in WinBoard,
+and put "(name)" on the ones that insert a playername (or game number).
+
+* Added missing documentation to WinBoard help file: PonderNextMove, the
+-ponder/-xponder argument, and the up/down arrow history feature in the
+ICS Interaction window.
+
+* Fixed	ZIPPYNOPLAYCRAFTY feature to fire only if the opponent is Crafty,
+not if some other Crafty is observing the game and kibitzes.
+
+* Fixed bugs in generating "partner" commands when Zippy is playing
+bughouse.
+
+4.0.0 -- Sat Jun 20 16:59:47 PDT 1998  Tim Mann
+
+* Fixed WinBoard resizing so that the edges you do not drag remain in
+place, even when the final size is different from what you dragged to.
+(This doesn't work on NT 3.51 or earlier, if anyone cares.)
+
+* Fixed problems with resizing WinBoard on Windows NT: you no longer get
+whitespace around the board, a clipped board, or a lot of flashing during
+the drag.
+
+* Added customization for highlight-square color.
+
+* Bugfix: backend.c wrote to stderr in a few obscure places, which doesn't
+work in WinBoard.
+
+* Added Index Number field back to LoadGame/LoadPosition dialog boxes in
+WinBoard.  This required some extra code to work with both the
+Explorer-style dialog boxes and the old-style NT 3.51 dialog boxes.  Ugh.
+
+* WinBoard startup dialog now understands -zp mode.  The first chess
+engine selector is enabled and the value is used.
+
+* Bugfix: ResetGame would send "exit" to engine twice if it was in an
+analysis mode.
+
+* Bugfix: The response "Illegal move: bk" to the "bk" command, indicating
+that it is not implemented, would confuse xboard.
+
+* Bugfix: Ignore empty hints ("Hint:\n") instead of printing a message
+saying that some bogus string (often "Hint:") is illegal.
+
+* Bugfix: LoadNextGame/LoadPreviousGame/ReloadSameGame were broken.
+
+3.6.12 -- Sat Jun 13 14:57:10 PDT 1998  Tim Mann
+
+Beta test release of xboard and WinBoard.
+
+* Spruced up xboard man page a bit.
+
+* Added Highlight Last Move to xboard too.
+
+* The revamped xboard mouse click code had several more bugs than the
+previous version, so I revamped it again.  All fixed now, I hope.
+
+* xboard bugfix: crash in CreatePieceMenu.
+
+* Oops.  winboard-3_6_11beta.exe installed 3.6.10beta, not the new version.
+
+3.6.11 -- Fri Jun 12 20:00:48 PDT 1998  Tim Mann
+
+Beta test release of xboard and WinBoard.
+
+* Major reorganization to engine-intf.txt.  Some new features added,
+many existing features clarified and hints for engine programmers added.
+Support for new features added to program.
+
+* Changed defaults for -scp (etc.) back to being independent of -fcp, as
+in 3.6.2. That is, the default is no longer to copy the value from -fcp if
+-scp is not specified.  This will sometimes make command lines longer but
+will remove some confusing situations.
+
+* Split -reuseChessPrograms into two options: -reuseFirst and
+-reuseSecond.  Fixed obscure bugs when reuse is off.
+
+* Detect ICC and change some command usage slightly there: only ICC has
+set-quietly; only FICS has iset and bsetup clear.  With this feature, we
+can now safely use bsetup clear when appropriate instead of deleting each
+piece one by one.
+
+* Added indent to lines that are wrapped by WinBoard ICS Interaction
+window.  This seems to tickle a Microsoft bug in the RichEdit control:
+occasionally the start of the next line after the wrapped line is indented
+too.  I think the wrapped indent feature is useful enough that it's worth
+having in spite of the bug.
+
+* WinBoard bugfix: bounding box for the board was computed incorrectly by
+mouse code.  It would think you moved off the bottom of the board before
+you really did, so it was hard to drag pieces along the bottom rank on
+smaller board sizes.
+
+* Fixed obscure parser.l bug: ambiguity between capture using : instead of
+x and email header line.  Also removed or simplified a lot of complex
+patterns for English (as opposed to PGN) end-of-game indications while I
+was in there.
+
+* Added PonderNextMove option.
+
+* xboard EditPosition piece menus now let you set the side to play by
+selecting the "White" or "Black" label at the top of the menu, like
+WinBoard.  (Both xboard and WinBoard still let you set the side to play by
+clicking on the clock.)
+
+* Merged documentation of Crafty and GNU Chess thinking output in
+engine-intf.txt.  Corrected code in backend.c to match documentation; it
+used to require the PV to start in column 27 (!).
+
+* Fixed bug that caused crashes in "-reuseChessProgram false" mode.
+
+* Draw by agreement in Two Machines mode now works as it is supposed to.
+Other minor bugs in handling game end messages from machines are also
+fixed, and engine-intf.txt is revised in this area.
+
+* Revamped xboard code for handling mouse clicks on the board.  In
+particular, it had a bug if a click-click promotion move was made.
+
+* Fixed and reinstated optimization for << in analysis modes: send
+initString and re-send the board if needed.  Sending repeated undos
+is bad because Crafty prints some analysis after every one.
+
+* Don't go into a spin loop while pausing between xboard animation frames.
+This caused problems, especially when compiling with -O2 on HP-UX.
+
+* WinBoard Options/Colors/RevertToDefaults now also turns off Monochrome
+if it was on, and similarly for Options/ICSInteractionColors/RevertToDefaults.
+This seemed to confuse people before.
+
+* Bugfix: ICS Interaction context menu items with neither of the two
+optional flags set did not work.
+
+* Bugfix: PGN move numbers are optional, but we were insisting on "1"
+right after the tags.
+
+* Bugfix: only the first game of an -mg match was loading -lpf or -lgf.
+
+* Other minor fixes and code cleanup.
+
+3.6.10 -- Mon Jun  1 01:32:31 PDT 1998  Tim Mann
+
+* Added ZIPPYNOPLAYCRAFTY feature; see zippy.README.
+
+* Added timestamps for chess engine interaction to -debug output.
+
+* Now allow 10 seconds (was 5) between games in match mode for engines to
+respond to "force" command that ended previous game.
+
+* When a game is picked from the game list and the names of White and
+Black are known, display them in the window banner instead of the filename
+and game number.
+
+* Changed default for -scp and -sd to be the values of -fcp and -fd.
+
+* Added boxes for both engines to WinBoard startup dialog.  Changed to
+dropdown boxes whose content can be set from winboard.ini, similar to
+the box for ICS name.
+
+* Accept "offer draw" (or "*offer*draw*") from engine to offer a draw.
+
+* Accept "move mmmm" from engine as well as silly "1. ... mmmm" syntax.
+
+* Added support for bughouse engines (Zippy mode only).
+
+* Move bombproofing for engines sending illegal or out of turn moves.
+
+* Always send "xboard\n" to engine as first command.  Eliminates need
+to run crafty as "crafty xboard".
+
+* Rewrote xboard code for input from engines to fix longstanding bugs.
+Previously an engine that sent one line in two separate writes with 
+some time lapse in between (or perhaps that sent several lines in one
+write) could make xboard hang.  WinBoard did not have this bug.
+
+* Fixed minor bugs in dealing with illegal moves.
+
+* Added "iset startpos 1" for FICS.
+
+* Removed special support to put "GNU Chess" or "Crafty" in the window
+banner instead of the engine's base filename.  This gives a more level
+playing field for other engines.  Also fixed bugs in the code that finds the
+engine's base filename.
+
+* Bugfix: Abort or Resign at the very start of a game in chess engine mode
+would fail to send "force" to the engine.
+
+* Fixed some minor bugs in new "result" messages, and changed format to
+include a trailing PGN comment giving the reason the game ended.
+
+* Changed syntax of /font options in WinBoard; old syntax was assuming
+that a font name can't contain a digit, which is wrong.  Old font names in
+WinBoard.ini files are still accepted.
+
+* Serious further work on getting WinBoard to read/write files in the
+"right" directories and documenting exactly what it does.
+
+* Added LoadPreviousPosition, LoadNextPosition, ReloadSamePosition.
+
+* Misc. tiny fixes and cleanup.
+
+3.6.9 -- Sun May 24 20:53:08 PDT 1998  Tim Mann
+
+xboard and WinBoard beta release.
+
+* Tightened up illegal move handling.  Illegal or meaningless moves from a
+file or chess engine should no longer get translated into a1a1 and blindly
+applied.  Explicit moves to the same square (like a1a1) no longer make the
+piece on that square capture itself and vanish.
+
+* Added AlwaysOnTop feature to winboard.
+
+* Fixed bug in winboard "@" command line indirection operator.
+
+* Removed buggy "optimization" code for ToStart in analysis modes.
+
+* Fixed typo bug in zippy.c that would often cause winboard to crash
+right after starting a game in -zp mode.
+
+3.6.8 -- Sat May 23 22:23:19 PDT 1998  Tim Mann
+
+xboard and WinBoard beta release.
+
+* Added -firstDirectory and -secondDirectory so that chess engines can
+be started in a different directory from xboard/WinBoard itself.
+
+* Added -matchGames to allow more than one game in -matchMode.  The games
+are played with colors alternating between the two chess engines.  Had to
+add a time delay at the end of each game to catch up with game ending
+messages from both chess engines -- yuck.
+
+* Changed TwoMachines mode to have firstChessProgram play White by
+default.  Added -firstPlaysBlack to restore old behavior.
+
+* Major rework of code in backend.c for dealing with first and second
+chess engines.  Generalized the code and created a struct type with one
+instance for each engine.  Several small bugs fixed along the way. 
+
+* Fixed bugs in Abort in local chess engine mode.
+
+* Tightened pattern matching to recognize moves from machine.  Should cure
+bogus "Illegal move" errors while Crafty is pondering with Show Thinking
+on, among other things.
+
+* WinBoard keeps focus in board window after popping up a comment due to
+Forward/Backward/ToStart/ToEnd commands.
+
+* Finally got rid of warnings on compiling moves.c under Windows.
+
+* Fixed so WinBoard will compile on machines where WM_MOUSELEAVE is not
+defined.
+
+* Removed various bits of unused code.
+
+* Parse (and ignore) NAGs in PGN files.
+
+* Updated engine-intf.txt.
+
+* Send "result R" to the chess program at the end of each game, where
+R is the PGN result 1-0, 0-1, 1/2-1/2, or *.
+
+* Bugfix: suppress animation when loading a game with timeDelay=0.
+
+* Bug fix: pondering output from Crafty that contained "..." could be
+mistaken for a move, causing bogus error messages and general chaos.
+
+* xboard "make clean" bug fix: moved things created by configure to be
+removed only by "make distclean".
+
+* Fixed a remaining case where move was being animated before being
+relayed to opponent.
+
+* Backend was reversing time/otim commands to the chess program (new bug),
+and was often not sending them on the first move of a game or the first
+move after a mode change (old bug).  Fixing the latter required a kludge
+to work with both GNU Chess and Crafty, because Crafty swaps white and
+black clock times when it swaps sides, while GNU Chess does not.  The
+kludge is that we always make sure the chess engine thinks its opponent is
+on move before we set the clock.  This will sometimes result in sequences
+like "white\ntime xxx\notim yyy\nblack\ngo", or the same with white and
+black interchanged.
+
+* Removed last trace of old -whiteString and -blackString arguments.
+
+* Fixed so that you can type "bd" into the Direct Command dialog when
+debugging gnuchess, without having xboard parse the clock display
+(starting with "White") as "White wins" and end the game.
+
+* Changed moves.c to make a distinction between IllegalMove (where we
+could tell what move was intended, but it violates the chess rules) and
+MeaninglessMove (where we could not tell).  This is a step towards getting
+rid of cases where we translate meaningless moves into "a1a1", but some
+work is probably needed to track them all down.
+
+* Fixed bug in WinBoard monoMode dragging.
+
+* Changed WinBoard to new style file dialogs.  In the process, disabled
+the feature that let you enter the index number of a game or position within
+the file in the dialog.  This is no loss in LoadGame, as you can pick your
+game from the game list dialog that follows, but it does remove some
+functionality from LoadPosition.
+
+3.6.7 -- Mon May 18 21:25:00 PDT 1998  Tim Mann
+
+xboard and WinBoard beta test release.  I've been unable to reproduce some
+reported drawing bugs, so they may still not be fixed.
+
+* Changed PopUpErrors option to PopupMoveErrors, which is more useful, and
+changed default to off.  Errors other than move errors should always be in
+popups; they are often too big for the message area and too important to
+put where they can be easily missed.  But it seems good to get rid of the
+popups for move errors by default.
+
+* xboard analysis window no longer forces itself to top whenever there is
+new output.  Also, now uses built-in Xaw word wrapping instead of trying
+to do its own; works better.
+
+* Bugfix: Reset did not take Crafty out of analyze mode.
+
+* A chess engine no longer has to claim to be Crafty to be able to use
+AnalysisMode and AnalyzeFile; it just has to implement the analyze
+command as Crafty does.  Put in heuristics to generate more informative
+error messages if the engine does not support analyze, and checked that
+they work at least with GNU Chess.
+
+* Added click-click moving, HighlightLastMove, and HighlightDragging to
+WinBoard.  The highlight features are unlikely to go into xboard unless
+the xboard drawing code is cleaned up to do *all* drawing on the board
+from DrawPosition, as WinBoard does.  This is low priority for me.
+
+* Eliminated bogus "Error gathering move list: no header" popup.  You
+could get this by observing two fast games at once without turning off
+GetMoveList.
+
+* Disable WinBoard Sounds menu entirely in -ncp mode, since not even
+MoveSound is used in that mode.
+
+* WinBoard bugfix: Several problems were caused if the user changed 
+WinBoard's current directory in a Load, Save, or Browse dialog.  In
+particular, WinBoard.ini would get saved in the wrong directory, and
+sound .wav file names would not get saved with a full pathname.  I think
+all such problems are now fixed.
+
+* WinBoard bugfix: iconizing the board after an aborted mouse resize would
+(partially) resize it to Tiny.
+
+* WinBoard bugfix: board was not being drawn in color on 256-color
+displays.  This bug was introduced in 3.6.6.
+
+3.6.6 -- Tue May 12 17:43:43 PDT 1998  Tim Mann
+
+xboard and WinBoard beta release.  Note: not all reported bugs are fixed.
+
+* Move animation in WinBoard, programmed by Henrik Gram.  Great stuff!
+
+* Animate backward moves too.
+
+* xboard bugfix: -font (and friends) can now specify a font alias (such
+as "fixed"), not just a full X Consortium name pattern.  Previously this
+would give a resource conversion error message.
+
+* Some coding style cleanup in xboard.c.
+
+* Earlier error check for moving wrong color piece in EditGame mode.
+
+* Completed fix to pattern matching; see 3.6.5.
+
+* Fixed some software rot bugs in Zippy.
+
+* Split AnimateDragging as separate option from AnimateMoves.
+
+* Added FlashMoves to options menu and -flash/-xflash to command line
+options (xboard only).
+
+* Some preliminary work on visible bughouse holding support.  Most of the
+code is not present in this release because I have not gotten it working
+properly yet; my first approach went down a blind alley and I had to
+remove most of the partially working code in preparation for a rewrite.
+
+3.6.5 -- Fri May  8 14:22:09 PDT 1998  Tim Mann
+
+Not generally released.
+
+* Pack bughouse holdings display in banner more tightly when board is one
+of the smaller sizes (when smallLayout or tinyLayout is true, that is).
+An interim measure, but should help.
+
+* Completed fix to make move list parsing recognize the end condition and
+final comment.
+
+* Fixed pattern matching for chatter (tells, etc.) to be more reliable.
+This should reduce the incidence of colors starting in the wrong place and
+of incorrectly matching things that look like other patterns inside
+chatter, such as "shout <12>".  (These errors were already rare.)
+
+* WinBoard now lets you customize the list of ICS's in the startup dialog.
+For now, at least, requires editing WinBoard.ini with a text editor.
+
+* Bug fix: WinBoard window sizing and position setting save/restore did
+not work right when the taskbar was at the top (or left side) of the
+screen and not in autohide mode.
+
+* Merged xboard click/click mode and drag mode, and deleted
+ClickClickMoving option on menu.  Now if you click on a piece, it
+highlights and a further click on another square will move it.  (A second
+click on the same square takes down the highlight.)  Or if you press down
+on a piece and start to drag, you can drag it to a new square.
+
+* When making click/click style moves, if your second click is on a piece
+of the same color, instead of saying "Illegal move", we now cancel the first
+starting square, replace it with the second, and wait for another click to
+finish the move.
+
+* Separate -secondInitString.  Default: same as -initString.  Suggested by
+Remi Coulom.
+
+* Patch from Frank McIngvale to make animation work with XIMs.  Yay!
+
+* Changed move animation to happen after move is passed on to ICS or the
+chess engine, where applicable.  Fixed problems with updating moveList
+that this uncovered.
+
+* Changed game list to show PGN result token for each game.
+
+* The usual minor bug fixes.
+
+3.6.4 -- Thu Apr 30 23:14:43 PDT 1998  Tim Mann
+
+xboard and WinBoard beta test release.
+
+* xboard documentation updated, both man page and info file.  An attempt
+to generate both from the same source with LinuxDocSGML was abandoned, at
+least for now.  WinBoard doc updated too.
+
+* Merged updates to animation code from Hugh.  Fixed a couple of remaining
+bugs, mostly to do with handling Pause mode correctly.
+
+* Added SaveSettingsOnExit to WinBoard.
+
+* WinBoard now saves the last screen position of the Comment, Edit Tags,
+Game List, and Analysis windows (in addition to the board and ICS
+Interaction windows) in WinBoard.ini.
+
+* WinBoard now provides a way to customize the right-button context menu
+in the output area of the ICS Interaction window.  For now, requires
+editing WinBoard.ini with a text editor.  
+
+* Various minor fixes to ICS message recognition, most affecting only Zippy.
+
+* Colorize the notification when someone sends you a message while you are
+logged in, not the output of the "messages" command.
+
+* Fixed colorization to turn off at the right place more reliably.
+
+* Added a new color and WinBoard sound for "requests": abort, adjourn,
+draw, pause, and takeback.  The same color and sound are used for all of
+these.
+
+* Added GUI to change sounds in WinBoard.
+
+* Suppressed WinBoard error popup when a sound can't be played.  They were
+popping up when two separate WinBoards tried to play a sound at the same
+time (such as during a bughouse match).
+
+* Fixed WinBoard crash when a sound file didn't exist.
+
+* WinBoard ports of timestamp and timeseal now produce decent error
+messages if they fail to connect, and WinBoard captures the messages and
+puts them into a popup.  Previously WinBoard would exit with no message on
+such errors.
+
+* WinBoard resizing with mouse improved; now accurately picks the largest
+size that fits in the new area.
+
+* Added option to turn off error message popups.
+
+* Added sizes slim, dinky, and teeny.
+
+* Fixed some minor problems with error message wording.
+
+3.6.3 -- Mon Feb 23 19:08:57 PST 1998  Tim Mann
+
+xboard beta test release only.  Man page is updated for the changes, but info
+file is not.
+
+* Bug fix: LoadGame could not load a PGN game whose first move was
+castling (which is possible from setup positions).
+
+* Bug fix: we were ignoring illegal move messages from chess engines in
+modes where the engine is refereeing but not participating (EditGame,
+LoadGame, AnalyzeFile).  The problem was in a workaround for a Crafty bug,
+where Crafty generates a bogus illegal move message if a "." (used by
+the PeriodicUpdates feature) is sent in analysis mode when the current
+analysis reveals a forced mate.  Installed a different workaround (that
+works in most but not all cases) and reported the Crafty bug.  Bob Hyatt
+replied with a fix, so the Crafty bug should be gone in Crafty 14.12 or so.
+
+* WinBoard only: enabled resizing board with the mouse.  It snaps to the
+nearest (but not too much larger) predefined size.
+
+* The xboard default font is now sized according to piece size, just as
+clockFont and coordFont have always been.
+
+* Added more sizes: bulky, moderate, average, middling, mediocre, petite.
+	
+* xboard only: Added Animate Moves and Click-Click Moving to Options menu.  
+
+* xboard only: Added code to animate piece movement, from Hugh Fisher.
+
+* New feature: autoflag is implemented in MachineWhite, MachineBlack, and
+TwoMachines modes.  If it is on and either a chess program or the user
+oversteps his time, xboard will automatically call the flag and end the
+game.  This feature was requested by someone who runs matches between
+programs and wants to penalize GNU Chess for its habit of running slightly
+over at the end of a time control.  I personally think it's pointless.
+
+* Fixed a bug in Zippy's pattern matching; he can now reply to ICC
+messages again.
+
+* Generate prettier notation for illegal moves.  If a move is illegal only
+because it leaves the player in check, generate notation as if that were
+not illegal.  For instance, if two knights are a knight's move away from
+f3, one on g1 and one on e5 that is pinned, the notation would be Nf3 to
+move the g1 knight, Nef3 to move the e5 knight.  (Suggested by Philippe
+Schnoebelen.)  In addition, if a move is illegal because the type of piece
+moved cannot go that way, would be jumping over another piece, etc., we
+give fully disambiguated coordinate notation; for example, Ng1g3, Ke1xe8,
+d2xd8=Q, etc.  An alternative would be to still write Ng3 if there is only
+one knight on the board, or Ngg3 if the other knight is not on the g file,
+but life is too short to code up all this stuff, and perhaps the way I did
+it is better as it emphasizes that this move was really made despite being
+illegal.  I wonder if the new PGN standard revision will speak to notation
+of illegal moves?
+
+* Fixed gross bug from 3.6.2: if a chess program said "checkmate" and
+White was left on move, the PGN outcome was "1-0 {Black mates}" instead
+of "0-1 {Black mates}"!  The bug occurred only for that specific string.
+
+3.6.2 -- Wed Jul 23 16:47:29 PDT 1997  Tim Mann
+
+* There was a bug in backing up from the end of a game against a chess
+engine, introduced when -reuse mode was added.  Fixed.
+
+* Recognize "{" as terminating an ICS move list.  Previously we needed to
+see a prompt (containing %), but occasionally ICC can send more stuff
+right after a move list with no prompt in between.
+
+* In WinBoard, -mm now implies -cp, so you don't get the startup dialog.
+
+* WinBoard startup dialog no longer sets -scp.  People used to get
+confused because they would give the -fcp and -scp arguments, but omit
+-cp.  This would bring up the startup dialog, which would set both -fcp
+and -scp to the value in the engine name box.  Now you can change -scp
+only with the command-line argument.  That will confuse some people too,
+but hopefully fewer.  I think overall it's better than putting spaces for
+both -fcp and -scp in the dialog, which would puzzle newbies.
+
+* Bug fix: Analyze File mode now works in WinBoard.
+
+* Bug fix: WinBoard window no longer cuts off part of the bottom row if
+the menu bar wraps to a second line.
+
+* Accept game end messages of the form "PGN-result {comment}" from the
+chess engine, where PGN-result is 0-1, 1-0, or 1/2-1/2.  Accept "resign"
+or "computer resigns" from the chess engine as a synonym for "0-1 {White
+resigns}" or "1-0 {Black resigns}". Accept any message from the chess
+engine containing "game is a draw" as a synonym for "1/2-1/2 {Draw}".
+Accept "White resigns" or "Black resigns".
+
+* Enable "Action / Draw" menu item in chess engine mode.  It sends the
+command "draw" to the engine.  Accept any message from the chess engine
+containing "offers a draw" as a draw offer.  WARNING: Draw offers from the
+user and the engine (or from two engines) are not yet matched up by xboard
+in chess engine mode.  Two engines could get into a loop offering each
+other draws.
+
+* Bug fix: Game end messages from the chess engine are always ignored in
+Zippy mode.  Previously they could sometimes be processed, which was
+sometimes making Zippy hang at the start of a new game that followed
+quickly after an old one.
+
+* Zippy can now respond to titled players in channels.  Zippy will avoid
+talking to himself in a channel if he knows his own name.
+
+* Bug fix: in colorization arguments, the bold setting was being ignored
+if the background color was defaulted.  (xboard only.)
+
+* Extended ParseFEN to accept Crafty 12.2's interpretation of FEN.
+If fewer than 8 squares are given in a row, or fewer than 8 rows are
+given, the uncovered squares are empty.  Also, there can be a / after the
+8th row.
+
+3.6.1 -- Sat May 17 01:02:33 PDT 1997  Tim Mann
+
+* Bug fix: Hitting escape while entering a password on WinBoard no longer
+sets the font color back to black (which made further typing visible).
+
+* Bug fix: On Windows NT 4.0, WinBoard /ics /icshelper=timestamp would
+often hang if you tried to exit with the Exit menu item, the [X] button,
+etc.  The same fix may also have corrected the problem where running a
+chess program with /xreuse would sometimes crash Windows 95 (but not NT)
+when the chess program was killed and quickly restarted.
+
+* Bug fix: Periodic Updates would not work if turned on after having been
+off.  Also, the default was needlessly "off" in WinBoard.
+
+* Zippy bug fix: Continuing an adjourned game was totally broken.  The
+wrong moves, or no moves at all, were being fed to the chess program.
+
+* WinBoard change: Giving -ics without -icshost now pops up the startup
+dialog with "Use an Internet Chess Server" pre-selected, so that you get a
+menu of chess servers instead of going directly to ICC.
+
+* Bug fix: WinBoard's SaveSettings was saving -icshost, -icsport, and
+-icshelper in winboard.ini.  This causes a problem if you use a different
+icshost later that needs the default values for icsport (5000) and
+icshelper ("", meaning none).
+
+* Disabled complaints about unexpected "[Ii]llegal move" messages from
+the chess program; we still get them at times.
+
+* Greatly simplified the code for Move Now and SIGINT (ATTENTION).  Fixes
+the bug where Move Now did not work with GNU Chess in WinBoard, and
+several more obscure bugs as well.  Reintroduces a minor bug: GNU Chess might
+not think on your time after a Move Now command.  Trying to fix this
+causes too many other problems.  Documented change in engine-intf.txt.
+
+* Cleaned up code for obtaining ratings from ICS.  It was kludgey and may
+have had bugs on systems with no "Creating:" message.  It should fail
+gracefully there, just not finding the ratings.
+
+3.6.0 -- Thu May  8 19:55:58 PDT 1997  Tim Mann
+
+* WinBoard now has right-button context menus in the ICS Interaction
+window.  Some of the items do immediate commands on the player name you
+have selected or pointed to.  (Suggested by Paolo Casaschi.)  Also, the
+middle button or shift+right does a immediate Copy and Paste.
+
+* Fixed a bug in Zippy's wild rejection.  The bug was causing Zippy to
+reject all forms of wild.  Now it rejects only 1, 9, 16, 17, and 24, as
+was intended.  These variants have different rules, while the other
+variants defined so far only have different starting positions.
+(Actually, wild 2, 3, and 4 never allow castling, but may sometimes by
+chance have king and rook start on squares where castling appears legal.
+This could cause a problem later.)
+
+* Zippy now resumes adjourned games by feeding the chess program 
+the move list instead of the position.  Setting -getMoveList to False 
+restores the old behavior.  Feeding in the move list is better because 
+it enables the chess program to correctly handle en passant legality, 
+castling legality, draw by repetition, and draw by the 50 move rule. 
+
+* Added a WinBoard startup dialog for people who run WinBoard.exe without
+using the Start menu or reading the help file.  Instead of being dumped
+directly into GNU Chess mode, you now get a menu of choices.  You now have
+to give the new WinBoard -cp option to go directly into chess engine mode.
+I did not add this feature to xboard.
+
+* Handling of "illegal move" from Crafty is now back on.  (It was turned
+off in 3.4.6; see below.)  Crafty 12.0 doesn't seem to send bogus ones
+anymore.  I did have to suppress sending time and otim in analyze mode to
+make this work, but there is no harm in that.
+
+* Zippy now sends "gameend" to ICS at the end of each game.  You can alias
+this to "seek" or whatever you like.
+
+* Added Crafty support for Move Now, using the "?" command.  We test
+whether this command exists by trying it once at the start of the first
+game, before it really makes sense.  If we don't get a message like
+"Illegal move ... ?", we assume it's OK.  (We're careful about this
+because sending a "?" to GNU Chess on Move Now keeps it from pondering the
+next move as it should.)
+
+* Added support for a tellusererror command from the chess engine.  See
+engine-intf.txt.
+
+* Attempted to make engine-intf.txt complete.
+
+* Minor fixes/cleanup to GameEnds code, to be sure we always interrupt
+when needed, and always undo an extra move generated by stopping the chess
+program while it is thinking.
+
+3.5.7 -- Sat May 03 22:37:44 PDT 1997  Tim Mann
+
+Beta release of both xboard and WinBoard.
+
+* Updated xboard documentation.  I really wish the man page was built from
+the info file instead of being separate!  It's a pain to update them both.
+
+* Updated documentation of the interface between XBoard/WinBoard and chess
+programs, and renamed it to engine-intf.txt.
+
+* Added support for tellics, telluser, and askuser commands from the chess
+engine.  See engine-intf.txt.
+
+* Various bug fixes.  On WinBoard, 256 color displays are finally handled
+right; no more color flashing when you switch windows unless the colors
+really need to be updated.  Also, I think the problem of the console font
+failing to change or changing back by itself is finally fixed.
+
+3.5.6 -- Tue Apr 29 03:08:00 PDT 1997
+
+Beta release, WinBoard only.  ChangeLog was out of date in release,
+updated here.
+
+* Added ICC timestamp and FICS timeseal to WinBoard distribution.  These
+are my own ports to Win32, based on and used by permission of the owners
+of the proprietary source code (Daniel Sleator for timestamp, Henrik Gram
+for timeseal).  The owners permit these programs to be distributed only in
+binary form (to help prevent cheating), so to avoid running afoul of the
+GPL, I have kept them as separate programs, not linked into the WinBoard
+address space.  Updated Start menu icons to use them.
+
+* Miscellaneous smaller changes.
+
+3.5.5 -- Fri Apr 25 03:06:00 PDT 1997
+
+Beta release, WinBoard only.  ChangeLog was out of date in release;
+updated here.
+
+* Added simple sound support to WinBoard.
+
+* Updated WinBoard documentation.
+
+* Internal implementation of the telnet protocol is now more complete.
+You can now hop through a VMS host on the way to ICS.  For example, do
+"xboard -ics -icshost vms.host.edu -icsport 23", then log in.  Do not use
+the -telnet flag; that says to use an *external* telnet program.  To avoid
+double echoes, you need to force character mode in VMS telnet after
+connecting from VMS to ICS.  Do "^]^Mset mode char^M^M".
+
+* Display opponent names in the title bar for MachineWhite, MachineBlack,
+and TwoMachines modes.
+
+* WinBoard now has an installer, built with InstallShield.  The installer
+works with a binary-only distribution.  Sources are still freely
+available, but now separately.
+
+* Added SaveSettings to WinBoard, which saves current option settings to
+winboard.ini.  Made sure all options can be saved and loaded, including
+fonts and com port settings.
+
+* If the game ends while you are dragging a piece, we now don't let you
+finish the move.  Formerly the move was accepted and your opponent's clock
+would start running again.
+
+3.5.4 -- Fri Apr 18 01:15:24 PDT 1997  Tim Mann
+
+Beta test release of WinBoard and xboard.  The documentation remains
+out of date.
+
+* Many fixes and improvements to new WinBoard user interface code.
+
+* In Zippy mode, avoid sending another copy of the same move to the chess
+program if ICS sends us another copy of the board image.  Hard to believe
+it took me until now to diagnose and fix this problem!
+
+3.5.3 -- Sat Apr 12 19:49:33 PDT 1997  Tim Mann
+
+Beta test release of WinBoard and xboard.
+
+* Fixed fatal bug in WinBoard input handling.
+
+* Made code to stop chess program for reuse a bit smarter.  Removed kludge
+of "white" in initString; it didn't work well, and is unneeded
+with Crafty 11.21 and later.
+
+3.5.2 -- Sat Apr 12 15:40:01 PDT 1997  Tim Mann
+
+Beta test release of WinBoard.
+
+* Ignore check and permit promotion to King during suicide games; no need
+to turn off TestLegality.
+
+* Renamed CheckLegality to TestLegality to avoid confusion with the chess
+term "check".
+
+* Added Rematch to Action menu.
+
+* WinBoard now has a custom ICS interaction window with scrollback, a
+separate line for input, and colorization.  Accelerators that conflict
+with normal editing keys were changed (by requiring Alt+) so they can work
+in both the console and the main window.
+
+* WinBoard error popups are now non-modal and disappear when you make a
+new move, as in xboard.
+
+* Configure now defaults to --disable-ptys on all systems.  If anyone has
+an ancient SysV system where pipes don't work with select, they can still
+do "configure --enable-ptys" explicitly.  I would appreciate getting a bug
+report if this happens to anyone, with complete output from configure and
+"uname -a".
+
+* "make install" now makes the installation directories too.
+
+* Fixed a bug that would cause an "Illegal move" message for Black from
+GNU Chess to be incorrectly considered bogus.
+
+* Handle name changes during an ICS game (FICS bname and wname commands).
+
+* You can force both chess programs to be killed at the end of each game
+by turning off the reuseChessPrograms option.  There are still some
+problems with reusing Crafty even in version 11.20.
+
+* Now the second chess program stays around by default too, if it ever
+gets started.
+
+3.5.1 -- Sat Apr  5 16:47:48 PST 1997  Tim Mann
+
+Beta test release.
+
+* Don't kill off and restart the chess program for each game; keep the
+same one running, using the "new" command to start a new game.  This
+change works around the problem in Windows 95 that makes WinBoard crash it
+at times, and is generally desirable to make new games start faster.  The
+second chess program (for TwoMachines) is still killed at the end of the
+game, and unfortunately this can still crash Windows 95.  Temporarily
+added "white" to the initString to make this work with Crafty 11.20, which
+has a minor bug in "new".  Older versions of Crafty have worse bugs in
+"new"; they should not be used with this version of xboard.
+
+* Support for FICS suicide chess: Parse illegal moves (that leave King in
+check) in game history.  If CheckLegality is off, allow promotion to King
+and illegal moves in game files.  We still generate e2e4 style notation
+for illegal moves.
+
+* Handle FICS "has timeseal; checking" message.
+
+* Changed the coords from white back to black; this was a bug.
+
+* Fixed problems compiling with K&R compilers.
+
+* Fixed an old bug in RegisterMove that was crashing cmail on some systems
+(notably linux).
+
+3.5.0 -- Thu Jan  2 16:59:49 PST 1997  Tim Mann
+
+Thanks to Frank McIngvale for much of the work on versions 3.4.4 and above!
+
+* Fix Crafty resumed game time bug (frankm)
+
+* Word wrap text in Analysis window (frankm)
+
+* More debug info for XPM loading (frankm)
+
+* Replaced config.sub, config.guess, etc., with up-to-date versions from
+autoconf 2.12.  Hopefully this will fix problems on Pentium Pro machines.
+
+* Removed some Makefile gunk that was causing looping for one person.
+
+3.4.7 -- Thu Dec 19 14:22:41 PST 1996  Tim Mann
+
+All changes from Frank:
+
+* Retrieve ratings from ICC (and FICS, etc., when they add the Creating:
+message), save them in the PGN tags, and pass them to Crafty in Zippy mode.
+
+* Add settable time delay between characters in ICS login script.
+
+* Colorize messages like personal tells.  Fix false recognition of channel
+tells.
+
+* Pass "tells" from Crafty through to ICS (in Zippy mode).
+
+* Implement ~/ filename convention from C shell for game and position file
+names.
+
+* ZIPPYACCEPTONLY feature for testing.
+
+3.4, patchlevel 6 -- Sat Nov 23 16:58:50 PST 1996  Tim Mann
+
+* Put recognition of "illegal move" messages from Crafty for
+illegal castling, etc., inside an #if that is currently turned off,
+because of a bug in Crafty that generates bogus "illegal move" messages
+after some moves that are actually legal and accepted by Crafty.
+
+* Added -checkLegality option; previously this could not be turned off.
+
+* Fixed an old bug in finding default board size parameters.
+
+* Differentiated among channel tell, kibitz/whisper, and personal tell/say.
+
+* Fixed a bug in detecting Xpm in the configure script.
+
+3.4, patchlevel 5 -- Mon Nov 18 16:22:53 PST 1996  Tim Mann
+
+* Added zic2xpm to the kit; it had been omitted by mistake.
+
+* Added some default colors for -colorize
+
+3.4, patchlevel 4 -- Sat Nov 16 18:10:17 PST 1996  Tim Mann
+
+This is meant to be a beta release in preparation for version 3.5.
+
+* Added InfoXBoard and ManXBoard to the Help menu.
+
+* Made Frank's ICS input box optional, defaulting to off.
+
+* Merged in Frank McIngvale's XbKit.  Many new features, including
+-clickClick mode, the Analysis modes, piece flashing, ZIICS import,
+ICS text colorization, and the ICS input box.  Many thanks to Frank for
+supplying and documenting this code.
+
+3.4, patchlevel 3 -- Mon Nov 11 18:23:14 PST 1996  Tim Mann
+
+Small set of changes made while Frank McIngvale was working on XbKit in
+parallel.  Unreleased in this form.
+
+* Updated zippy.README.
+
+* Removed useless X event handler and removed strange code for copying
+form translation table to board that worked around the bug it caused.
+This makes changing bindings in .Xdefaults more straightforward.
+
+* Now pressing the Control key steps back one move, and releasing it steps
+forward again.
+
+* Moved quit from "q" to "Q" for greater safety.
+
+* Use "unobserve" instead of "observe" to stop observing; needed on FICS.
+
+* Support for interface variable.
+
+* Strip titles from people who are talking to us, so (for example) Zippy
+won't try things like "tell Darooha(*) hello".  Needed on FICS.
+
+3.4, patchlevel 2 -- Tue Jul  9 19:06:42 PDT 1996  Tim Mann
+
+This patchlevel is not planned to be an announced release.  It's in
+preparation for integrating Frank McIngvale's XbKit.  It mostly contains
+minor fixes I've accumulated since 3.4.pl1.
+
+* WinBoard /telnet option now fires up an external program, as
+with xboard, instead of trying to use a feature of NT 3.1 that does not
+exist in later versions of NT or in Windows 95.  ChangeLog for 3.4.pl1
+said this had been implemented there, but it really wasn't.
+
+* Indicating player to move by the icon color now works under Windows 95.
+
+* WinBoard now kills the chess program when you exit using the system menu
+or the [X] button.  Thanks to Michael Lowe.
+
+* Minor changes to Zippy, including: Now understands wild challenges on
+FICS; these used to crash it.  Removed limit on how fast a game will be
+accepted.  Use "set formula ..." on the chess server to limit this if you
+are using GNU Chess.  Now sends correct opponent name to Crafty.
+
+* Added some missing default values to documentation.  Thanks to Stuart
+Cracraft.
+
+* Bugfix: Trying to print "No fonts match pattern" error message would
+crash.  This can happen to Linux users who don't install Helvetica, for
+example. 
+
+* Bugfix: Defaulting feature in -size n,n,n,n,n,n would put us in an
+infinite loop.
+
+* Added more directories to search for Athena widgets on HPUX.
+
+* New cmail (3.12) from Evan Welsh; includes small fix from Kayvan Sylvan.
+
+* Recognize "illegal move" messages from Crafty for illegal castling, etc.
+
+* Bugfix: "name" command added to zippy.c for Crafty was producing error
+message if GNU Chess was in use.
+
+* In bughouse mode, suppress holding messages from console window; show
+holdings only in banner.
+
+* Minor fixes/cleanup to Makefile.in and configure.in.
+
+3.4, patchlevel 1 -- Mon Dec 11 13:43:12 PST 1995  Tim Mann
+
+* This patchlevel updates WinBoard to match xboard, and includes a few
+fixes and minor improvements.  "-size tiny" and "-size n,n,n,n,n,n"
+are still not implemented for WinBoard.
+
+* Installed support for Crafty based on code from Bob Hyatt.
+Currently the only documentation for this is in the FAQ, and a few
+things don't work with Crafty 8.23.  Please do not report these
+problems as bugs in either xboard or Crafty.  Bob and I know about
+them.  The worst ones (if not all of them) should be fixed in Crafty
+8.24.
+
+* Changed the kludge command we send when gnuchess wants to print
+something that doesn't end with a newline, from "help" to "bogus".
+This works because the error message gnuchess prints ends with a
+newline.  It also improves compatibility with Crafty, which doesn't
+need the kludge, but for which sending "help" causes a problem.
+
+* Don't draw grid at all if lineGap is 0; previously we drew the grid
+with X "0-width" lines (usually 1 pixel wide) and then overwrote it.
+
+* Makefile: Removed xboard.info from "all" target so we won't try to
+rebuild it, because this fails on hosts that don't have makeinfo
+installed.  Other minor fixes to "clean" targets, etc.
+
+* Fixes and cleanup to Auto Comment code that handles continuation
+lines and highlighting.
+
+* Auto Observe now tries to observe the game from the point of view of
+the player who was on your gnotify list.  Requested by rng.
+Limitations: We can't tell which player it was unless you have ICS
+highlighting turned on.  Also, currently "observe foo" works as
+required (observing from foo's point of view) only on ICC, but FICS
+will probably implement this soon.
+
+* "-size tiny" now makes the default font smaller automatically.  This
+was implemented by introducing an extra Form widget in the hierarchy
+for all xboard windows, named either normalLayout, smallLayout, or
+tinyLayout.  So you can have resource specifications that apply only
+to certain layouts; in particular, XBoard*tinyLayout*font.
+
+* Bug fix: EditGame or EditPosition while playing or examining still was
+not really being permitted.
+
+* WinBoard bug fix: On the EditPosition menu, King did not work.
+
+* Added text catalog of WinSock error messages to WinBoard, because
+Microsoft still has not put them in the system message catalog.
+
+* Removed support for older ICS game-ending messages that do not have
+a PGN result token (*, 0-1, 1-0, or 1/2-1/2) after the closing '}'.
+The code for older messages was sometimes firing on the newer
+messages, due to parsing ambiguity.  If the current code sees an old
+message, it will understand that the game is over, but will always
+display * as a result token instead of trying to guess the result by
+interpreting the text message.
+
+3.4, patchlevel 0 -- Tue Nov 21 01:02:50 PST 1995  Tim Mann
+
+* This patchlevel was released for xboard only.
+
+* Updated the info file.  It should now be as up-to-date as the man page,
+with good English except in the parts that pertain only to AmyBoard.
+
+* Added "-size tiny", requested by Bob Hyatt.  Also cleaned up bitmap
+support and added "-size n,n,n,n,n,n" to allow arbitrary-sized bitmaps,
+if the actual bitmaps are supplied by the user.
+
+* Updated bughouse support.
+
+3.3, patchlevel 4 -- Sat Nov 18 02:27:21 PST 1995  Tim Mann
+
+* Unreleased beta that works with preliminary FICS bughouse code.  Will
+need changes before release to track FICS message changes.
+
+* Removed use of .EX macro from man page.  It is not supported by some
+nroff -man macro packages, notably the one on Slackware Linux.  Switched
+to boldface for references to xboard and other commands within the man
+page, as this seems to be the modern way.
+
+* Bug fix: If ICS rejected a move, it was correctly undone on the board,
+but the message widget still displayed the bad move.  Reported by DAV.
+
+* Normally, xboard in ICS mode fetches the move list whenever the board
+display switches to a new game.  Doing this is now an option
+(getMoveList) that can be turned off, which is useful if you are watching
+multiple blitz games.  Requested by rng.
+
+* Move list fetching code is now smarter: it ignores a move list if it is
+not for the right game.
+
+* Added support for bughouse as implemented on FICS.  Holdings are shown
+in the window title in place of the strength numbers.  A menu on mouse
+buttons 2 and 3 (same on both) lets you drop pieces.  There is no checking
+as to whether you actually hold the piece you are trying to drop; we rely
+on ICS to check that.  Notation of the form P at f7 is generated and parsed.
+The mate detector does not understand that non-contact mate is not really
+mate in bughouse, but this does no real harm.  It results in a "#"
+suffix being displayed on the move notation, but xboard does not assume the
+game is over.
+
+* Bug fix: Promotion to a knight was not working with ICC!  Thanks to
+Wendigo for the report.
+
+* Bug fix: Special pty code for host types *-*-aix3* and *-*-irix3*
+(supplied from configure.in) had a bug that would cause childio.c to
+fail to compile, due to a "continue" that was not within a loop.
+
+* Bug fix: In pgntags.c, memory was being freed while still in use.  One
+symptom this caused was that on some machines, cmail would fail with a
+message that it could not find the BlackNA tag.  The error was in some
+submitted code that I included in version 3.2.pl3 without reading
+carefully enough.  Anders Forberg noticed the symptoms, and Evan Welsh
+(who had nothing to do with causing the bug) found the bug and submitted a
+fix; thanks to them both.
+
+* Removed restriction against using EditGame while playing, observing,
+or examining on ICS.  You still get a warning popup.
+
+3.3, patchlevel 3 -- Sat Sep 16 11:44:05 PDT 1995  Tim Mann
+
+* Bug fix: Going directly from MachineWhite to TwoMachines mode would kill
+off the second chess program after Black's first move.
+
+* Added -timeIncrement feature.  Thanks to Joel Rivat.
+
+* Deleted code that tries to keep you from observing more than one game,
+or observing while playing or examining.  There is actually no problem in
+doing this, except that every time an update comes in from a different
+game than is currently being displayed, xboard fetches the history of the
+new game, which may be time-consuming if you are on a slow link.
+
+* Fixed configure so as not to crash when neither lex nor flex is found.
+lex or flex is needed only if the user wants to rebuild parser.c.  Thanks
+to Phil Humpherys for reporting the crash.
+
+* Bug fix: config.h.in used #define instead of #undef for some macros used
+in the pty code in childio.c.  This causes the code to fail to compile on
+some architectures, because the symbols are supposed to be undefined, not
+defined to empty, when they are not set in configure.  Bug originated in
+3.3.pl0 when config.h was introduced.  Thanks to Phil Humpherys for report.
+
+* Bug fix: ShowThinking would not show anything when current position had
+no move to display in the move window.  E.g., if position was created by
+LoadPosition or EditPosition.
+
+3.3, patchlevel 2 -- Mon Aug 28 11:11:11 PDT 1995  Tim Mann
+
+* Zippy code was omitted from xboard-3.3.pl1 by mistake; now included.
+
+* For WinBoard, added hint to help file that you may need to turn off
+LocalLineEditing while typing dialing commands to your modem.
+
+3.3, patchlevel 1 -- Sat Aug 19 15:13:30 PDT 1995  Tim Mann
+
+* Zippy distribution is no longer separate from regular xboard distribution.
+
+* Deal properly with Show Thinking output from GNU Chess when it is
+thinking on its opponent's time.  In TwoMachines mode this output is
+suppressed to avoid interfering with the output from the machine that is
+on move; in other modes it is displayed (including the move that GNU Chess
+is predicting the user will make next).  GNU Chess produces this output
+only if it is built without -DQUIETBACKGROUND defined; this symbol is
+defined by default in patchlevels before pl75, but undefined by default in
+pl75.
+
+* Bug fix: Handling of initial board position in move list for wild games
+was broken, so wild games could not be observed and adjourned wild games
+could not be continued.  Thanks to "Maximum Entropy" for the bug report.
+
+* Added feature: algebraic notation now shows "+" indicator for check
+and "#" for checkmate, as called for in PGN standard.  Thanks to Kevin
+Maher for the suggestion.
+
+3.3, patchlevel 0 -- Thu Jul 27 22:21:07 PDT 1995  Tim Mann
+
+* Changed configuration to use a config.h file instead of passing zillions
+of -D options on the cc command line.
+
+* Merged a small fix and some updates to the texinfo file from Jochen
+Wiedmann.  The texinfo file still needs work.
+
+3.2, patchlevel 5 -- Tue Jul 18 20:29:39 PDT 1995  Tim Mann
+
+* Beta test release of xboard only.
+
+* Updated WinBoard code to include new xboard features.
+
+* Added texinfo file from Jochen Wiedmann to the release, but not as the
+primary documentation.  It needs updating, and the English needs work.
+I did make a few improvements, mostly to change incorrect uses of @var to
+either @samp or @code as appropriate.
+
+* Merged in code changes to 3.2.pl4beta from Jochen Wiedmann.
+
+* Fixed EditComment; did not pop up window in previous beta.
+
+* Added AutoComment feature.
+
+* Added GameListDestroy to disable the outdated game list popup in cases
+where we load a new game file without building a new popup.
+
+* Added yyskipmoves feature to parser.l to speed up building of gamelist.
+
+* gamelist.c wouldn't compile with a non-ANSI compiler.  Fixed.
+
+* Change to yy_text handling in patchlevel 3 still had problems.  Can't
+use AC_DECL_YYTEXT in configure.in, because that defines YYTEXT_POINTER
+according to whether the lexer on the current host makes yytext a pointer.
+But most people will be using a parser.c that was generated on another
+host and shipped with the package.
+
+3.2, patchlevel 4 -- Sun Jun 25 19:13:43 PDT 1995  Tim Mann
+
+* Beta test release of xboard only.  
+
+* Added FIREWALLS section to man page.
+
+* Changed -icsport to be a string.  Now with the -telnet option,
+specifying -icsport "" suppresses the second argument to telnet.
+
+* Added EditTags feature.  Removed AboutGame from menu, because EditTags
+subsumes it.  EditTags suggested by Jochen Wiedmann and first implemented by
+him in AmyBoard.  xboard implementation is my own.
+
+* Fixed some missing or incorrect prototypes.
+
+3.2, patchlevel 3 -- Sat Jun  3 18:57:38 1995  Tim Mann 
+
+* Beta test release of xboard only.  
+
+* New version of cmail from Evan Welsh, to fix compatibility problems with
+perl 5.0.
+
+* Added game list feature on Load Game, based on code from Jochen
+Wiedmann.  Integrated it with cmail.
+
+* Several bug fixes from Jochen Wiedmann, including one to my yy_text
+workaround for the difference in the type of yytext between lex and flex.
+
+* Handle clock pause on FICS.
+
+* Suppress clocks in untimed FICS games (time control 0 0).
+
+* Rebuilt configure script with autoconf 2.3.  This fixes a bug in
+configuring for X11R6, where -lSM -lICE would not be added when needed.
+
+* Fixed inconsistent type declarations on IntSigHandler and
+CmailSigHandler.  Bug report from Josh Daynard.
+
+* backend.c wouldn't compile with a non-ANSI compiler.  Fixed.
+
+3.2, patchlevel 2 -- Tue Feb  7 14:50:30 1995  Tim Mann 
+
+* Minor release of both xboard and WinBoard.
+
+* Added recognition of some FICS messages.  On the other hand FICS is also
+changing some of its messages to match what xboard already recognizes.
+
+* Temporarily went back to using "promote" command on ICS instead of
+"a7a8=Q", because FICS doesn't implement the latter yet.
+
+* We now avoid using overlapped I/O on pipes in WinBoard, to make Windows
+95 beta 2 happy.  This lets WinBoard work with GNU Chess on Windows 95!
+
+* Installed patches from Jochen Wiedmann to coordinate with Amiga XBoard.
+
+* Installed patch to cmail bug in LoadGame from Evan Welsh.
+
+* Bugfix: checkmate and stalemate moves entered with EditGame in ICS mode
+were not being handled correctly.  Bug was in GameEnds().
+
+* Implemented EchoOn and EchoOff for xboard, using system("stty echo\n").
+Now passwords won't be echoed when you connect directly to ICS.  Also,
+telnet negotiation characters aren't displayed (when possible).
+
+* Implemented more of the telnet protocol.  Now connecting to a telnet
+server with "-icsport 23" should work even without giving the -telnet
+option.  The telnet is in "old line-by-line mode".
+
+3.2, patchlevel 1 -- Sat Dec 10 13:50:46 1994  Tim Mann 
+
+* This patchlevel released for WinBoard only.
+
+* winboard.c: Fixed ConsoleInputThread().  Needed to change CRLF to LF,
+not to CR.  This was stopping normal /ics mode from working.  Thanks to
+Asher Kobin for the bug report.
+
+* winboard.c: Fixed Raw(), EchoOn(), EchoOff().  Now they take effect
+immediately, not on the next console read after the one in progress.
+
+* winboard.c: Attempted to make WinBoard work with gnuchessx running
+directly on Windows (not remotely via rsh).  It now works on NT, but only
+if gnuchess is told not to think on its opponent's time ("easy\n" removed
+from initString).  The problem seems to be that GenerateConsoleCtrlEvent
+is not doing anything.  On Windows 95 beta 2, we get error messages on
+both reading and writing to gnuchessx; I didn't investigate why.
+
+3.2, patchlevel 0 -- Wed Dec  7 13:23:36 1994  Tim Mann 
+
+* Thanks to all the beta testers who gave me feedback: Josef Nelissen,
+Steve Booth, Evan Welsh, Dima Dakhnovsky, Chris Petroff, Peter Jansen,
+Derek Terveer, Michel van der List, Richard Lloyd, Shelly Mistry, and Mike
+Lee.  Sorry if I forgot anyone.  Thanks to Virendra Kumar Mehta for
+information about DYNIX/ptx.
+
+* Don't exit on keyboard EOF unless we get two in a row.
+
+* WinBoard only: added -localLineEdit switch to allow turning off local
+line editing if you really want to.  It is still a bad idea to let the
+echoing be done remotely, however; see below.
+
+* Fixed some configure problems on HP-UX.  [Steve Booth]
+
+* Fixed (I hope) configure problem on SunOS 5.3/Solaris 2.3.  [Josef Nelissen]
+
+* cmail bugfix from Evan Welsh (cmail 3.4).
+
+3.1, patchlevel 9 -- Fri Dec  2 23:54:56 1994  Tim Mann 
+
+* Beta distribution only
+
+* Always do local echo/edit of user typing in ICS mode.  Doing the echo
+downstream may seem nicer in some modes, and it can be hard to turn that
+echo off, but the echoed characters can be interleaved with ICS output
+and make it impossible to parse correctly.  For xboard this involved only
+a change to recommendations in the man page, as Raw() isn't implemented.
+For WinBoard, removing Raw() made a real difference.  Added code in 
+WinBoard to change /r/n back into /r on keyboard input, as we get the 
+former when Raw() is not called.
+
+* Do not issue ICS "refresh" command after we start to observe a game
+unless we get to the next prompt without seeing a board image.  Newest
+version of ICS doesn't require this refresh, but old versions around still
+do.
+
+* cmail bugfix and small code cleanup in LoadGame, from Evan Welsh.
+
+* Added keyboard accelerators N/P for LoadNextGame/LoadPreviousGame.  Evan
+Welsh request.
+
+* Using "-" on the command line as a filename for loading (saving) games
+or positions specifies the standard input (standard output).  Alain Picard
+suggestion.
+
+* On WinBoard only, a command line option without a leading '-' or '/' is
+now taken as the value of -lgf.
+
+* Changed to not use stdin, stdout, stderr as initializers in backend.c;
+needed for GNU libc compatibility.  You also must build parser.c with flex
+(not lex) if you are using GNU libc, to avoid having the same problem
+there.
+
+* Changed WinBoard to avoid using "overlapped" input on the console.  It
+now seems to fully work on Windows 95 beta 2.
+
+* Improved comment popups on WinBoard.  Now newlines are handled properly,
+and the plain Comment popup window doesn't disappear and reappear when we
+step to a new move with a new comment.
+
+* Fixed bugs in detecting the absence of the time and otim commands.
+
+* Added built-in implementation of rcmd protocol to WinBoard.  Windows NT
+does not implement passing signals through rsh, and Windows 95 does not
+have rsh at all.
+
+* Added -remoteUser option.
+
+3.1, patchlevel 8 -- Mon Nov 28 15:26:07 1994  Tim Mann 
+
+* Beta distribution only
+
+* Rearranged ChangeLog file into reverse chronological order to be closer
+to GNU standards.
+
+* Integrated new cmail code from Evan Welsh (including cmail RCS rev 3.2).
+Includes a bug fix to TruncateGame.
+
+* Updated ICS address to be chess.lm.com.
+
+* Bug fixes to handling the aftermath of FatalError.  Thanks to Chris
+Petroff for the bug report.
+
+* Test for remsh before rsh, other fixes for HP-UX.  Thanks to Richard
+Lloyd.  I wasn't able to do all the things he suggested, so there may
+still be some rough edges in building on HP-UX.  See the FAQ file for hints.
+
+* Bug fix; added missing check for HAVE_SYS_SYSTEMINFO.  Thanks to Josef
+Nelissen for testing on Solaris 2.x.
+
+* Updated WinBoard to match xboard.  (WinBoard still has a few option
+dialogs that don't exist in xboard.)
+
+* Changed Hint output to a popup.
+
+* ShowThinking output and move output no longer overwrite each other.
+ShowThinking output won't appear if the displayed position is not current. 
+ShowThinking output in TwoMachines mode made clearer and documented.
+
+* Implemented --enable-ptys and --disable-ptys arguments to configure.
+
+* Fixed Book and Hint code to work over a pty with echo enabled and tabs
+expanded to spaces.  Thanks to Dima Dahknovsky for the bug report.
+
+* Moved Attention calls from all over xboard to one place, inside
+SendToProgram.
+
+* Added bulletproofing to ShowThinkingEvent.
+
+* Added code to handle "refresh N" boards that come in from ICS properly,
+assuming ICS is changed to mark them with a new relation code (-3).
+
+3.1, patchlevel 7 -- Sun Nov 13 22:16:01 PST 1994 -- Tim Mann
+
+* Beta distribution only
+
+* Changed ShowThinking to just show the current best line in the
+DisplayMessage area, instead of dumping everything to stdout.
+
+* Installed new cmail (RCS rev 3.1) and cmail.man (RCS rev 1.10), and
+changes to cmail code in backend.c, from Evan Welsh.
+
+* Miscellaneous minor fixes.
+
+3.1, patchlevel 6 -- Fri Nov  4 12:53:53 PST 1994 -- Tim Mann
+
+* This patchlevel was not actually released to anyone.
+
+* Updated the pty code to be based on GNU Emacs 19.24, and moved it to a
+separate file.  It was hard to split out just the pty configuration from
+all the stuff emacs does with its custom configure script and .h files,
+but I did my best.
+
+* Converted from imake to GNU autoconf.  This was a serious upheaval.  
+
+* Put in code to help trap "error gathering move list" problem reported by
+Michel van der List if it recurs.  I couldn't reproduce it.
+
+3.1, patchlevel 5 -- Mon Oct 31 21:12:00 PST 1994 -- Tim Mann
+
+* Beta distribution only.
+
+* We now test for checkmate or stalemate in EditGame mode after every user
+move, and in LoadGame mode whenever we hit the end of a game without
+seeing a PGN end marker.  cmail needs an update to deal with this
+correctly; Evan promises one.
+
+* Bugfixes in new move generator.  Thanks to Mike Lee for reporting one of
+the bugs.
+
+* Imakefile was omitted from patchlevel 4.
+
+3.1, patchlevel 4 -- Mon Sep 19 18:19:46 PDT 1994 -- Tim Mann
+
+* Beta distribution only.
+
+* The move generator includes a mate tester.  Initially this is used only
+by cmail, and even that usage needs further work.
+
+* Wrote a true move generator and used it to replace all the move
+disambiguation and legality checking code in parser.l.  The move generator
+is capable of dealing correctly with en passant and castling availability,
+but the rest of the program still does not keep track of this information.
+
+* Bug fix: xboard did not handle "foo has made you an examiner of game 23"
+message.  Thus you could not use examine features until the next board
+came in, showing your new relation to the game.  Thanks to POOKIEWOOKIE on ICS
+for the bug report.
+
+* Added AutoObserve feature.  Thanks to Chris Petroff for the idea.
+
+* Added Book feature to use new gnuchess "bk" command.  Mike McGann request.
+
+* Redid code to handle missing "time" command in gnuchess, because latest
+gnuchess no longer sends a response to this command.  
+
+* Eliminated need for -DFLEX.  Thanks to Michael Shields (Vladimir?) for
+the idea.
+
+* Added missing code to implement MoveNow in TwoMachines mode.
+
+* Added ShowThinking feature.  Thanks to Richard Lloyd for the idea.
+
+* Applied patches from Evan Welsh; some fixes and improvements to the
+cmail code.
+
+* Fixed bug in moving from EndOfGame mode to MachineWhite or MachineBlack,
+introduced in previous patchlevel.  Also fixed related bug in ending a
+game in ICS mode; was entering EndOfGame mode instead of IcsIdle.
+
+* Added patch to implement internetChessServerLogonScript flag, from Kevin
+O'Connor.  Thanks!
+
+3.1, patchlevel 3 -- Wed Sep  7 13:22:07 PDT 1994 -- Tim Mann
+
+* Beta distribution only.
+
+* Merged in new cmail code from Evan Welsh.  He added the ability to have
+more than one game per message, needed for official IECG matches.  I added
+the ability to resign or offer/accept/decline a draw in a cmail game.
+
+* Bugfix: invalid -tc option caused segmentation fault; DisplayFatalError
+was called too early in initialization.  Georges Honore reported this bug.
+
+* Decided to keep EndOfGame mode as an element of the user interface---it
+means that a gnuchess game or loaded game has ended, and the user must
+explicitly select EditGame to edit it, rather than just being able to
+enter more moves freely.  But internally there is no longer an invariant
+tying this mode to whether the chess program is running.
+
+* Zippy bugfix: Was saving only the final position in the -sgf file when
+the game ended by something other than resignation or flag.  Also fixed
+the longstanding bug that Zippy would think the final board of such a game
+was a new game and restart the chess program.
+
+* Now does a better job of faking castling availability in FEN.  We still
+don't really keep track of it, but now at least we don't say that castling
+is still available when the king or rook is not on its home square.
+
+* Bugfix: Initial board of game history for wild games was going through
+too much processing, causing us to forget the game length, which is now
+needed by ParseGameHistory.  This was causing problems with resuming
+adjourned wild games.
+
+* Updated ICS host to ics.onenet.net.
+
+* Zippy now accepts challenges where the opponent specified his color.
+
+* Added ZIPPYPASSWORD2 to let operator give commands directly to gnuchess.
+
+* Bitmap directory can include alternative icons now, too.
+
+* Handle "Game * (*) has no examiners" message from ICS.
+
+* Revamped window title and icon name selection.
+
+3.1, patchlevel 2 -- Sun Jun 12 17:16:28 PDT 1994 -- Tim Mann
+
+* "Beta" distribution for Zippy users only.
+
+* Bugfix: common.h was assuming that X11 type Boolean is char, which is
+not always true.  This might have caused all sorts of obscure bugs!
+
+* Installed new bitmaps from Elmar Bartel as the default.  Many thanks!
+The old bitmaps can be used by changing the "bitmaps" symbolic link before
+compiling xboard, or by using the -bitmapDirectory option at runtime.
+
+* Loading a game that ends with the PGN unfinished symbol ("*") now always
+leaves you in EditGame mode.
+
+* Added documentation of -icscomm to man page.  Thanks to Maarten Remkes
+for the linux script.
+
+* ^C now kills gnuchess as well as xboard.  Thanks to Dima Dakhnovsky for
+reminding me how to do this.
+
+* Bitmap icon color now indicates player to move.  Stuart Cracraft
+suggestion.
+
+* Changed piece bitmap flags to have just one flag, which points to a
+directory full of bitmaps, instead of a flag for each bitmap.  Also
+changed bitmap naming convention.
+
+* "Connection closed by ICS" is no longer a FatalError popup.  This was
+too annoying in the normal case where the user typed "quit".
+
+* Changed default font to 14 pixels instead of 10 points.  This seems to
+make it close to the size I want it to be on more displays.
+
+* Major mode (GNU Chess, etc.) appears in title bar.  Stuart Cracraft
+request.
+
+* Bug fix: EditGameEvent, MachineBlackEvent, MachineWhiteEvent, and
+TwoMachinesEvent were calling PauseEvent to get out of pause mode, which
+now has undesired side effects, such as advancing the display to the
+forwardMostMove.  It works fine to just set pausing = FALSE instead.
+
+* IcsExamining mode now lets you access ICS edit position commands using
+the same popup menus as xboard's EditPosition mode.  Thanks to DAV on ICS
+for inspiring the idea.
+
+* Corrected test for gcc on HP in Imakefile; thanks to Richard Lloyd.
+
+3.1, patchlevel 1 -- Wed Jun  1 16:25:11 PDT 1994 -- Tim Mann
+
+* Added parser.c.lex and parser.c.flex to the distribution.
+
+* Added HP gcc options to Imakefile, from Mats Nylen.
+
+* EndOfGame mode no longer highlights EditGame mode indicator, because the
+modes really do differ.  I would like to get rid of EndOfGame mode in the
+future, at least as far as users can see.
+
+* Larger %a in parser.l, needed for RS/6000 users.
+
+* Minor improvements to Mail Move error messages.
+
+* When -debug flag is given to xboard, -v is passed to cmail.
+
+* Old Save Style uses "1. ..." instead of "1..." when black moves after a
+comment; more like xboard 3.0's actual style.
+
+* New version of cmail from Evan Welsh.  Looks for UCB Mail in a more
+portable way and has some minor bug fixes.
+
+* Bug fix: Saving a FEN position while in EditPosition mode with black to
+play was showing white to play in the saved position.
+
+3.1, patchlevel 0 -- Fri May 20 16:36:15 PDT 1994 -- Tim Mann
+
+* This is the first general release since 3.0, patchlevel 9.  Releases
+since then have been limited-distribution or beta releases.
+
+* Thanks to my version 3.1 beta testers: Dmitry Dakhnovsky, Ed Hanway,
+Richard Lloyd, Mike McGann, Shelly Mistry, Josef Nelissen, Chris Petroff,
+Jack Robertson, Michel van der List, Ky Macpherson, Derek Terveer, and
+Evan Welsh.  Sorry if I've forgotten anyone who gave me feedback.
+
+* Updated man page.
+
+* Minor cleanup on menu sensitivity code.
+
+* Integrated another even better version of cmail from Evan Welsh,
+including some code he supplied in xboard itself.
+
+* A few more fixes to cmail support.
+
+* Automatically update clocks after an ICS "moretime" command.
+
+* Handle ICS automatic examine mode (set examine 1) after a game.
+
+3.0, patchlevel 14 -- Tue May 17 13:41:44 PDT 1994 -- Tim Mann
+
+* Beta test release only.
+
+* Don't suppress prompt on first board of game being examined; otherwise
+it looks like nothing happened at all (i.e., like you're lagged).
+
+* Added StopExamining and StopObserving (Chris Petroff suggestion).
+
+* Made Reset do a refresh on ICS.  John Chanak's original ICS code for
+xboard tried to do this; I finally decided it was a good idea after all.
+
+* Fixed bugs in handling updates that come in while you are pausing in
+examine mode.  This is pretty tricky to do right.
+
+* Made un-Pausing immediately pop you to the current position.  This is
+always necessary in examine mode, since the game may have changed under
+you; your remembered moves might no longer be right.  So I made it do the
+same in all modes.
+
+* Took Detach Examine mode back out...used Pause mode for this instead!
+
+* Put in a trap for the GNU Chess bug of printing an Illegal Move message
+when its own hint move is illegal.
+
+* Attempted to fix a Zippy bug; bogus "exited unexpectedly" messages after
+it checkmates its opponent.  This involved adding an argument to GameEnds
+to say who says it ended (ICS, GNU, etc.)  and taking different actions in
+different cases.  Unfortunately, this just restored an older Zippy bug, where
+Zippy restarts gnuchess when it gets the board with the final position,
+because GameEnds still puts xboard in EndOfGame mode.  Sigh.
+
+* We now capture elapsed time on last move when getting game history.
+(Josef Nelissen bug report)
+
+* Rewrote code to redisplay last file title so it really works.
+
+* Fixed bug in oldSaveStyle.
+
+* Larger %a and %o were needed for lex.
+
+3.0, patchlevel 13 -- Mon May 16 16:26:22 PDT 1994 -- Tim Mann
+
+* Beta test release only.
+
+* FatalError popups stay on the screen now.  If the error is really fatal,
+all functions are disabled, and the program exits when you press OK.
+
+* Redisplay last file title when using Load (Next/Previous/Same) Game.
+
+* Zippy understands new match challenge message format on ICS.
+
+* Added Revert command.
+
+* When examining a game on ICS, < > buttons do ICS backward/forward
+commands, unless you set the Detach Examine option.  Thanks to Dima
+Dakhnovsky for the idea.
+
+* Fixed various minor problems in cmail mode.
+
+* cmail generates the tags now.  New version of cmail from Evan Welsh.
+
+* cmail mode won't let you do MailMove unless the currently displayed
+position is exactly one move past the end of the game you loaded.
+
+* Fixed building of man pages in Imakefile
+
+* Updates to INSTALL file
+
+3.0, patchlevel 12 -- Sat May  7 21:10:03 PDT 1994 -- Tim Mann 
+
+* Beta test release only.
+
+* Brought man page up to date.
+
+* Added Shift+R to resign from keyboard.
+
+* Some items on Action menu available in GNU Chess mode now.
+
+* Revamped Action menu.
+
+* Reordered functions in backend.c as a small step toward reorganizing
+this whole mess.
+
+* Generate TimeControl PGN tag.
+
+* Get type of ICS game (e.g., rated blitz) and save in PGN tags.
+
+* Bug fix: Clocks were not redisplayed when entering EditGame mode.
+
+* Bug fix: Clocks were not being redisplayed after loading a game file
+with -td 0, so they could show the wrong color active.
+
+* Bug fix: Chess programs would be killed and match mode would exit
+prematurely when loading a PGN game fragment ending with "*".
+
+* ICS command "sposition" no longer confuses xboard.
+
+* Integrated new version of cmail (with support code in xboard) from Evan
+Welsh.
+
+* Added TruncateGame, MoveNow, RetractMove, and QuietPlay.
+
+* Bug fix: switching between MachineWhite and MachineBlack was not calling
+Attention().  Reported by Dino Dini.
+
+* More improvements to INSTALL and Imakefile.
+
+* Pack moves into 79 character lines in PGN output.  We don't generate
+check indications, and we always break the line before the result,
+so this is not quite PGN export format.
+
+* Use FEN tag in PGN.
+
+* Improved finding and counting of game starts in save files.
+
+* Negative position or game numbers in -lpi/-lgi mean to seek to that byte
+offset.  Hook for possible future features, not in man page.
+
+* Detect and handle absence of either "time" or "otim" commands in
+gnuchess.
+
+* Don't use "promote" command to ICS anymore.
+
+* Handle switching sides and taking back moves on FICS.
+
+* Handle flip state flag in style 12 board.
+
+* Handle examine mode on ICS.
+
+* Improved error popups for various kinds of illegal moves.
+
+* Suppress unasked-for hints from gnuchess (which it generates in post
+mode).
+
+* Load/save position functions use FEN.  Old style also supported.
+
+* Added detailed error messages if loading a bitmap file fails.
+
+* Small board has 2-pixel lines between squares instead of 3-pixel.
+
+* Added OldSaveStyle and AboutGame.
+
+* Renamed ForceMoves to EditGame.
+
+3.0, patchlevel 11 -- Tue Sep 21 15:25:36 PDT 1993 -- Tim Mann 
+
+* The following changes were present in xboard 3.0, patchlevel 11, but the
+first group did not make it into WinBoard 3.0 until later.  xboard
+3.0.pl11 was a limited-distribution release only, mostly to Zippy users.
+
+* Man page minor fixes.
+
+* Added a missing file close.
+
+* Removed automatic error popdown on Reset, which was destroying some
+error messages before they could be read.
+
+* Fixed char vs. unsigned char warnings on bitmaps.
+
+* Use ICS board style 12.  Some improvements to ICS parsing.
+
+* Comment window is now labelled with the move the comment is on, and
+comments don't pop down when you step to the next move.
+
+* Save files now in PGN format.
+
+* Support for loading PGN files.  PGN tags pop up when a PGN game file
+is loaded.
+
+* More info in INSTALL and Imakefile about building for Suns (and
+other systems).
+
+* WinBoard 3.0 patchlevel 11 split off from an early version of xboard
+3.0 patchlevel 11, so it does not have all the features of that
+patchlevel.  The following changes made it into both xboard and
+WinBoard:
+
+* Made Comment dialog non-modal in WinBoard.
+
+* EndOfGame mode is now more transparent.  It looks like ForceMoves
+mode except that there is no chess program running.
+
+* Small bug fixes in clock management.  Most noticeably, pausing when
+it is gnuchess's move now works as documented (again).
+
+* Add minimal support for -icscomm option.  Not documented yet because
+I haven't sorted out the issues with setting the tty modes on the comm
+port device, or with locking it properly.  But it's usable by wizards.
+
+* Don't restart the chess program upon Backward event from EndOfGame mode.
+
+* Suppress extra prompt after ICS sends us a board.
+
+3.0, patchlevel 10 -- Sat Sep 11 18:44:03 PDT 1993 -- Tim Mann 
+
+* Beta test release only.
+
+* Zippy now plays chess.  zippy.c and zippy.h are still not included
+in the standard distribution, but are available on request.
+
+* Switched to using style 12 on ICS.
+
+* Updated man page, and documented use of XBoard*form.translations to
+add more shortcut keys.
+
+* Added shortcut keys "d" to claim/offer/accept a draw, and "t" to
+call flag.  Suggested by venu on ICS.
+
+* More explicit instructions in INSTALL file.
+
+3.0, patchlevel 9 -- Tue Sep  7 14:02:00 PDT 1993 -- Tim Mann
+
+* General release, minor update to 3.0.pl8.
+
+* Loosened checking on whether it's okay to start a move, to satisfy
+ICS ultra-blitz players.  Now we don't check whether it's your turn
+until you let go of the piece.
+
+* Parser now recognizes "+-+" as meaning the game ended in a draw.
+
+* Got rid of S_NONE symbol, which seems to conflict with some symbol
+Sun defines.
+
+* Tweaked the man page.  Clarified that there is currently no way for
+two people running copies of xboard to play each other without going
+through the Internet Chess Server.
+
+* Fixed a bug in color name conversion.  Asking for two different
+colors whose names were the same in the first four characters would
+get you two copies of the first one.  Thanks to Volker Zink for the
+bug report.
+
+* Improved confusing Usage() message.
+
+* Added a bunch of Sun information to the Imakefile and INSTALL file.
+Thanks to Ed Hanway, Arik Klingensmith, and others who responded.
+
+* Test for defined(WIN32) instead of !defined(unix).
+
+* Avoid using (void *) type with non-ANSI C compilers.  Thanks to
+James Altucher for the bug report.
+
+3.0, patchlevel 8 -- Thu Sep  2 12:23:01 PDT 1993 -- Tim Mann
+
+* Note: Patchlevel 8 was the first non-beta release of xboard 3.0
+
+* Added cmail to distribution.  Contributed (and still maintained) by
+Evan Welsh.
+
+* Bug fix: -queen option wasn't initializing menu check.  Reported by
+Pat Surry.
+
+3.0, patchlevel 7 -- Thu Aug 26 13:23:24 PDT 1993 -- Tim Mann
+
+* Sent WinBoard 3.0.pl7 to Torre on ICS
+
+* Added parser.h to hold the interface to parser.l
+
+* Upgraded COPYING file and copyright notices to GNU GPL version 2.
+
+3.0, patchlevel 6 -- Tue Aug 24 15:16:13 PDT 1993 -- Tim Mann
+
+* We no longer display intermediate positions or intermediate comments
+while loading a game file with -timeDelay 0 or loading an opening to
+start up a -matchMode game.
+
+* Loading an empty game from an xboard save file now gives a status
+message "No moves in game" instead of an error popup saying "Game not
+found in file."
+
+* Added comment.awk to distribution.
+
+3.0, patchlevel 5 -- Tue Aug 17 16:45:54 PDT 1993 -- Tim Mann
+
+* Bug fix:  xboard would crash if it couldn't get all its colors; now
+it switches to monoMode instead.  Also, xboard was trying to convert
+color resources even when using a b/w display.  Reported by Larry
+Rogers.
+
+* Bug fix: Declared fields of TimeMark as signed so that we get signed
+instead of unsigned arithmetic.  SubtractTimeMarks was breaking on
+Alpha AXP (which has 64-bit longs) with old declarations.  Reported by
+Michel van der List.
+
+* Bug fixes:  Keyboard accelerators now work after EditComment window is
+popped down.  Iconize keyboard accelerator now works even if xboard
+was started with -iconic flag and later deiconized.
+
+* Bug fix:  The routine that tests whether a move is illegal because it
+would leave you in check was not handling e.p. captures properly.
+Reported by Patrick Surry.
+
+* Bug (?) fix:  Was adding time to clocks at time control even when
+loading a game file.  Actually it's not entirely clear how time
+controls should be dealt with when some moves are loaded from a file
+or clicked in with ForceMoves.  For now ForceMoves mode does add the
+time (because it can be used to change moves during a live game), but
+LoadGame mode does not.
+
+* Updated usage message.
+
+* Previous attempted fix to matchMode had broken TwoMachines mode and
+generally needed more work.  Also simplified command line interface to
+matchMode.
+
+3.0, patchlevel 4 -- Thu Aug  5 14:17:18 PDT 1993 -- Tim Mann
+
+* Thanks again to the beta testers listed for 3.0 patchlevel 3, and also
+Desnogues, Steve Cariglia, Niklas Engsner, Mark Silver, and Roger Rowe.
+
+* Reorganized man page, splitting OPTIONS into subsections.
+
+* matchMode was very broken; fixed.
+
+* Changed convention for turning off command line options from --opt
+to -xopt, to be less inconsistent with GNU standards.  Also changed
+the long command line options to take True/False arguments like
+resources; seems to make more sense this way.
+
+* Added AlwaysQueen option -- suppresses promotion dialog and always
+promotes to a queen if you move a pawn to the last rank.  Has no
+effect on gnuchess (or your ICS opponents!) -- they can still
+underpromote.
+
+* Subtracted an extra fudge term when determining how wide message and
+title widgets should be.  This fixes a problem some beta testers had.
+Wish I knew why it's needed.
+
+* Bugfix in parser; symptom was that you couldn't do LoadGame after
+observing a game on ICS.
+
+* Bugfix in Forward; didn't work after game ended while Pause was turned on.
+
+* Removed bogus execute bits on .h files.
+
+* Use REMOTE_SHELL and TELNET_PROGRAM definitions.
+
+* MachineWhite and MachineBlack now work from TwoMachines mode.
+
+* Popping down an error message with the [ok] button was not turning off
+the errorUp flag, so the next move would cause xboard to try to pop it
+down again, resulting in a wild memory reference and sometimes a crash.
+
+3.0, patchlevel 3 -- Tue Aug  3 17:40:27 1993  -- Tim Mann
+
+* Thanks to my beta testers: Patrick Surry, Takuya Kojima, Robert J. Luoma,
+Chris L.  Petroff, Richard K. Lloyd, Michel van der List, Craig Metz,
+Antoon Frehe, Simon Clift, Shelly, Eric Peterson, Christopher Mitchell,
+Martin Koch, Ed Hanway, Steve Booth, Udo, Ken Hobday, and Joseph Duhamel.
+
+* Improved error messages for trying to move the wrong color pieces or
+to move when it's not your turn.
+
+* Special code for monoMode on 1-bit displays now understands displays
+where 1=white and 0=black.
+
+* Declare getenv() if <stdlib.h> not included; avoids a compiler warning.
+
+* Documented borderXoffset and borderYoffset.
+
+* Added -titleInWindow option for use with X window managers that
+don't let us set the title in the window banner.
+
+* Fixed error message printing in WinBoard; system error messages no
+longer appear as numeric codes.
+
+* The error message popup is now non-modal; you don't have to press the
+[ok] button before you can do something else.  In addition, the popup is
+positioned so that it doesn't cover up the board (too much), and making a
+move or otherwise clicking on the board pops it down.  (Not implemented in
+WinBoard.)
+
+* You can now call your opponent's flag in ICS mode by clicking on his
+clock. 
+
+* Fixed minor bugs in -flipView option and documented exactly how xboard
+decides which way to flip the view.
+
+3.0, patchlevel 2 -- Fri Jul 30 22:20:23 PDT 1993 -- Tim Mann
+
+* Added Autosave to Options menu.  Would be better to have Save
+Options dialog as in WinBoard, but this was quick to do and gives the
+most-needed functionality.
+
+* Changed "Reload Game" on menu to "Reload Same Game".
+
+3.0, patchlevel 1 -- Thu Jul  8 21:22:59 PDT 1993 -- Tim Mann
+
+* Sent a copy of patchlevel 1 to Patrick Surry to beta-test.
+
+* Added -cmail option that sets appData.cmailMode.  Currently a no-op.
+In the future this may set special modes for use by the cmail script
+for playing chess by email.
+
+* Added LoadNextGame, LoadPreviousGame, and ReloadGame to File menu.
+ReloadGame suggested by Patrick Surry.
+
+* Added -flipView command-line option.  Suggested by Patrick Surry.
+
+* Fixed bugs in parser.l:  (1) Pattern for "# xboard game file ..."
+needed to match to end of line.  (2) Start of a new file was not matching
+the ^ start-of-line character.  The fix for this is a kludge.
+
+* Made game counting code in LoadGame more robust, and made LoadGame
+able to detect the end of a saved partial game (by noticing the start
+of the next game) in game files created by XBoard itself.  We don't
+try to find the start of the next game that way in other kinds of game
+files, because the only way I can think of to do that is to look for
+another move #1, and that technique gets too many false hits.
+
+* Fixed recently introduced bug in LoadGame when game starts with a
+position diagram.
+
+3.0, patchlevel 0 -- Fri Jun 25 14:17:17 PDT 1993 -- Tim Mann
+
+* Changes in this patchlevel were too numerous to list.  Larger ones are
+listed below.
+
+* Added a popup dialog to enter and edit comments.  Inspired by some
+code from Patrick Surry.  Changed the normal read-only comment popup
+to the same style.
+
+* Added ICS init script feature from Karl Schwamb.
+
+* Added some ESIX fixes and OMIT_SOCKETS ifdef option, from Kayvan Sylvan.
+
+* Revamped code to allow use of flex instead of lex on parser.l.
+Using flex requires adding -DFLEX to defines in Imakefile.
+
+* Source code is split into front end (xboard.c), which knows about X
+and Unix, and back end (backend.c), which knows about chess, gnuchess,
+and the ICS.  There is also a front end for Windows NT.
+
+* Boolean command line options now use "-foo" to turn on and "--foo"
+to turn off instead of "-foo true" and "-foo false".  [Later -xfoo;
+see above.] 
+
+* Added menu commands to control autoflag, bell, and coords options.
+
+* User interface has a new look: (1) Menu bar instead of array of
+buttons.  A few very commonly used features have small buttons in
+addition to being on the menus. (2) Large font for clock.  (3) Pop-up
+dialogs for errors.
+
+2.1, patchlevel 11 -- Sat Jun  5 00:01:01 PDT 1993 -- mann at src.dec.com
+
+* Added code to deal with "wild" games on ICS.  This includes allowing
+castling with the king on d1 or d8, which is allowed in wild(1) games
+if the king started there.  Notation is o-o to castle "short"---to
+whichever side the king is closer to---and o-o-o to castle "long."
+Right now wild castling is always allowed by xboard; we rely on ICS or
+gnuchess to reject it when we aren't really in wild mode.
+
+* memcpy call had arguments in wrong order.
+
+* Removed April Fool code
+
+2.1, patchlevel 10 -- Mon Feb 15 10:19:31 PST 1993 -- mann at src.dec.com
+
+* Avoid trying to select on a pipe when using System V.  Needed to
+copy some code from InitChessProgram() up into establish().
+
+* Bug fix in disambiguating pawn moves like "ed".
+
+* Fix to error handling in ReceiveFromProgram.
+
+* Bug fix: entering EditPosition mode with black to play highlighted
+White's clock instead of Black's.
+
+* Added telnetProgram resource in case "telnet" is not the name of the
+telnet program.
+
+2.1, patchlevel 9 -- Fri Jan 22 19:08:27 PST 1993 -- mann at src.dec.com
+
+* Entering Force Moves mode clears "flag has fallen" messages from display.
+
+* ICS host name can now be in numeric format; for example 128.2.232.4.
+
+* Bug fix: LegalityTest was failing to test whether a pawn move was
+illegal because the move would discover a check.
+
+* Handle ICS message "mann asserts a win over manntest, who disconnected."
+
+* Bug fix: A recent change to PromotionCallBack had broken
+underpromotion to a knight.
+
+* Bug fix: In EditPosition mode, dragging a piece onto a square border
+would make it vanish.  xboard wasn't distinguishing this case from
+dragging the piece off the board.  Thanks to Matthew Kidd.
+
+* Removed "static" declaration from yywrap for compatibility with IRIX
+version of lex.  Thanks to stiller at blaze.cs.jhu.edu.
+
+* Added substitutes for bzero, bcopy, and gethostname for Solaris
+SVR4.  Thanks to Michael Grant.
+
+* Bug fixes to queen move disambiguation.  Bugs showed up only when
+promotion resulted in more than one queen on the board.
+
+2.1, patchlevel 8 -- Fri Dec 11 17:54:18 PST 1992 -- mann at src.dec.com
+
+* parser bug fix: It now really works to leave off the piece a pawn is
+promoting to and let it default to queen.
+
+* When starting to observe or play an ICS game, don't draw board in
+initial position and then immediately redraw it in the current
+position.
+
+* Handle ICS messages when an "abuser" forfeits a game by
+disconnecting and when a game is aborted ("removed") by an
+administrator.
+
+* Bug fix: A user move when in LoadGame+Pause mode was resuming the
+game load instead of putting us in force mode.
+
+* It seems that crashes inside sscanf when xboard is compiled with gcc
+(as on IBM PS/2 AIX, mentioned below, and also on VAX Ultrix 3.1) are
+caused by an incompatibility between gcc and the sscanf implementation
+on these platforms.  A workaround is to specify -fwritable-strings to
+gcc (see the gcc documentation).  Added info on how to do this to the
+Imakefile.  Thanks to Tom McConnell for this information.
+
+* Clocks are allowed to go negative.  This is mostly for ICS
+compatibility, but it affects gnuchess mode too.  Also, we give the
+time bonus when a player hits the time control boundary even if his
+flag is already down.  This choice is a bit debatable, but it makes
+things look better when you are in TwoMachines mode and gnuchess's
+time management screws up causing it to exceed its time limit.
+
+* Implemented move legality checking code.  Moves made with the mouse
+or parsed from a file are checked for legality before being made.
+This is mostly in preparation for future extensions, such as
+human-human play.  For now it makes -noChessProgram mode more useful.
+
+* If the user takes back moves, we restore the clocks to the earlier
+settings.
+
+* We now handle the output of the ICS oldmoves command, including
+parsing the game end condition.
+
+* Added autoCallFlag mode.
+
+* Fixed glitches in the medium size outline king and rook bitmaps, and
+touched up the medium size solid king and outline queen.
+
+* bug fix: DisplayMove would not display backwardMostMove - 1.
+
+* Added CallFlag button and removed AcceptMatch.  CallFlag is more
+important with new ICS, and accepting the current match offer is easy
+with the new ICS command "accept" (can be abbreviated "ac").
+
+* LoadGame and LoadPosition display tail of file name (plus index
+number, if any) as title.
+
+* MachineWhite, MachineBlack, and TwoMachines now work properly from
+LoadGame and LoadGame+Pause mode.
+
+* Use o-o and o-o-o to castle on ICS, not 00 and 000.
+
+* Stripped out code for old ICS messages; new ICS is now installed.
+
+* Bug fix: don't offer autosave when paused during LoadGame.
+
+2.1, patchlevel 7 - Fri Dec 11 17:40:56 PST 1992 - mann at src.dec.com
+
+* Track change to "Illegal move" message in new ICS.
+
+2.1, patchlevel 6 -- Tue Dec  8 10:48:44 PST 1992 -- mann at src.dec.com
+
+* Kludged around bug in keeping comment popup where you put it by
+adding borderXoffset and borderYoffset resources that give the width
+of the borders added by the window manager.  Yucch.
+
+* Changed searchDepth kludge back to using "help" instead of "bd"; the
+latter didn't work because the output contains a line starting with
+"White", so we think gnuchess is telling us that White won.  Oops.
+
+* Removed some code that uses an X11R5 feature, XrmGetDatabase.
+Without this, the auto font sizing code is harder to make work, so to
+keep my sanity I had to change it to affect only the fonts that appear
+in the main window and the comment popup, not the other popups.  Maybe
+this is better anyway.
+
+* AcceptMatch button now works after a counterchallenge, too.
+
+* Added code for more variants of messages about games being adjourned
+or aborted.  These messages need to be unified in new version of ICS.
+
+* Added workaround for minor bug in ICS; game number on first board
+can be wrong.
+
+* Removed code to say "refresh n" instead of "refresh"; was broken and
+wasn't needed anyway.
+
+* Added missing casts for compilers that distinguish enums from ints
+and missing cast in connect call.
+
+* Added code to recognize "both sides are out of time" draw message
+proposed for next version of ICS.
+
+* Thanks to Danny Sleator and Joe Peterson for bug reports.
+
+2.1, patchlevel 5 -- Sun Dec  6 19:52:40 PST 1992 -- mann at src.dec.com
+
+* Removed gcc and CDEBUGFLAGS from Imakefile.
+
+* Corrected setting of mode to ForceMoves when game file ends or
+contains an AmbiguousMove or BadMove.  Previous bug was harmless.
+
+* Added AcceptMatch button and mention of 50-move rule for Draw button
+to man page.
+
+2.1, patchlevel 4 -- Sun Dec  6 02:55:42 PST 1992 -- mann at src.dec.com
+
+* Now handles revised messages from new version of ICS.  New ICS is
+not released yet, so this code might change further.  Next patchlevel
+will remove support for old ICS; both are there now.
+
+* Initial processing for a new game being watched or played now
+happens when we see the first board image.  Removes the need to parse
+some messages and unifies some code.
+
+2.1, patchlevel 3 -- Tue Dec  1 19:40:40 PST 1992 -- mann at src.dec.com
+
+* Handles ICS messages "Draw : neither player has mating
+material" and "Draw : White has no material, Black has no time."
+
+* Added AcceptMatch button for ICS mode.
+
+* Fixed bug in previous fix to yylexstr().
+
+* Fixed bugs in code for loading old position files that don't start
+with "#" and for handling case where user asked for nth position in
+file but there aren't that many.
+
+* Handles ICS message "* has restored your old game"
+
+* ResetProc always clears title line now.
+
+* Don't issue just "refresh" when watching a game; use game number.
+Upcoming new version of ICS may need this.
+
+* Added code to try to prevent user from watching and/or playing more
+than one game at a time.  There is a race condition inherent here; if
+we get more than one board from the game before our command to stop
+watching it takes effect, we'll think the user started it again.  Not
+clear how to fix this.
+
+* Redid ParseBoard8 to use sscanf.  Code is a good deal cleaner now.
+Also, we now parse out the game number too, though we don't make much
+use of it yet.
+
+* (Tried to put in a feature that recognizes the current game in a
+game file must have ended when we see the start of a new one, but had
+to disable it because we have too many false hits with the current
+parser, especially in gnuchess listing files.)
+
+* Moves read from game files or received from ICS are now translated
+into canonical algebraic form just like all other moves.  Minor nit:
+If you use Reset while playing or observing a game in ICS mode, the
+game history (including the current board position) is lost, so the
+next move of the current game can't be translated.
+
+* Default fonts now vary with board size, and are chosen by pixel size
+instead of point size (since piece bitmaps have a fixed pixel size).
+
+* Bug fix: An extra Forward was required to skip over time indications
+in game files.
+
+2.1 patchlevel 2 -- Fri Nov 27 23:30:00 PST 1992 -- mann at src.dec.com
+
+* If you move the comment popup, the next time it pops up it will come
+back where you put it.
+
+* Fixed yylexstr() so calls to it can be interspersed with calls to
+yylex().
+
+* Fixed bugs in Forward/Backward while in LoadGame mode.
+
+* Changed Save{Game,Position} functions to append instead of
+overwriting if file exists.  Changed Load{Game,Position} functions to
+deal with multiple games/positions per file.
+
+* Changed load{Game,Position}File resources to trigger automatic load
+on program startup.  Changed save{Game,Position}File resources to
+trigger automatic save after every completed game and on program exit.
+
+* Added autoSaveGames mode.
+
+* Fixed bug with PromoPiece in call to MakeAlg from MakeMove.
+
+* Many changes to get rid of picky compiler warnings and generally
+clean up the code.
+
+2.1 patchlevel 1 -- Fri Nov 27 02:45:00 PST 1992 -- mann at src.dec.com
+
+* A last minute change before patchlevel 0 went out broke
+ParseGameHistory().  Immediately fixed in patchlevel 1.
+
+Version 2.1, patchlevel 0 -- Fri Nov 27 02:00:00 PST 1992 -- mann at src.dec.com
+
+* Uses "time" command of gnuchess 4.0 and following to keep clocks in
+sync.  Still works with older versions without this command; we test
+whether the command is present the first time each chess program is
+started.
+
+* File name dialog pops up under the mouse cursor, so that it's got the
+keyboard focus if the window manager is using pointer focus.
+
+* Attempts to move the wrong color piece or an empty square are filtered
+out in xboard instead of being passed on to GNU Chess or the ICS.
+
+* The reason a game ended is now remembered even if you move backward
+and forward after it ends.  It is forgotten only if you make a move
+(which is as it should be---this is now a different game, which hasn't
+ended yet).  The message saying why the game ended no longer wipes out
+the last move.
+
+* Pause, Backward, Forward, ForceMoves, and EditPosition now work from
+TwoMachines mode.
+
+* Forward and Backward now change only the board display unless you
+are in ForceMoves mode.  Pause mode keeps new moves that are received
+from being displayed on your screen until you unpause (or use
+Forward).
+
+* Added option to ring the bell after opponents' moves.
+
+* Saved games that start from other than the standard initial position
+now begin with a postion diagram as in saved position files.  The
+loader is modified to understand such save files.
+
+* Improved error checking when trying to read from gnuchess.
+
+* Parser understands things that look like time indications, e.g., (0:12),
+instead of popping them up as comments.
+
+* Send "quit" to gnuchess before trying to kill it.  I needed this
+locally because sending a SIGTERM to rsh was not killing the remote
+program on some internal field test systems we have.
+
+* Merged in code from John Chanak to make xboard a front end to the
+Internet Chess Server, and added several improvements of my own.
+(These include parsing end of game messages, loading the current state
+and previous history of a game that's joined in progress via "watch"
+or "load", automatic switch from board style 1 to 8 when needed,
+removing irrelevant buttons and adding some new ones, adding the
+useTelnet and gateway resources, and miscellaneous code cleanup, bug
+fixes, and documentation.)  Many thanks to John for writing and
+contributing the initial version of this code.
+
+Fri Oct 30 20:16:40 PST 1992 (patchlevel 25) mann at src.dec.com
+
+* gnuchess now castles by sending us "o-o" or "o-o-o" (starting with a
+preliminary version of 4.0.pl60 that I have).  Added code to handle
+this.  The old format ("e1g1", etc.) still works too.
+
+* Added code to format moves in normal abbreviated algebraic notation
+(for example, e4, exd4, f8Q, Nf6, 0-0) instead of coordinate algebraic
+(for example, e2e4, e3d4, f7f8q, g1f6, e1g1).  Moves entered with the
+mouse or received from gnuchess are translated into this canonical
+format for display on the message line or in saved game files.  Moves
+read from game files are not translated, however; they are shown and
+saved just as they appear in the file.
+
+Mon Sep 14 13:19:01 PDT 1992 (patchlevel 24) mann at src.dec.com
+
+* It's not really correct to write an ep capture of a pawn on e5 as
+fxe5; this should be written as fxe6 because e6 is where the capturing
+pawn ends up.  Nevertheless, the parser now interprets fxe5 as the ep
+capture f5xe6 unless there is a pawn on f4, in which case it
+interprets fxe5 as f4xe5.  By design, the parser does not flag fxe5 as
+ambiguous if there are pawns on both f4 and f5; instead it prefers the
+more legitimate f4xe5 interpretation.
+
+* A move like fxe6 or fe6 is now interpreted as an e.p. capture of the
+pawn on e5 if there is one there and e6 is empty.
+
+* A move like fxe5 can no longer be interpreted as an e.p. capture if
+there isn't a pawn on e5 to be captured.  Previously this could happen
+erroneously if there were pawns on both f4 and f5, and the f4 pawn was
+capturing a piece on e5.
+
+* The parser no longer munges the move it is parsing; in the past, for
+instance, it would remove the "x" from a move like dxc5 before echoing
+it to the screen.
+
+* The parser now detects when a move is ambiguous and returns an
+error, instead of arbitrarily choosing one possibility as it used to.
+
+Mon Aug 10 18:40:47 PDT 1992 (patchlevel 23) mann at src.dec.com
+
+* Added code so parser can handle fully qualified algebraic, e.g.,
+Ng1-f3, N/g1-f3, Ng1f3, or even Pe2-e4.  The "P" and "/" work only for
+fully qualified moves, not generally.
+
+* Fixed parser bugs in handling moves with rank or file disambiguator,
+e.g. N1f3 or Ngf3.
+
+Mon Jul  6 17:55:32 PDT 1992 (patchlevel 22) mann at src.dec.com
+
+* AIXV3 patch from Tom McConnell; thanks!
+
+* After hitting the Backward button we see the last move made instead of
+the word "Pausing" displayed.
+
+* Fixed a couple of problems compiling on IRIX; thanks to Michel Arsenault
+and Alan Walsh for bug reports and help with fixes.
+
+* Added optional display of algebraic notation coordinates along left and
+bottom edges of board.  This was inspired by some code from Jean-Christophe
+Engel; thanks!
+
+* Swapped EditPosition and Pause buttons to reduce danger of losing the
+game in progress by hitting EditPosition when you wanted Backward.  Thanks
+to Ove Lundberg for complaining (though it bugged me too).
+
+* Despite one complaint, I kept the feature of changing both clocks when black
+makes time control, rather than changing each individually when the player
+involved makes it.  This is to avoid having it look like White is way ahead on
+time while Black is thinking about the last move of the time control period
+(i.e., when White has made time control but Black hasn't yet).
+
+* Corrected clocks to work as in real tournaments.  Time is *added* when you
+reach time control; previously the clocks were simply set to the length of the
+new time period.  Also, when a player's flag falls, he still does not receive a
+new time allotment at the next time control, but his opponent does still
+receive more time if *his* flag has not fallen; previously, time controls were
+ignored for both players if either flag fell.  I forget who reported this bug.
+
+* Added a small ESIX patch from Kayvan Sylvan.
+
+Mon Jun 22 13:24:38 PDT 1992 (patchlevel 21)
+
+* Added some SVR4 support code from Ronald Cole.  It's Greek to me.
+
+* Note:  Stephen Meatheringham reports a bug causing xboard to crash with an
+error from the X server when run on a Sun Sparcstation IPX with Solaris 1.0.1
+and OpenWindows 3.0.  This bug has not been tracked down yet.
+
+* Fixed a problem with ATTENTION code.  On some operating systems, you have to
+be even more cautious about when you send a SIGINT to gnuchess, because the
+signal handler gets deinstalled each time it is used, and gnuchess does not
+reinstall it immediately.  In particular, if you send a SIGINT and make an
+illegal move or ask for a hint, gnuchess does not reinstall the handler until
+*after* you make your next move, so you had better not send a SIGINT before
+it.  I put a workaround for this case into xboard; I hope there are no more.
+
+* The ATTENTION code is needed when compiling for the ESIX operating system,
+because ESIX has a bug in the FIONREAD ioctl, so the code in gnuchess that
+lets you interrupt its thinking on your time just by typing in your move does
+not work.  Perhaps gnuchess will have a workaround for this eventually.
+
+* Fixed yet another bug in using XtGetValues; code to inhibit shell resizing
+was leaving a null pointer as the place to store the current sizes.
+
+* Man page fixes: corrected -sl to -sd, updated LIMITATIONS.
+
+* Added include of <sys/time.h> conditional on HAS_GETTIMEOFDAY.  I hope this
+works for all systems; on mine, <time.h> and <sys/time.h> are the same file,
+but with an #ifndef that makes it harmless to include both.
+
+* Thanks for reports from Mike Pearlman, Stephen Meatheringham, Kayvan Sylvan,
+d87-mal at nada.kth.se, Urban Koistinen, and Ronald Cole.
+
+Mon Jun  8 11:39:18 PDT 1992 (patchlevel 20)
+
+* Documented default value of initString and explained what it means.  This
+paragraph also serves to inform the user that xboard by default will tell
+gnuchess to think on his time, something one user apparently didn't understand.
+
+* Redid -searchDepth (formerly -searchLevel) and -searchTime code.  They both
+work correctly with gnuchess 3.1 now.  The -searchDepth option also works
+correctly with gnuchess 4.0.  The -searchTime option does not work with
+gnuchess 4.0.pl50 or earlier because those gnuchess versions do not have a
+working searchTime feature.  Instead of having xboard do a half-baked emulation
+of this feature by using a 1-move time control, I will be submitting a patch to
+the gnuchess folks to restore the feature as in 3.1.
+
+* Improved clock code.  It now keeps accurate track of fractional seconds of
+clock running time, if your system has gettimeofday(); if not, it is generous
+about them---if a clock has been going for n.m seconds when it is stopped, only
+n seconds are charged.  Previously, xboard would charge one second immediately
+when a clock was started, so if n.m had elapsed when it was stopped, n+1 would
+be charged.  This should stop xboard from thinking gnuchess has let its flag
+fall on the last move of a time control, as it often did before.  I also
+improved the comments and condensed the code a little.  I hope there are no
+systems that have X11 and don't have gettimeofday(), but if there are, I'd like
+to know what to replace it with.
+
+* "Flag dropped" messages now show up on the top line, beside the clocks, so
+that they don't obscure more interesting messages on the second line.
+
+* Fixed confusion of NULL and '\000'.
+
+* Include time.h to get ctime() declaration.
+
+* Fix to "parser bug" messages in parser.l.
+
+* Changed code to work with old-fashioned tolower() macro that requires its
+argument to be an uppercase letter.
+
+* Minor fix to some usage error messages; was reversing program name and
+erroneous argument value.
+
+* Thanks to Mitch Wright, Ranier Orth, and Henrik Schmiediche for bug reports.
+
+Fri Jun  5 13:06:08 PDT 1992 (patchlevel 19)
+
+* Note: xboard does not seem to work when compiled with gcc 1.40 on a
+PS/2 running AIX.  It crashes at the sscanf in line 768 of xboard.c.
+You can work around the problem by specifying the -timeControl option
+on the command line instead of defaulting it.  This does not seem to
+be a bug in xboard itself; it runs okay on PS/2 AIX when compiled with
+MetaWare High C.  [But see 2.1.pl8 above.]
+
+* Removed bogus files from distribution.
+
+* Changed variable name that conflicted with SVR4 ttyname function.
+
+* Thanks to Christoph Strozyk for another bug report, and to several
+of the folks mentioned under patchlevel 18 for testing it.
+
+Wed Jun  3 17:50:37 PDT 1992 (patchlevel 18) mann at src.dec.com
+
+* Added an include of sys/fcntl.h to pick up the definition of O_RDWR for
+System V users.
+
+* Fixed a bug in CatchPipeSignal; was testing the wrong variable to determine
+which chess program got the signal.
+
+* Removed the declaration of strrchr, which was causing problems for some
+people, and added an include of <string.h> or <strings.h> instead.
+
+* Fixed a bunch of type errors uncovered by compilers that check more carefully
+than the one I was using.  I just patched many of them with casts---typically
+cases where a function didn't take the same number and type of arguments as the
+X header file prototype said it should---because I didn't see any other way to
+fix them.  The versions of the X header files that I have don't actually have
+full prototypes for these function types; they declare only the return type and
+just give the argument types as comments.
+
+* InitChessProgram returns immediately if chess program died while we were
+waiting for it to say "Chess".  I think this fixes a bug that could make xboard
+crash or go into an infinite loop printing "Warning: Select failed; error code
+9" if gnuchess crashed there.
+
+* Removed code that tries to put the file descriptor used to read messages from
+gnuchess into nonblocking mode.  I don't see how this kludge could ever have
+fixed the problem it was intended to (see below), and it seemed to be causing
+a race condition when we were waiting for the initial message from gnuchess
+after it started up.
+
+* Thanks to Richard K. Lloyd, Konstantinos Konstantinides, Mark
+Seiden, Erik Schoenfelder, Andreas Stolcke, Rainer Orth, Henry Thomas,
+and Kris Van Hees for bug reports and help with fixes.
+
+Sun May 31 08:00:00 PDT 1992 (patchlevel 17) Bart Massey bart at cs.uoregon.edu
+
+*  'xboard' suffered from a couple of serious bugs.  An initial
+   size needed to be given to the message label to avoid a race
+   condition (!) so I gave it some text (otherwise occasionally
+   xboard would fail because the message widget was 0 width under
+   MIT X11R4).  The sizes needed to be Dimension, not int, because
+   they were written in by Xt -- on my big-endian box Dimension
+   is short, causing chaos.  Also, I hacked a declaration in for
+   strrchr() to shut the compiler up -- this is arguably a kludge,
+   but I couldn't think of anything better; maybe you can.
+
+Fri May 22 13:40:50 PDT 1992 (patchlevel 16)
+
+* First real (non-beta) release of version 2.0.
+
+* Added GNU copyleft notices covering version 2.0 enhancements.
+
+Thu May 21 12:30:09 PDT 1992 (patchlevel 15)
+
+* Removed -g from Imakefile.
+
+* Added casts in parser.l to prevent warning messages from some C compilers.
+
+* Bugfix: code to exit if chess program couldn't be started had bug in error
+message printing.
+
+Tue May 19 11:58:06 PDT 1992 (patchlevel 14)
+
+* Fixes one small bug: If LoadGame does not find a game in the file, it resets
+xboard to BeginningOfGame mode (as if the Reset button was pressed), instead of
+leaving it in LoadGame mode.
+
+Mon Apr 13 18:32:27 PDT 1992 (patchlevel 13)
+
+* Improved error handling when gnuchessx crashes.  Now displays a message and
+enters EndOfGame state without exiting.  This should help with diagnosing
+gnuchessx problems, since the position and move history are not lost.
+
+* Debugged man page.
+
+Version 2.0 -- Thu Apr  2 16:04:54 PST 1992 (patchlevel 12)
+
+* Added small 40x40 pixel pieces; board size now specified as small, medium, or
+large. 
+
+* Improved man page.
+
+* Saved position files now say "white to play" if it's white's move.
+
+* SavePosition while in EditPosition mode now gets side to play right.
+
+* Made "Pawn" the default on edit position menus.
+
+* Removed "To play" from edit position menus, since it's redundant.  Left
+support code in so it can be restored if someone wants it.
+
+* Tightened parser's definition of a move number to help further with skipping
+over stuff before the first move.
+
+* Put back feature of skipping over stuff in game files before a start of game
+marker.  This helps when loading electronic mail messages that have things
+like "00" in the header (looks like castling), or that talk about moves in
+running text before the actual game score.  Tradeoff is that we can't load
+games that don't either have move numbers or say "gnuchess game" just before
+the moves.
+
+* Changed version number to 2.0 because others have used "1.3" for patched
+versions of 1.2.  Display version number and patchlevel at startup.
+
+Thu Apr  2 15:30:22 PST 1992 (patchlevel 11)
+
+* Bugfix:  Match started with TwoMachines button now handles the case where
+user loaded/edited a position *and* forced some moves.
+
+* added error message feedback to many cases where the user's button press is
+rejected because it isn't allowed in the current mode.
+
+* added -noChessProgram option to allow use as a passive chessboard without
+gnuchess, replacing old buggy scheme that tried to do this automatically when
+gnuchess was not found on the search path.
+
+* parser accepts "=" in front of promotion piece
+
+* parser accepts ":" notation for captures
+
+* Removed SwitchSides button to make room for EditPosition.  Left code in
+place, ifdef'ed out.
+
+* Added EditPosition mode.
+
+* Reformatted xboard.c to eliminate long lines.
+
+* Promotion popup now appears near rank to which pawn is moving.
+
+* UI improvement: Button representing current program mode is kept highlighted.
+
+* Bug fix:  Hint button is now disabled when machine is on move.
+
+Sat Mar 21 14:57:37 PST 1992 (patchlevel 10)
+
+* TwoMachines now works from MachineWhite or MachineBlack mode.
+
+* ForceMoves and Backward/Forward now work at the end of a game started by
+the TwoMachines button.
+
+* Sends o-o or o-o-o to gnuchess instead of O-O or O-O-O.
+
+* Bug fix:  SwitchSides button is now disabled when machine is on move.
+
+* Added -searchLevel option and corrected handling of -searchTime to reflect
+the way gnuchess really handles command line options instead of what the
+documentation used to say.  Allowed optional ":seconds" on times.
+
+Tue Mar 17 21:00:35 PST 1992 (patchlevel 9)
+
+* Removed non-working code that tried to recover when a remote chess program
+could not be started; now exits with a message instead.
+
+* Now waits for chess program to print its first message (normally "Chess")
+before sending it any commands.
+
+* Matches between two machines can now start from a black-to-play position or
+black-to-play opening.
+
+* Bug fix: The program would sometimes lose track of the board position after
+the end of the game, drawing a board full of white pawns next time it got an X
+redraw request.  Now fixed.
+
+* Cleaned up handling of illegal moves in game files.  Now we just stop reading
+and go into ForceMoves mode.
+
+* Saved games against gnuchess indicate who won (restored and debugged 1.2
+feature). 
+
+* Setting -searchTime turns off -clockMode.
+
+* My trick for setting up a black-to-play position broke in the transition from
+gnuchess 3.1+ to 4.0.  Installed a different trick that works with both.
+
+* Bug fix: Was clobbering memory by mallocing one byte too few for the file
+name in SetupPositionFromFileProc.  This usually resulted in a crash on the
+second attempt to load a position from a file.
+
+Mon Mar 16 16:49:00 PST 1992 (patchlevel 8)
+
+* Game and position files are saved in CHESSDIR as well as loaded from there.
+We actually chdir there, so gnuchess listing files also wind up there.
+
+* Underpromotion moves from gnuchess really work now.
+
+Sat Mar 14 14:55:24 PST 1992 (patchlevel 7)
+
+* Cleaned up lots of bugs and kruft in parser.l.  It's a wonder the old version
+worked at all.  Improved rejection of random text interspersed with the moves.
+
+* Relabeled buttons to reduce confusion (Play From File --> Load Game;
+Setup From File --> Load Position).
+
+* Bug fix:  Doesn't exit at the end of a game that was started by pressing
+the Two Machines button.
+
+* Bug fix:  Doesn't get confused if you hit Machine Black (White) while
+the machine is already playing black (white) and is on move.
+
+* Prints "White to play" or "Black to play" after loading a position file.
+
+* Bug fix:  No longer hangs if no start-of-game is found in a game file.
+
+* More permissive about game file format.  The first line is not assumed
+to be a header comment unless it starts with "#".  We don't insist on
+seeing a "1." before the first move.
+
+* Added pop-up dialog to allow underpromotion.  Moving a pawn to the last rank
+pops up a dialog to let you select what piece to promote to.  Also added code
+to handle underpromotion moves from gnuchess or from a game file correctly.
+
+* Added code to send SIGINT to gnuchess before trying to move, if gnuchess
+might be busy thinking on our time.  The code is ifdef'ed out because it's
+not necessary; only beta-test versions of gnuchess 4.0 at patchlevel 19 or
+below require it.
+
+Mon Feb 24 20:10:22 PST 1992
+
+* Merged fixes received from Stuart Cracraft and Mike McGann, to iconic mode
+and to ShutdownChessPrograms.  (They both sent the same fixes.)  I did not
+install the change that removed "easy" from the initialization string, so
+xboard will still try to run gnuchessx in "hard" mode (thinking on opponent's
+time) by sending this command.
+
+Version 1.3 -- Thu Dec 19 18:19:00 PST 1991  mann at src.dec.com (Tim Mann)
+
+* I've fixed a slew of bugs in this version of xboard:
+
+* You can now back up from the end of a game, even if gnuchess was playing
+against you.  Since gnuchess exits upon mate or draw (when it's not in force
+mode), this feature works by starting up a new copy of gnuchess and feeding it
+the saved starting position and moves.  Drawback: the new gnuchess starts with
+clocks at the beginning of a fresh time control.
+
+* Note: the "force" command to gnuchess is a toggle.  I fixed a couple of
+places in xboard where "force" was being issued when gnuchess was already in
+force mode, which resulted in chaos.  I don't know if they were in 1.2 or if I
+added them myself in the course of putting in new features.
+
+* ForceMoves button is now legal in PlayFromFile mode.  It closes the game file
+and lets you force moves (or go Backward) from whatever position you've
+reached.
+
+* The parser now recognizes "white resigns" and "black resigns" (in any
+combination of upper and lower case, with or without the closing "s").  These
+used to be misinterpreted as meaning "white wins" or "black wins" respectively!
+Added "1 - 0" and "0 - 1" as equivalents for "1-0" and "0-1".
+
+* I removed the parser feature of considering "!" as a comment delimiter.
+"!" is so common as an annotation in game scores that this feature seems like a
+very bad idea.
+
+* Added a wait() after each successful call to kill() to avoid leaving zombie
+processes around.
+
+* Removed the feature of putting an indication of how the game ended into the
+internal move list when playing from a file.  The only benefit of this was that
+it would get written back out if you saved the game at that point.  This
+feature doesn't seem too useful, since you are unlikely to save a game you've
+read in without making any changes, and it caused a lot of problems in the code
+and user interface.  The end condition is still displayed as a message when
+it's first read in from the file.  End conditions when playing against gnuchess
+are still saved, too.
+
+* programName is now the last file name component of argv[0], not all of it.
+
+* xboard.c got three compiler warnings due to arguments that didn't match the
+prototypes on X toolkit functions.  I got rid of them by adding some casts, and
+adding extra unused arguments to the ReceiveFromProgram function.
+
+* As I received it, the distribution had an extra period glued on the front
+of every line that started with a period.  This broke the manpage in an
+obvious way.  It also broke parser.l in a nonobvious way that stopped
+PlayFromFile from working.
+
+* Fixed one or two bugs where the clock was started when it shouldn't have
+been.  I think one example was if you tried an illegal move in ForceMoves mode.
+
+* Now starts the machine's clock if you hit MachineWhite when white is on move
+or MachineBlack when black is on move.
+
+* Now updates the to-move indicator (highlight on clock display) when you use
+Forward/Backward or ForceMoves.
+
+* gnuchess 3.1+ has a bug that makes it try to think on its opponent's time
+even when in force mode; this causes problems with xboard's SetupFromFile
+command because gnuchess's saved hint move is garbage after the new position is
+loaded, so gnuchess prints out an error message when it tries to think about
+what it would do if the user made this move.  Here is a patch for gnuchess
+3.1+:
+
+*** nondsp.c~   Mon Dec  2 12:37:18 1991
+*-- nondsp.c    Thu Dec 19 15:36:06 1991
+***************
+*** 1223,1229 ****
+    ok = flag.quit = false;
+    player = opponent;
+    ft = 0;
+!   if (hint > 0 && !flag.easy && Book == NULL)
+      {
+        fflush (stdout);
+        time0 = time ((long *) 0);
+*-- 1223,1229 ----
+    ok = flag.quit = false;
+    player = opponent;
+    ft = 0;
+!   if (hint > 0 && !flag.easy && Book == NULL && !flag.force)
+      {
+        fflush (stdout);
+        time0 = time ((long *) 0);
+
+* SavePosition/SetupFromFile now handle black-to-play positions.  If it's
+black's move in a saved position, the line "black to play" is printed
+immediately after the board display.  Upon loading a position, xboard
+looks for "black" at the beginning of this line to determine whether it's
+black's move.
+
+* SetupFromFile now leaves you (effectively) in ForceMoves mode.  This
+eliminates some cases where the program would get into an inconsistent state,
+and hopefully is more intuitive for the user, too.
+
+* PlayFromFile now leaves xboard in ForceMoves mode after playing through all
+the moves in the file.  You can use Backward/Forward, make moves, get gnuchess
+to join the game with MachineWhite or MachineBlack, etc.  The game file can end
+with either white or black to play.
+
+* Backward/Forward now seem to work in all cases.  Previously using these
+buttons during a game against the machine would get xboard out of sync with
+gnuchess's idea of what was going on, resulting in chaos.  Now using these
+buttons puts xboard in ForceMoves mode; you can bring gnuchess back into the
+game using the MachineWhite or MachineBlack buttons.
+
+Thu Jun 27 15:06:25 PDT 1991
+
+  * Remove comment popups during a reset.
+
+  * Bug in my forward move fix.  Didn't work for playgamefile mode.
+
+Thu Jun 20 15:04:06 PDT 1991
+
+  * Can't do a backward move when it isn't your turn because gnuchess
+    gets confused.  Similar bug for forward move.  Do a bunch of moves,
+    back up move and go forward.  These get filtered out now.
+
+  * Put easy back into the initString.  This DISABLES easy mode which by
+    default is ON.
+
+  * New-line wasn't always being added to forward move strings sent to gnuchess.
+
+  * Parsed comments as [ ..............text follows ] into d7d5
+
+  * Long game file comments cause core dumps on HP systems.
+
+  * Multiple uses of the get positition file button got confused
+    on the second click.
+
+  Minor fixes to the 1.2 release
+
+Version 1.2 -- Tue Jun 11 17:14:12 PDT 1991
+
+  * For version 1.2, Jeff Kenton, Richard LLoyd, David Jensen, Martin D.,
+    Bill Schmidt, Scott Hemphill, Paul Vaughan and Bill Shauck all found
+    a lot of bugs that we put into xboard just to see if they were paying
+    attention.  They were.
+
+  * Changed the protocol that xboard uses to work with the new version of
+    gnuchessr.
+
+  * There was an off by one error with the clock resetting code.  Also,
+    the clock display highliting was wrong.  Thanks to Bill Shauck for
+    pointing these out.
+
+  * enumerations are not really integers on some C compilers.  I added casting.
+    The new version of gnuchess expects the "go" command for two machine
+    and machine plays white cases.  The whiteString resource is for
+    compatibility with previous gnuchess versions which get confused by go.
+    Thanks to Martin D. for catching these.
+
+  * Fixed a bug where the checkmate message wasn't being parsed and xboard
+    kept playing.  Also, the message was added to game file if saved.
+    Thanks to Scott Hemhill for pointing this out.
+
+  * Fixed a bug where saving a long game, resetting and saving a short game
+    resulted in appending the end of the long game to the short one.
+    If a game is just being played out and there is no reason for gnuchessr
+    to be used, ignore pipe signals.  This allows people to use xboard
+    as a chess board without need for gnuchess.  Also, trivially bad moves
+    such as e2e2 are not passed on to gnuchessr but instead ignored out of
+    hand.  This allows people using xboard as a chessboard with gnuchessr
+    to pick a piece up, think and put it back down without making a move.
+    Thanks to Jeff Kenton for pointing these out.
+
+  * Added the CHESSDIR environment variable.  Game and position files are
+    found in this directory.  If this variable is not declared, then the
+    current directory is used.  File names starting with / are treated
+    specially.
+
+  * The bitmap file names were changed so that none exceeded 14 characters.
+    This is necessary for R5.
+
+        fcntl(from_prog[0], F_SETFL, O_NDELAY);
+
+    The xboard fix was to set non-blocking i/o on the read pipe for gnuchessr
+
+        printz ("Illegal move (no matching move generated)");
+
+  * fixed a problem with the new version of gnuchessr where xboard wasn't
+    getting gnuchessr error messages for illegal moves.  The problem seems
+    to be fixed *without* any gnuchess changes but this is likely to be
+    highly system dependant.  There should be a new line on line 246 of nondsp.c
+
+  * -iconic doesn't work at all now.  The Iconify() does work.  This was
+    a tradeoff and it is really an Xt bug.
+
+  * Fixed a compiler warning for gcc and an error for the IBM RT compilers.
+    This is the VOID_PROC macro in xboard.h.  Thanks to David Jensen for this.
+
+  * If the DisplayWidth or DisplayHeight is less than 800, use small size mode.
+    Also the size of the name widget was reduced from 500 pixels to 400 pixels
+    because in small size mode there was a gap on the right.
+    Changed the default font from fixed to helvetica_oblique14 to:
+        **-helvetica-bold-r-normal--14-*-*-*-*-*-*-*
+    helvetica_oblique14 is a font alias not on all R4 systems.
+    Curiously enough, the 17 point is not available on 75dpi systems
+    and the 18 point font is not available on 100dpi systems.
+    Thanks to Richard K. Lloyd for pointing these out.
+
+  * Minor hacks to work with R5 alpha.  Had to add an event handler to the
+    boardWidget to get translations to work.  This may go away with the real R5.
+    Added <Message>WM_PROTOCOLS: QuitProc() for R5 ICCCM compatibility.
+
+  * If the first character of the file is not `1' then the first line
+    of a game or position file is displayed as the name in a label widget.
+
+  * Added a PopUp dialog for getting file names.
+
+  * Modified the code to use the R4 routines rather than R3 compatibility.
+
+  * Changed the forwards/backwards/readgamefile code to allow a play to step
+    back and forth in a game.  If he steps all the way to the beginning
+    he has to restart the game.  If he gets into a mated position, same problem.
+
+  * Moved the man page from xboard.1 to xboard.man.  This makes imake man page
+    installs work correctly.  Thanks to Richard K. Lloyd for pointing this out.
+
+  * Corrected the queening code.  XBoard was sending the wrong syntax.
+    It was sending for example h8(Q) when it should have been sending h8q.
+    Thanks to Paul Vaughan and Mike McGann for pointing this out.
+
+  * Added a lex parser for algebraic games.  It should be easy to use the parser
+    for other interfaces such as the Microsoft Windows version.
+    It parses comments of the form [anything] and ! to the end of a line.
+
+Version 1.1 -- Mon Jan  7 14:46:03 PST 1991
+
+  * Roger Dubar, Konstantinos Konstantinides, Wolfgang S. Rupprecht,
+    Paul Scowen, Mvh Smidt and Kayvan Sylvan all helped immensely during
+    beta-testing.
+
+  * older non-ANSI versions of Sun compilers complain vociferously.
+
+  * the remoteShell resource was added for HP-UX systems
+    and other systems where the remoteShell isn't rsh.
+
+  * -iconic doesn't work properly.  If XBoard is opened iconic then
+    iconifying it later with a keystroke doesn't work.  I think
+    this is an Xt bug.
+
+  * For systems with smaller screens, XBoard can use smaller pieces,
+    and a smaller board.  -bigSizeMode False uses a smaller set of pieces.
+    These are scaled versions of the large pieces.  They look ok but could
+    be improved.
+
+  * getlogin() does not work in all cases.
+    It was replaced by getpwuid(getuid())->pw_name).
+
+  * Warning messages get displayed in the message box.
+
+  * Any button restarts a paused game.
+
+  * Kayvan Sylvan contributed a patch for ESIX.
+    It seems that select() on pipes is broken on his system.  We declined
+    to incorporate his patch though, because it was a work-around for
+    something that was broken on one system, and selfishly, that system
+    was not my own.  Nevertheless, it is likely that other System V users
+    on PC's may need to use this patch and it is is included as the file
+    ESIX.patch.  To use it, type
+
+        patch xboard.c ESIX.patch
+
+  * Fixed a bug where hint didn't work.  The local version of gnuchessr
+    had been hacked.  The fix was to clone stderr and stdout for gnuchessr.
+
+  * Fixed a bug where a player could play after a game had been finished.
+
+  * The bitmaps have been pushed into the bitmaps directory.
+
+  * Substantially rewrote and simplified the Two Machine code.
+
+  * Added StrStr() because many systems don't have this ANSI function.
+
+  * Added keyboard equivalents.  Added an iconify keystroke, C or c.
+
+  * Works with gcc now.  gcc complained about casting float constants
+    as XtPointers.
+
+  * Detect if the visual doesn't support color.  If so, run in monoMode.
+    An alternative would be to detect grayscale visual and use a collection
+    of gray user interface colors.
+
+        XBoard.clockMode:    False
+
+  * For people who don't like or use chess clocks a clockMode switch
+    has been added.  It is on by default.  It can be turned off in the
+    .Xdefaults file with
+
+  * Added a declaration, xtVersion, which will quickly break on R3 Intrinsics.
+
+  * Hal Peterson contributed a new Imakefile.
+
+  * Rewrote DisplayClocks().
+
+  * Rewrote TwoMachinesPlay mode.
+
+  * Konstantinos Konstantinides added the -searchTime option.
+
+  * Substantially rewrote and simplified the clock code.  If a game was paused
+    and then resumed, the clocks were out of sync.
+
+  * Fixed a bug in HandleUserMove() where the user could make a move while the
+    machine was thinking.  The fix detects and ignores these moves.  onMove
+    was not being used and was removed.
+
diff --git a/ChangeLog.2 b/ChangeLog.2
deleted file mode 100644
index 2594bd8..0000000
--- a/ChangeLog.2
+++ /dev/null
@@ -1,1012 +0,0 @@
-2.1, patchlevel 11 -- Sat Jun  5 00:01:01 PDT 1993 -- mann at src.dec.com
-
-* Added code to deal with "wild" games on ICS.  This includes allowing
-castling with the king on d1 or d8, which is allowed in wild(1) games
-if the king started there.  Notation is o-o to castle "short"---to
-whichever side the king is closer to---and o-o-o to castle "long."
-Right now wild castling is always allowed by xboard; we rely on ICS or
-gnuchess to reject it when we aren't really in wild mode.
-
-* memcpy call had arguments in wrong order.
-
-* Removed April Fool code
-
-2.1, patchlevel 10 -- Mon Feb 15 10:19:31 PST 1993 -- mann at src.dec.com
-
-* Avoid trying to select on a pipe when using System V.  Needed to
-copy some code from InitChessProgram() up into establish().
-
-* Bug fix in disambiguating pawn moves like "ed".
-
-* Fix to error handling in ReceiveFromProgram.
-
-* Bug fix: entering EditPosition mode with black to play highlighted
-White's clock instead of Black's.
-
-* Added telnetProgram resource in case "telnet" is not the name of the
-telnet program.
-
-2.1, patchlevel 9 -- Fri Jan 22 19:08:27 PST 1993 -- mann at src.dec.com
-
-* Entering Force Moves mode clears "flag has fallen" messages from display.
-
-* ICS host name can now be in numeric format; for example 128.2.232.4.
-
-* Bug fix: LegalityTest was failing to test whether a pawn move was
-illegal because the move would discover a check.
-
-* Handle ICS message "mann asserts a win over manntest, who disconnected."
-
-* Bug fix: A recent change to PromotionCallBack had broken
-underpromotion to a knight.
-
-* Bug fix: In EditPosition mode, dragging a piece onto a square border
-would make it vanish.  xboard wasn't distinguishing this case from
-dragging the piece off the board.  Thanks to Matthew Kidd.
-
-* Removed "static" declaration from yywrap for compatibility with IRIX
-version of lex.  Thanks to stiller at blaze.cs.jhu.edu.
-
-* Added substitutes for bzero, bcopy, and gethostname for Solaris
-SVR4.  Thanks to Michael Grant.
-
-* Bug fixes to queen move disambiguation.  Bugs showed up only when
-promotion resulted in more than one queen on the board.
-
-2.1, patchlevel 8 -- Fri Dec 11 17:54:18 PST 1992 -- mann at src.dec.com
-
-* parser bug fix: It now really works to leave off the piece a pawn is
-promoting to and let it default to queen.
-
-* When starting to observe or play an ICS game, don't draw board in
-initial position and then immediately redraw it in the current
-position.
-
-* Handle ICS messages when an "abuser" forfeits a game by
-disconnecting and when a game is aborted ("removed") by an
-administrator.
-
-* Bug fix: A user move when in LoadGame+Pause mode was resuming the
-game load instead of putting us in force mode.
-
-* It seems that crashes inside sscanf when xboard is compiled with gcc
-(as on IBM PS/2 AIX, mentioned below, and also on VAX Ultrix 3.1) are
-caused by an incompatibility between gcc and the sscanf implementation
-on these platforms.  A workaround is to specify -fwritable-strings to
-gcc (see the gcc documentation).  Added info on how to do this to the
-Imakefile.  Thanks to Tom McConnell for this information.
-
-* Clocks are allowed to go negative.  This is mostly for ICS
-compatibility, but it affects gnuchess mode too.  Also, we give the
-time bonus when a player hits the time control boundary even if his
-flag is already down.  This choice is a bit debatable, but it makes
-things look better when you are in TwoMachines mode and gnuchess's
-time management screws up causing it to exceed its time limit.
-
-* Implemented move legality checking code.  Moves made with the mouse
-or parsed from a file are checked for legality before being made.
-This is mostly in preparation for future extensions, such as
-human-human play.  For now it makes -noChessProgram mode more useful.
-
-* If the user takes back moves, we restore the clocks to the earlier
-settings.
-
-* We now handle the output of the ICS oldmoves command, including
-parsing the game end condition.
-
-* Added autoCallFlag mode.
-
-* Fixed glitches in the medium size outline king and rook bitmaps, and
-touched up the medium size solid king and outline queen.
-
-* bug fix: DisplayMove would not display backwardMostMove - 1.
-
-* Added CallFlag button and removed AcceptMatch.  CallFlag is more
-important with new ICS, and accepting the current match offer is easy
-with the new ICS command "accept" (can be abbreviated "ac").
-
-* LoadGame and LoadPosition display tail of file name (plus index
-number, if any) as title.
-
-* MachineWhite, MachineBlack, and TwoMachines now work properly from
-LoadGame and LoadGame+Pause mode.
-
-* Use o-o and o-o-o to castle on ICS, not 00 and 000.
-
-* Stripped out code for old ICS messages; new ICS is now installed.
-
-* Bug fix: don't offer autosave when paused during LoadGame.
-
-2.1, patchlevel 7 - Fri Dec 11 17:40:56 PST 1992 - mann at src.dec.com
-
-* Track change to "Illegal move" message in new ICS.
-
-2.1, patchlevel 6 -- Tue Dec  8 10:48:44 PST 1992 -- mann at src.dec.com
-
-* Kludged around bug in keeping comment popup where you put it by
-adding borderXoffset and borderYoffset resources that give the width
-of the borders added by the window manager.  Yucch.
-
-* Changed searchDepth kludge back to using "help" instead of "bd"; the
-latter didn't work because the output contains a line starting with
-"White", so we think gnuchess is telling us that White won.  Oops.
-
-* Removed some code that uses an X11R5 feature, XrmGetDatabase.
-Without this, the auto font sizing code is harder to make work, so to
-keep my sanity I had to change it to affect only the fonts that appear
-in the main window and the comment popup, not the other popups.  Maybe
-this is better anyway.
-
-* AcceptMatch button now works after a counterchallenge, too.
-
-* Added code for more variants of messages about games being adjourned
-or aborted.  These messages need to be unified in new version of ICS.
-
-* Added workaround for minor bug in ICS; game number on first board
-can be wrong.
-
-* Removed code to say "refresh n" instead of "refresh"; was broken and
-wasn't needed anyway.
-
-* Added missing casts for compilers that distinguish enums from ints
-and missing cast in connect call.
-
-* Added code to recognize "both sides are out of time" draw message
-proposed for next version of ICS.
-
-* Thanks to Danny Sleator and Joe Peterson for bug reports.
-
-2.1, patchlevel 5 -- Sun Dec  6 19:52:40 PST 1992 -- mann at src.dec.com
-
-* Removed gcc and CDEBUGFLAGS from Imakefile.
-
-* Corrected setting of mode to ForceMoves when game file ends or
-contains an AmbiguousMove or BadMove.  Previous bug was harmless.
-
-* Added AcceptMatch button and mention of 50-move rule for Draw button
-to man page.
-
-2.1, patchlevel 4 -- Sun Dec  6 02:55:42 PST 1992 -- mann at src.dec.com
-
-* Now handles revised messages from new version of ICS.  New ICS is
-not released yet, so this code might change further.  Next patchlevel
-will remove support for old ICS; both are there now.
-
-* Initial processing for a new game being watched or played now
-happens when we see the first board image.  Removes the need to parse
-some messages and unifies some code.
-
-2.1, patchlevel 3 -- Tue Dec  1 19:40:40 PST 1992 -- mann at src.dec.com
-
-* Handles ICS messages "Draw : neither player has mating
-material" and "Draw : White has no material, Black has no time."
-
-* Added AcceptMatch button for ICS mode.
-
-* Fixed bug in previous fix to yylexstr().
-
-* Fixed bugs in code for loading old position files that don't start
-with "#" and for handling case where user asked for nth position in
-file but there aren't that many.
-
-* Handles ICS message "* has restored your old game"
-
-* ResetProc always clears title line now.
-
-* Don't issue just "refresh" when watching a game; use game number.
-Upcoming new version of ICS may need this.
-
-* Added code to try to prevent user from watching and/or playing more
-than one game at a time.  There is a race condition inherent here; if
-we get more than one board from the game before our command to stop
-watching it takes effect, we'll think the user started it again.  Not
-clear how to fix this.
-
-* Redid ParseBoard8 to use sscanf.  Code is a good deal cleaner now.
-Also, we now parse out the game number too, though we don't make much
-use of it yet.
-
-* (Tried to put in a feature that recognizes the current game in a
-game file must have ended when we see the start of a new one, but had
-to disable it because we have too many false hits with the current
-parser, especially in gnuchess listing files.)
-
-* Moves read from game files or received from ICS are now translated
-into canonical algebraic form just like all other moves.  Minor nit:
-If you use Reset while playing or observing a game in ICS mode, the
-game history (including the current board position) is lost, so the
-next move of the current game can't be translated.
-
-* Default fonts now vary with board size, and are chosen by pixel size
-instead of point size (since piece bitmaps have a fixed pixel size).
-
-* Bug fix: An extra Forward was required to skip over time indications
-in game files.
-
-2.1 patchlevel 2 -- Fri Nov 27 23:30:00 PST 1992 -- mann at src.dec.com
-
-* If you move the comment popup, the next time it pops up it will come
-back where you put it.
-
-* Fixed yylexstr() so calls to it can be interspersed with calls to
-yylex().
-
-* Fixed bugs in Forward/Backward while in LoadGame mode.
-
-* Changed Save{Game,Position} functions to append instead of
-overwriting if file exists.  Changed Load{Game,Position} functions to
-deal with multiple games/positions per file.
-
-* Changed load{Game,Position}File resources to trigger automatic load
-on program startup.  Changed save{Game,Position}File resources to
-trigger automatic save after every completed game and on program exit.
-
-* Added autoSaveGames mode.
-
-* Fixed bug with PromoPiece in call to MakeAlg from MakeMove.
-
-* Many changes to get rid of picky compiler warnings and generally
-clean up the code.
-
-2.1 patchlevel 1 -- Fri Nov 27 02:45:00 PST 1992 -- mann at src.dec.com
-
-* A last minute change before patchlevel 0 went out broke
-ParseGameHistory().  Immediately fixed in patchlevel 1.
-
-Version 2.1, patchlevel 0 -- Fri Nov 27 02:00:00 PST 1992 -- mann at src.dec.com
-
-* Uses "time" command of gnuchess 4.0 and following to keep clocks in
-sync.  Still works with older versions without this command; we test
-whether the command is present the first time each chess program is
-started.
-
-* File name dialog pops up under the mouse cursor, so that it's got the
-keyboard focus if the window manager is using pointer focus.
-
-* Attempts to move the wrong color piece or an empty square are filtered
-out in xboard instead of being passed on to GNU Chess or the ICS.
-
-* The reason a game ended is now remembered even if you move backward
-and forward after it ends.  It is forgotten only if you make a move
-(which is as it should be---this is now a different game, which hasn't
-ended yet).  The message saying why the game ended no longer wipes out
-the last move.
-
-* Pause, Backward, Forward, ForceMoves, and EditPosition now work from
-TwoMachines mode.
-
-* Forward and Backward now change only the board display unless you
-are in ForceMoves mode.  Pause mode keeps new moves that are received
-from being displayed on your screen until you unpause (or use
-Forward).
-
-* Added option to ring the bell after opponents' moves.
-
-* Saved games that start from other than the standard initial position
-now begin with a postion diagram as in saved position files.  The
-loader is modified to understand such save files.
-
-* Improved error checking when trying to read from gnuchess.
-
-* Parser understands things that look like time indications, e.g., (0:12),
-instead of popping them up as comments.
-
-* Send "quit" to gnuchess before trying to kill it.  I needed this
-locally because sending a SIGTERM to rsh was not killing the remote
-program on some internal field test systems we have.
-
-* Merged in code from John Chanak to make xboard a front end to the
-Internet Chess Server, and added several improvements of my own.
-(These include parsing end of game messages, loading the current state
-and previous history of a game that's joined in progress via "watch"
-or "load", automatic switch from board style 1 to 8 when needed,
-removing irrelevant buttons and adding some new ones, adding the
-useTelnet and gateway resources, and miscellaneous code cleanup, bug
-fixes, and documentation.)  Many thanks to John for writing and
-contributing the initial version of this code.
-
-Fri Oct 30 20:16:40 PST 1992 (patchlevel 25) mann at src.dec.com
-
-* gnuchess now castles by sending us "o-o" or "o-o-o" (starting with a
-preliminary version of 4.0.pl60 that I have).  Added code to handle
-this.  The old format ("e1g1", etc.) still works too.
-
-* Added code to format moves in normal abbreviated algebraic notation
-(for example, e4, exd4, f8Q, Nf6, 0-0) instead of coordinate algebraic
-(for example, e2e4, e3d4, f7f8q, g1f6, e1g1).  Moves entered with the
-mouse or received from gnuchess are translated into this canonical
-format for display on the message line or in saved game files.  Moves
-read from game files are not translated, however; they are shown and
-saved just as they appear in the file.
-
-Mon Sep 14 13:19:01 PDT 1992 (patchlevel 24) mann at src.dec.com
-
-* It's not really correct to write an ep capture of a pawn on e5 as
-fxe5; this should be written as fxe6 because e6 is where the capturing
-pawn ends up.  Nevertheless, the parser now interprets fxe5 as the ep
-capture f5xe6 unless there is a pawn on f4, in which case it
-interprets fxe5 as f4xe5.  By design, the parser does not flag fxe5 as
-ambiguous if there are pawns on both f4 and f5; instead it prefers the
-more legitimate f4xe5 interpretation.
-
-* A move like fxe6 or fe6 is now interpreted as an e.p. capture of the
-pawn on e5 if there is one there and e6 is empty.
-
-* A move like fxe5 can no longer be interpreted as an e.p. capture if
-there isn't a pawn on e5 to be captured.  Previously this could happen
-erroneously if there were pawns on both f4 and f5, and the f4 pawn was
-capturing a piece on e5.
-
-* The parser no longer munges the move it is parsing; in the past, for
-instance, it would remove the "x" from a move like dxc5 before echoing
-it to the screen.
-
-* The parser now detects when a move is ambiguous and returns an
-error, instead of arbitrarily choosing one possibility as it used to.
-
-Mon Aug 10 18:40:47 PDT 1992 (patchlevel 23) mann at src.dec.com
-
-* Added code so parser can handle fully qualified algebraic, e.g.,
-Ng1-f3, N/g1-f3, Ng1f3, or even Pe2-e4.  The "P" and "/" work only for
-fully qualified moves, not generally.
-
-* Fixed parser bugs in handling moves with rank or file disambiguator,
-e.g. N1f3 or Ngf3.
-
-Mon Jul  6 17:55:32 PDT 1992 (patchlevel 22) mann at src.dec.com
-
-* AIXV3 patch from Tom McConnell; thanks!
-
-* After hitting the Backward button we see the last move made instead of
-the word "Pausing" displayed.
-
-* Fixed a couple of problems compiling on IRIX; thanks to Michel Arsenault
-and Alan Walsh for bug reports and help with fixes.
-
-* Added optional display of algebraic notation coordinates along left and
-bottom edges of board.  This was inspired by some code from Jean-Christophe
-Engel; thanks!
-
-* Swapped EditPosition and Pause buttons to reduce danger of losing the
-game in progress by hitting EditPosition when you wanted Backward.  Thanks
-to Ove Lundberg for complaining (though it bugged me too).
-
-* Despite one complaint, I kept the feature of changing both clocks when black
-makes time control, rather than changing each individually when the player
-involved makes it.  This is to avoid having it look like White is way ahead on
-time while Black is thinking about the last move of the time control period
-(i.e., when White has made time control but Black hasn't yet).
-
-* Corrected clocks to work as in real tournaments.  Time is *added* when you
-reach time control; previously the clocks were simply set to the length of the
-new time period.  Also, when a player's flag falls, he still does not receive a
-new time allotment at the next time control, but his opponent does still
-receive more time if *his* flag has not fallen; previously, time controls were
-ignored for both players if either flag fell.  I forget who reported this bug.
-
-* Added a small ESIX patch from Kayvan Sylvan.
-
-Mon Jun 22 13:24:38 PDT 1992 (patchlevel 21)
-
-* Added some SVR4 support code from Ronald Cole.  It's Greek to me.
-
-* Note:  Stephen Meatheringham reports a bug causing xboard to crash with an
-error from the X server when run on a Sun Sparcstation IPX with Solaris 1.0.1
-and OpenWindows 3.0.  This bug has not been tracked down yet.
-
-* Fixed a problem with ATTENTION code.  On some operating systems, you have to
-be even more cautious about when you send a SIGINT to gnuchess, because the
-signal handler gets deinstalled each time it is used, and gnuchess does not
-reinstall it immediately.  In particular, if you send a SIGINT and make an
-illegal move or ask for a hint, gnuchess does not reinstall the handler until
-*after* you make your next move, so you had better not send a SIGINT before
-it.  I put a workaround for this case into xboard; I hope there are no more.
-
-* The ATTENTION code is needed when compiling for the ESIX operating system,
-because ESIX has a bug in the FIONREAD ioctl, so the code in gnuchess that
-lets you interrupt its thinking on your time just by typing in your move does
-not work.  Perhaps gnuchess will have a workaround for this eventually.
-
-* Fixed yet another bug in using XtGetValues; code to inhibit shell resizing
-was leaving a null pointer as the place to store the current sizes.
-
-* Man page fixes: corrected -sl to -sd, updated LIMITATIONS.
-
-* Added include of <sys/time.h> conditional on HAS_GETTIMEOFDAY.  I hope this
-works for all systems; on mine, <time.h> and <sys/time.h> are the same file,
-but with an #ifndef that makes it harmless to include both.
-
-* Thanks for reports from Mike Pearlman, Stephen Meatheringham, Kayvan Sylvan,
-d87-mal at nada.kth.se, Urban Koistinen, and Ronald Cole.
-
-Mon Jun  8 11:39:18 PDT 1992 (patchlevel 20)
-
-* Documented default value of initString and explained what it means.  This
-paragraph also serves to inform the user that xboard by default will tell
-gnuchess to think on his time, something one user apparently didn't understand.
-
-* Redid -searchDepth (formerly -searchLevel) and -searchTime code.  They both
-work correctly with gnuchess 3.1 now.  The -searchDepth option also works
-correctly with gnuchess 4.0.  The -searchTime option does not work with
-gnuchess 4.0.pl50 or earlier because those gnuchess versions do not have a
-working searchTime feature.  Instead of having xboard do a half-baked emulation
-of this feature by using a 1-move time control, I will be submitting a patch to
-the gnuchess folks to restore the feature as in 3.1.
-
-* Improved clock code.  It now keeps accurate track of fractional seconds of
-clock running time, if your system has gettimeofday(); if not, it is generous
-about them---if a clock has been going for n.m seconds when it is stopped, only
-n seconds are charged.  Previously, xboard would charge one second immediately
-when a clock was started, so if n.m had elapsed when it was stopped, n+1 would
-be charged.  This should stop xboard from thinking gnuchess has let its flag
-fall on the last move of a time control, as it often did before.  I also
-improved the comments and condensed the code a little.  I hope there are no
-systems that have X11 and don't have gettimeofday(), but if there are, I'd like
-to know what to replace it with.
-
-* "Flag dropped" messages now show up on the top line, beside the clocks, so
-that they don't obscure more interesting messages on the second line.
-
-* Fixed confusion of NULL and '\000'.
-
-* Include time.h to get ctime() declaration.
-
-* Fix to "parser bug" messages in parser.l.
-
-* Changed code to work with old-fashioned tolower() macro that requires its
-argument to be an uppercase letter.
-
-* Minor fix to some usage error messages; was reversing program name and
-erroneous argument value.
-
-* Thanks to Mitch Wright, Ranier Orth, and Henrik Schmiediche for bug reports.
-
-Fri Jun  5 13:06:08 PDT 1992 (patchlevel 19)
-
-* Note: xboard does not seem to work when compiled with gcc 1.40 on a
-PS/2 running AIX.  It crashes at the sscanf in line 768 of xboard.c.
-You can work around the problem by specifying the -timeControl option
-on the command line instead of defaulting it.  This does not seem to
-be a bug in xboard itself; it runs okay on PS/2 AIX when compiled with
-MetaWare High C.  [But see 2.1.pl8 above.]
-
-* Removed bogus files from distribution.
-
-* Changed variable name that conflicted with SVR4 ttyname function.
-
-* Thanks to Christoph Strozyk for another bug report, and to several
-of the folks mentioned under patchlevel 18 for testing it.
-
-Wed Jun  3 17:50:37 PDT 1992 (patchlevel 18) mann at src.dec.com
-
-* Added an include of sys/fcntl.h to pick up the definition of O_RDWR for
-System V users.
-
-* Fixed a bug in CatchPipeSignal; was testing the wrong variable to determine
-which chess program got the signal.
-
-* Removed the declaration of strrchr, which was causing problems for some
-people, and added an include of <string.h> or <strings.h> instead.
-
-* Fixed a bunch of type errors uncovered by compilers that check more carefully
-than the one I was using.  I just patched many of them with casts---typically
-cases where a function didn't take the same number and type of arguments as the
-X header file prototype said it should---because I didn't see any other way to
-fix them.  The versions of the X header files that I have don't actually have
-full prototypes for these function types; they declare only the return type and
-just give the argument types as comments.
-
-* InitChessProgram returns immediately if chess program died while we were
-waiting for it to say "Chess".  I think this fixes a bug that could make xboard
-crash or go into an infinite loop printing "Warning: Select failed; error code
-9" if gnuchess crashed there.
-
-* Removed code that tries to put the file descriptor used to read messages from
-gnuchess into nonblocking mode.  I don't see how this kludge could ever have
-fixed the problem it was intended to (see below), and it seemed to be causing
-a race condition when we were waiting for the initial message from gnuchess
-after it started up.
-
-* Thanks to Richard K. Lloyd, Konstantinos Konstantinides, Mark
-Seiden, Erik Schoenfelder, Andreas Stolcke, Rainer Orth, Henry Thomas,
-and Kris Van Hees for bug reports and help with fixes.
-
-Sun May 31 08:00:00 PDT 1992 (patchlevel 17) Bart Massey bart at cs.uoregon.edu
-
-*  'xboard' suffered from a couple of serious bugs.  An initial
-   size needed to be given to the message label to avoid a race
-   condition (!) so I gave it some text (otherwise occasionally
-   xboard would fail because the message widget was 0 width under
-   MIT X11R4).  The sizes needed to be Dimension, not int, because
-   they were written in by Xt -- on my big-endian box Dimension
-   is short, causing chaos.  Also, I hacked a declaration in for
-   strrchr() to shut the compiler up -- this is arguably a kludge,
-   but I couldn't think of anything better; maybe you can.
-
-Fri May 22 13:40:50 PDT 1992 (patchlevel 16)
-
-* First real (non-beta) release of version 2.0.
-
-* Added GNU copyleft notices covering version 2.0 enhancements.
-
-Thu May 21 12:30:09 PDT 1992 (patchlevel 15)
-
-* Removed -g from Imakefile.
-
-* Added casts in parser.l to prevent warning messages from some C compilers.
-
-* Bugfix: code to exit if chess program couldn't be started had bug in error
-message printing.
-
-Tue May 19 11:58:06 PDT 1992 (patchlevel 14)
-
-* Fixes one small bug: If LoadGame does not find a game in the file, it resets
-xboard to BeginningOfGame mode (as if the Reset button was pressed), instead of
-leaving it in LoadGame mode.
-
-Mon Apr 13 18:32:27 PDT 1992 (patchlevel 13)
-
-* Improved error handling when gnuchessx crashes.  Now displays a message and
-enters EndOfGame state without exiting.  This should help with diagnosing
-gnuchessx problems, since the position and move history are not lost.
-
-* Debugged man page.
-
-Version 2.0 -- Thu Apr  2 16:04:54 PST 1992 (patchlevel 12)
-
-* Added small 40x40 pixel pieces; board size now specified as small, medium, or
-large. 
-
-* Improved man page.
-
-* Saved position files now say "white to play" if it's white's move.
-
-* SavePosition while in EditPosition mode now gets side to play right.
-
-* Made "Pawn" the default on edit position menus.
-
-* Removed "To play" from edit position menus, since it's redundant.  Left
-support code in so it can be restored if someone wants it.
-
-* Tightened parser's definition of a move number to help further with skipping
-over stuff before the first move.
-
-* Put back feature of skipping over stuff in game files before a start of game
-marker.  This helps when loading electronic mail messages that have things
-like "00" in the header (looks like castling), or that talk about moves in
-running text before the actual game score.  Tradeoff is that we can't load
-games that don't either have move numbers or say "gnuchess game" just before
-the moves.
-
-* Changed version number to 2.0 because others have used "1.3" for patched
-versions of 1.2.  Display version number and patchlevel at startup.
-
-Thu Apr  2 15:30:22 PST 1992 (patchlevel 11)
-
-* Bugfix:  Match started with TwoMachines button now handles the case where
-user loaded/edited a position *and* forced some moves.
-
-* added error message feedback to many cases where the user's button press is
-rejected because it isn't allowed in the current mode.
-
-* added -noChessProgram option to allow use as a passive chessboard without
-gnuchess, replacing old buggy scheme that tried to do this automatically when
-gnuchess was not found on the search path.
-
-* parser accepts "=" in front of promotion piece
-
-* parser accepts ":" notation for captures
-
-* Removed SwitchSides button to make room for EditPosition.  Left code in
-place, ifdef'ed out.
-
-* Added EditPosition mode.
-
-* Reformatted xboard.c to eliminate long lines.
-
-* Promotion popup now appears near rank to which pawn is moving.
-
-* UI improvement: Button representing current program mode is kept highlighted.
-
-* Bug fix:  Hint button is now disabled when machine is on move.
-
-Sat Mar 21 14:57:37 PST 1992 (patchlevel 10)
-
-* TwoMachines now works from MachineWhite or MachineBlack mode.
-
-* ForceMoves and Backward/Forward now work at the end of a game started by
-the TwoMachines button.
-
-* Sends o-o or o-o-o to gnuchess instead of O-O or O-O-O.
-
-* Bug fix:  SwitchSides button is now disabled when machine is on move.
-
-* Added -searchLevel option and corrected handling of -searchTime to reflect
-the way gnuchess really handles command line options instead of what the
-documentation used to say.  Allowed optional ":seconds" on times.
-
-Tue Mar 17 21:00:35 PST 1992 (patchlevel 9)
-
-* Removed non-working code that tried to recover when a remote chess program
-could not be started; now exits with a message instead.
-
-* Now waits for chess program to print its first message (normally "Chess")
-before sending it any commands.
-
-* Matches between two machines can now start from a black-to-play position or
-black-to-play opening.
-
-* Bug fix: The program would sometimes lose track of the board position after
-the end of the game, drawing a board full of white pawns next time it got an X
-redraw request.  Now fixed.
-
-* Cleaned up handling of illegal moves in game files.  Now we just stop reading
-and go into ForceMoves mode.
-
-* Saved games against gnuchess indicate who won (restored and debugged 1.2
-feature). 
-
-* Setting -searchTime turns off -clockMode.
-
-* My trick for setting up a black-to-play position broke in the transition from
-gnuchess 3.1+ to 4.0.  Installed a different trick that works with both.
-
-* Bug fix: Was clobbering memory by mallocing one byte too few for the file
-name in SetupPositionFromFileProc.  This usually resulted in a crash on the
-second attempt to load a position from a file.
-
-Mon Mar 16 16:49:00 PST 1992 (patchlevel 8)
-
-* Game and position files are saved in CHESSDIR as well as loaded from there.
-We actually chdir there, so gnuchess listing files also wind up there.
-
-* Underpromotion moves from gnuchess really work now.
-
-Sat Mar 14 14:55:24 PST 1992 (patchlevel 7)
-
-* Cleaned up lots of bugs and kruft in parser.l.  It's a wonder the old version
-worked at all.  Improved rejection of random text interspersed with the moves.
-
-* Relabeled buttons to reduce confusion (Play From File --> Load Game;
-Setup From File --> Load Position).
-
-* Bug fix:  Doesn't exit at the end of a game that was started by pressing
-the Two Machines button.
-
-* Bug fix:  Doesn't get confused if you hit Machine Black (White) while
-the machine is already playing black (white) and is on move.
-
-* Prints "White to play" or "Black to play" after loading a position file.
-
-* Bug fix:  No longer hangs if no start-of-game is found in a game file.
-
-* More permissive about game file format.  The first line is not assumed
-to be a header comment unless it starts with "#".  We don't insist on
-seeing a "1." before the first move.
-
-* Added pop-up dialog to allow underpromotion.  Moving a pawn to the last rank
-pops up a dialog to let you select what piece to promote to.  Also added code
-to handle underpromotion moves from gnuchess or from a game file correctly.
-
-* Added code to send SIGINT to gnuchess before trying to move, if gnuchess
-might be busy thinking on our time.  The code is ifdef'ed out because it's
-not necessary; only beta-test versions of gnuchess 4.0 at patchlevel 19 or
-below require it.
-
-Mon Feb 24 20:10:22 PST 1992
-
-* Merged fixes received from Stuart Cracraft and Mike McGann, to iconic mode
-and to ShutdownChessPrograms.  (They both sent the same fixes.)  I did not
-install the change that removed "easy" from the initialization string, so
-xboard will still try to run gnuchessx in "hard" mode (thinking on opponent's
-time) by sending this command.
-
-Version 1.3 -- Thu Dec 19 18:19:00 PST 1991  mann at src.dec.com (Tim Mann)
-
-* I've fixed a slew of bugs in this version of xboard:
-
-* You can now back up from the end of a game, even if gnuchess was playing
-against you.  Since gnuchess exits upon mate or draw (when it's not in force
-mode), this feature works by starting up a new copy of gnuchess and feeding it
-the saved starting position and moves.  Drawback: the new gnuchess starts with
-clocks at the beginning of a fresh time control.
-
-* Note: the "force" command to gnuchess is a toggle.  I fixed a couple of
-places in xboard where "force" was being issued when gnuchess was already in
-force mode, which resulted in chaos.  I don't know if they were in 1.2 or if I
-added them myself in the course of putting in new features.
-
-* ForceMoves button is now legal in PlayFromFile mode.  It closes the game file
-and lets you force moves (or go Backward) from whatever position you've
-reached.
-
-* The parser now recognizes "white resigns" and "black resigns" (in any
-combination of upper and lower case, with or without the closing "s").  These
-used to be misinterpreted as meaning "white wins" or "black wins" respectively!
-Added "1 - 0" and "0 - 1" as equivalents for "1-0" and "0-1".
-
-* I removed the parser feature of considering "!" as a comment delimiter.
-"!" is so common as an annotation in game scores that this feature seems like a
-very bad idea.
-
-* Added a wait() after each successful call to kill() to avoid leaving zombie
-processes around.
-
-* Removed the feature of putting an indication of how the game ended into the
-internal move list when playing from a file.  The only benefit of this was that
-it would get written back out if you saved the game at that point.  This
-feature doesn't seem too useful, since you are unlikely to save a game you've
-read in without making any changes, and it caused a lot of problems in the code
-and user interface.  The end condition is still displayed as a message when
-it's first read in from the file.  End conditions when playing against gnuchess
-are still saved, too.
-
-* programName is now the last file name component of argv[0], not all of it.
-
-* xboard.c got three compiler warnings due to arguments that didn't match the
-prototypes on X toolkit functions.  I got rid of them by adding some casts, and
-adding extra unused arguments to the ReceiveFromProgram function.
-
-* As I received it, the distribution had an extra period glued on the front
-of every line that started with a period.  This broke the manpage in an
-obvious way.  It also broke parser.l in a nonobvious way that stopped
-PlayFromFile from working.
-
-* Fixed one or two bugs where the clock was started when it shouldn't have
-been.  I think one example was if you tried an illegal move in ForceMoves mode.
-
-* Now starts the machine's clock if you hit MachineWhite when white is on move
-or MachineBlack when black is on move.
-
-* Now updates the to-move indicator (highlight on clock display) when you use
-Forward/Backward or ForceMoves.
-
-* gnuchess 3.1+ has a bug that makes it try to think on its opponent's time
-even when in force mode; this causes problems with xboard's SetupFromFile
-command because gnuchess's saved hint move is garbage after the new position is
-loaded, so gnuchess prints out an error message when it tries to think about
-what it would do if the user made this move.  Here is a patch for gnuchess
-3.1+:
-
-*** nondsp.c~   Mon Dec  2 12:37:18 1991
-*-- nondsp.c    Thu Dec 19 15:36:06 1991
-***************
-*** 1223,1229 ****
-    ok = flag.quit = false;
-    player = opponent;
-    ft = 0;
-!   if (hint > 0 && !flag.easy && Book == NULL)
-      {
-        fflush (stdout);
-        time0 = time ((long *) 0);
-*-- 1223,1229 ----
-    ok = flag.quit = false;
-    player = opponent;
-    ft = 0;
-!   if (hint > 0 && !flag.easy && Book == NULL && !flag.force)
-      {
-        fflush (stdout);
-        time0 = time ((long *) 0);
-
-* SavePosition/SetupFromFile now handle black-to-play positions.  If it's
-black's move in a saved position, the line "black to play" is printed
-immediately after the board display.  Upon loading a position, xboard
-looks for "black" at the beginning of this line to determine whether it's
-black's move.
-
-* SetupFromFile now leaves you (effectively) in ForceMoves mode.  This
-eliminates some cases where the program would get into an inconsistent state,
-and hopefully is more intuitive for the user, too.
-
-* PlayFromFile now leaves xboard in ForceMoves mode after playing through all
-the moves in the file.  You can use Backward/Forward, make moves, get gnuchess
-to join the game with MachineWhite or MachineBlack, etc.  The game file can end
-with either white or black to play.
-
-* Backward/Forward now seem to work in all cases.  Previously using these
-buttons during a game against the machine would get xboard out of sync with
-gnuchess's idea of what was going on, resulting in chaos.  Now using these
-buttons puts xboard in ForceMoves mode; you can bring gnuchess back into the
-game using the MachineWhite or MachineBlack buttons.
-
-Thu Jun 27 15:06:25 PDT 1991
-
-  * Remove comment popups during a reset.
-
-  * Bug in my forward move fix.  Didn't work for playgamefile mode.
-
-Thu Jun 20 15:04:06 PDT 1991
-
-  * Can't do a backward move when it isn't your turn because gnuchess
-    gets confused.  Similar bug for forward move.  Do a bunch of moves,
-    back up move and go forward.  These get filtered out now.
-
-  * Put easy back into the initString.  This DISABLES easy mode which by
-    default is ON.
-
-  * New-line wasn't always being added to forward move strings sent to gnuchess.
-
-  * Parsed comments as [ ..............text follows ] into d7d5
-
-  * Long game file comments cause core dumps on HP systems.
-
-  * Multiple uses of the get positition file button got confused
-    on the second click.
-
-  Minor fixes to the 1.2 release
-
-Version 1.2 -- Tue Jun 11 17:14:12 PDT 1991
-
-  * For version 1.2, Jeff Kenton, Richard LLoyd, David Jensen, Martin D.,
-    Bill Schmidt, Scott Hemphill, Paul Vaughan and Bill Shauck all found
-    a lot of bugs that we put into xboard just to see if they were paying
-    attention.  They were.
-
-  * Changed the protocol that xboard uses to work with the new version of
-    gnuchessr.
-
-  * There was an off by one error with the clock resetting code.  Also,
-    the clock display highliting was wrong.  Thanks to Bill Shauck for
-    pointing these out.
-
-  * enumerations are not really integers on some C compilers.  I added casting.
-    The new version of gnuchess expects the "go" command for two machine
-    and machine plays white cases.  The whiteString resource is for
-    compatibility with previous gnuchess versions which get confused by go.
-    Thanks to Martin D. for catching these.
-
-  * Fixed a bug where the checkmate message wasn't being parsed and xboard
-    kept playing.  Also, the message was added to game file if saved.
-    Thanks to Scott Hemhill for pointing this out.
-
-  * Fixed a bug where saving a long game, resetting and saving a short game
-    resulted in appending the end of the long game to the short one.
-    If a game is just being played out and there is no reason for gnuchessr
-    to be used, ignore pipe signals.  This allows people to use xboard
-    as a chess board without need for gnuchess.  Also, trivially bad moves
-    such as e2e2 are not passed on to gnuchessr but instead ignored out of
-    hand.  This allows people using xboard as a chessboard with gnuchessr
-    to pick a piece up, think and put it back down without making a move.
-    Thanks to Jeff Kenton for pointing these out.
-
-  * Added the CHESSDIR environment variable.  Game and position files are
-    found in this directory.  If this variable is not declared, then the
-    current directory is used.  File names starting with / are treated
-    specially.
-
-  * The bitmap file names were changed so that none exceeded 14 characters.
-    This is necessary for R5.
-
-        fcntl(from_prog[0], F_SETFL, O_NDELAY);
-
-    The xboard fix was to set non-blocking i/o on the read pipe for gnuchessr
-
-        printz ("Illegal move (no matching move generated)");
-
-  * fixed a problem with the new version of gnuchessr where xboard wasn't
-    getting gnuchessr error messages for illegal moves.  The problem seems
-    to be fixed *without* any gnuchess changes but this is likely to be
-    highly system dependant.  There should be a new line on line 246 of nondsp.c
-
-  * -iconic doesn't work at all now.  The Iconify() does work.  This was
-    a tradeoff and it is really an Xt bug.
-
-  * Fixed a compiler warning for gcc and an error for the IBM RT compilers.
-    This is the VOID_PROC macro in xboard.h.  Thanks to David Jensen for this.
-
-  * If the DisplayWidth or DisplayHeight is less than 800, use small size mode.
-    Also the size of the name widget was reduced from 500 pixels to 400 pixels
-    because in small size mode there was a gap on the right.
-    Changed the default font from fixed to helvetica_oblique14 to:
-        **-helvetica-bold-r-normal--14-*-*-*-*-*-*-*
-    helvetica_oblique14 is a font alias not on all R4 systems.
-    Curiously enough, the 17 point is not available on 75dpi systems
-    and the 18 point font is not available on 100dpi systems.
-    Thanks to Richard K. Lloyd for pointing these out.
-
-  * Minor hacks to work with R5 alpha.  Had to add an event handler to the
-    boardWidget to get translations to work.  This may go away with the real R5.
-    Added <Message>WM_PROTOCOLS: QuitProc() for R5 ICCCM compatibility.
-
-  * If the first character of the file is not `1' then the first line
-    of a game or position file is displayed as the name in a label widget.
-
-  * Added a PopUp dialog for getting file names.
-
-  * Modified the code to use the R4 routines rather than R3 compatibility.
-
-  * Changed the forwards/backwards/readgamefile code to allow a play to step
-    back and forth in a game.  If he steps all the way to the beginning
-    he has to restart the game.  If he gets into a mated position, same problem.
-
-  * Moved the man page from xboard.1 to xboard.man.  This makes imake man page
-    installs work correctly.  Thanks to Richard K. Lloyd for pointing this out.
-
-  * Corrected the queening code.  XBoard was sending the wrong syntax.
-    It was sending for example h8(Q) when it should have been sending h8q.
-    Thanks to Paul Vaughan and Mike McGann for pointing this out.
-
-  * Added a lex parser for algebraic games.  It should be easy to use the parser
-    for other interfaces such as the Microsoft Windows version.
-    It parses comments of the form [anything] and ! to the end of a line.
-
-Version 1.1 -- Mon Jan  7 14:46:03 PST 1991
-
-  * Roger Dubar, Konstantinos Konstantinides, Wolfgang S. Rupprecht,
-    Paul Scowen, Mvh Smidt and Kayvan Sylvan all helped immensely during
-    beta-testing.
-
-  * older non-ANSI versions of Sun compilers complain vociferously.
-
-  * the remoteShell resource was added for HP-UX systems
-    and other systems where the remoteShell isn't rsh.
-
-  * -iconic doesn't work properly.  If XBoard is opened iconic then
-    iconifying it later with a keystroke doesn't work.  I think
-    this is an Xt bug.
-
-  * For systems with smaller screens, XBoard can use smaller pieces,
-    and a smaller board.  -bigSizeMode False uses a smaller set of pieces.
-    These are scaled versions of the large pieces.  They look ok but could
-    be improved.
-
-  * getlogin() does not work in all cases.
-    It was replaced by getpwuid(getuid())->pw_name).
-
-  * Warning messages get displayed in the message box.
-
-  * Any button restarts a paused game.
-
-  * Kayvan Sylvan contributed a patch for ESIX.
-    It seems that select() on pipes is broken on his system.  We declined
-    to incorporate his patch though, because it was a work-around for
-    something that was broken on one system, and selfishly, that system
-    was not my own.  Nevertheless, it is likely that other System V users
-    on PC's may need to use this patch and it is is included as the file
-    ESIX.patch.  To use it, type
-
-        patch xboard.c ESIX.patch
-
-  * Fixed a bug where hint didn't work.  The local version of gnuchessr
-    had been hacked.  The fix was to clone stderr and stdout for gnuchessr.
-
-  * Fixed a bug where a player could play after a game had been finished.
-
-  * The bitmaps have been pushed into the bitmaps directory.
-
-  * Substantially rewrote and simplified the Two Machine code.
-
-  * Added StrStr() because many systems don't have this ANSI function.
-
-  * Added keyboard equivalents.  Added an iconify keystroke, C or c.
-
-  * Works with gcc now.  gcc complained about casting float constants
-    as XtPointers.
-
-  * Detect if the visual doesn't support color.  If so, run in monoMode.
-    An alternative would be to detect grayscale visual and use a collection
-    of gray user interface colors.
-
-        XBoard.clockMode:    False
-
-  * For people who don't like or use chess clocks a clockMode switch
-    has been added.  It is on by default.  It can be turned off in the
-    .Xdefaults file with
-
-  * Added a declaration, xtVersion, which will quickly break on R3 Intrinsics.
-
-  * Hal Peterson contributed a new Imakefile.
-
-  * Rewrote DisplayClocks().
-
-  * Rewrote TwoMachinesPlay mode.
-
-  * Konstantinos Konstantinides added the -searchTime option.
-
-  * Substantially rewrote and simplified the clock code.  If a game was paused
-    and then resumed, the clocks were out of sync.
-
-  * Fixed a bug in HandleUserMove() where the user could make a move while the
-    machine was thinking.  The fix detects and ignores these moves.  onMove
-    was not being used and was removed.
-
diff --git a/FAQ b/FAQ
deleted file mode 100644
index 70e3996..0000000
--- a/FAQ
+++ /dev/null
@@ -1,1501 +0,0 @@
-
-                XBoard and WinBoard: Frequently Asked Questions
-
-   This  document  answers  some  frequently  asked  questions  about the
-   graphical  chess interfaces XBoard and WinBoard. A hyperlinked version
-   of   this   FAQ   is   available   on   the   Web   through  the  page
-   http://www.tim-mann.org/chess.html.  This  FAQ is in need of revision.
-   Please contact us if you'd like to help update it.
-     _________________________________________________________________
-
-Outline
-
-     * [A] Introduction and hot topics
-     * [B] XBoard and WinBoard
-     * [C] XBoard and WinBoard, bugs and problems
-     * [D] Crafty and other topics
-     _________________________________________________________________
-
-Detailed contents
-
-     * [A] Introduction and hot topics
-
-     * [A.1] What are XBoard and WinBoard?
-     * [A.2] Where can I get chess information and chess software?
-     * [A.3]  What  are  the  current  version  numbers  for  XBoard  and
-       WinBoard?
-     * [A.4] Who is working on this project?
-     * [A.5] How do I report bugs, offer help, etc.?
-     * [A.6] What are the future plans for XBoard and WinBoard?
-
-     [B] XBoard and WinBoard
-     * [B.1] What is XBoard?
-     * [B.2]  Is there an XBoard for Microsoft Windows? What is WinBoard?
-       How do I install WinBoard?
-     * [B.3] Is there an XBoard for the Amiga? What is AmyBoard?
-     * [B.4] Is there an XBoard for the Macintosh?
-     * [B.5] Does XBoard run on VMS?
-     * [B.6] What is cmail?
-     * [B.7] How do I build XBoard? Do I have to have gcc?
-     * [B.8]  Can  I  use XBoard or WinBoard to play a game of chess with
-       another human?
-     * [B.9] Will WinBoard run on Windows 3.1? How about Windows CE (also
-       known as Pocket PC)?
-     * [B.10]  How  do I use XBoard or WinBoard as an external viewer for
-       PGN files with my Web browser?
-     * [B.11]  How  do I use WinBoard as an external viewer for PGN files
-       with the MS Windows File Manager or Explorer?
-     * [B.12] How do I use ICC timestamp or FICS timeseal with XBoard?
-     * [B.13] How do I use ICC timestamp or FICS timeseal with WinBoard?
-     * [B.14] How do I play bughouse with XBoard or WinBoard? 
-     * [B.16]  What  is Zippy? How can I interface a chess program to the
-       Internet Chess Servers?
-     * [B.17]  How  can  I  interface  my  own chess program to XBoard or
-       WinBoard?
-     * [B.18] How can I recompile WinBoard from source?
-     * [B.19]  How  can  I  use XBoard or WinBoard to talk to an Internet
-       Chess Server through a firewall or proxy?
-     * [B.20]  How  can  I  use  XBoard  or  WinBoard  on  chess.net with
-       accuclock?
-     * [B.21]   Can   I  get  Zippy  to  do  one  or  more  ICS  commands
-       automatically at the start or end of each game?
-     * [B.22] How do I print from WinBoard?
-     * [B.23]  Can I get Zippy to automatically reconnect to ICS when its
-       connection breaks?
-     * [B.24]  The  chess  engines are too strong and always beat me. How
-       can I adjust the difficulty level to make them weaker?
-     * [B.25]  May I use the piece bitmaps from XBoard/WinBoard in my own
-       program?
-
-     [C] XBoard and WinBoard, bugs and problems
-     * [C.1]  I  can't build XBoard because the X11/Xaw/... include files
-       are not found.
-     * [C.2]  Configuring  or building XBoard fails due to missing header
-       files, missing libraries, or undefined symbols.
-     * [C.3]  I have problems using WinBoard on ICS with a modem. I'm not
-       running  SLIP  or  PPP,  but  just dialing in to an ordinary login
-       account ("shell account").
-     * [C.4]  I  have  problems using WinBoard on ICS with Windows 95 and
-       SLIP  or  PPP. When trying to start up, it gets the error "Address
-       family  not supported by protocol family" (or some equally strange
-       message). 
-     * [C.5]  When  I  try  to run WinBoard, I get the message "Failed to
-       start  chess  program  gnuchess  on  localhost:  NO LANGFILE (file
-       gnuchess.lan not found)".
-     * [C.6] I want to use XBoard or WinBoard as an Internet Chess Server
-       interface, but the ICS Client option is grayed out on the menu.
-     * [C.7] How do I give command-line options to a Windows program like
-       WinBoard?
-     * [C.9]  When  I exit from WinBoard after using it to play against a
-       chess  program  on  my machine, the chess program keeps running in
-       the background. 
-     * [C.12]  Why  do  my  ICS opponents often get extra time after they
-       make  their moves? Why do I sometimes lose time off my clock after
-       I make my move? 
-     * [C.13]  I can't run WinBoard unless I delete the WinBoard.ini file
-       each time! 
-     * [C.15] I get errors compiling XBoard's parser.c. 
-     * [C.16] I get an error building WinBoard from source because "flex"
-       is not found. 
-     * [C.17]  XBoard  hangs shortly after connecting to an ICS when used
-       with dxterm, cmdtool, dtterm, kterm, konsole, or other substitutes
-       for xterm. 
-     * [C.18]  The  WinBoard  pieces  show up in the wrong colors, appear
-       distorted, or are not visible at all. 
-     * [C.19]  XBoard  or  WinBoard  tells me "Error: first chess program
-       (...) exited unexpectedly".
-     * [C.20]  XBoard tells me "Warning: Cannot allocate colormap entry",
-       or  "too  few  colors  available; trying monochrome mode", or "XPM
-       pieces cannot be used in monochrome mode". 
-     * [C.21] When I log in to freechess.org, the Enter key doesn't work,
-       and  I have to use Ctrl+J instead. But when I use WinBoard, Ctrl+J
-       doesn't work either, so I'm stuck. 
-     * [C.22] XBoard says, "Failed to start first chess program gnuchessx
-       on localhost: gnuchessx: No such file or directory." 
-
-     [D] Crafty and other topics
-     * [D.1] What is XChess?
-     * [D.2] What is Winsock Chess?
-     * [D.3] What is Crafty?
-     * [D.4] How do I use Crafty with XBoard?
-     * [D.5] How do I use Crafty with WinBoard?
-     * [D.6] How do I use GNU Chess 5 with XBoard?
-     _________________________________________________________________
-
-[A] Introduction and hot topics
-     _________________________________________________________________
-
-  [A.1] What are XBoard and WinBoard?
-
-   XBoard  and  WinBoard  are graphical user interfaces for chess. XBoard
-   runs  with  the X Window System on Unix systems (including GNU/Linux);
-   see  topic  [B.1].  WinBoard  runs  on  true  32-bit Microsoft Windows
-   operating  systems,  such  as  Windows  95,  98, NT, 2000, ME, XP, and
-   should  continue to work on future 32-bit Windows systems. It does not
-   work  on  Windows  CE  (also  known as Pocket PC), nor does it work on
-   16-bit Windows systems such as Windows 3.1. See topic [B.2].
-     _________________________________________________________________
-
-  [A.2] Where can I get chess information and chess software?
-
-   As  a  shortcut  to  most things mentioned in this FAQ, try Tim Mann's
-   Chess  Web page, http://www.tim-mann.org/chess.html. This page page is
-   a  good  place  to  get  the  latest  released  versions of XBoard and
-   WinBoard  and  the  most  up-to-date version of this FAQ. Also see our
-   Savannah project pages at https://savannah.gnu.org/projects/xboard/.
-
-   If you have other questions about XBoard/WinBoard that aren't answered
-   in  this  FAQ, you can try Aaron Tay's WinBoard and Chess Engines FAQ,
-   at http://www.aarontay.per.sg/Winboard/.
-
-   For  general  news  and  information  about  chess,  try the newsgroup
-   hierarchy      rec.games.chess.*,      especially      the      groups
-   rec.games.chess.misc  and rec.games.chess.computer. Both of the latter
-   groups have very informative FAQs maintained by Steve Pribut; look for
-   them on the newsgroups or at
-   http://www.clark.net/pub/pribut/chess.html.
-
-   Like other GNU software, you can get XBoard, and WinBoard by anonymous
-   FTP from ftp://ftp.gnu.org/pub/gnu/ and its many mirror sites. Look in
-   the  subdirectories  xboard,  and  winboard. The .tar.gz suffix on the
-   files  there  indicates  they were packed with tar and compressed with
-   gzip.  The  .exe  or .zip suffixes indicate files that were packed and
-   compressed with zip.
-
-   For  other  chess  software,  try  the  Internet  Chess  Library.  Use
-   anonymous  FTP  to connect to ftp.freechess.org, or go to the Web page
-   http://www.freechess.org/.   You   can   get   chess   software,  game
-   collections, the FAQ file for rec.games.chess, and other chess-related
-   material  there,  in  the  directory  pub/chess.  The  FTP  server can
-   automatically decompress files for you as you download them, useful if
-   you don't have gzip.
-
-   Here  is  a  sample  anonymous  ftp  session. Some of the ftp server's
-   responses  are  abbreviated,  but  all  the commands you must type are
-   included.
-
-    % ftp ftp.gnu.org
-    Connected to ftp.gnu.org
-    Name: anonymous
-    Password: your-email-address at your-site
-    ftp> binary
-    200 Type set to I.
-    ftp> cd /pub/gnu/xboard
-    ftp> dir
-    -rw-r--r-- 1 14910 wheel  1057625 May 20 00:25 xboard-4.2.7.tar.gz
-    ftp> get xboard-4.2.7.tar.gz
-    150 BINARY connection for xboard-4.2.7.tar.gz (1057625 bytes).
-    226 Transfer complete.
-    ftp> quit
-     _________________________________________________________________
-
-  [A.3] What are the current version numbers for XBoard and WinBoard?
-
-   At this writing, the current version numbers are:
-     * XBoard 4.2.7
-     * WinBoard 4.2.7
-     _________________________________________________________________
-
-  [A.4] Who is working on this project?
-
-   Please see our Savannah project pages at
-   https://savannah.gnu.org/projects/xboard/   for   a   list  of  active
-   developers.   Many  others  occasionally  contribute  suggestions  and
-   snippets of code, for which we are grateful.
-     _________________________________________________________________
-
-  [A.5] How do I report bugs, offer help, etc.?
-
-   Bug  reports,  suggestions,  and  offers to help on XBoard or WinBoard
-   should  be  sent  to bug-xboard at gnu.org. (Note: as of 4 Nov 2003, this
-   mailing   list   is   temporarily   broken.   You  can  send  mail  to
-   bug-xboard at tim-mann.org instead until it is fixed.)
-
-   Beginner  questions  and  discussion  about the program may get faster
-   answers on the WinBoard Forum at http://f11.parsimony.net/forum16635/.
-
-   If  you  are  developing  a  chess  engine  that  works with XBoard or
-   WinBoard (or an alternative GUI that works with such engines), see the
-   Chess Engines mailing list, hosted at
-   http://groups.yahoo.com/group/chess-engines.
-
-   Any  time  you want to report a possible bug in XBoard or WinBoard, we
-   need  to  know exactly what you did, and exactly what error (or other)
-   messages you got.
-
-   If  you  are using Unix, run the "script" program, run XBoard with the
-   -debug  flag  (if  you  get  as  far  as  running  it), do whatever is
-   necessary to reproduce the problem, type "exit" to the shell, and mail
-   us   the  resulting  typescript  file.  We  also  need  to  know  what
-   hardware/operating  system  combination  you  are  using.  The command
-   "uname  -a"  will  usually  tell  you this; include its output in your
-   typescript.
-
-   If  you  are  using MS Windows, run WinBoard with the -debug flag, and
-   send  us  a copy of the WinBoard.debug file. If you aren't sure how to
-   add command-line flags to WinBoard, you can hit Ctrl+Alt+F12 to create
-   a  WinBoard.debug file after WinBoard starts, but that is not as good,
-   because  a  few messages that would have been printed at the start are
-   lost.
-
-   Either  way,  please  send us the exact text of the commands you typed
-   and  the  output  you got, not just your recollection of approximately
-   what they were. The messages may seem meaningless to you, but they are
-   very meaningful to us and essential for diagnosing problems.
-     _________________________________________________________________
-
-  [A.6] What are the future plans for XBoard and WinBoard?
-
-   Our plans are always in flux. As with most free software projects, the
-   next  release  will  happen when it happens -- or it may never happen.
-   This  has  always  been  the policy for XBoard/WinBoard. Releases have
-   never been promised in specific time frames.
-
-   Starting  in  November  2003,  several  new developers have joined the
-   project, and work is now hosted at
-   https://savannah.gnu.org/projects/xboard/.   Lots   of  work  is  just
-   getting underway, but nothing is far along yet.
-
-   Here  is  a  partial  list of items that have a nonzero probability of
-   happening in finite time.
-     * Small bug fixes. Occasionally someone sends us a fix, or reports a
-       small  bug  very  clearly  so  that  we're able to fix it in a few
-       minutes work.
-     * Protocol  version  3.  The  members  of  the chess engine authors'
-       mailing  list  discussed  a  set of proposed features for the next
-       version   of   the   XBoard/WinBoard  chess  engine  communication
-       protocol.  Unfortunately,  this  project has gotten only as far as
-       that  discussion  took  it;  no  revisions of the protocol spec or
-       coding  have been done yet. A few simple features are very clearly
-       needed, though, and will probably appear in time.
-     * Contributed  features.  Several  people have mailed me code to add
-       various   features.   Most  of  this  code  is  available  on  the
-       XBoard/WinBoard extensions page at
-       http://www.tim-mann.org/extensions.html,  but  it  is  not  in any
-       official  releases  yet. We are in the process of getting folks to
-       formally  assign the copyrights on their contributions to the Free
-       Software Foundation so that we can include it in official releases
-       in the future.
-     * Internationalization.  Several  people  have expressed interest in
-       internationalizing  XBoard/WinBoard, and so hopefully this project
-       will  go  forward. Once the internationalization support is in, we
-       will  need  more  translators.  Watch for news on the xboard-devel
-       mailing list on our Savannah pages.
-     _________________________________________________________________
-
-[B] XBoard and WinBoard
-     _________________________________________________________________
-
-  [B.1] What is XBoard?
-
-   XBoard  is  a  graphical  user  interface  for  chess.  It  displays a
-   chessboard on the screen, accepts moves made with the mouse, and loads
-   and  saves  games  in  Portable  Game  Notation  (PGN). XBoard is free
-   software.  It serves as a front-end for many different chess services,
-   including:
-
-   Chess  engines  that  will run on your machine and play a game against
-   you  or  help  you  analyze, such as GNU Chess and Crafty (topic [D.3]
-   below).
-
-   Chess  servers  on  the  Internet, where you can connect to play chess
-   with  people  from all over the world, watch other users play, or just
-   hang out and chat.
-
-   Correspondence  chess  played  by  electronic  mail. The cmail program
-   (topic  [B.6]  below)  automates  the tasks of parsing email from your
-   opponent,  playing his moves out on your board, and mailing your reply
-   move after you've chosen it.
-
-   The  Web  and  your  own  saved  games. You can use XBoard as a helper
-   application to view PGN games in your Web browser, or to load and save
-   your own PGN files.
-
-   XBoard  runs  under Unix or Unix-compatible systems. It requires the X
-   Window  System, version X11R4 or later. There are also ports of XBoard
-   to  32-bit  Microsoft  Windows  and to the Amiga. See topics [B.2] and
-   [B.3] respectively.
-     _________________________________________________________________
-
-  [B.2] Is there an XBoard for Microsoft Windows? What is WinBoard? How do I
-  install WinBoard?
-
-   WinBoard is a port of XBoard to 32-bit Microsoft Windows systems, such
-   as  Windows  95,  98,  NT, 2000, ME, and XP. It uses the same back end
-   chess  code  as  XBoard, but the front end graphics code is a complete
-   rewrite. WinBoard is free software.
-
-   The  WinBoard  distribution includes a port of GNU Chess to Win32. The
-   GNU  Chess  port  is distributed in executable form, with instructions
-   for  rebuilding  it  from  the  standard  GNU Chess sources (available
-   separately). You should have at least 16 to 24 MB of memory to run GNU
-   Chess with WinBoard.
-
-   The  WinBoard  distribution  also  includes the ICC timestamp and FICS
-   timeseal programs (topic [B.12]).
-
-   cmail  (topic  [B.6])  has  not  been ported to Windows. All the other
-   XBoard  functions  are  included  in WinBoard. The International Email
-   Chess   Group  web  site  at  http://www.iecg.org/  recommends  ECTool
-   (http://www.ectool.nu/)   for   playing   correspondence  chess  under
-   Windows.
-
-   You install WinBoard as follows. Download the WinBoard package to your
-   PC   (see   topic  [A.2]).  It  will  be  a  file  with  a  name  like
-   winboard-4_0_0.exe.  Double-click on this file in the Explorer or File
-   Manager to run it. Follow the on-screen prompts.
-     _________________________________________________________________
-
-  [B.3] Is there an XBoard for the Amiga? What is AmyBoard?
-
-   AmyBoard  is  a  port  of XBoard to the Amiga, by Jochen Wiedmann. The
-   distribution includes a port of GNU Chess. AmyBoard is free software.
-
-   The  current  version of AmyBoard is 330.5 (based on XBoard 3.3.0). No
-   one is currently maintaining it.
-
-   System requirements:
-     * An  Amiga  (obviously  :-),  running  OS 2.04 or later, 2Mb RAM or
-       more.
-     * MUI 2.0 or later.
-     * Workbench  or  another  screen  with  no  less than 640x400 pixels
-       (adjustable  with the MUI-Prefs); this restriction is just because
-       we  don't  have bitmaps with less than 40x40 pixels per square. If
-       someone  contributes  bitmaps  with 20x20 or 20x25, they will work
-       with any Hires mode.
-
-   If  you  would like to use an ICS, you need an Internet connection via
-   either
-     * a telnet-like program, or
-     * a terminal program reading from stdin and writing to stdout.
-
-   AmyBoard is available in the Internet Chess Library (topic [A.2]).
-     _________________________________________________________________
-
-  [B.4] Is there an XBoard for the Macintosh?
-
-   Because  MacOS  X  has a Unix base, XBoard will compile and run on it.
-   You  do  need  an  X11  (X Window System) server and client libraries.
-   These  do  not come with Mac OS, but both free and commercial versions
-   are available. Once you install the X11 package, XBoard is reported to
-   compile  and  run  without  changes.  I am not a Mac user and have not
-   tried  this  myself,  so  I  cannot answer questions about it. Version
-   4.2.6  and  earlier  of XBoard come with an old copy of the config.sub
-   utility  that  does not recognize Mac OS X, so to build XBoard, you'll
-   have to tell the configure program what OS you are running. Follow the
-   instructions  in  topic  [B.7]  of  this  FAQ,  but  add  the argument
-   --host=powerpc-apple-bsd  to  the end of the "configure" command line.
-   There  is  no  version of XBoard or WinBoard that runs with the native
-   (non-X11)  Mac  graphical  interface, and none that runs on MacOS 9 or
-   earlier.
-     _________________________________________________________________
-
-  [B.5] Does XBoard run on VMS?
-
-   No.  This port would probably be a lot easier than the Win32 and Amiga
-   ports  were,  because  VMS  has  the  X  Window system (under the name
-   DECwindows)  and  is now POSIX compliant. However, I don't know enough
-   about  VMS  to  do  the port myself, and I don't have time. If you do,
-   give it a try! Send mail to me, tim at tim-mann.org (Tim Mann), if you're
-   working on this.
-     _________________________________________________________________
-
-  [B.6] What is cmail?
-
-   cmail  is  a  program that helps you play and keep track of electronic
-   mail  correspondence  chess games using XBoard. It is distributed with
-   XBoard  and  has  its  own manual page. cmail is free software. It was
-   written by Even Welsh. cmail has not been ported to Windows; sorry.
-     _________________________________________________________________
-
-  [B.7] How do I build XBoard? Do I need gcc?
-
-   The first step to building XBoard is to get the distribution file. See
-   topic [A.2] for places you can ftp the software from.
-
-   Next,  decide  what directory tree you are going to install XBoard in.
-   The default is /usr/local, but you probably don't have write access to
-   that  directory unless you are a system administrator. If you do, type
-   the following to install it there:
-
-    gzip -cd xboard-*.tar.gz | tar -xvf -
-    cd xboard-*/
-    ./configure
-    make
-    su
-    make install
-
-   If  you  want  to  install  xboard  in  your  personal  home directory
-   ($HOME/bin), type this:
-
-    gzip -cd xboard-*.tar.gz | tar -xvf -
-    cd xboard-*/
-    ./configure --prefix=$HOME
-    make
-    make install
-
-   If  the  first step above fails because you don't have gzip, see topic
-   [A.2],  and ask a local Unix expert if you need more help. If you have
-   any  problems  with  the  last two steps, read the READ_ME and INSTALL
-   files in the xboard-*/ directory. You will also find this FAQ there.
-
-   You don't need to have gcc to build XBoard. Almost any Unix C compiler
-   should do.
-     _________________________________________________________________
-
-  [B.8] Can I use XBoard or WinBoard to play a game of chess with another
-  human?
-
-   The  only  way  for  two humans on different machines to play chess in
-   real  time using XBoard/WinBoard is to use an Internet Chess Server as
-   an  intermediary.  That is, each player runs his own copy of XBoard or
-   WinBoard,  both  of  them log into an ICS, and they play a game there.
-   Two  copies  of  XBoard/WinBoard  cannot  communicate  with each other
-   directly.
-
-   Instructions  on  how  to get started with Internet chess are included
-   with  the  XBoard  and  WinBoard  distributions. The network addresses
-   included in the distribution may not always be current. The oldest and
-   largest ICS is the Internet Chess Club at chessclub.com, which now has
-   a  fee  for  registered  use,  but still allows free unregistered use.
-   There  are also many newer sites with no fees, using the Free Internet
-   Chess  Server  implementation  (FICS).  The  most  active FICS site is
-   freechess.org.  On these and most other chess servers, the port number
-   to use is 5000.
-
-   If  you  don't  have network connectivity to any ICS site, you can run
-   your  own  server  using  a  version of the FICS code, but this is not
-   easy.   See  http://www.tim-mann.org/ics.html#ownics  for  advice  and
-   pointers.
-
-   The  cmail  program  included  with  XBoard lets you play email postal
-   games with another human; see topic [B.6].
-
-   Two  humans  can  play  chess  on  the  same machine using one copy of
-   XBoard/WinBoard  in  Edit  Game mode, but the clocks don't run in this
-   mode, so it's of limited usefulness.
-
-   See also topic [D.2], Winsock Chess.
-     _________________________________________________________________
-
-  [B.9] Will WinBoard run on Windows 3.1? How about Windows CE (also known as
-  Pocket PC)?
-
-   WinBoard  does  not  run  on Windows 3.1, Windows for Workgroups 3.11,
-   etc., not even with the Win32s compatibility package. The main problem
-   is  that  Win32s does not have threads or real concurrent processes. A
-   port of WinBoard to Windows 3.1 is possible in theory, but it would be
-   difficult and messy, and no one is going to do it.
-
-   WinBoard does not run on Windows CE (also known as Pocket PC). I don't
-   know what would be required to port it.
-
-   WinBoard  does  run  well  on full 32-bit versions of Windows, such as
-   Windows  95,  98, NT, 2000, ME, and XP, and should continue to work on
-   future 32-bit Windows systems.
-     _________________________________________________________________
-
-  [B.10] How do I use XBoard or WinBoard as an external viewer for PGN files
-  with my Web browser?
-
-   1) On Unix systems:
-
-   -  Add  the  following  line  to  the  file  .mime.types  in your home
-   directory. (Create the file if it doesn't exist already.)
-    application/x-chess-pgn    pgn
-
-   -  Add the following line to the file .mailcap in your home directory.
-   (Create the file if it doesn't exist already.)
-    application/x-chess-pgn; xboard -ncp -lgf %s
-
-   - Exit from your Web browser and restart it.
-
-   2) On MS Windows systems:
-
-   The  exact  procedure  depends on which Web browser you are using. The
-   current  version  of  WinBoard automatically configures itself as your
-   PGN  viewer  for  local  files,  Netscape  4.x and later, and Internet
-   Explorer.  This  automatic  setup probably works for all other current
-   Web browsers, too.
-     _________________________________________________________________
-
-  [B.11] How do I use WinBoard as an external viewer for PGN files with the MS
-  Windows File Manager or Explorer?
-
-   WinBoard sets this up automatically when you install it, except on old
-   versions  of Windows NT (prior to 4.0). On Windows NT 3.51 or earlier,
-   go  to  the  File  Manager,  click on the File menu, select Associate,
-   enter  "pgn"  as the extension, and use the Browse button to find your
-   copy of WinBoard and set up the association.
-     _________________________________________________________________
-
-  [B.12] How do I use ICC timestamp or FICS timeseal with XBoard?
-
-   First,  get  the appropriate version of timestamp or timeseal for your
-   machine  from  ftp.chessclub.com or ftp.freechess.org. Second, be sure
-   that  you  can connect using XBoard without timestamp/timeseal. Third,
-   be  sure that you can connect using timestamp/timeseal without XBoard.
-   See  the  help  files on ICC and FICS or ask people online if you have
-   problems.
-
-   If  you  are in a completely ordinary situation, where your machine is
-   directly  on  the  Internet and you can connect to ICC or FICS without
-   timestamp/timeseal  using  just  the  command "xboard -ics" or "xboard
-   -ics  -icshost  freechess.org",  change  that  command  to  one of the
-   following:
-
-    xboard -ics -icshost 204.178.125.65 -icshelper timestamp
-
-    xboard -ics -icshost 164.58.253.13 -icshelper timeseal
-
-   If  you  have  a  firewall between your machine and the ICS, see topic
-   [B.19].
-
-   If  you  normally  have  to  use the "/icscomm" command line option on
-   xboard  to  log  into a second machine, and then telnet to ICC or FICS
-   from there, you are going to have to run the Unix version of timestamp
-   or  timeseal  on  the  second  machine.  (If the second machine is not
-   running  Unix,  you  are  out of luck.) Get the appropriate version of
-   timestamp  or  timeseal  onto  the shell machine via FTP; see the help
-   files  on  ICC  and FICS for instructions. Then simply run it when you
-   would normally run telnet. In this configuration you are not protected
-   against  lag  between your PC and the shell machine, or for lag caused
-   by heavy load on the shell machine itself from other users.
-
-   For  further information on timestamp and timeseal, see the help files
-   on ICC and FICS.
-     _________________________________________________________________
-
-  [B.13] How do I use ICC timestamp or FICS timeseal with WinBoard?
-
-   If  you  select  an ICS from either the WinBoard Startup dialog or the
-   Windows  Start  submenu that WinBoard installs, WinBoard automatically
-   runs  timestamp  or  timeseal if the ICS you chose is known to support
-   it.
-
-   If  you  are  constructing  a  WinBoard  command line by hand, add the
-   option "/icshelper timestamp" or "/icshelper timeseal" to the WinBoard
-   command  line  to  use  timestamp  or timeseal. Both timestamp.exe and
-   timeseal.exe  are  included  in  the  WinBoard distribution. They both
-   function  identically  to  the  Unix  versions, as documented in "help
-   timestamp" on ICC and "help timeseal" on FICS.
-
-   If  you  have  a  firewall between your machine and the ICS, see topic
-   [B.19].
-
-   If  you  normally  have  to  use the "/icscomm" command line option on
-   WinBoard  to  log into a shell account, and then telnet to ICC or FICS
-   from there, you are going to have to run the Unix version of timestamp
-   or  timeseal  on  the shell machine. (If the shell account is not on a
-   Unix  machine,  you  are  out of luck.) Get the appropriate version of
-   timestamp  or  timeseal  onto  the shell machine via FTP; see the help
-   files  on  ICC  and FICS for instructions. Then simply run it when you
-   would normally run telnet. In this configuration you are not protected
-   against  lag  between your PC and the shell machine, or for lag caused
-   by heavy load on the shell machine itself from other users.
-
-   For  further information on timestamp and timeseal, see the help files
-   on ICC and FICS.
-     _________________________________________________________________
-
-  [B.14] How do I play bughouse with XBoard or WinBoard?
-
-   XBoard  and  WinBoard  have  simple  but  effective  bughouse support.
-   Offboard  piece  holdings  are shown in the board window's banner, and
-   you  drop  offboard pieces using the right mouse button. Press it over
-   the destination square to pop up a menu of pieces.
-
-   XBoard  and WinBoard can display only one board at a time, but you can
-   observe  your  partner's  game by running a second copy of the program
-   and logging in as a guest. (Unfortunately, this is not possible if you
-   are  using  the  /icscomm  option.)  To  observe  your partner's games
-   automatically,  use the "follow" or "pfollow" ICS command; see the ICS
-   online help for details.
-     _________________________________________________________________
-
-  [B.16] What is Zippy? How can I interface a chess program to the Internet
-  Chess Servers?
-
-   Zippy is an interface that lets a compatible chess engine (such as GNU
-   Chess or Crafty) act as a computer player on an Internet Chess Server.
-   Zippy is included in both the XBoard and WinBoard distributions. It is
-   implemented  as  a  small  amount  of additional code within XBoard or
-   WinBoard.  For  documentation,  see the file zippy.README, included in
-   both   distributions   or   available   from   my   chess   Web  page,
-   http://www.tim-mann/chess.html.  The version of zippy.README on my Web
-   page  is  often  more  up-to-date  than  those  in the XBoard/WinBoard
-   distributions. You'll also find a "biography" of Zippy and pointers to
-   the  original  Zippy  the  Pinhead comic strips on my Web page. Please
-   read  zippy.README  carefully  before  you  ask me any questions about
-   Zippy.
-
-   Using  a computer to choose your moves on a chess server is considered
-   cheating  unless  your account is on the computer (C) list. Read "help
-   computer" on your favorite server for details on their policy. Most of
-   the  servers have plenty of computers running now, so they will not be
-   excited  about  having  you run a new one unless you have written your
-   own  chess  engine.  They  don't really need yet another Crafty or GNU
-   Chess clone.
-     _________________________________________________________________
-
-  [B.17] How can I interface my own chess program to XBoard or WinBoard?
-
-   This is a non-trivial task. XBoard and WinBoard were not designed with
-   a  clean interface for talking to chess programs; they were written to
-   work  with an existing version of GNU Chess that expects to be talking
-   to   a  person.  Your  program  has  to  emulate  GNU  Chess's  rather
-   idiosyncratic  command  structure to work with XBoard and WinBoard. We
-   are gradually cleaning up, improving, and documenting the interface as
-   newer versions of XBoard and WinBoard come out, however.
-
-   For  documentation,  see  the  file engine-intf.html, included in both
-   distributions    or    available    from    my    chess    Web   page,
-   http://www.tim-mann.org/chess.html. The version of engine-intf.html on
-   my Web page is often more up-to-date than those in the XBoard/WinBoard
-   distributions.
-     _________________________________________________________________
-
-  [B.18] How can I recompile WinBoard from source?
-
-   The  source code for WinBoard is available from the author's Web page,
-   http://www.tim-mann.org/chess.html.
-
-   WinBoard  is  currently  developed using Microsoft Visual C++ 5.0. You
-   can  build the program from the MSVC++ GUI by opening the project file
-   (winboard.dsp)  and  telling MSVC++ to build the project. You can also
-   build it from the the command line by using the nmake program supplied
-   with MSVC++.
-
-   To   build  WinBoard  with  the  free  Cygwin  tools,  available  from
-   http://www.cygwin.com/),   use   the  command  "make  -f  cygwin.mak".
-   WinBoard  4.2.5  was  successfully  compiled  with  the net release of
-   Cygwin   as   downloaded  on  20-March-2001  (cygwin1.dll  1.1.8,  gcc
-   2.95.2-6,   binutils   20001221-1,   flex  2.5.4-1),  but  exhibits  a
-   command-line  parsing  bug;  see  item 511 in the ToDo file that comes
-   with  WinBoard.  WinBoard 4.1.0 does not compile with Cygwin. WinBoard
-   4.0.7 is known to compile with Cygwin BL20.1.
-
-   To  build  WinBoard  with Borland C++ 4.5, use "borland.mak", supplied
-   with  the  WinBoard  sources, as the Makefile. Support for Borland C++
-   was  contributed  by Don Fong and has not been tested by the author of
-   WinBoard.
-
-   WinBoard is a Win32 application, so you definitely need a compiler and
-   tool  set  that supports Win32. In particular, older versions of DJGPP
-   can build only 32-bit MSDOS programs; that is, programs that use a DOS
-   extender  to  get  a  32-bit address space and do not make any Windows
-   calls. The latest versions of DJGPP are said to be able to build Win32
-   programs  when  used with the proper extension package(s), but this is
-   not known to work with WinBoard. Use Cygwin instead.
-
-   See also topic [C.16].
-     _________________________________________________________________
-
-  [B.19] How can I use XBoard or WinBoard to talk to an Internet Chess Server
-  through a firewall or proxy?
-
-   There  is  no  single  answer to this question, because there are many
-   different  kinds  of  firewalls in use. They work in various different
-   ways  and  have  various  different security policies. This answer can
-   only provide hints.
-
-   Note that you can't access Internet Chess Servers through a Web proxy,
-   because they are not a Web service. You talk to them through a raw TCP
-   connection,  not  an  HTTP  connection. If you can only access the Web
-   through  a  proxy,  there may be a firewall that stops you from making
-   direct  TCP  connections, but there may also be a way through it. Read
-   on  for hints, and contact your local system administrator if you need
-   more information about your local configuration.
-
-   A  helpful  user  mailed  me  the  following explanation of how to use
-   WinBoard with WinGate:
-
-     "I  have  managed to setup WinBoard though my WinGate proxy. I have
-     the  Office  version.  What  I needed to do was to setup the TCP/IP
-     connection  to  add the User/Host name and my provider service name
-     for  the  DNS, but I had to leave the HOST IP address blank. I have
-     not  played  with all the variations, so it may be just that I have
-     the DNS lookup enabled."
-
-   I  hope  this helps, though I don't find it very clear. I don't have a
-   copy of WinGate myself and can't help if you have questions about it.
-
-   If  you  are  using  some other non-SOCKS firewall, read the FIREWALLS
-   section  in  your  XBoard  or  WinBoard  documentation (man page, info
-   document,  or  Help file). If you can telnet to a chess server in some
-   way, then you can almost certainly connect to it with xboard/WinBoard,
-   though in some cases you may not be able to run timestamp or timeseal.
-   The  timestamp  and timeseal protocols require a clean, 8-bit wide TCP
-   connection  from  your machine to the ICS, which some firewalls do not
-   provide.
-
-   If  you have a SOCKS firewall and are using XBoard, you should be able
-   to  SOCKSify  xboard  and  use  it.  See http://www.socks.nec.com/ for
-   information  about  SOCKS and socksification. However, if you do this,
-   you  can't  use  timestamp  or  timeseal;  what  you  really need is a
-   socksified  version of timestamp or timeseal. This is hard because the
-   source  code  for  timestamp  and  timeseal  is proprietary; the folks
-   running the chess servers don't give it out because that would make it
-   too  easy  to  cheat.  On  some  versions  of Unix, you may be able to
-   socksify  a  program that you don't have the source code to by running
-   it with an appropriate dynamic library; see http://www.socks.nec.com/.
-   For  others,  you  might be able to get a pre-built socksified version
-   from  the  chess  server  administrators.  For  timeseal versions, see
-   ftp://ftp.freechess.org/pub/chess/timeseal/.  For  timestamp versions,
-   the directory would be ftp://ftp.chessclub.com/pub/icc/timestamp/, but
-   at  this  writing  there  don't  seem  to be any socksified timestamps
-   there. Once you have a socksified timestamp or timeseal, simply run it
-   with  a  normal,  non-socksified  xboard  in  place  of  the  standard
-   timestamp or timeseal.
-
-   If  you  have a SOCKS firewall and you are using WinBoard, we now know
-   how  to  make  this  configuration  work,  complete  with timestamp or
-   timeseal!
-
-   Start  by  getting  SocksCap32. This software is freely available from
-   http://www.socks.nec.com/.  Install  it  on  your  machine,  read  the
-   documentation,  and  learn to use it. You may find it useful with many
-   other programs besides WinBoard.
-
-   Next, don't socksify WinBoard. Socksifying WinBoard itself doesn't let
-   you  use  it  with  timestamp  or  timeseal.  For  some reason I don't
-   understand -- something strange that SocksCap32 does -- the socksified
-   WinBoard  runs  but  does  nothing, and timestamp/timeseal runs all by
-   itself in its own window.
-
-   Instead,   use  the  following  workaround.  Follow  the  instructions
-   exactly; don't try to skip steps or simplify things.
-
-   First,   make   SocksCap32  application  profiles  for  timestamp  and
-   timeseal.  Use the following command lines in the SocksCap32 profiles.
-   Name the first profile "timestamp" and the second "timeseal".
-
-    "c:\program files\winboard\timestamp.exe" chessclub.com 5000 -p 5000
-    "c:\program files\winboard\timeseal.exe" freechess.org 5000 -p 5000
-
-   Second,  run  timestamp  or  timeseal by itself, socksified, using its
-   profile.  This  will  open  an  unneeded,  black  window that will not
-   respond  to typing. Minimize it to the task bar and ignore it. It will
-   go away when you exit from WinBoard.
-
-   Next,  run  WinBoard using the following command line. Make a shortcut
-   or  type  this  command  into an MS-DOS Prompt box. Don't run WinBoard
-   itself socksified, just run it directly.
-
-    "c:\program files\winboard.exe" /ics /icshost=localhost /icsport=5000
-
-   After  you  get this working, you can try getting the timestamp window
-   to  auto-minimize  by  starting it from a shortcut instead of from the
-   SocksCap32 control window. As it says in the SocksCap32 help file, put
-   the following in the Target field of a shortcut's Properties page:
-
-    "c:\program files\sockscap32\sc32.exe" timestamp
-
-   Then  select  "Run:  Minimized"  on  the  same  page.  Do the same for
-   timeseal.
-
-   Another  method  that  can  work  is  to use a .bat file to start both
-   timestamp and WinBoard. It would look something like this:
-
-    REM --
-    REM -- icc.bat
-    REM -- Start timestamp under SocksCap32 and use WinBoard to connect to it.
-    REM -- The string "timestamp" refers to a SocksCap32 profile for timestamp.
-    REM --  Do not change it to the filename of the timestamp program!
-    REM --
-    start /minimized "c:\program files\sockscap32\sc32.exe" timestamp
-    cd "c:\program files\winboard"
-    winboard /ics /icshost=localhost /icsport=5000
-
-   This  workaround  has  a  problem  if  you  want  to run two copies of
-   WinBoard  at  once,  talking  to  the  same  chess  server  twice (for
-   bughouse)  or  to two different chess servers. If you need to do that,
-   you  will  need  to  run a separate copy of timestamp with a different
-   port  number  for each connection. You'll need to make a second set of
-   profile  entries  with a different value after the -p flag (say, 5001)
-   and  you'll need to change the WinBoard command line /icsport=5000 for
-   the second WinBoard to match.
-     _________________________________________________________________
-
-  [B.20] How can I use XBoard or WinBoard on chess.net with accuclock?
-
-   I believe chess.net provides a Win32 command-line version of accuclock
-   that  will  work  with  WinBoard.  Please see the documentation on the
-   chess.net server itself; don't ask the author of WinBoard.
-
-   I don't know whether chess.net provides versions of accuclock for Unix
-   at this time. Ask them.
-     _________________________________________________________________
-
-  [B.21] Can I get Zippy to do one or more ICS commands automatically at the
-  start or end of each game?
-
-   By  default, Zippy automatically sends the command "gameend" to ICS at
-   the  end  of  each  game.  You  can  alias this command (using the ICS
-   "alias" feature) to anything you want. On ICC, you can use the "multi"
-   feature  to alias gameend to several commands, but other servers don't
-   have  that  feature.  Zippy  doesn't send anything at the start of the
-   game by default.
-
-   You  can  get  Zippy to send one or more commands of your choosing, at
-   the  start  and/or  end of each game, by using the -zippyGameStart and
-   -zippyGameEnd command line options, newly added in version 4.0.3. Both
-   xboard  and  WinBoard have (somewhat obscure) ways of getting newlines
-   into  this  option to send several commands. Here is an example of one
-   way to do it for each.
-
-    xboard -ics -zp -xrm '*zippyGameStart: say hi\nsay prepare to die\n'
-
-    WinBoard /ics /zp /zippyGameEnd='say thanks\nseek 5 0\nseek 2 12\n'
-     _________________________________________________________________
-
-  [B.22] How do I print from WinBoard?
-
-   WinBoard does not have built-in printing functionality. If you want to
-   print  a  picture  of the board, press Alt+PrintScrn, run the standard
-   Windows application Paintbrush, select Paste, and print from there. If
-   you  want to print a list of moves, save your game as a PGN file, then
-   open  the  PGN  file  with  Notepad or any other plain text editor and
-   print it from there.
-     _________________________________________________________________
-
-  [B.23] Can I get Zippy to automatically reconnect to ICS when its connection
-  breaks?
-
-   There  isn't a perfect solution to this problem yet, but a pretty good
-   one  is  to  write  a  shell  script  (for xboard) or .bat script (for
-   WinBoard)  that  automatically restarts the program whenever it exits.
-   Use  the -xexit flag so that you don't get a popup dialog that must be
-   dismissed  with the OK button before the program will exit. The gap in
-   this  solution is that your connection to ICS can sometimes get into a
-   state  where the program does not notice that the connection is broken
-   until  the  next  time it tries to send a command. Perhaps some future
-   version  of  xboard/WinBoard  will  have  an option to send a harmless
-   command every five minutes or so.
-
-   Anyway, here is a sample Windows .bat file that restarts WinBoard each
-   time  it  exits.  Thanks to Jason Williamson. It assumes that you have
-   put  your  computer  account's  name  and  password  in  a  file named
-   logon.ini.
-REM --
-REM -- wbrecon.bat
-REM -- Start WinBoard in Zippy mode, and restart it each time it exits.
-REM -- Add or change parameters as needed for your application.
-REM --
-:loop
-start /w winboard /zp /ics /icslogon logon.ini /xexit /xautoraise
-REM -- The next line is to have a short delay setup for 139 seconds.
-REM -- Leave it out if it doesn't work on the version of Windows you use.
-TYPE NUL | CHOICE.COM /N /CY /TY,99 >NUL
-goto loop
-
-   Here  is  a  Unix shell script to do the same thing for xboard. It's a
-   bit  more  elaborate. It is based on the script I use for the original
-   Zippy.  It  logs all ICS output to a file named zippy.out, and it lets
-   you type commands to Zippy by running "cat > zippy.fifo".
-#! /bin/sh
-host="204.178.125.65 -icsport 5000 -telnet -telnetProgram timestamp"
-#host="164.58.253.13 -icsport 5000 -telnet -telnetProgram timeseal"
-out=zippy.out
-fifo=zippy.fifo
-ZIPPYPASSWORD='something'
-export ZIPPYPASSWORD
-ZIPPYPASSWORD2='orother'
-export ZIPPYPASSWORD2
-ZIPPYLINES=`pwd`/all.lines
-export ZIPPYLINES
-ZIPPYGAMEEND='say Yow, that was FUN!
-gameend'
-export ZIPPYGAMEEND
-zippylogon=`pwd`/logon.ini
-DISPLAY=`hostname`:0.0
-export DISPLAY
-mv -f $out ${out}.old
-rm -f $fifo
-mkfifo $fifo
-pid=$$
-( while [ true ] ; do cat -u $fifo ; done ) | \
-      ( while [ true ] ; do
-          xboard -iconic -ics -icshost $host \
-                 -zt -zp -xbell -xanimate \
-                 -xautosave -xquiet -fcp "gnuchessx -h" \
-                 -icslogon $zippylogon -xexit -autoflag -xautoraise $*
-          sleep 600
-        done ) > $out 2>&1 &
-     _________________________________________________________________
-
-  [B.24] The chess engines are too strong and always beat me. How can I adjust
-  the difficulty level to make them weaker?
-
-   The   simplest   way   to   get  that  effect  is  to  make  sure  the
-   XBoard/WinBoard  Auto Flag option is off, set a very fast time control
-   so  that  the chess engine can't think for long, but take as much time
-   over your own moves as you want. Also feel free to use Retract Move if
-   you make a blunder.
-
-   Many chess coaches will let you switch sides after they get a stronger
-   position  so  that  you can get experience playing positions where you
-   are  winning.  You  can  try  this  with  XBoard/WinBoard by using the
-   Machine  White  or Machine Black menu command to make the machine take
-   over your position.
-
-   The  -depth command-line option to XBoard/WinBoard can also be used to
-   weaken  the  engine  (see  the man page or Help file). It's a bit of a
-   nuisance  to  set command line options in Windows, but see topic [C.7]
-   for instructions.
-
-   Other  ways of weakening engines are engine-specific. Many of them let
-   you  adjust  various  parameters,  and if you choose bad settings, the
-   engine will play more poorly. Consult whatever documentation came with
-   the engine you are using.
-     _________________________________________________________________
-
-  [B.25] May I use the piece bitmaps from XBoard/WinBoard in my own program?
-
-   The  piece  bitmaps used in XBoard and WinBoard were designed by Elmar
-   Bartel.  He  released  them under the GNU General Public License. This
-   means that if your program is also free software distributed under the
-   GPL,  you  can  use  them freely. If your program is distributed under
-   some  other  license,  including  commercial,  shareware,  or  non-GPL
-   freeware,  then  you  cannot use the bitmaps unless you obtain special
-   permission from Elmar. See the file README.bitmaps that comes with the
-   XBoard  and  WinBoard  source  code  for more information and an email
-   address you can write to.
-     _________________________________________________________________
-
-[C] XBoard and WinBoard, bugs and problems
-     _________________________________________________________________
-
-  [C.1] I can't build XBoard because the X11/Xaw/... include files are not
-  found.
-
-   These  are  the  header  files  for  the Athena Widgets library, which
-   XBoard  uses  heavily. Some versions of Unix don't supply these files,
-   but  they  are  part  of the standard X distribution, freely available
-   from MIT.
-
-   For  general  information on getting missing X sources, see the FAQ on
-   comp.windows.x. Note that you may be missing only the header files, or
-   you may be missing the libraries themselves too.
-
-   HP-UX  users  are  missing  only the header files. You can get them by
-   anonymous   FTP   as  follows.  (But  first  check  with  your  system
-   administrator  to  see  if  someone else at your site has already done
-   this.)  Get  the  archive  file /hpux9/X11R5/Core/Xaw-5.00.tar.gz (Xaw
-   header  files)  via  anonymous  FTP  from  the site hpux.csc.liv.ac.uk
-   (138.253.42.172),  or  one  of  the  other  official  sites---Germany:
-   hpux.ask.uni-karlsruhe.de   (129.13.200.57),   US:   hpux.cae.wisc.edu
-   (144.92.4.15),  France:  hpux.cict.fr  (192.70.79.53)  or Netherlands:
-   hpux.ced.tudelft.nl  (130.161.140.100).  Unpack the archive using gzip
-   and  follow  the instructions in its README and/or HPUX.Install files.
-   Thanks to Richard Lloyd for this information.
-
-   If  you  have the Xaw header files installed in a different place than
-   the  other X11 headers, you may need to configure XBoard with an extra
-   flag   to   help   it   find  them.  For  example,  if  yours  are  in
-   /foo/bar/X11/Xaw, try this:
-
-    rm config.cache
-    (setenv CFLAGS -I/foo/bar ; configure)
-
-   Also see topic [C.2].
-     _________________________________________________________________
-
-  [C.2] Configuring or building XBoard fails due to missing header files,
-  missing libraries, or undefined symbols.
-
-   Perhaps  you  have  the X server and client programs installed on your
-   machine,  but  not  the X header files and link-time libraries. If so,
-   you  can  run  existing  X  programs,  but  you cannot compile a new X
-   program  from  source  code.  In this case the XBoard configure script
-   will  fail and will tell you to look at this question in the FAQ. Many
-   GNU/Linux  distributions  put  the headers and libraries in a separate
-   package,  which you might not have installed. If you are using RedHat,
-   install the XFree86-devel package. If you are using some other kind of
-   Unix,  ask  your system administrator where to find the X header files
-   and link-time libraries. If this is not your problem, read on.
-
-   The configure script for XBoard looks for X libraries and header files
-   in  some  common places. Sometimes it fails: If yours are installed in
-   an  odd  place, it may not find them at all. If you have more than one
-   version of X installed on your system, it may find the "wrong" one, or
-   occasionally  it  may find libraries from one version and incompatible
-   header  files  from  another.  You  can  work around these problems by
-   telling the configure script where the files are. For example:
-
-    configure --x-includes=/odd/place/include \
-              --x-libraries=/odd/place/lib
-
-   The  directory  named  in  the  argument  to  --x-includes must have a
-   subdirectory "X11" that contains the actual .h files. That is, if your
-   X.h  file has full pathname /odd/place/X11R6/include/X11/X.h, then you
-   must give the argument --x-includes=/odd/place/X11R6/include.
-
-   Some linkers have bugs that cause bogus error messages when you try to
-   link  X programs. The configure script includes a workaround for a bug
-   of  this  kind  that exists in some SunOS 4.x.x installations. See the
-   FAQ  on  comp.windows.x  for  more  information about problems of this
-   kind.
-
-   If  all  else  fails,  check whether anyone else at your site has been
-   able  to  compile  any  X programs on your system. Your X installation
-   might  be  buggy.  If  so, the system administrator at your site might
-   know how to fix or work around the problem.
-
-   Also see topic [C.1].
-     _________________________________________________________________
-
-  [C.3] I have problems using WinBoard on ICS with a modem. I'm not running
-  SLIP or PPP, but just dialing in to an ordinary login account ("shell
-  account").
-
-   Here are solutions to some common problems in this area.
-
-   Some people want to connect to ICS through HyperTerminal or some other
-   terminal  program  first, then run WinBoard. This is not how it works.
-   WinBoard  wants to talk directly with your modem, acting as a terminal
-   program  itself.  Start  out  with  the  modem "on hook" (not making a
-   call).
-
-   Run  WinBoard  with  a  command line like this (adding more options if
-   desired):
-
-    WinBoard /ics /icscom com1
-
-   Use com2, com3, or com4 in place of com1 if your modem is connected to
-   one of those ports.
-
-   After  you  start WinBoard, you may need to change some of the options
-   in the Communications dialog (on the Options menu). The dialog has the
-   usual  options  for talking to modems: bits per second, bits per byte,
-   parity,  number  of  stop  bits.  You  will  probably want to use Save
-   Settings Now when you're done.
-
-   Next,  type  dialing  commands  to  your modem in the text window that
-   WinBoard  creates.  You may need to turn off Local Line Editing on the
-   Options menu while you are typing commands to your modem. Turn it back
-   on  when  you're  done. See the WinBoard Help file for instructions if
-   you see your typing echoed an extra time after you hit Enter.
-     _________________________________________________________________
-
-  [C.4] I have problems using WinBoard on ICS with Windows 95 and SLIP or PPP.
-  When trying to start up, it gets the error "Address family not supported by
-  protocol family" (or some equally strange message).
-
-   WinBoard   is   a   32-bit  application,  but  some  Winsock  (TCP/IP)
-   implementations  support  only  16-bit applications. You get a strange
-   looking  error  message if you try to use a 32-bit application because
-   there is no standard Winsock error code number for "32-bit application
-   not supported."
-
-   Microsoft  TCP/IP  works  with  both  16-bit  and 32-bit applications,
-   supports  SLIP,  PPP,  Ethernet, etc., and is included with Windows 95
-   and later Windows systems. If possible, I recommend that you uninstall
-   whatever  Winsock  you are using and install Microsoft TCP/IP instead.
-   For  more information, see http://walden.mo.net/~rymabry/95winfaq.html
-   (the Win95-L FAQ).
-
-   Trumpet  Winsock  2.1 (and earlier) supports only 16-bit applications,
-   and  hence  does  not  work  with  WinBoard.  But there is a beta-test
-   release  available  that  does support 32-bit applications. I have not
-   tried  it  with  WinBoard,  but it should work. See Trumpet's Web page
-   http://www.trumpet.com.au/wsk/winsock.htm for more information.
-
-   The  16-bit  versions  of  America  On-Line's  software do not support
-   32-bit  Winsock  applications. Get the 32-bit version. At one time the
-   32-bit version was called "AOL for Windows 95," but I imagine that has
-   changed. Hopefully the current versions are all 32-bit.
-
-   A  few  versions  of  Winsock  may  have  bugs  that  prevent  Windows
-   timestamp/timeseal  from  working with them. I'm not sure if such bugs
-   exist in any versions that actually have 32-bit support, so this point
-   might be moot. Again, Microsoft TCP/IP is known to work.
-     _________________________________________________________________
-
-  [C.5] When I try to run WinBoard, I get the message "Failed to start chess
-  program gnuchess on localhost: NO LANGFILE (file gnuchess.lan not found)".
-
-   This  message  means that WinBoard is trying to run GNU Chess, but GNU
-   Chess cannot find a file that it needs, named gnuchess.lan. If you see
-   it,  you've probably customized WinBoard's /fcp, /fd, /scp, and/or /sd
-   options  and  made  a mistake in the process. Review what you did, and
-   see the WinBoard help file.
-     _________________________________________________________________
-
-  [C.6] I want to use XBoard or WinBoard as an Internet Chess Server interface,
-  but the ICS Client option is grayed out on the menu.
-
-   XBoard  and WinBoard have three major modes that can't be changed from
-   the menus: local chess engine mode, ICS mode, and standalone mode.
-
-   With  XBoard,  you  have  to  set the mode using command-line options.
-   Local  chess  engine  mode  is the default, -ics selects ICS mode, and
-   -ncp ("no chess program") selects standalone mode.
-
-   With  WinBoard,  if you don't set the mode using command-line options,
-   you  get a dialog box asking which mode you want. To bypass the dialog
-   box, use -cp ("chess program") for local chess engine mode, or -ics or
-   -ncp as with XBoard. Also see topic [C.7].
-     _________________________________________________________________
-
-  [C.7] How do I give command-line options to a Windows program like WinBoard?
-
-   There are many ways; pick your favorite:
-
-     * Type  the  command  line  into  an  MS-DOS  Prompt  box.  Example:
-       "WinBoard -ics".
-     * Make  a  Windows  shortcut  for  WinBoard.  You  can  do  this  by
-       right-dragging  WinBoard.exe  to the desktop and selecting "Create
-       Shortcut(s)  Here"  from the menu that appears. Right-click on the
-       shortcut,  select  Properties,  and  click  the  Shortcut tab. The
-       command-line  text  box  is  labelled "Target" instead of "Command
-       line"  just  to confuse you. Edit the text in this box, adding the
-       command line options to the end.
-     * Choose  Run  from  the  Start menu, or File / Run from the Program
-       Manager or File Manager, and type the command line into the dialog
-       you  get.  You  may  have  to  give  WinBoard's full drivespec and
-       filename if it is not in a directory on your search path.
-     * Make  a  Program  Manager  icon  for  WinBoard. You can do this by
-       dragging  WinBoard.exe  from  the  File  Manager  into the Program
-       Manager, or by using File / New in the Program Manager. Select the
-       icon  and choose File / Properties. Edit the Command Line text box
-       to add the command-line options to the end.
-     _________________________________________________________________
-
-  [C.9] When I exit from WinBoard after using it to play against a chess
-  program on my machine, the chess program keeps running in the background.
-
-   Be sure you have the current versions of WinBoard and the chess engine
-   you  are  using. WinBoard 3.4.1 and earlier had a bug that caused this
-   problem  to  occur  with  all chess engines. A buggy chess engine that
-   does not respond to the "quit" command will also cause this.
-
-   If  you still see this problem, you can stop the rogue chess engine by
-   pressing  Ctrl+Alt+Del,  selecting  the  chess engine process from the
-   menu, and pressing the End Task button.
-     _________________________________________________________________
-
-  [C.12] Why do my ICS opponents often get extra time after they make their
-  moves? Why do I sometimes lose time off my clock after I make my move?
-
-   If  you  are playing with the ICS incremental clock, both you and your
-   opponent get a set amount of extra time after each move.
-
-   If your or your opponent has netlag, your opponent might appear to get
-   extra  time,  especially  if  your  opponent  is  using  timestamp  or
-   timeseal.  The  ICS  charges  each  player  who  is using timestamp or
-   timeseal  only  for  the  time  between  when  the player received his
-   opponent's  move  and  the  time  he sent his own move. Thus delays in
-   network  transmission do not count against either player. But WinBoard
-   counts  down the display of your opponent's clock on your screen under
-   the  assumption  that  there  is no netlag. When his move comes in, if
-   there  was  netlag,  the  ICS may not have really charged him for that
-   much  time,  and  WinBoard  corrects the clock to what the ICS says it
-   should read.
-
-   If  you  are  not  using timestamp or timeseal, you may appear to lose
-   time  off  your  clock at some point after you make your move. In this
-   case,  the  ICS charges you for the time between when it sent you your
-   opponent's  move  and  the  time it received your move. Thus delays in
-   network  transmission  count against you. WinBoard stops counting down
-   the  display of your clock on your screen (and starts your opponent's)
-   when you make your move. When the ICS echoes your move back to you, it
-   may  have  charged  you for more time than that, and WinBoard corrects
-   the clocks to what the ICS says they should read.
-
-   See "help lag" and "help timestamp" or "help timeseal" on your ICS for
-   more detailed information.
-     _________________________________________________________________
-
-  [C.13] I can't run WinBoard unless I delete the WinBoard.ini file each time!
-
-   Most  people  don't  have  this problem, but two or three people using
-   Windows  NT  4.0  with Service Pack 3 or 4 have reported it. I have no
-   idea  what  causes  this  problem.  Contrary to what was reported in a
-   previous  version  of  this  FAQ,  reinstalling the service pack after
-   installing WinBoard does not seem to solve the problem.
-     _________________________________________________________________
-
-  [C.15] I get errors compiling XBoard's parser.c.
-
-   The  file  parser.c is automatically generated from parser.l. The copy
-   included  with XBoard 4.0.2 was generated by lex on Tru64 Unix and has
-   problems compiling and linking on current GNU/Linux versions. The copy
-   included  with  XBoard  4.0.3  was  generated  by  flex on a GNU/Linux
-   machine,  but it too won't necessarily work on other versions of Unix.
-   If  you  have  this  problem,  you can fix it by deleting parser.c and
-   letting the Makefile re-create it from parser.l. This will work if you
-   have  either  lex  or  flex  on  your system. Flex is available in all
-   GNU/Linux distributions and can be obtained at no charge from the Free
-   Software Foundation, www.fsf.org.
-     _________________________________________________________________
-
-  [C.16] I get an error building WinBoard from source because "flex" is not
-  found.
-
-   The  file  parser.c  is  automatically  generated  from  parser.l. The
-   Makefile  included  with  the  WinBoard  source  kit  has  a  rule for
-   generating  parser.c  using the program "flex", which will fail if you
-   don't  have  flex.  However, the source kit also includes a ready-made
-   copy  of  parser.c, so you don't really need flex unless you have made
-   changes  to parser.l. Check that you still have a copy of parser.c; if
-   you  don't,  unpack  the  WinBoard  source  zip file again to get one.
-   Either set the last-modified time of parser.c to be later than that of
-   parser.l,  delete  parser.l,  or  comment  out  the  Makefile rule for
-   building parser.c from parser.l, and then try building WinBoard again.
-
-   If  you  do  want to change parser.l and rebuild parser.c, you can get
-   flex as part of the free Cygwin kit from
-   http://sourceware.cygnus.com/cygwin/.  You  can probably also get flex
-   for  Windows  by itself from various other places around the Internet.
-   It  is  free  software  distributed  by  the Free Software Foundation,
-   www.fsf.org.
-     _________________________________________________________________
-
-  [C.17] XBoard hangs shortly after connecting to an ICS when used with dxterm,
-  cmdtool, dtterm, kterm, konsole, or other substitutes for xterm.
-
-   After  connecting  to  a chess server, XBoard 4.0.2 and later sends an
-   escape  sequence  to its terminal that is meant to display your handle
-   and  the  ICS  host  name  (for  example, "user at chessclub.com") in the
-   terminal's banner and icon. It seems that several of the alternative X
-   terminal  programs  have  a  bug  that  makes them hang when sent this
-   escape sequence.
-
-   You  can  work around the problem by using xterm, nxterm, rxvt, aterm,
-   xiterm,  or  gnome-terminal,  all of which seem to work fine. In fact,
-   current versions of kterm and konsole seem to work fine too, so if you
-   are  having  problems with one of them, be sure you are not running an
-   outdated version.
-
-   Alternatively, you can disable this feature by commenting out the body
-   of DisplayIcsInteractionTitle in xboard.c and recompling xboard.
-     _________________________________________________________________
-
-  [C.18] The WinBoard pieces show up in the wrong colors, appear distorted, or
-  are not visible at all.
-
-   This  can  happen  if  you  have a bug in your Windows display driver.
-   Check  with the manufacturer of your display card, the manufacturer of
-   your  computer,  or  Microsoft  to  see  if there is an updated driver
-   available. You can usually download updated drivers from the Web.
-
-   If you can't find an updated driver, you can try running Windows using
-   a  different  number  of  colors and/or disabling some of the hardware
-   acceleration  features  on  your display card. To change the number of
-   colors,  go  to  Windows  Start / Settings / Control Panel / Display /
-   Settings  /  Color Palette. To disable hardware acceleration features,
-   go  to Windows Start / Settings / Control Panel / Display / Settings /
-   Advanced Properties / Performance / Hardware Acceleration.
-
-   It's also possible that Windows has the right driver for your hardware
-   already  but  you  are  not  using  it.  It may help to reinstall your
-   driver.  Go  to  Windows Start / Settings / Control Panel / System and
-   delete  your  display card (maybe even your monitor too), then reboot.
-   Windows  should  automatically  re-detect  your  card  and monitor and
-   re-install  the drivers; if it doesn't, run Start / Settings / Control
-   Panel / Add New Hardware to force it to.
-
-   If  all  else  fails,  try Monochrome mode. On WinBoard's menus, go to
-   Options  /  Color and check Monochrome. WinBoard will display in black
-   and white.
-     _________________________________________________________________
-
-  [C.19] XBoard or WinBoard tells me "Error: first chess program (...) exited
-  unexpectedly".
-
-   This  message  means that your chess engine crashed, probably due to a
-   bug  in the engine, or because you have it configured incorrectly. You
-   can try running XBoard or WinBoard again with the "-debug" flag on the
-   command  line.  This will print out all the messages received from the
-   chess  engine.  (With  WinBoard,  the  messages  go into a file called
-   WinBoard.debug;  with  XBoard,  they  go to the xterm that you started
-   XBoard from.)
-
-   If  you  are  using  GNU  Chess and you see this problem as soon as it
-   starts  up, most likely GNU Chess is exiting with an error message. If
-   you  see  the message "NO LANGFILE", it means that you did not install
-   GNU  Chess correctly, and it is unable to find the file gnuchess.lang.
-   Make  sure  that you defined LIBDIR in the gnuchess Makefile, and that
-   gnuchess.lang is in that directory. If gnuchess.lang is not there, you
-   probably didn't type "make install" in the gnuchess src directory; you
-   must  do this to install gnuchess.lang (and the gnuchess book). If you
-   defined LIBDIR to something that is not an absolute pathname (that is,
-   to something that does not start with a "/"), GNU Chess will work only
-   if you run it from the GNU Chess "src" directory where you built it.
-     _________________________________________________________________
-
-  [C.20] XBoard tells me "Warning: Cannot allocate colormap entry", or "too few
-  colors available; trying monochrome mode", or "XPM pieces cannot be used in
-  monochrome mode".
-
-   You  are  running  your  X  server with 8-bit color depth, and you are
-   running some program that has used up all 256 of your colors. Netscape
-   tends  to  do  this, or maybe you have a background image that uses up
-   all of your colors.
-
-   If  you have a modern machine, you probably have enough display memory
-   to  run  your X server with 16-, 24-, or 32-bit color depth. If you're
-   using  "startx"  to  start  the  X  server,  try giving the command as
-   "startx -- -bpp 24" (or 16, or 32). On newer X servers you may have to
-   use  -depth  instead  of  -bpp.  Further details on configuring your X
-   server are beyond the scope of this FAQ.
-
-   If  you  must  run  in 8-bit mode, try the following: Avoid background
-   images  that use up all your colors. If you run Netscape, try starting
-   it  up  with the -install command-line option; this gives Netscape its
-   own  private  colormap  that  X  will  switch to when Netscape has the
-   keyboard focus.
-
-   If  all else fails, another possibility is to run xboard in monochrome
-   (black  and  white)  mode  by giving it the -mono command-line option.
-   XBoard  will  try  this by itself in some cases. Monochrome mode works
-   only  with  bitmap  pieces, not pixmap pieces, so trying to use it may
-   give  you the error "XPM pieces cannot be used in monochrome mode". To
-   get  around  this, either use the -bitmapDirectory command line option
-   to point XBoard to the directory containing the bitmap pieces included
-   with  the  XBoard  source  code, or rebuild XBoard with pixmap support
-   disabled, using "./configure --disable-xpm ; make clean ; make".
-     _________________________________________________________________
-
-  [C.21] When I log in to freechess.org, the Enter key doesn't work, and I have
-  to use Ctrl+J instead. But when I use WinBoard, Ctrl+J doesn't work either,
-  so I'm stuck.
-
-   This  is  a  pretty  rare problem. It should only arise if you have to
-   reach   freechess.org  by  telnetting  (or  connecting  with  WinBoard
-   /icsport=23) from a Windows PC to a Unix box, and then telnetting from
-   there  to  freechess.org.  The  Enter  key  should  always  work  when
-   connecting directly from your PC to freechess.org.
-
-   The  best  way  to  get  around  the problem is to run timeseal on the
-   intermediate  Unix  box instead of telnet. Get the appropriate version
-   of  timeseal  for  your  box  from  ftp.freechess.org  and  follow the
-   directions in the help files on FICS.
-
-   If  you  can't run timeseal for some reason, there are some things you
-   can  do to make telnet stay in line mode instead of going to character
-   mode.  Then  the Enter key will work. First, try "telnet freechess.org
-   5000"  instead  of "telnet freechess.org." If that still doesn't work,
-   then  when the Enter key stops working, type the following. Here < and
-   > surround the names of keys.
-
-    <Ctrl+S><Ctrl+]>mode line<Enter>
-     _________________________________________________________________
-
-  [C.22] XBoard says, "Failed to start first chess program gnuchessx on
-  localhost: gnuchessx: No such file or directory."
-
-   XBoard  is looking for GNU Chess 4.0. If you didn't want to use XBoard
-   with  GNU  Chess,  please  see topic [C.6]. If you did want to use GNU
-   Chess 4.0, be sure you have it installed and that it is on your $PATH.
-   If you wanted to use GNU Chess 5 instead, see topic [D.6].
-     _________________________________________________________________
-
-[D] Crafty and other topics
-     _________________________________________________________________
-
-  [D.1] What is XChess?
-
-   XChess  is  an  older  chessboard program that is no longer supported.
-   XChess was written for X version 10, and you may or may not be able to
-   build and run it on an X11 system.
-
-   XChess has only one significant feature that is not present in XBoard:
-   Two  humans can play chess using XChess on different machines, without
-   using the Internet Chess Server as an intermediary. This feature is of
-   interest  only  if you don't have network connectivity to the Internet
-   Chess Server.
-
-   Note:  There  actually  have  been  several  different programs called
-   "XChess" in circulation at various times. The above describes one that
-   was associated with GNU Chess.
-     _________________________________________________________________
-
-  [D.2] What is Winsock Chess?
-
-   Winsock  Chess  is  a program that lets two people play chess across a
-   network.  It  runs  only  under Microsoft Windows. Some of the code in
-   Winsock  Chess  is derived from GNU Chess, but it is not maintained by
-   the  GNU  Chess  team.  You  can  get  a  copy from the Internet Chess
-   Library;  see  topic  [A.2]. For more information, contact its author,
-   Donald Munro, ccahdm at beluga.upe.ac.za.
-     _________________________________________________________________
-
-  [D.3] What is Crafty?
-
-   Crafty  is  a freely-available chess program written by Bob Hyatt. Bob
-   is  the main author of the well-known chess program Cray Blitz. Crafty
-   is  a very strong program, its code is available, commented and fairly
-   readable, and its author is actively working on improvements.
-
-   You  can  download Crafty from ftp://ftp.cis.uab.edu/pub/hyatt/. Start
-   by  getting  the read.me file and reading it. Among other things, this
-   file  contains instructions on how to install Crafty as a command-line
-   application on your machine.
-
-   There   is  a  Crafty  mailing  list.  To  subscribe,  send  email  to
-   majordomo at cis.uab.edu, with "subscribe crafty-list" in the body.
-     _________________________________________________________________
-
-  [D.4] How do I use Crafty with XBoard?
-
-   First,  you  need  to  get  Crafty  and  install  it as a command-line
-   application on your machine. See topic [D.3].
-
-   To use Crafty with XBoard, give the -fcp parameter like this:
-
-    xboard -fcp "./crafty" -fd crafty_directory
-
-   Here crafty_directory is the directory where you installed Crafty. You
-   can add more xboard options at the end of the command line.
-
-   Crafty  15.14  or later is required to work properly with XBoard 4.0.0
-   or  later.  We  generally  recommend using the latest versions of both
-   XBoard and Crafty.
-     _________________________________________________________________
-
-  [D.5] How do I use Crafty with WinBoard?
-
-   First,  you  need  to  get  Crafty  and  install  it as a command-line
-   application  on  your  machine. See topic [D.3]. It is best to use the
-   latest  version  of Crafty with the latest version of WinBoard to make
-   sure  all  features  are  compatible  and  function correctly. You can
-   install Crafty in any directory you like.
-
-   You  also  need to get WinBoard and install it in the normal way using
-   its  built-in  installer.  You  can do that either before or after you
-   install Crafty.
-
-   After  both  Crafty  and WinBoard are installed separately, follow the
-   directions  in  the  WinBoard  Help  file (included with WinBoard) for
-   connecting new chess engines to WinBoard.
-
-   If  you  want  to have Crafty act as an automated computer player on a
-   chess server, see topic [B.16]. Before you try to get that working, be
-   sure you can play against Crafty locally, first without WinBoard, then
-   with it. Also be sure you can use WinBoard to play on the chess server
-   yourself,  without  having  Crafty  connected to it. You have to crawl
-   before you can walk!
-     _________________________________________________________________
-
-  [D.6] How do I use GNU Chess 5 with XBoard?
-
-   By  default,  XBoard  still  tries  to  use GNU Chess 4 by running the
-   command "gnuchessx". That's why if you don't have GNU Chess 4, you get
-   the  error  message  "Failed to start first chess program gnuchessx on
-   localhost: gnuchessx: No such file or directory."
-
-   If  you  have  GNU  Chess  5,  the command should be "gnuchess xboard"
-   instead. To make XBoard use this command, give the -fcp parameter like
-   this:
-
-    xboard -fd gnuchess_directory -fcp "./gnuchess xboard"
-
-   Here gnuchess_directory is the directory where you installed GNU Chess
-   5  and  its  book.  You  can add more xboard options at the end of the
-   command line.
-     _________________________________________________________________
-
-   $Id: FAQ.html,v 2.2 2003/11/28 09:35:21 mann Exp $
-   ** End of XBoard/WinBoard FAQ **
diff --git a/FAQ.html b/FAQ.html
index 2c07930..d743875 100644
--- a/FAQ.html
+++ b/FAQ.html
@@ -1,1701 +1,1659 @@
-<HTML><HEAD><TITLE>
-XBoard and WinBoard: Frequently Asked Questions</TITLE></HEAD>
-<BODY>
-<H1>XBoard and WinBoard: Frequently Asked Questions</H1>
-
-This document answers some frequently asked questions about the
-graphical chess interfaces XBoard and WinBoard.
-A hyperlinked version of this FAQ is available on
-the Web through the page
-<A HREF=
-"http://www.tim-mann.org/chess.html"
->http://www.tim-mann.org/chess.html</A>.
-
-<i>This FAQ is in need of revision.  Please contact us if you'd like
-to help update it.</i>
-
-<HR>
-<H2>Outline</H2>
-
-<UL>
-<LI><A HREF="#[A0]">[A] Introduction and hot topics</A></LI>
-<LI><A HREF="#[B0]">[B] XBoard and WinBoard</A></LI>
-<LI><A HREF="#[C0]">[C] XBoard and WinBoard, bugs and problems</A></LI>
-<LI><A HREF="#[D0]">[D] Crafty and other topics</A></LI>
-</UL>
-
-<HR>
-<H2>Detailed contents</H2>
-
-<UL>
-<LI><A NAME="[A0]" HREF="#[A]">[A] Introduction and hot topics</A></LI> 
-<UL>
-<LI><a href="#[A.1]">[A.1] What are XBoard and WinBoard?</a></li>
-<LI><A HREF="#[A.2]">[A.2] Where can I get chess information and chess
-  software?</A></LI> 
-<LI><A HREF="#[A.3]">[A.3] What are the current version numbers for
-  XBoard and WinBoard?</A></LI> 
-<LI><A HREF="#[A.4]">[A.4] Who is working on this project?</A></LI>
-<LI><A HREF="#[A.5]">[A.5] How do I report bugs, offer help, etc.?</A></LI>
-<LI><a href="#[A.6]">[A.6] What are the future plans for XBoard and
-  WinBoard?</A></LI>
-</UL>
-
-<LI><A NAME="[B0]" HREF="#[B]">[B] XBoard and WinBoard</A></LI>
-<UL>
-<LI><A HREF="#[B.1]">[B.1] What is XBoard?</A></LI>
-<LI><A HREF="#[B.2]">[B.2] Is there an XBoard for Microsoft Windows?  What is
-  WinBoard?  How do I install WinBoard?</A></LI>
-<LI><A HREF="#[B.3]">[B.3] Is there an XBoard for the Amiga?  What is
-  AmyBoard?</A></LI>
-<LI><A HREF="#[B.4]">[B.4] Is there an XBoard for the Macintosh?</A></LI>
-<LI><A HREF="#[B.5]">[B.5] Does XBoard run on VMS?</A></LI>
-<LI><A HREF="#[B.6]">[B.6] What is cmail?</A></LI>
-<LI><A HREF="#[B.7]">[B.7] How do I build XBoard?  Do I have to have
-  gcc?</A></LI>
-<LI><A HREF="#[B.8]">[B.8] Can I use XBoard or WinBoard to play a game
-  of chess with another human?</A></LI>
-<LI><A HREF="#[B.9]">[B.9] Will WinBoard run on Windows 3.1?  
-  How about Windows CE (also known as Pocket PC)?</A></LI>
-<LI><A HREF="#[B.10]">[B.10] How do I use XBoard or WinBoard as an external
-  viewer for PGN files with my Web browser?</A></LI>
-<LI><A HREF="#[B.11]">[B.11] How do I use WinBoard as an external viewer for
-  PGN files with the MS Windows File Manager or Explorer?</A></LI>
-<LI><A HREF="#[B.12]">[B.12] How do I use ICC timestamp or FICS timeseal
-  with XBoard?</A></LI>
-<LI><A HREF="#[B.13]">[B.13] How do I use ICC timestamp or FICS timeseal
-  with WinBoard?</A></LI>
-<LI><A HREF="#[B.14]">[B.14] How do I play bughouse with XBoard or WinBoard?
-</A></LI>
-<li><a href="#[B.16]">[B.16]
-  What is Zippy?  How can I interface a chess program to the Internet 
-  Chess Servers?</a></li> 
-<li><a href="#[B.17]">[B.17]
-  How can I interface my own chess program to XBoard or WinBoard?</a></li>
-<li><a href="#[B.18]">[B.18]
-  How can I recompile WinBoard from source?</a></li>
-<li><a href="#[B.19]">[B.19]
-  How can I use XBoard or WinBoard to talk
-  to an Internet Chess Server through a firewall or proxy?</a></li>
-<li><a href="#[B.20]">[B.20] 
-  How can I use XBoard or WinBoard on chess.net with accuclock?</a></li>
-<li><a href="#[B.21]">[B.21]
-  Can I get Zippy to do one or more ICS commands automatically at the 
-  start or end of each game?</a></li>
-<li><a href="#[B.22]">[B.22]
-  How do I print from WinBoard?</a></li>
-<li><a href="#[B.23]">[B.23]
-  Can I get Zippy to automatically reconnect to ICS when its connection 
-  breaks?</a></li>
-<li><a href="#[B.24]">[B.24]
-  The chess engines are too strong and always beat me.  How can I adjust
-  the difficulty level to make them weaker?</a></li>
-<li><a href="#[B.25]">[B.25]
-  May I use the piece bitmaps from XBoard/WinBoard in my own program?</a></li>
-
-</UL>
-
-<LI><A NAME="[C0]" HREF="#[C]">[C] XBoard and WinBoard, bugs and 
-  problems</A></LI>
-<UL>
-<LI><A HREF="#[C.1]">[C.1] I can't build XBoard because the
-  X11/Xaw/... include files are not found.</A></LI>
-<LI><A HREF="#[C.2]">[C.2] Configuring or building XBoard fails due to
-  missing header files, missing libraries, or undefined symbols.</a></li>
-<LI><A HREF="#[C.3]">[C.3] I have problems using WinBoard on ICS with a modem.
-  I'm not running SLIP or PPP, but just dialing in to an ordinary login account
-("shell account").</A></LI>
-<LI><A HREF="#[C.4]">[C.4] 
-  I have problems using WinBoard on ICS with Windows 95 and SLIP
-  or PPP.  When trying to start up, it gets the error "Address family
-  not supported by protocol family" (or some equally strange message).
-</A></LI> 
-<LI><A HREF="#[C.5]">[C.5] When I try to run WinBoard, I get the message
-  "Failed to start chess program gnuchess on localhost: NO LANGFILE (file
-  gnuchess.lan not found)".</A></LI>
-<LI><A HREF="#[C.6]">[C.6] I want to use XBoard or WinBoard as an Internet
-  Chess Server interface, but the ICS Client option is grayed out on the
-  menu.</A></LI> 
-<LI><A HREF="#[C.7]">[C.7] How do I give command-line options to
-  a Windows program like WinBoard?</A></LI>
-<LI><A HREF="#[C.9]">[C.9]
-  When I exit from WinBoard after using it to play against a chess
-  program on my machine, the chess program keeps running in the background.
-</A></LI>
-<li><a href="#[C.12]">[C.12]
-  Why do my ICS 
-  opponents often get extra time after they make their moves?
-  Why do I sometimes lose time off my clock after I make my move?
-</a></li>
-<li><a href="#[C.13]">[C.13]
-  I can't run WinBoard unless I delete the WinBoard.ini file each time!
-</a></li>
-<li><a href="#[C.15]">[C.15]
-  I get errors compiling XBoard's parser.c.
-</a></li>
-<li><a href="#[C.16]">[C.16]
-  I get an error building WinBoard from source because "flex" is not found.
-</a></li>
-<li><a href="#[C.17]">[C.17]
-  XBoard hangs shortly after connecting to an ICS when used with dxterm,
-  cmdtool, dtterm, kterm, konsole, or other substitutes for xterm.
-</a></li>
-<li><a href="#[C.18]">[C.18]
-  The WinBoard pieces show up in the wrong colors, appear distorted,
-  or are not visible at all.
-</a></li>
-<LI><A HREF="#[C.19]">[C.19] XBoard or WinBoard tells me
-"Error: first chess program (...) exited unexpectedly".</A></LI> 
-<li><a href="#[C.20]">[C.20]
-  XBoard tells me "Warning: Cannot allocate colormap entry", or
-  "too few colors available; trying monochrome mode", or
-  "XPM pieces cannot be used in monochrome mode".
-</a></li>
-<li><a href="#[C.21]">[C.21]
-  When I log in to freechess.org, the Enter key doesn't work, and I 
-  have to use Ctrl+J instead.  But when I use WinBoard, Ctrl+J doesn't
-  work either, so I'm stuck.
-</a></li>
-<li><a href="#[C.22]">[C.22]
-  XBoard says, "Failed to start first chess program gnuchessx
-  on localhost: gnuchessx: No such file or directory."  
-</a></li>
-</UL>
-
-<LI><A NAME="[D0]" HREF="#[D]">[D] Crafty and other topics</A></LI>
-<UL>
-<LI><A HREF="#[D.1]">[D.1] What is XChess?</A></LI>
-<LI><A HREF="#[D.2]">[D.2] What is Winsock Chess?</A></LI>
-<LI><A HREF="#[D.3]">[D.3] What is Crafty?</A></LI>
-<LI><A HREF="#[D.4]">[D.4] How do I use Crafty with XBoard?</A></LI>
-<LI><A HREF="#[D.5]">[D.5] How do I use Crafty with WinBoard?</A></LI>
-<LI><A HREF="#[D.6]">[D.6] How do I use GNU Chess 5 with XBoard?</A></LI>
-</UL>
-</UL>
-
-<HR>
-<H2><A NAME="[A]">[A] Introduction and hot topics</A></H2>
-<HR>
-<H3><A NAME="[A.1]">[A.1] What are XBoard and WinBoard?</A></H3>
-
-XBoard and WinBoard are graphical user interfaces for chess.  
-XBoard runs with the X Window System on Unix systems (including
-GNU/Linux); see topic
-<A HREF="#[B.1]">[B.1]</A>.
-WinBoard runs on true 32-bit Microsoft Windows operating
-systems, such as Windows 95, 98, NT,
-2000, ME, XP, and should continue to work
-on future 32-bit Windows systems.  It does
-not work on Windows CE (also known as Pocket PC), nor does it work on
-16-bit Windows systems such as Windows 3.1.  See topic
-<A HREF="#[B.2]">[B.2]</A>.
-
-<HR>
-<H3><A NAME="[A.2]">[A.2] Where can I get chess information and chess 
-software?</A></H3>
-
-As a shortcut to most things mentioned in this FAQ, try Tim Mann's
-Chess Web page, <A HREF= "http://www.tim-mann.org/chess.html"
->http://www.tim-mann.org/chess.html</A>.  This page page is a good
-place to get the latest released versions of XBoard and WinBoard and
-the most up-to-date version of this FAQ.  Also see our Savannah
-project pages at <a href="https://savannah.gnu.org/projects/xboard/"
->https://savannah.gnu.org/projects/xboard/</a>.
-
-<p>If you have other questions about XBoard/WinBoard that aren't answered
-in this FAQ, you can try Aaron Tay's WinBoard and Chess Engines FAQ, at
-<a href="http://www.aarontay.per.sg/Winboard/"
->http://www.aarontay.per.sg/Winboard/</a>.
-
-<P>For general news and information about chess, try the newsgroup hierarchy
-rec.games.chess.*, especially the groups rec.games.chess.misc and
-rec.games.chess.computer.  Both of the latter groups have very informative
-FAQs maintained by Steve Pribut; look for them on the newsgroups or at
-<A HREF=
-"http://www.clark.net/pub/pribut/chess.html"
->http://www.clark.net/pub/pribut/chess.html</A>.
-
-<P>Like other GNU software, you can get XBoard, and
-WinBoard by anonymous FTP from 
-<A HREF=
-"ftp://ftp.gnu.org/pub/gnu/"
->ftp://ftp.gnu.org/pub/gnu/</A>
-and its many mirror sites.  Look in the subdirectories xboard, and winboard.
-The .tar.gz suffix on the files there indicates they were packed with tar
-and compressed with gzip.  The .exe or .zip suffixes indicate files that
-were packed and compressed with zip.
-
-<P>For other chess software, try the Internet Chess Library.  Use anonymous FTP
-to connect to ftp.freechess.org, or go to the Web page
-<A HREF=
-"http://www.freechess.org/"
->http://www.freechess.org/</A>.
-You can get chess software, game
-collections, the FAQ file for rec.games.chess, and other chess-related
-material there, in the directory pub/chess.  The FTP server can
-automatically decompress files for you as you download them, useful if you
-don't have gzip.
-
-<P>Here is a sample anonymous ftp session.  Some of the ftp server's responses
-are abbreviated, but all the commands you must type are included.
-
-<p><PRE>
-    % ftp ftp.gnu.org
-    Connected to ftp.gnu.org
-    Name: anonymous
-    Password: your-email-address at your-site
-    ftp&gt; binary
-    200 Type set to I.
-    ftp&gt; cd /pub/gnu/xboard
-    ftp&gt; dir
-    -rw-r--r-- 1 14910 wheel  1057625 May 20 00:25 xboard-4.2.7.tar.gz
-    ftp&gt; get xboard-4.2.7.tar.gz
-    150 BINARY connection for xboard-4.2.7.tar.gz (1057625 bytes).
-    226 Transfer complete.
-    ftp&gt; quit
-</PRE>
-
-<HR>
-<H3><A NAME="[A.3]">[A.3] What are the current version numbers for 
-XBoard and WinBoard?</A></H3>
-
-At this writing, the current version numbers are:
-
-<UL>
-<LI>XBoard 4.2.7</LI>
-<LI>WinBoard 4.2.7</LI>
-</UL>
-
-<HR>
-<H3><A NAME="[A.4]">[A.4] Who is working on this project?</A></H3>
-
-Please see our Savannah project pages at <a
-href="https://savannah.gnu.org/projects/xboard/"
->https://savannah.gnu.org/projects/xboard/</a> for a list of active
-developers.  Many others occasionally contribute suggestions and
-snippets of code, for which we are grateful.
-
-<HR>
-<H3><A NAME="[A.5]">[A.5] How do I report bugs, offer help, etc.?</A></H3>
-
-<P>Bug reports, suggestions, and offers to help on XBoard
-or WinBoard should be sent to
-bug-xboard<a name="nospam">@</a>gnu.org. <i>(Note: as of 4 Nov 2003,
-this mailing list is temporarily broken.  You can send mail to
-bug-xboard<a name="nospam">@</a>tim-mann.org instead until it is fixed.)</i>
-
-<p>Beginner questions and discussion about the program may get faster
-answers on the WinBoard Forum at <a
-href="http://f11.parsimony.net/forum16635/"
->http://f11.parsimony.net/forum16635/</a>.  
-
-<p>If you are developing a
-chess engine that works with XBoard or WinBoard (or an alternative
-GUI that works with such engines), see the Chess Engines mailing
-list, hosted at
-<a href="http://groups.yahoo.com/group/chess-engines"
->http://groups.yahoo.com/group/chess-engines</a>.
-
-<P>Any time you want to report a possible bug in XBoard or WinBoard,
-we need to know exactly what you did, and exactly what error (or
-other) messages you got.
-
-<P>If you are using Unix, run the "script" program, run XBoard with
-the -debug flag (if you get as far as running it), do whatever is
-necessary to reproduce the problem, type "exit" to the shell, and mail
-us the resulting typescript file.  We also need to know what
-hardware/operating system combination you are using.  The command
-"uname -a" will usually tell you this; include its output in your
-typescript.
-
-<P>If you are using MS Windows, run WinBoard with the -debug flag, and
-send us a copy of the WinBoard.debug file.  If you aren't sure how to
-add command-line flags to WinBoard, you can hit Ctrl+Alt+F12 to create
-a WinBoard.debug file after WinBoard starts, but that is not as good,
-because a few messages that would have been printed at the start are
-lost.
-
-<p>Either way, please send us the exact text of the commands you typed
-and the output you got, not just your recollection of approximately
-what they were.  The messages may seem meaningless to you, but they
-are very meaningful to us and essential for diagnosing problems.
-
-<hr>
-<h3><a name="[A.6]">[A.6] What are the future plans for XBoard and
-  WinBoard?</a></h3>
-
-<p>Our plans are always in flux.  As with most free software projects,
-the next release will happen when it happens -- or it may never
-happen.  This has always been the policy for XBoard/WinBoard.
-Releases have never been promised in specific time frames.
-
-<p>Starting in November 2003, several new developers have joined the
-project, and work is now hosted at <a
-href="https://savannah.gnu.org/projects/xboard/"
->https://savannah.gnu.org/projects/xboard/</a>.  Lots of work is just
-getting underway, but nothing is far along yet.
-
-<p>Here is a partial list of items that have a nonzero probability of
-happening in finite time.
-
-<ul>
-<li>Small bug fixes.  Occasionally someone sends us a fix, or reports
-a small bug very clearly so that we're able to fix it in a few minutes
-work.<p>
-
-<li>Protocol version 3.  The members of the chess engine authors'
-mailing list discussed a set of proposed features for the next version
-of the XBoard/WinBoard chess engine communication protocol.
-Unfortunately, this project has gotten only as far as that discussion
-took it; no revisions of the protocol spec or coding have been done
-yet.  A few simple features are very clearly needed, though, and will
-probably appear in time.<p>
-
-<li>Contributed features.  Several people have mailed me code to add
-various features.  Most of this code is available on the
-XBoard/WinBoard extensions page at <a
-href="http://www.tim-mann.org/extensions.html"
->http://www.tim-mann.org/extensions.html</a>, but it is not in any
-official releases yet.  We are in the process of getting folks to
-formally assign the copyrights on their contributions to the Free
-Software Foundation so that we can include it in official releases in
-the future.<p>
-
-<li>Internationalization.  Several people have expressed interest in
-internationalizing XBoard/WinBoard, and so hopefully this project will
-go forward.  Once the internationalization support is in, we will need
-more translators.  Watch for news on the xboard-devel mailing list on
-our Savannah pages.
-
-</ul>
-
-<HR>
-<H2><A NAME="[B]">[B] XBoard and WinBoard</A></H2>
-<HR>
-<H3><A NAME="[B.1]">[B.1] What is XBoard?</A></H3>
-
-XBoard is a graphical user interface for chess.  It displays a
-chessboard on the screen, accepts moves made with the mouse, and loads
-and saves games in Portable Game Notation (PGN).  XBoard is free software.
-It serves as a front-end for many different chess services, including:
-
-<p><strong>Chess engines</strong> that will run on your machine and
-play a game against you or help you analyze, such as GNU Chess and
-Crafty (topic <A HREF="#[D.3]">[D.3]</A> below).
-
-<p><strong>Chess servers</strong> on the Internet, where you can
-connect to play chess with people from all over the world, watch other
-users play, or just hang out and chat.
-
-<p><strong>Correspondence chess</strong> played by electronic
-mail. The cmail program (topic <A HREF="#[B.6]">[B.6]</A> below)
-automates the tasks of parsing email from your opponent, playing his
-moves out on your board, and mailing your reply move after you've
-chosen it.
-
-<p><strong>The Web</strong> and your own saved games. You can use
-XBoard as a helper application to view PGN games in your
-Web browser, or to load and save your own PGN files.
-
-<P>XBoard runs under Unix or Unix-compatible systems.  It requires the
-X Window System, version X11R4 or later.  There are also ports of
-XBoard to 32-bit Microsoft Windows and to
-the Amiga.  See topics <A HREF="#[B.2]">[B.2]</A> and <A
-HREF="#[B.3]">[B.3]</A> respectively.
-
-<HR>
-<H3><A NAME="[B.2]">[B.2] Is there an XBoard for Microsoft Windows?  What is WinBoard?  How do I install WinBoard?</A></H3>
-
-WinBoard is a port of XBoard to 32-bit Microsoft Windows systems, such
-as Windows 95, 98, NT, 2000, ME, and XP.  It uses the same back end
-chess code as XBoard, but the front end graphics code is a complete
-rewrite.  WinBoard is free software.
-
-<P>The WinBoard distribution includes a port of GNU Chess to Win32.
-The GNU Chess port is distributed in executable form, with instructions for
-rebuilding it from the standard GNU Chess sources (available separately).  You
-should have at least 16 to 24 MB of memory to run GNU Chess with WinBoard.
-
-<P>The WinBoard distribution also includes the ICC timestamp and FICS
-timeseal programs (topic <A HREF="#[B.12]">[B.12]</A>).
-
-<P>cmail (topic <A HREF="#[B.6]">[B.6]</A>) has not been ported to
-Windows.  All the other XBoard functions are included in WinBoard.
-The International Email Chess Group web site at <a
-href="http://www.iecg.org/" >http://www.iecg.org/</a> recommends
-ECTool (<a href="http://www.ectool.nu/" >http://www.ectool.nu/</a>)
-for playing correspondence chess under Windows.
-
-<p>You install WinBoard as follows. Download the WinBoard package to
-your PC (see topic <A HREF="#[A.2]">[A.2]</A>).  It will be a file
-with a name like winboard-4_0_0.exe.  Double-click on this file
-in the Explorer or File Manager to run it. Follow the on-screen
-prompts.
-
-<HR>
-<H3><A NAME="[B.3]">[B.3] Is there an XBoard for the Amiga?  What is AmyBoard?</A></H3>
-
-AmyBoard is a port of XBoard to the Amiga, by Jochen Wiedmann.
-The distribution includes a port of GNU Chess.
-AmyBoard is free software.
-
-<p>The current version of AmyBoard is 330.5 (based on XBoard 3.3.0).
-No one is currently maintaining it.
-
-<P>System requirements:
-
-<UL>
-<LI>An Amiga (obviously :-), running OS 2.04 or later, 2Mb RAM or more.</LI>
-<LI>MUI 2.0 or later.</LI>
-<LI>Workbench or another screen with no less than 640x400 pixels (adjustable
-  with the MUI-Prefs); this restriction is just because we don't have
-  bitmaps with less than 40x40 pixels per square. If someone contributes
-  bitmaps with 20x20 or 20x25, they will work with any Hires mode.</LI>
-</UL>
-<P>
-If you would like to use an ICS, you need an Internet connection via either
-
-<UL>
-<LI>a telnet-like program, or</LI>
-<LI>a terminal program reading from stdin and writing to stdout.</LI>
-</UL>
-<P>
-AmyBoard is available in the Internet Chess Library (topic <A HREF="#[A.2]">[A.2]</A>).
-
-<HR>
-<H3><A NAME="[B.4]">[B.4] Is there an XBoard for the Macintosh?</A></H3>
-
-Because MacOS X has a Unix base, XBoard will compile and run on it.
-You do need an X11 (X Window System) server and client libraries.
-These do not come with Mac OS, but both free and commercial versions
-are available.  Once you install the X11 package, XBoard is reported
-to compile and run without changes.  I am not a Mac user and have not
-tried this myself, so I cannot answer questions about it.
-
-Version 4.2.6 and earlier of XBoard come with an old copy of the
-config.sub utility that does not recognize Mac OS X, so to build
-XBoard, you'll have to tell the configure program what OS you are
-running.  Follow the instructions in topic <A HREF="#[B.7]">[B.7]</A>
-of this FAQ, but add the argument <tt>--host=powerpc-apple-bsd</tt> to
-the end of the "configure" command line.
-
-There is no version of XBoard or WinBoard that runs with the native
-(non-X11) Mac graphical interface, and none that runs on MacOS 9 or
-earlier.
-
-
-<HR>
-<H3><A NAME="[B.5]">[B.5] Does XBoard run on VMS?</A></H3>
-
-No.  This port would probably be a lot easier than the Win32 and Amiga
-ports were, because VMS has the X Window system (under the name
-DECwindows) and is now POSIX compliant.  However, I don't know enough
-about VMS to do the port myself, and I don't have time.  If you do,
-give it a try!  Send mail to me, 
-tim<a name="nospam2">@</a>tim-mann.org (Tim Mann), if you're
-working on this.
-
-<HR>
-<H3><A NAME="[B.6]">[B.6] What is cmail?</A></H3>
-
-cmail is a program that helps you play and keep track of electronic mail
-correspondence chess games using XBoard.  It is distributed with XBoard and
-has its own manual page.  cmail is free software.  It was written by
-Even Welsh.  cmail has not been ported to Windows; sorry.
-
-<HR>
-<H3><A NAME="[B.7]">[B.7] How do I build XBoard?  Do I need gcc?</A></H3>
-
-The first step to building XBoard is to get the distribution file.  See topic
-<A HREF="#[A.2]">[A.2]</A> for places you can ftp the software from.
-
-<P>Next, decide what directory tree you are going to install XBoard
-in.  The default is /usr/local, but you probably don't have write
-access to that directory unless you are a system administrator.  If
-you do, type the following to install it there:
-
-<p><PRE>
-    gzip -cd xboard-*.tar.gz | tar -xvf -
-    cd xboard-*/
-    ./configure
-    make
-    su
-    make install
-</PRE>
-
-If you want to install xboard in your personal home directory ($HOME/bin),
-type this:
-
-<p><PRE>
-    gzip -cd xboard-*.tar.gz | tar -xvf -
-    cd xboard-*/
-    ./configure --prefix=$HOME
-    make
-    make install
-</PRE>
-
-<P>If the first step above fails because you don't have gzip, see
-topic <A HREF="#[A.2]">[A.2]</A>, and ask a local Unix expert if you
-need more help.  If you have any problems with the last two steps,
-read the READ_ME and INSTALL files in the xboard-*/ directory.  You
-will also find this FAQ there.
-
-<P>You don't need to have gcc to build XBoard.  Almost any Unix C
-compiler should do.
-
-<HR>
-<H3><A NAME="[B.8]">[B.8] Can I use XBoard or WinBoard to play a game
-  of chess with another human?</A></H3>
-
-The only way for two humans on different machines to play chess in
-real time using XBoard/WinBoard is to use an Internet Chess Server
-as an intermediary.  That is, each player runs his own copy of XBoard
-or WinBoard, both of them log into an ICS, and they play a game there.
-Two copies of XBoard/WinBoard cannot communicate with each other
-directly.
-
-<P>Instructions on how to get started with Internet chess are included
-with the XBoard and WinBoard distributions.  The network addresses
-included in the distribution may not always be current.  The oldest
-and largest ICS is the Internet Chess Club at chessclub.com, which now
-has a fee for registered use, but still allows free unregistered use.
-There are also many newer sites with no fees, using the Free Internet
-Chess Server implementation (FICS).  The most active FICS site is
-freechess.org.  On these and most other chess servers,
-the port number to use is 5000.
-
-<P>If you don't have network connectivity to any ICS site, you
-can run your own server using a version of the FICS code, but this
-is not easy.  See <a href="http://www.tim-mann.org/ics.html#ownics"
->http://www.tim-mann.org/ics.html#ownics</a> for advice and pointers.
-
-<P>The cmail program included with XBoard lets you play email postal games with
-another human; see topic <A HREF="#[B.6]">[B.6]</A>.
-
-<P>Two humans can play chess on the same machine using one copy of
-XBoard/WinBoard in
-Edit Game mode, but the clocks don't run in this mode, so it's of limited
-usefulness.
-
-<P>See also topic <A HREF="#[D.2]">[D.2]</A>, Winsock Chess.
-
-<HR>
-<H3><A NAME="[B.9]">[B.9] Will WinBoard run on Windows 3.1?
-  How about Windows CE (also known as Pocket PC)?
-</A></H3>
-
-WinBoard does not run on Windows 3.1, Windows for Workgroups 3.11, etc.,
-not even with the Win32s compatibility package.  The main problem is
-that Win32s does not have threads or real concurrent processes.  A
-port of WinBoard to Windows 3.1 is possible in theory, but it would be
-difficult and messy, and no one is going to do it.
-
-<p>WinBoard does not run on Windows CE (also
-known as Pocket PC).  I don't know what would be required to port it.
-
-<P>WinBoard does run well on full 32-bit versions of Windows, such as
-Windows 95, 98, NT, 2000, ME, and XP, and should continue to work
-on future 32-bit Windows systems.
-
-<HR>
-<H3><A NAME="[B.10]">[B.10] How do I use XBoard or WinBoard as an external viewer for PGN files
-  with my Web browser?</A></H3>
-
-1) On Unix systems:
-<P>
-- Add the following line to the file .mime.types in your home directory.
-(Create the file if it doesn't exist already.)
-<PRE>
-    application/x-chess-pgn    pgn
-</PRE>
-<P>
-- Add the following line to the file .mailcap in your home directory.
-(Create the file if it doesn't exist already.)
-<PRE>
-    application/x-chess-pgn; xboard -ncp -lgf %s
-</PRE>
-<P>
-- Exit from your Web browser and restart it.
-
-<P>2) On MS Windows systems:
-
-<P>The exact procedure depends on which Web browser you are using.
-The current version of WinBoard automatically configures itself as
-your PGN viewer for local files, Netscape 4.x and later, and Internet
-Explorer.  This automatic setup probably works for all other current Web
-browsers, too.
-
-<HR>
-<H3><A NAME="[B.11]">[B.11] How do I use WinBoard as an external viewer
-  for PGN files with the MS Windows File Manager or Explorer?</A></H3>
-
-WinBoard sets this up automatically when you install it, except on old
-versions of Windows NT (prior to 4.0).  On Windows NT 3.51 or earlier,
-go to the File Manager, click on the File menu, select Associate,
-enter "pgn" as the extension, and use the Browse button to find your
-copy of WinBoard and set up the association.
-
-<HR>
-<H3><A NAME="[B.12]">[B.12] How do I use ICC timestamp or FICS timeseal
-with XBoard?</A></H3>
-
-First, get the appropriate version of timestamp or timeseal for your
-machine from ftp.chessclub.com or ftp.freechess.org.
-Second, be sure that you can connect using XBoard <I>without</I>
-timestamp/timeseal.  Third, be sure that you can connect using
-timestamp/timeseal without XBoard.  See the help files on ICC and FICS
-or ask people online if you have problems.
-
-<P>If you are in a completely ordinary situation, where your machine
-is directly on the Internet and you can connect to ICC or FICS 
-without timestamp/timeseal using
-just the command "xboard -ics" or "xboard -ics -icshost freechess.org",
-change that command to one of the following:
-
-<p><PRE>
-    xboard -ics -icshost 204.178.125.65 -icshelper timestamp
-
-    xboard -ics -icshost 164.58.253.13 -icshelper timeseal
-</PRE>
-
-<p>If you have a firewall between your machine and the ICS, see topic
-<A HREF="#[B.19]">[B.19]</A>.
-
-<P>If you normally have to use the "/icscomm" command line option on
-xboard to log into a second machine, and then telnet to ICC or FICS
-from there, you are going to have to run the Unix version of timestamp
-or timeseal on the second machine.  (If the second machine is not
-running Unix, you are out of luck.)  Get the appropriate version of
-timestamp or timeseal onto the shell machine via FTP; see the help
-files on ICC and FICS for instructions.  Then simply run it when you
-would normally run telnet.  In this configuration you are not
-protected against lag between your PC and the shell machine, or for
-lag caused by heavy load on the shell machine itself from other users.
-
-<P>For further information on timestamp and timeseal, see the help
-files on ICC and FICS.
-
-<HR>
-<H3><A NAME="[B.13]">[B.13] How do I use ICC timestamp or FICS timeseal
-with WinBoard?</A></H3>
-
-<P>If you select an ICS from either the WinBoard Startup dialog or the
-Windows Start submenu that WinBoard installs, WinBoard automatically
-runs timestamp or timeseal if the ICS you chose is known to support it.
-
-<P>If you are constructing a WinBoard command line by hand, add the
-option "/icshelper timestamp" or "/icshelper timeseal" to the WinBoard
-command line to use timestamp or timeseal.  Both timestamp.exe and
-timeseal.exe are included in the WinBoard distribution.  They both
-function identically to the Unix versions, as documented in "help
-timestamp" on ICC and "help timeseal" on FICS.
-
-<p>If you have a firewall between your machine and the ICS, see topic
-<A HREF="#[B.19]">[B.19]</A>.
-
-<P>If you normally have to use the "/icscomm" command line option on
-WinBoard to log into a shell account, and then telnet to ICC or FICS
-from there, you are going to have to run the Unix version of timestamp
-or timeseal on the shell machine.  (If the shell account is not on a
-Unix machine, you are out of luck.)  Get the appropriate version of
-timestamp or timeseal onto the shell machine via FTP; see the help
-files on ICC and FICS for instructions.  Then simply run it when you
-would normally run telnet.  In this configuration you are not protected
-against lag between your PC and the shell machine, or for lag caused by
-heavy load on the shell machine itself from other users.
-
-<P>For further information on timestamp and timeseal, see the help
-files on ICC and FICS.
-
-<HR>
-<H3><A NAME="[B.14]">[B.14] How do I play bughouse with XBoard or WinBoard?
-</A></H3>
-
-XBoard and WinBoard have simple but effective bughouse support.
-Offboard piece holdings are shown in the board window's banner, and
-you drop offboard pieces using the right mouse button.  Press it over
-the destination square to pop up a menu of pieces.
-
-<P>XBoard and WinBoard can display only one board at a time, but you
-can observe your partner's game by running a second copy of the
-program and logging in as a guest.  (Unfortunately, this is not
-possible if you are using the /icscomm option.)  To observe your
-partner's games automatically, use the "follow" or "pfollow" ICS
-command; see the ICS online help for details.
-
-<HR>
-<h3><a name="[B.16]">[B.16] What is Zippy?  How can I interface a 
-chess program to the Internet Chess Servers?</a></h3>
-
-Zippy is an interface that lets a compatible chess engine (such as GNU
-Chess or Crafty) act as a computer
-player on an Internet Chess Server.  Zippy is included in both the
-XBoard and WinBoard distributions.  It is implemented as a small
-amount of additional code within XBoard or WinBoard.  
-For documentation, see the file
-zippy.README, included in both distributions or available
-from my chess Web page,
-<A HREF=
-"http://www.tim-mann.org/chess.html"
->http://www.tim-mann/chess.html</A>.
-The version of zippy.README on my Web page is often more up-to-date
-than those in the XBoard/WinBoard distributions.
-You'll also find a "biography" of Zippy and pointers to the original
-Zippy the Pinhead comic strips on my Web page.
-Please read zippy.README carefully before you ask me any questions about Zippy.
-
-<p>Using a computer to choose your moves on a chess server is
-considered cheating unless your account is on the computer (C) list.
-Read "help computer" on your favorite server for details on their
-policy.  Most of the servers have plenty of computers running now, so they
-will not be excited about having you run a new one unless you have
-written your own chess engine.  They don't really need yet another 
-Crafty or GNU Chess clone.
-
-<HR>
-<h3><a name="[B.17]">[B.17] How can I interface my own chess program
-to XBoard or WinBoard?</a></h3>
-
-This is a non-trivial task.  XBoard and WinBoard were not designed
-with a clean interface for talking to chess programs; they were
-written to work with an existing version of GNU Chess that expects to
-be talking to a person.  Your program has to emulate GNU Chess's
-rather idiosyncratic command structure to work with XBoard and
-WinBoard.  We are gradually cleaning up, improving, and documenting
-the interface as newer versions of XBoard and WinBoard come out,
-however.
-
-<p>For documentation, see the file engine-intf.html, included in both
-distributions or available from my chess Web page, <A HREF=
-"http://www.tim-mann.org/chess.html"
->http://www.tim-mann.org/chess.html</A>.
-The version of engine-intf.html on my Web page is often more up-to-date
-than those in the XBoard/WinBoard distributions.
-
-<HR>
-<h3><a name="[B.18]">[B.18] How can I recompile WinBoard from source?</a></h3>
-
-The source code for WinBoard is available from the author's Web page,
-<A HREF=
-"http://www.tim-mann.org/chess.html"
->http://www.tim-mann.org/chess.html</A>.
-
-<p>WinBoard is currently developed using Microsoft Visual C++ 5.0.
-You can build the program from the MSVC++ GUI by opening the project
-file (winboard.dsp) and telling MSVC++ to build the project.  You can
-also build it from the the command line by using the nmake program
-supplied with MSVC++.
-
-<p>To build WinBoard with the free Cygwin tools, available from <a
-href= "http://www.cygwin.com/" >http://www.cygwin.com/</a>), use the
-command "make -f cygwin.mak".  WinBoard 4.2.5 was successfully
-compiled with the net release of Cygwin as downloaded on 20-March-2001
-(cygwin1.dll 1.1.8, gcc 2.95.2-6, binutils 20001221-1, flex 2.5.4-1),
-but exhibits a command-line parsing bug; see item 511 in the ToDo file
-that comes with WinBoard.  WinBoard 4.1.0 does not compile with
-Cygwin.  WinBoard 4.0.7 is known to compile with Cygwin BL20.1.
-
-<p>To build WinBoard with Borland C++ 4.5, use "borland.mak", supplied
-with the WinBoard sources, as the Makefile.  Support for Borland C++
-was contributed by Don Fong and has not been tested by the author of WinBoard.
-
-<p>WinBoard is a Win32 application, so you definitely need a compiler
-and tool set that supports Win32.  In particular, older versions of
-DJGPP can build only 32-bit MSDOS programs; that is, programs that use
-a DOS extender to get a 32-bit address space and do not make any
-Windows calls.  The latest versions of DJGPP are said to be able to 
-build Win32 programs when used with the proper extension package(s),
-but this is not known to work with WinBoard.  Use Cygwin instead.
-
-<p>See also topic <A HREF="#[C.16]">[C.16]</A>.
-
-<HR>
-<H3><A NAME="[B.19]">[B.19] 
-How can I use XBoard or WinBoard to talk
-to an Internet Chess Server through a firewall or proxy?
-</A></H3>
-
-<p>There is no single answer to this question, because there are many
-different kinds of firewalls in use.  They work in various different
-ways and have various different security policies.  This answer can
-only provide hints.
-
-<p>Note that you can't access Internet Chess Servers through a Web proxy,
-because they are not a Web service.  You talk to them through a raw
-TCP connection, not an HTTP connection.  If you can only access the
-Web through a proxy, there may be a firewall that stops you from
-making direct TCP connections, but there may also be a way through it.
-Read on for hints, and contact your local system administrator if you
-need more information about your local configuration.
-
-<p>A helpful user mailed me the following explanation of how to use
-WinBoard with WinGate:
-<blockquote>
-"I have managed to setup WinBoard though my WinGate proxy.  I have the
-Office version.  What I needed to do was to setup the TCP/IP
-connection to add the User/Host name and my provider service name for
-the DNS, but I had to leave the HOST IP address blank.  I have not
-played with all the variations, so it may be just that I have the DNS
-lookup enabled."
-</blockquote>
-I hope this helps, though I don't find it very clear.  I don't have
-a copy of WinGate myself and can't help if you have questions about it.
-
-<p>If you are using some other non-SOCKS firewall, read the FIREWALLS section
-in your XBoard or WinBoard documentation (man page, info document, or
-Help file).  If you can telnet to a chess server in some way, then you
-can almost certainly connect to it with xboard/WinBoard, though in
-some cases you may not be able to run timestamp or timeseal.  The
-timestamp and timeseal protocols require a clean, 8-bit wide TCP
-connection from your machine to the ICS, which some firewalls do not
-provide.
-
-<p>If you have a SOCKS firewall and are using <strong>XBoard</strong>,
-you should be able to SOCKSify xboard and use it.  See <a
-href="http://www.socks.nec.com/">http://www.socks.nec.com/</a> for
-information about SOCKS and socksification.  However, if you do this,
-you can't use timestamp or timeseal; what you really need is a
-socksified version of timestamp or timeseal.  This is hard because the
-source code for timestamp and timeseal is proprietary; the folks
-running the chess servers don't give it out because that would make it
-too easy to cheat.  On some versions of Unix, you may be able to
-socksify a program that you don't have the source code to by running
-it with an appropriate dynamic library; see <a
-href="http://www.socks.nec.com/">http://www.socks.nec.com/</a>.  For
-others, you might be able to get a pre-built socksified version from
-the chess server administrators.  For timeseal versions, see <a
-href="ftp://ftp.freechess.org/pub/chess/timeseal/"
->ftp://ftp.freechess.org/pub/chess/timeseal/</a>.  For timestamp
-versions, the directory would be <a
-href="ftp://ftp.chessclub.com/pub/icc/timestamp/"
->ftp://ftp.chessclub.com/pub/icc/timestamp/</a>, but at this writing
-there don't seem to be any socksified timestamps there.  Once you have
-a socksified timestamp or timeseal, simply run it with a normal,
-non-socksified xboard in place of the standard timestamp or timeseal.
-
-<p>If you have a SOCKS firewall and you are using
-<strong>WinBoard</strong>, we now know how to make this configuration
-work, complete with timestamp or timeseal!
-
-<p>Start by getting SocksCap32.  This software is freely available
-from <a href="http://www.socks.nec.com/">http://www.socks.nec.com/</a>.
-Install it on your machine, read the documentation, and learn to use
-it.  You may find it useful with many other programs besides WinBoard.
-
-<p>Next, <strong>don't</strong> socksify WinBoard.  Socksifying
-WinBoard itself doesn't let you use it with timestamp or timeseal.
-For some reason I don't understand -- something strange that
-SocksCap32 does -- the socksified WinBoard runs but does nothing, and
-timestamp/timeseal runs all by itself in its own window.
-
-<p>Instead, use the following workaround.  Follow the instructions
-exactly; don't try to skip steps or simplify things.
-
-<p>First, make SocksCap32 application profiles for timestamp and
-timeseal.  Use the following command lines in the SocksCap32
-profiles. Name the first profile "timestamp" and the second
-"timeseal".
-
-<p><pre>
-    "c:\program files\winboard\timestamp.exe" chessclub.com 5000 -p 5000
-    "c:\program files\winboard\timeseal.exe" freechess.org 5000 -p 5000
-</pre>
-
-<p>Second, run timestamp or timeseal by itself, socksified, using its
-profile.  This will open an unneeded, black window that will not
-respond to typing.  Minimize it to the task bar and ignore it. It will
-go away when you exit from WinBoard.
-  
-<p>Next, run WinBoard using the following command line.  Make a shortcut
-or type this command into an MS-DOS Prompt box.  Don't run WinBoard
-itself socksified, just run it directly.
-
-<p><pre>
-    "c:\program files\winboard.exe" /ics /icshost=localhost /icsport=5000
-</pre>
-
-<p>After you get this working, you can try getting the timestamp window to
-auto-minimize by starting it from a shortcut instead of from the
-SocksCap32 control window. As it says in the SocksCap32 help file, put
-the following in the Target field of a shortcut's Properties page:
-
-<p><pre>
-    "c:\program files\sockscap32\sc32.exe" timestamp
-</pre>
-
-Then select "Run: Minimized" on the same page.  Do the same for timeseal.
-
-<p>Another method that can work is to use a .bat file to start both
-timestamp and WinBoard.  It would look something like this:
-
-<p><pre>
-    REM --
-    REM -- icc.bat
-    REM -- Start timestamp under SocksCap32 and use WinBoard to connect to it.
-    REM -- The string "timestamp" refers to a SocksCap32 profile for timestamp.
-    REM --  Do not change it to the filename of the timestamp program!
-    REM --
-    start /minimized "c:\program files\sockscap32\sc32.exe" timestamp
-    cd "c:\program files\winboard"
-    winboard /ics /icshost=localhost /icsport=5000
-</pre>
-
-<p>This workaround has a problem if you want to run two copies of
-WinBoard at once, talking to the same chess server twice (for
-bughouse) or to two different chess servers. If you need to do that,
-you will need to run a separate copy of timestamp with <i>a different
-port number</i> for each connection.  You'll need to make a second set of
-profile entries with a different value after the -p flag (say, 5001)
-and you'll need to change the WinBoard command line /icsport=5000 for
-the second WinBoard to match.
-
-<HR>
-<H3><A NAME="[B.20]">[B.20] 
-How can I use XBoard or WinBoard on chess.net with accuclock?
-</A></H3>
-
-<p>I believe chess.net provides a Win32 command-line version of
-accuclock that will work with WinBoard.  Please see the documentation
-on the chess.net server itself; don't ask the author of WinBoard.
-
-<p>I don't know whether chess.net provides versions of accuclock for
-Unix at this time.  Ask them.
-
-<hr>
-<h3><a name="[B.21]">[B.21]
-  Can I get Zippy to do one or more ICS commands automatically at the 
-  start or end of each game?</a></h3>
-
-<p>By default, Zippy automatically sends the command "gameend" to ICS
-at the end of each game.  You can alias this command (using the ICS
-"alias" feature) to anything you want.  On ICC, you can use the
-"multi" feature to alias gameend to several commands, but other
-servers don't have that feature.  Zippy doesn't send anything at the
-start of the game by default.
-
-<p>You can get Zippy to send one or more commands of your choosing, at
-the start and/or end of each game, by using the -zippyGameStart and
--zippyGameEnd command line options, newly added in version 4.0.3.
-Both xboard and WinBoard have (somewhat obscure) ways of getting
-newlines into this option to send several commands.  Here is an
-example of one way to do it for each.
-
-<p><pre>
-    xboard -ics -zp -xrm '*zippyGameStart: say hi\nsay prepare to die\n'
-
-    WinBoard /ics /zp /zippyGameEnd='say thanks\nseek 5 0\nseek 2 12\n'
-</pre>
-
-<hr>
-<h3><a name="[B.22]">[B.22]
-  How do I print from WinBoard?
-</a></h3>
-
-WinBoard does not have built-in printing functionality.
-If you want to print a picture of the board, press Alt+PrintScrn, run the
-standard Windows application Paintbrush, select Paste, and print from there.
-If you want to print a list of moves, save your game as a PGN file,
-then open the PGN file with Notepad or any other plain text editor and
-print it from there.
-
-<hr>
-<h3><a name="[B.23]">[B.23]
-  Can I get Zippy to automatically reconnect to ICS when its connection 
-  breaks?</a></h3>
-
-<p>There isn't a perfect solution to this problem yet, but a pretty
-good one is to write a shell script (for xboard) or .bat script (for
-WinBoard) that automatically restarts the program whenever it exits.
-Use the -xexit flag so that you don't get a popup dialog that must be
-dismissed with the OK button before the program will exit.  The gap in
-this solution is that your connection to ICS can sometimes get into a
-state where the program does not notice that the connection is broken
-until the next time it tries to send a command.  Perhaps some future
-version of xboard/WinBoard will have an option to send a harmless
-command every five minutes or so.
-
-<p>Anyway, here is a sample Windows .bat file that restarts WinBoard each
-time it exits.  Thanks to Jason Williamson.  It assumes that you have put
-your computer account's name and password in a file named logon.ini.
-
-<pre>
-REM --
-REM -- wbrecon.bat
-REM -- Start WinBoard in Zippy mode, and restart it each time it exits.
-REM -- Add or change parameters as needed for your application.
-REM --
-:loop
-start /w winboard /zp /ics /icslogon logon.ini /xexit /xautoraise
-REM -- The next line is to have a short delay setup for 139 seconds.
-REM -- Leave it out if it doesn't work on the version of Windows you use.
-TYPE NUL | CHOICE.COM /N /CY /TY,99 &gt;NUL
-goto loop
-</pre>
-
-<p>Here is a Unix shell script to do the same thing for xboard.
-It's a bit more elaborate.  It is based on the script I use for the
-original Zippy.  It logs all ICS output to a file named zippy.out,
-and it lets you type commands to Zippy by running "cat &gt; zippy.fifo".
-
-<pre>
-#! /bin/sh
-host="204.178.125.65 -icsport 5000 -telnet -telnetProgram timestamp"
-#host="164.58.253.13 -icsport 5000 -telnet -telnetProgram timeseal"
-out=zippy.out
-fifo=zippy.fifo
-ZIPPYPASSWORD='something'
-export ZIPPYPASSWORD
-ZIPPYPASSWORD2='orother'
-export ZIPPYPASSWORD2
-ZIPPYLINES=`pwd`/all.lines
-export ZIPPYLINES
-ZIPPYGAMEEND='say Yow, that was FUN!
-gameend'
-export ZIPPYGAMEEND
-zippylogon=`pwd`/logon.ini
-DISPLAY=`hostname`:0.0
-export DISPLAY
-mv -f $out ${out}.old
-rm -f $fifo
-mkfifo $fifo
-pid=$$
-( while [ true ] ; do cat -u $fifo ; done ) | \
-      ( while [ true ] ; do
-          xboard -iconic -ics -icshost $host \
-                 -zt -zp -xbell -xanimate \
-                 -xautosave -xquiet -fcp "gnuchessx -h" \
-                 -icslogon $zippylogon -xexit -autoflag -xautoraise $*
-          sleep 600
-        done ) &gt; $out 2&gt;&amp;1 &amp;
-</pre>
-
-<hr>
-<h3><a name="[B.24]">[B.24]
-  The chess engines are too strong and always beat me.  How can I adjust
-  the difficulty level to make them weaker?</a></h3>
-
-<p>The simplest way to get that effect is to make sure the
-XBoard/WinBoard Auto Flag option is off, set a very fast time control
-so that the chess engine can't think for long, but take as much time
-over your own moves as you want. Also feel free to use Retract Move if
-you make a blunder.  
-
-<p>Many chess coaches will let you switch sides after
-they get a stronger position so that you can get experience playing
-positions where you are winning.  You can try this with XBoard/WinBoard
-by using the Machine White or Machine Black menu command to make the
-machine take over your position.
-
-<p>The -depth command-line option to XBoard/WinBoard can also be used to
-weaken the engine (see the man page or Help file).  It's a bit of a
-nuisance to set command line options in Windows, but see topic <A
-HREF="#[C.7]">[C.7]</A> for instructions.
-
-<p>Other ways of weakening engines are engine-specific.  Many of them
-let you adjust various parameters, and if you choose bad settings, the
-engine will play more poorly.  Consult whatever documentation came with
-the engine you are using.
-
-<hr>
-<h3><a name="[B.25]">[B.25]
-  May I use the piece bitmaps from XBoard/WinBoard in my own program?</a></h3>
-
-<p>The piece bitmaps used in XBoard and WinBoard were designed by
-Elmar Bartel.  He released them under the <a
-href="http://www.gnu.org/copyleft/gpl.html">GNU General Public
-License</a>.  This means that if your program is also free software
-distributed under the GPL, you can use them freely.  If your program
-is distributed under some other license, including commercial,
-shareware, or non-GPL freeware, then you cannot use the bitmaps unless
-you obtain special permission from Elmar.  See the file README.bitmaps
-that comes with the XBoard and WinBoard source code for more
-information and an email address you can write to.
-
-<HR><H2><A NAME="[C]">[C] XBoard and WinBoard, bugs and problems</A></H2>
-
-<HR><H3><A NAME="[C.1]">[C.1] I can't build XBoard
-because the X11/Xaw/...  include files are not found.</A></H3>
-
-These are the header files for the Athena Widgets library, which XBoard uses
-heavily.  Some versions of Unix don't supply these files, but they are part of
-the standard X distribution, freely available from MIT.  
-
-<P>For general information on getting missing X sources, see the FAQ on
-comp.windows.x.  Note that you may be missing only the header files, or you
-may be missing the libraries themselves too.
-
-<P>HP-UX users are missing only the header files.  You can get them by
-anonymous FTP as follows.  (But first check with your system
-administrator to see if someone else at your site has already done
-this.)  Get the archive file /hpux9/X11R5/Core/Xaw-5.00.tar.gz (Xaw
-header files) via anonymous FTP from the site hpux.csc.liv.ac.uk
-(138.253.42.172), or one of the other official sites---Germany:
-hpux.ask.uni-karlsruhe.de (129.13.200.57), US: hpux.cae.wisc.edu
-(144.92.4.15), France: hpux.cict.fr (192.70.79.53) or Netherlands:
-hpux.ced.tudelft.nl (130.161.140.100). Unpack the archive using gzip
-and follow the instructions in its README and/or HPUX.Install files.
-Thanks to Richard Lloyd for this information.
-
-<P>If you have the Xaw header files installed in a different place
-than the other X11 headers, you may need to configure XBoard with an
-extra flag to help it find them.  For example, if yours are in
-/foo/bar/X11/Xaw, try this:
-
-<p><PRE>
-    rm config.cache
-    (setenv CFLAGS -I/foo/bar ; configure)
-</PRE>
-<P>
-Also see topic <A HREF="#[C.2]">[C.2]</A>.
-
-<HR>
-<H3><A NAME="[C.2]">[C.2] Configuring or building XBoard fails due to
-missing header files, missing libraries, or undefined symbols.
-</A></H3>
-
-Perhaps you have the X server and client programs installed on your
-machine, but not the X header files and link-time libraries.  If so,
-you can run existing X programs, but you cannot compile a new X
-program from source code.  In this case the XBoard configure script
-will fail and will tell you to look at this question in the FAQ.  Many
-GNU/Linux distributions put the headers and libraries in a separate
-package, which you might not have installed.  If you are using RedHat,
-install the XFree86-devel package.  If you are using some other
-kind of Unix, ask your system administrator where to find the X header
-files and link-time libraries.  If this is not your problem, read on.
-
-<p>The configure script for XBoard looks for X libraries and header
-files in some common places.  Sometimes it fails: If yours are
-installed in an odd place, it may not find them at all.  If you have
-more than one version of X installed on your system, it may find the
-"wrong" one, or occasionally it may find libraries from one version
-and incompatible header files from another.  You can work around these
-problems by telling the configure script where the files are.  For
-example:
-
-<p><PRE>
-    configure --x-includes=/odd/place/include \
-              --x-libraries=/odd/place/lib
-</PRE>
-
-<P>The directory named in the argument to --x-includes must have a
-subdirectory "X11" that contains the actual .h files.  That is, if
-your X.h file has full pathname /odd/place/X11R6/include/X11/X.h, then
-you must give the argument --x-includes=/odd/place/X11R6/include.
-
-<P>Some linkers have bugs that cause bogus error messages when you try
-to link X programs.  The configure script includes a workaround for a
-bug of this kind that exists in some SunOS 4.x.x installations.  See
-the FAQ on comp.windows.x for more information about problems of this
-kind.
-
-<P>If all else fails, check whether anyone else at your site has been able to
-compile any X programs on your system.  Your X installation might be buggy.
-If so, the system administrator at your site might know how to fix or work
-around the problem.
-
-<P>Also see topic <A HREF="#[C.1]">[C.1]</A>.
-
-<HR><H3><A NAME="[C.3]">[C.3] I have problems using WinBoard on ICS
-with a modem.  I'm not running SLIP or PPP, but just dialing in to an
-ordinary login account ("shell account").</A></H3>
-
-Here are solutions to some common problems in this area.
-
-<P>Some people want to connect to ICS through HyperTerminal or some other
-terminal program first, then run WinBoard.  This is not how it works.
-WinBoard wants to talk directly with your modem, acting as a terminal program
-itself.  Start out with the modem "on hook" (not making a call).
-
-<P>Run WinBoard with a command line like this (adding more options if desired):
-
-<p><PRE>
-    WinBoard /ics /icscom com1
-</PRE>
-
-Use com2, com3, or com4 in place of com1 if your modem is connected to one of
-those ports.
-
-<P>After you start WinBoard, you may need to change some of the options in the
-Communications dialog (on the Options menu).  The dialog has the usual options
-for talking to modems: bits per second, bits per byte, parity, number of stop
-bits.  You will probably want to use Save Settings Now when you're done.
-
-<P>Next, type dialing commands to your modem in the text window that WinBoard
-creates.  You may need to turn off Local Line Editing on the Options menu
-while you are typing commands to your modem.  Turn it back on when you're
-done.  See the WinBoard Help file for instructions if you see your typing
-echoed an extra time after you hit Enter.
-
-<HR>
-<H3><A NAME="[C.4]">[C.4]
-I have problems using WinBoard on ICS with Windows 95 and SLIP
-or PPP.  When trying to start up, it gets the error "Address family
-not supported by protocol family" (or some equally strange message).
-</A></H3>
-
-WinBoard is a 32-bit application, but some Winsock (TCP/IP) implementations
-support only 16-bit applications.  You get a strange looking error message
-if you try to use a 32-bit application because
-there is no standard Winsock error code number
-for "32-bit application not supported."
-
-<P>Microsoft TCP/IP works with both 16-bit and
-32-bit applications, supports SLIP, PPP, Ethernet, etc., and is included
-with Windows 95 and later Windows systems.
-If possible, I recommend that you uninstall
-whatever Winsock you are using and install Microsoft TCP/IP instead.
-For more information, see
-<A HREF=
-"http://walden.mo.net/~rymabry/95winfaq.html"
->http://walden.mo.net/~rymabry/95winfaq.html (the Win95-L FAQ)</A>.
-
-<P>Trumpet Winsock 2.1 (and earlier) supports only 16-bit
-applications, and hence does not work with WinBoard.  But there is a
-beta-test release available that does support 32-bit applications.  
-I have not tried it with WinBoard, but it 
-should work.  See Trumpet's Web page
-<A HREF=
-"http://www.trumpet.com.au/wsk/winsock.htm"
->http://www.trumpet.com.au/wsk/winsock.htm</A>
-for more information.
-
-<P>The 16-bit versions of America On-Line's software do not support
-32-bit Winsock applications.  Get the 32-bit version.  At one time the
-32-bit version was called "AOL for Windows 95," but I imagine that has
-changed.  Hopefully the current versions are all 32-bit.
-
-<P>A few versions of Winsock may have bugs that prevent
-Windows timestamp/timeseal from working with them.  I'm not sure if
-such bugs exist in any versions that actually have 32-bit support,
-so this point might be moot.  Again, Microsoft TCP/IP is known to work.
-
-<HR><H3><A NAME="[C.5]">[C.5] When I try to run WinBoard, I get the
-message "Failed to start chess program gnuchess on localhost: NO
-LANGFILE (file gnuchess.lan not found)".</A></H3>
-
-<p>This message means that WinBoard is trying to run GNU Chess, but
-GNU Chess cannot find a file that it needs, named gnuchess.lan.
-If you see it, you've probably customized WinBoard's /fcp, /fd, /scp,
-and/or /sd options and made a mistake in the process.  Review what
-you did, and see the WinBoard help file.
-
-<HR>
-<H3><A NAME="[C.6]">[C.6] I want to use XBoard or WinBoard as an Internet
-Chess Server interface, but the ICS Client option is grayed out on the
-menu.</A></H3> 
-
-XBoard and WinBoard have three major modes that can't be changed from the
-menus: local chess engine mode,
-ICS mode, and standalone mode.
-
-<p>With XBoard, you have to set the mode using command-line options.
-Local chess engine mode is the default, -ics selects ICS mode, and
--ncp ("no chess program") selects standalone mode.
-
-<p>With WinBoard, if you don't set the mode using command-line
-options, you get a dialog box asking which mode you want.  To bypass
-the dialog box, use -cp ("chess program") for local chess engine mode,
-or -ics or -ncp as with XBoard.  Also see topic <A HREF="#[C.7]">[C.7]</A>.
-
-<HR>
-<H3><A NAME="[C.7]">[C.7] How do I give command-line options to
-a Windows program like WinBoard?</A></H3>
-
-<P>There are many ways; pick your favorite:
-
-<P><UL>
-<LI>Type the command line into an MS-DOS Prompt box.  Example:
-"WinBoard -ics".
-
-<LI>Make a Windows shortcut for WinBoard.  You can do this by
-right-dragging WinBoard.exe to the desktop and selecting "Create
-Shortcut(s) Here" from the menu that appears.  Right-click on the
-shortcut, select Properties, and click the Shortcut tab.  The
-command-line text box is labelled "Target" instead of "Command line"
-just to confuse you.  Edit the text in this box, adding the command
-line options to the end.</LI>
-
-<LI>Choose Run from the Start menu, or File / Run from the Program
-Manager or File Manager, and type the command line into the dialog you
-get.  You may have to give WinBoard's full drivespec and filename if
-it is not in a directory on your search path.</LI>
-
-<LI>Make a Program Manager icon for WinBoard.  You can do this by
-dragging WinBoard.exe from the File Manager into the Program Manager,
-or by using File / New in the Program Manager.  Select the icon and
-choose File / Properties.  Edit the Command Line text box to add the
-command-line options to the end.</LI>
-</UL>
-
-<HR>
-<H3><A NAME="[C.9]">[C.9]
-When I exit from WinBoard after using it to play against a chess
-program on my machine, the chess program keeps running in the background.
-</A></H3>
-
-<p>Be sure you have the current versions of WinBoard and the chess
-engine you are using.  WinBoard 3.4.1 and earlier had a bug that
-caused this problem to occur with all chess engines.  A buggy chess
-engine that does not respond to the "quit" command will also cause
-this.
-
-<p>If you still see this problem, you can stop the rogue chess engine
-by pressing Ctrl+Alt+Del, selecting the chess engine process from the
-menu, and pressing the End Task button.
-
-<hr>
-<h3><a name="[C.12]">[C.12]
-Why do my ICS 
-opponents often get extra time after they make their moves?
-Why do I sometimes lose time off my clock after I make my move?
-</a></h3>
-
-If you are playing with the ICS incremental clock, both you and your
-opponent get a set amount of extra time after each move.
-
-<p>If your or your opponent has netlag, your opponent might appear to
-get extra time, especially if your opponent is using timestamp or
-timeseal.  The ICS charges each player who is using timestamp or
-timeseal only for the time between when the player received his
-opponent's move and the time he sent his own move.  Thus delays in
-network transmission do not count against either player.  But WinBoard
-counts down the display of your opponent's clock on your screen under
-the assumption that there is no netlag.  When his move comes in, if
-there was netlag, the ICS may not have really charged him for that
-much time, and WinBoard corrects the clock to what the ICS says it
-should read.
-
-<p>If you are not using timestamp or timeseal, you may appear to lose
-time off your clock at some point after you make your move.  In this
-case, the ICS charges you for the time between when it sent you your
-opponent's move and the time it received your move.  Thus delays in
-network transmission count against you.  WinBoard stops counting down
-the display of your clock on your screen (and starts your opponent's)
-when you make your move.  When the ICS echoes your move back to you, it
-may have charged you for more time than that, and WinBoard corrects
-the clocks to what the ICS says they should read.
-
-<p>See "help lag" and "help timestamp" or "help timeseal" on your ICS for
-more detailed information.
-
-<hr>
-<h3><a name="[C.13]">[C.13]
-I can't run WinBoard unless I delete the WinBoard.ini file each time!
-</a></h3>
-
-<p>Most people don't have this problem, but two or three people using
-Windows NT 4.0 with Service Pack 3 or 4 have reported it.  I have no
-idea what causes this problem.  Contrary to what was reported in a
-previous version of this FAQ, reinstalling the service pack after
-installing WinBoard does not seem to solve the problem.
-
-<hr>
-<h3><a name="[C.15]">[C.15]
-I get errors compiling XBoard's parser.c.
-</a></h3>
-
-<p>The file parser.c is automatically generated from parser.l.  The
-copy included with XBoard 4.0.2 was generated by lex on Tru64 Unix and
-has problems compiling and linking on current GNU/Linux versions.  The
-copy included with XBoard 4.0.3 was generated by flex on a GNU/Linux
-machine, but it too won't necessarily work on other versions of Unix.
-If you have this problem, you can fix it by deleting parser.c and
-letting the Makefile re-create it from parser.l.  This will work if
-you have either lex or flex on your system.  Flex is available in all
-GNU/Linux distributions and can be obtained at no charge from the Free
-Software Foundation, www.fsf.org.
-
-<hr>
-<h3><a name="[C.16]">[C.16]
-I get an error building WinBoard from source because "flex" is not found.
-</a></h3>
-
-<p>The file parser.c is automatically generated from parser.l.  The
-Makefile included with the WinBoard source kit has a rule for
-generating parser.c using the program "flex", which will fail if you
-don't have flex.  However, the source kit also includes a ready-made
-copy of parser.c, so you don't really need flex unless you have made
-changes to parser.l.  Check that you still have a copy of parser.c; if
-you don't, unpack the WinBoard source zip file again to get one.
-Either set the last-modified time of parser.c to be later than that of
-parser.l, delete parser.l, or comment out the Makefile rule for
-building parser.c from parser.l, and then try building WinBoard again.
-
-<p>If you do want to change parser.l and rebuild parser.c, you can get
-flex as part of the free Cygwin kit from 
-<a href="http://sourceware.cygnus.com/cygwin/"
->http://sourceware.cygnus.com/cygwin/</a>.  You can
-probably also get flex for Windows by itself from various other places
-around the Internet.  It is free software distributed by the Free
-Software Foundation, www.fsf.org.
-
-<hr>
-<h3><a name="[C.17]">[C.17]
-  XBoard hangs shortly after connecting to an ICS when used with dxterm,
- cmdtool, dtterm, kterm, konsole, or other substitutes for xterm.
-</a></h3>
-
-<p>After connecting to a chess server, XBoard 4.0.2 and later sends an
-escape sequence to its terminal that is meant to display your handle
-and the ICS host name (for example, "user at chessclub.com") in the
-terminal's banner and icon.  It seems that several of the alternative
-X terminal programs have a bug that makes them hang when sent this
-escape sequence.
-
-<p>You can work
-around the problem by using xterm, nxterm, rxvt, aterm, xiterm, or
-gnome-terminal, all of which seem to work fine.  In fact, current
-versions of kterm and konsole seem to work fine too, so if you are
-having problems with one of them, be sure you are not running an
-outdated version.  
-
-<p>Alternatively, you can disable this feature by commenting out the
-body of DisplayIcsInteractionTitle in xboard.c and recompling xboard.
-
-<hr>
-<h3><a name="[C.18]">[C.18]
-  The WinBoard pieces show up in the wrong colors, appear distorted,
-  or are not visible at all.
-</a></h3>
-
-<p>This can happen if you have a bug in your Windows display driver.
-Check with the manufacturer of your display card, the manufacturer of
-your computer, or Microsoft to see if there is an updated driver
-available.  You can usually download updated drivers from the Web.
-
-<p>If you can't find an updated driver, you can try running Windows
-using a different number of colors and/or disabling some of the
-hardware acceleration features on your display card.  To change the
-number of colors, go to Windows Start / Settings / Control Panel /
-Display / Settings / Color Palette.  To disable hardware acceleration
-features, go to Windows Start / Settings / Control Panel / Display /
-Settings / Advanced Properties / Performance / Hardware Acceleration.
-
-<p>It's also possible that Windows has the right driver for your
-hardware already but you are not using it.  It may help to reinstall
-your driver.  Go to Windows Start / Settings / Control Panel / System
-and delete your display card (maybe even your monitor too), then
-reboot.  Windows should automatically re-detect your card and monitor
-and re-install the drivers; if it doesn't, run Start / Settings /
-Control Panel / Add New Hardware to force it to.
-
-<p>If all else fails, try Monochrome mode.  On WinBoard's menus, go
-to Options / Color and check Monochrome.  WinBoard will display in black
-and white.
-
-<HR>
-<H3><A NAME="[C.19]">[C.19] XBoard or WinBoard tells me "Error: first chess
-  program (...) exited unexpectedly".</A></H3>
-
-<p>This message means that your chess engine crashed, probably due to
-a bug in the engine, or because you have it configured incorrectly.
-You can try running XBoard or WinBoard again with the "-debug" flag on
-the command line.  This will print out all the messages received from
-the chess engine.  (With WinBoard, the messages go into a file called
-WinBoard.debug; with XBoard, they go to the xterm that you started
-XBoard from.)
-
-<P>If you are using GNU Chess and you see this problem as soon as it
-starts up, most likely GNU Chess is exiting with an error message.  If
-you see the message "NO LANGFILE", it means that you did not install
-GNU Chess correctly, and it is unable to find the file gnuchess.lang.
-Make sure that you defined LIBDIR in the gnuchess Makefile, and that
-gnuchess.lang is in that directory.  If gnuchess.lang is not there,
-you probably didn't type "make install" in the gnuchess src directory;
-you must do this to install gnuchess.lang (and the gnuchess book).  If
-you defined LIBDIR to something that is not an absolute pathname (that
-is, to something that does not start with a "/"), GNU Chess will work
-only if you run it from the GNU Chess "src" directory where you built
-it.
-
-<hr><h3><a name="[C.20]">[C.20]
-  XBoard tells me "Warning: Cannot allocate colormap entry", or
-  "too few colors available; trying monochrome mode", or
-  "XPM pieces cannot be used in monochrome mode".
-</a></h3>
-
-<p>You are running your X server with 8-bit color depth, and you are running
-some program that has used up all 256 of your colors.  Netscape tends
-to do this, or maybe you have a background image that uses up all of
-your colors.
-
-<p>If you have a modern machine, you probably have enough display
-memory to run your X server with 16-, 24-, or 32-bit color depth.  If
-you're using "startx" to start the X server, try giving the command as
-"<tt>startx -- -bpp 24</tt>" (or 16, or 32).  On newer X servers you
-may have to use -depth instead of -bpp.  Further details on
-configuring your X server are beyond the scope of this FAQ.
-
-<p>If you must run in 8-bit mode, try the following:
-Avoid background images that use up all your colors.  If you
-run Netscape, try starting it up with the <tt>-install</tt> command-line
-option; this gives Netscape its own private colormap that X will
-switch to when Netscape has the keyboard focus.  
-
-<P>If all else fails, another possibility is to run xboard in
-monochrome (black and white) mode by giving it the <tt>-mono</tt>
-command-line option.  XBoard will try this by itself in some cases.
-Monochrome mode works only with bitmap pieces, not pixmap pieces, so
-trying to use it may give you the error "XPM pieces cannot be used in
-monochrome mode".  To get around this, either use the -bitmapDirectory
-command line option to point XBoard to the directory containing the
-bitmap pieces included with the XBoard source code, or rebuild XBoard
-with pixmap support disabled, using "./configure --disable-xpm ; make
-clean ; make".
-
-<hr><h3><a name="[C.21]">[C.21]
-  When I log in to freechess.org, the Enter key doesn't work, and I 
-  have to use Ctrl+J instead.  But when I use WinBoard, Ctrl+J doesn't
-  work either, so I'm stuck.
-</a></h3>
-
-<p>This is a pretty rare problem.  It should only arise if you have to
-reach freechess.org by telnetting (or connecting with WinBoard
-/icsport=23) from a Windows PC to a Unix box, and then telnetting from
-there to freechess.org.  The Enter key should always work when
-connecting directly from your PC to freechess.org.
-
-<p>The best way to get around the problem is to run timeseal on the
-intermediate Unix box instead of telnet.  Get the appropriate version
-of timeseal for your box from ftp.freechess.org and follow the
-directions in the help files on FICS.
-
-<p>If you can't run timeseal for some reason, there are some things
-you can do to make telnet stay in line mode instead of going to
-character mode.  Then the Enter key will work.  First, try "telnet
-freechess.org 5000" instead of "telnet freechess.org."
-If that still doesn't work, then when the Enter key stops working,
-type the following.  Here <tt>&lt;</tt> and <tt>&gt;</tt> surround the
-names of keys.
-
-<p><pre>
-    &lt;Ctrl+S&gt;&lt;Ctrl+]&gt;mode line&lt;Enter&gt;
-</pre>
-
-<hr><h3><a name="[C.22]">[C.22]
-  XBoard says, "Failed to start first chess program gnuchessx
-  on localhost: gnuchessx: No such file or directory."
-</a></h3>
-
-<p>XBoard is looking for GNU Chess 4.0.  If you didn't want to use
-XBoard with GNU Chess, please see topic <A HREF="#[C.6]">[C.6]</A>.
-If you did want to use GNU Chess 4.0, be sure you have it installed and
-that it is on your $PATH.  If you wanted to use GNU Chess 5 instead,
-see topic <A HREF="#[D.6]">[D.6]</A>.
-
-<HR>
-<H2><A NAME="[D]">[D] Crafty and other topics</A></H2>
-<HR>
-<H3><A NAME="[D.1]">[D.1] What is XChess?</A></H3>
-
-XChess is an older chessboard program that is no longer supported.  XChess was
-written for X version 10, and you may or may not be able to build and run it
-on an X11 system.
-
-<P>XChess has only one significant feature that is not present in XBoard: Two
-humans can play chess using XChess on different machines, without using the
-Internet Chess Server as an intermediary.  This feature is of interest only if
-you don't have network connectivity to the Internet Chess Server.
-
-<P>Note: There actually have been several different programs called "XChess" in
-circulation at various times.  The above describes one that was associated
-with GNU Chess.
-
-<HR>
-<H3><A NAME="[D.2]">[D.2] What is Winsock Chess?</A></H3>
-
-Winsock Chess is a program that lets two people play chess across a
-network.  It runs only under Microsoft Windows.  Some of the code in
-Winsock Chess is derived from GNU Chess, but it is not maintained by
-the GNU Chess team.  You can get a copy from the Internet Chess
-Library; see topic <A HREF="#[A.2]">[A.2]</A>.  For more information,
-contact its author, Donald Munro, ccahdm at beluga.upe.ac.za.
-
-<HR>
-<H3><A NAME="[D.3]">[D.3] What is Crafty?</A></H3>
-
-Crafty is a freely-available chess program written by Bob Hyatt.  
-Bob is the main author of the well-known chess program Cray
-Blitz.  Crafty is a very strong program, its code is available, commented
-and fairly readable, and its author is actively working on improvements.
-
-<p>You can download Crafty from <a
-href="ftp://ftp.cis.uab.edu/pub/hyatt/"
->ftp://ftp.cis.uab.edu/pub/hyatt/</a>.  Start by getting the <a
-href="ftp://ftp.cis.uab.edu/pub/hyatt/read.me" >read.me</a> file and
-reading it.  Among other things, this file contains instructions on
-how to install Crafty as a command-line application on your machine.
-
-<p>There is a Crafty mailing list.
-To subscribe, send email to majordomo at cis.uab.edu, with 
-"subscribe crafty-list" in the body.
-
-<HR>
-<H3><A NAME="[D.4]">[D.4] How do I use Crafty with XBoard?</A></H3>
-
-<p>First, you need to get Crafty and install it as a command-line
-application on your machine.  See topic <A HREF="#[D.3]">[D.3]</A>.
-
-<p>To use Crafty with XBoard, give the -fcp
-parameter like this:
-
-<p><PRE>
-    xboard -fcp "./crafty" -fd <I>crafty_directory</I>
-</PRE>
-
-Here <I>crafty_directory</I> is the directory where you installed Crafty.
-You can add more xboard options at the end of the command line.
-
-<p>Crafty 15.14 or later is required to work properly with XBoard
-4.0.0 or later.  We generally recommend using the latest versions of
-both XBoard and Crafty.
-
-<HR>
-<H3><A NAME="[D.5]">[D.5] How do I use Crafty with WinBoard?</A></H3>
-
-<p>First, you need to get Crafty and install it as a command-line
-application on your machine.  See topic <A HREF="#[D.3]">[D.3]</A>.
-It is best to use the latest version of Crafty with the latest version
-of WinBoard to make sure all features are compatible and function
-correctly.  You can install Crafty in any directory you like.
-
-<p>You also need to get WinBoard and install it in the normal way
-using its built-in installer.  You can do that either before or after
-you install Crafty.
-
-<p>After both Crafty and WinBoard are installed separately, follow the
-directions in the WinBoard Help file (included with WinBoard) for
-connecting new chess engines to WinBoard.
-
-<p>If you want to have Crafty act as an automated computer player on a
-chess server, see topic <A HREF="#[B.16]">[B.16]</A>.  Before you try
-to get that working, be sure you can play against Crafty locally,
-first without WinBoard, then with it.  Also be sure you can use
-WinBoard to play on the chess server yourself, without having Crafty
-connected to it.  You have to crawl before you can walk!
-
-<HR>
-<H3><A NAME="[D.6]">[D.6] How do I use GNU Chess 5 with XBoard?</A></H3>
-
-<p>By default, XBoard still tries to use GNU Chess 4 by running the
-command "gnuchessx".  That's why if you don't have GNU Chess 4, you
-get the error message "Failed to start first chess program gnuchessx
-on localhost: gnuchessx: No such file or directory."
-
-<p>If you have GNU Chess 5, the command should be "gnuchess xboard"
-instead.  To make XBoard use this command, give the -fcp parameter
-like this:
-
-<p><PRE>
-    xboard -fd <I>gnuchess_directory</I> -fcp "./gnuchess xboard" 
-</PRE>
-
-Here <I>gnuchess_directory</I> is the directory where you installed
-GNU Chess 5 and its book.  You can add more xboard options at the
-end of the command line.
-
-<p><HR>
-$Id: FAQ.html,v 2.2 2003/11/28 09:35:21 mann Exp $<br>
-** End of XBoard/WinBoard FAQ **
-</BODY></HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:webmasters at gnu.org" />
+<link rel="icon" type="image/png" href="/graphics/gnu-head-mini.png" />
+<meta name="ICBM" content="42.256233,-71.006581" />
+<meta name="DC.title" content="gnu.org" />
+
+<title>XBoard and WinBoard: Frequently Asked Questions</title>
+<style type="text/css" media="all">
+ at import url('/style.css');
+</style>
+
+<style type="text/css" media="print">
+ at import url('/print.css');
+</style>
+
+</head>
+
+<body>
+<h1>XBoard and WinBoard: Frequently Asked Questions</h1>
+
+<p>This document answers some frequently asked questions about the
+graphical chess interfaces XBoard and WinBoard.
+A hyperlinked version of this FAQ is available on
+the Web through the page
+<a href="http://www.gnu.org/software/xboard/FAQ.html">
+http://www.gnu.org/software/xboard/FAQ.html</a>.</p>
+
+<p><i>This FAQ is in need of revision.  Please contact us if you'd like
+to help update it.</i></p>
+
+<hr />
+<h2>Outline</h2>
+
+<ul>
+<li><a href="#tag-A0">[A] Introduction and hot topics</a></li>
+<li><a href="#tag-B0">[B] XBoard and WinBoard</a></li>
+<li><a href="#tag-C0">[C] XBoard and WinBoard, bugs and problems</a></li>
+<li><a href="#tag-D0">[D] Crafty and other topics</a></li>
+</ul>
+
+<hr />
+<h2>Detailed contents</h2>
+
+<ul>
+  <li><a name="tag-A0" href="#tag[A">[A] Introduction and hot topics</a>
+    <ul>
+      <li><a href="#tag-A.1">[A.1] What are XBoard and WinBoard?</a></li>
+      <li><a href="#tag-A.2">[A.2] Where can I get chess information and chess software?</a></li> 
+      <li><a href="#tag-A.3">[A.3] What are the current version numbers for XBoard and WinBoard?</a></li> 
+      <li><a href="#tag-A.4">[A.4] Who is working on this project?</a></li>
+      <li><a href="#tag-A.5">[A.5] How do I report bugs, offer help, etc.?</a></li>
+      <li><a href="#tag-A.6">[A.6] What are the future plans for XBoard and WinBoard?</a></li>
+  </ul></li> 
+  
+  <li><a name="tag-B0" href="#tag[B">[B] XBoard and WinBoard</a>
+    <ul>
+      <li><a href="#tag-B.1">[B.1] What is XBoard?</a></li>
+      <li><a href="#tag-B.2">[B.2] Is there an XBoard for Microsoft Windows?  What is WinBoard?  How do I install WinBoard?</a></li>
+      <li><a href="#tag-B.3">[B.3] Is there an XBoard for the Amiga?  What is AmyBoard?</a></li>
+      <li><a href="#tag-B.4">[B.4] Is there an XBoard for the Macintosh?</a></li>
+      <li><a href="#tag-B.5">[B.5] Does XBoard run on VMS?</a></li>
+      <li><a href="#tag-B.6">[B.6] What is cmail?</a></li>
+      <li><a href="#tag-B.7">[B.7] How do I build XBoard?  Do I have to have gcc?</a></li>
+      <li><a href="#tag-B.8">[B.8] Can I use XBoard or WinBoard to play a game of chess with another human?</a></li>
+      <li><a href="#tag-B.9">[B.9] Will WinBoard run on Windows 3.1?  How about Windows CE (also known as Pocket PC)?</a></li>
+      <li><a href="#tag-B.10">[B.10] How do I use XBoard or WinBoard as an external viewer for PGN files with my Web browser?</a></li>
+      <li><a href="#tag-B.11">[B.11] How do I use WinBoard as an external viewer for PGN files with the MS Windows File Manager or Explorer?</a></li>
+      <li><a href="#tag-B.12">[B.12] How do I use ICC timestamp or FICS timeseal with XBoard?</a></li>
+      <li><a href="#tag-B.13">[B.13] How do I use ICC timestamp or FICS timeseal with WinBoard?</a></li>
+      <li><a href="#tag-B.14">[B.14] How do I play bughouse with XBoard or WinBoard?</a></li>
+      <li><a href="#tag-B.16">[B.16] What is Zippy?  How can I interface a chess program to the Internet Chess Servers?</a></li> 
+      <li><a href="#tag-B.17">[B.17] How can I interface my own chess program to XBoard or WinBoard?</a></li>
+      <li><a href="#tag-B.18">[B.18] How can I recompile WinBoard from source?</a></li>
+      <li><a href="#tag-B.19">[B.19] How can I use XBoard or WinBoard to talk to an Internet Chess Server through a firewall or proxy?</a></li>
+      <li><a href="#tag-B.20">[B.20] How can I use XBoard or WinBoard on chess.net with accuclock?</a></li>
+      <li><a href="#tag-B.21">[B.21] Can I get Zippy to do one or more ICS commands automatically at the start or end of each game?</a></li>
+      <li><a href="#tag-B.22">[B.22] How do I print from WinBoard?</a></li>
+      <li><a href="#tag-B.23">[B.23] Can I get Zippy to automatically reconnect to ICS when its connection breaks?</a></li>
+      <li><a href="#tag-B.24">[B.24] The chess engines are too strong and always beat me.  How can I adjust the difficulty level to make them weaker?</a></li>
+      <li><a href="#tag-B.25">[B.25] May I use the piece bitmaps from XBoard/WinBoard in my own program?</a></li>
+  </ul></li>
+  
+  <li><a name="tag-C0" href="#tag-C">[C] XBoard and WinBoard, bugs and problems</a>
+    <ul>
+      <li><a href="#tag-C.1">[C.1] I can't build XBoard because the X11/Xaw/... include files are not found.</a></li>
+      <li><a href="#tag-C.2">[C.2] Configuring or building XBoard fails due to missing header files, missing libraries, or undefined symbols.</a></li>
+      <li><a href="#tag-C.3">[C.3] I have problems using WinBoard on ICS with a modem. I'm not running SLIP or PPP, but just dialing in to an ordinary login account("shell account").</a></li>
+      <li><a href="#tag-C.4">[C.4] I have problems using WinBoard on ICS with Windows 95 and SLIP or PPP.  When trying to start up, it gets the error "Address family not supported by protocol family" (or some equally strange message).</a></li> 
+      <li><a href="#tag-C.5">[C.5] When I try to run WinBoard, I get the message "Failed to start chess program gnuchess on localhost: NO LANGFILE (file gnuchess.lan not found)".</a></li>
+      <li><a href="#tag-C.6">[C.6] I want to use XBoard or WinBoard as an Internet Chess Server interface, but the ICS Client option is grayed out on the menu.</a></li> 
+      <li><a href="#tag-C.7">[C.7] How do I give command-line options to a Windows program like WinBoard?</a></li>
+      <li><a href="#tag-C.9">[C.9] When I exit from WinBoard after using it to play against a chess program on my machine, the chess program keeps running in the background.</a></li>
+      <li><a href="#tag-C.12">[C.12] Why do my ICS opponents often get extra time after they make their moves? Why do I sometimes lose time off my clock after I make my move?</a></li>
+      <li><a href="#tag-C.13">[C.13] I can't run WinBoard unless I delete the WinBoard.ini file each time!</a></li>
+      <li><a href="#tag-C.15">[C.15] I get errors compiling XBoard's parser.c.</a></li>
+      <li><a href="#tag-C.16">[C.16] I get an error building WinBoard from source because "flex" is not found.</a></li>
+      <li><a href="#tag-C.17">[C.17] XBoard hangs shortly after connecting to an ICS when used with dxterm, cmdtool, dtterm, kterm, konsole, or other substitutes for xterm.</a></li>
+      <li><a href="#tag-C.18">[C.18] The WinBoard pieces show up in the wrong colors, appear distorted, or are not visible at all.</a></li>
+      <li><a href="#tag-C.19">[C.19] XBoard or WinBoard tells me "Error: first chess program (...) exited unexpectedly".</a></li> 
+      <li><a href="#tag-C.20">[C.20] XBoard tells me "Warning: Cannot allocate colormap entry", or "too few colors available; trying monochrome mode", or "XPM pieces cannot be used in monochrome mode".</a></li>
+      <li><a href="#tag-C.21">[C.21] When I log in to freechess.org, the Enter key doesn't work, and I  have to use Ctrl+J instead.  But when I use WinBoard, Ctrl+J doesn't work either, so I'm stuck.</a></li>
+      <li><a href="#tag-C.22">[C.22] XBoard says, "Failed to start first chess program gnuchessx on localhost: gnuchessx: No such file or directory."</a></li>
+  </ul></li>
+  
+  <li><a name="tag-D0" href="#tag-D">[D] Crafty and other topics</a>
+    <ul>
+      <li><a href="#tag-D.1">[D.1] What is XChess?</a></li>
+      <li><a href="#tag-D.2">[D.2] What is Winsock Chess?</a></li>
+      <li><a href="#tag-D.3">[D.3] What is Crafty?</a></li>
+      <li><a href="#tag-D.4">[D.4] How do I use Crafty with XBoard?</a></li>
+      <li><a href="#tag-D.5">[D.5] How do I use Crafty with WinBoard?</a></li>
+      <li><a href="#tag-D.6">[D.6] How do I use GNU Chess 5 with XBoard?</a></li>
+  </ul></li>
+</ul>
+
+<hr />
+<h2><a name="tag-A">[A] Introduction and hot topics</a></h2>
+
+<hr />
+<h3><a name="tag-A.1">[A.1] What are XBoard and WinBoard?</a></h3>
+
+<p>XBoard and WinBoard are graphical user interfaces for chess.
+  XBoard runs with the X Window System on Unix systems (including
+  GNU/Linux); see topic <a href="#tag-B.1">[B.1]</a>.  WinBoard runs
+  on true 32-bit Microsoft Windows operating systems, such as Windows
+  95, 98, NT, 2000, ME, XP, and should continue to work on future
+  32-bit Windows systems.  It does not work on Windows CE (also known
+  as Pocket PC), nor does it work on 16-bit Windows systems such as
+  Windows 3.1.  See topic <a href="#tag-B.2">[B.2]</a>.</p>
+  
+<hr />
+<h3><a name="tag-A.2">[A.2] Where can I get chess information and chess 
+    software?</a></h3>
+
+<p>As a shortcut to most things mentioned in this FAQ, try Tim Mann's
+  Chess Web page, <a href= "http://www.tim-mann.org/chess.html"
+  >http://www.tim-mann.org/chess.html</a>.  This page page is a good
+  place to get the latest released versions of XBoard and WinBoard and
+  the most up-to-date version of this FAQ.  Also see our Savannah
+  project pages at <a href="https://savannah.gnu.org/projects/xboard/"
+  >https://savannah.gnu.org/projects/xboard/</a>.</p>
+
+<p>If you have other questions about XBoard/WinBoard that aren't
+  answered in this FAQ, you can try Aaron Tay's WinBoard and Chess
+  Engines FAQ,
+  at<a href="http://www.aarontay.per.sg/Winboard/">defunct
+  URL</a>.</p>
+
+<p>For general news and information about chess, try the newsgroup hierarchy
+rec.games.chess.*, especially the groups rec.games.chess.misc and
+rec.games.chess.computer.  Both of the latter groups have very informative
+FAQs maintained by Steve Pribut; look for them on the newsgroups or at
+<a href="http://www.clark.net/pub/pribut/chess.html">defunct URL</a>.</p>
+
+<p>Like other GNU software, you can get XBoard, and WinBoard by anonymous FTP from 
+<a href="ftp://ftp.gnu.org/pub/gnu/">ftp://ftp.gnu.org/pub/gnu/</a>
+and its many mirror sites.  Look in the subdirectories xboard, and winboard.
+The .tar.gz suffix on the files there indicates they were packed with tar
+and compressed with gzip.  The .exe or .zip suffixes indicate files that
+were packed and compressed with zip.</p>
+
+<p>For other chess software, try the Internet Chess Library.  Use
+anonymous FTP to connect to ftp.freechess.org, or go to the Web page
+<a href="http://www.freechess.org/">http://www.freechess.org/</a>.
+You can get chess software, game
+collections, the FAQ file for rec.games.chess, and other chess-related
+material there, in the directory pub/chess.  The FTP server can
+automatically decompress files for you as you download them, useful if you
+don't have gzip.</p>
+
+<p>Here is a sample anonymous ftp session.  Some of the ftp server's responses
+are abbreviated, but all the commands you must type are included.</p>
+
+<pre>
+    % ftp ftp.gnu.org
+    Connected to ftp.gnu.org
+    Name: anonymous
+    Password: your-email-address at your-site
+    ftp&gt; binary
+    200 Type set to I.
+    ftp&gt; cd /pub/gnu/xboard
+    ftp&gt; dir
+    -rw-r--r-- 1 14910 wheel  1057625 May 20 00:25 xboard-4.2.7.tar.gz
+    ftp&gt; get xboard-4.2.7.tar.gz
+    150 BINARY connection for xboard-4.2.7.tar.gz (1057625 bytes).
+    226 Transfer complete.
+    ftp&gt; quit
+</pre>
+
+<hr />
+<h3><a name="tag-A.3">[A.3] What are the current version numbers for 
+XBoard and WinBoard?</a></h3>
+
+<p>At this writing, the current version numbers are:</p>
+
+<ul>
+<li>XBoard 4.2.7</li>
+<li>WinBoard 4.2.7</li>
+</ul>
+
+<hr />
+<h3><a name="tag-A.4">[A.4] Who is working on this project?</a></h3>
+
+Please see our Savannah project pages
+at <a href="https://savannah.gnu.org/projects/xboard/">https://savannah.gnu.org/projects/xboard/</a>
+for a list of active developers.  Many others occasionally contribute
+suggestions and snippets of code, for which we are grateful.
+
+<hr />
+<h3><a name="tag-A.5">[A.5] How do I report bugs, offer help, etc.?</a></h3>
+
+<p>Bug reports, suggestions, and offers to help on XBoard
+or WinBoard should be sent to bug-xboard<a name="nospam01">&#x40;</a>gnu.org.</p>
+
+<p>Beginner questions and discussion about the program may get faster
+answers on the WinBoard Forum at <a
+href="http://f11.parsimony.net/forum16635/"
+>http://www.open-aurec.com/wbforum/</a>.
+This forum also constains a section dedicated to propose and discuss
+new features for WinBoard / XBoard or WinBoard protocol,
+and reposrt bugs.</p>
+
+<p>If you are developing a
+chess engine that works with XBoard or WinBoard (or an alternative
+GUI that works with such engines), see the Chess Engines mailing
+list, hosted at
+<a href="http://groups.yahoo.com/group/chess-engines"
+>http://groups.yahoo.com/group/chess-engines</a>.
+For better response, join the above-mentioned WinBoard forum,
+or the <a href="http://www.talkchess.com/forum">CCC forum</a>.</p>
+
+
+<p>Any time you want to report a possible bug in XBoard or WinBoard,
+we need to know exactly what you did, and exactly what error (or
+other) messages you got.</p>
+
+<p>If you are using Unix, run the "script" program, run XBoard with
+the -debug flag (if you get as far as running it), do whatever is
+necessary to reproduce the problem, type "exit" to the shell, and mail
+us the resulting typescript file.  We also need to know what
+hardware/operating system combination you are using.  The command
+"uname -a" will usually tell you this; include its output in your
+typescript.</p>
+
+<p>If you are using MS Windows, run WinBoard with the -debug flag, and
+send us a copy of the WinBoard.debug file.  If you aren't sure how to
+add command-line flags to WinBoard, you can hit Ctrl+Alt+F12 to create
+a WinBoard.debug file after WinBoard starts, but that is not as good,
+because a few messages that would have been printed at the start are
+lost.</p>
+
+<p>Either way, please send us the exact text of the commands you typed
+and the output you got, not just your recollection of approximately
+what they were.  The messages may seem meaningless to you, but they
+are very meaningful to us and essential for diagnosing problems.</p>
+
+<hr />
+<h3><a name="tag-A.6">[A.6] What are the future plans for XBoard and
+  WinBoard?</a></h3>
+
+<p>Our plans are always in flux.  As with most free software projects,
+the next release will happen when it happens -- or it may never
+happen.  This has always been the policy for XBoard/WinBoard.
+Releases have never been promised in specific time frames.</p>
+
+<p>Starting in November 2003, several new developers have joined the
+project, and work is now hosted at <a
+href="https://savannah.gnu.org/projects/xboard/"
+>https://savannah.gnu.org/projects/xboard/</a>.  Lots of work is just
+getting underway, but nothing is far along yet.</p>
+
+<p>Here is a partial list of items that have a nonzero probability of
+happening in finite time.</p>
+
+<ul>
+<li>Small bug fixes.  Occasionally someone sends us a fix, or reports
+a small bug very clearly so that we're able to fix it in a few minutes
+work.</li>
+
+<li>Protocol version 3.  The members of the chess engine authors'
+mailing list discussed a set of proposed features for the next version
+of the XBoard/WinBoard chess engine communication protocol.
+The WinBoard 4.3 fork has taken the protocol in a different direction,
+though, extending version 2 with new features as they were needed,
+rather than upgrading to a new protocol in a single sweep.
+It does not seem likely that there will be a v3 protocol in the
+foreseeable future.
+</li>
+
+<li>Contributed features.  Several people have mailed me code to add
+various features.  Most of this code is available on the
+XBoard/WinBoard extensions page
+at <a href="http://www.tim-mann.org/extensions.html">http://www.tim-mann.org/extensions.html</a>,
+but it is not in any official releases yet.  We are in the process of
+getting folks to formally assign the copyrights on their contributions
+to the Free Software Foundation so that we can include it in official
+releases in the future.</li>
+
+<li>Internationalization.  Several people have expressed interest in
+internationalizing XBoard/WinBoard. Version 4.4 implements
+internationalization in its XBoard branch, and includes (partial)
+Turkish and German translations.  For WinBoard a suitable way o
+internationalization still has to be found, as all menu strings there
+are not in the C code, but in a Windows resource file. In any case, we
+will need more translators, to update the existing translations (for
+version 4.3.7) to the current version, and to provide translaions for
+oter languages.  Watch for news on the xboard-devel mailing list on
+our Savannah pages.</li>
+
+</ul>
+
+<hr />
+<H2><a name="tag-B">[B] XBoard and WinBoard</a></H2>
+<hr />
+<h3><a name="tag-B.1">[B.1] What is XBoard?</a></h3>
+
+<p>XBoard is a graphical user interface for chess.  It displays a
+chessboard on the screen, accepts moves made with the mouse, and loads
+and saves games in Portable Game Notation (PGN).  XBoard is free software.
+It serves as a front-end for many different chess services, including:</p>
+
+<p><strong>Chess engines</strong> that will run on your machine and
+play a game against you or help you analyze, such as GNU Chess and
+Crafty (topic <a href="#tag-D.3">[D.3]</a> below).</p>
+
+<p><strong>Chess servers</strong> on the Internet, where you can
+connect to play chess with people from all over the world, watch other
+users play, or just hang out and chat.</p>
+
+<p><strong>Correspondence chess</strong> played by electronic
+mail. The cmail program (topic <a href="#tag-B.6">[B.6]</a> below)
+automates the tasks of parsing email from your opponent, playing his
+moves out on your board, and mailing your reply move after you've
+chosen it.</p>
+
+<p><strong>The Web</strong> and your own saved games. You can use
+XBoard as a helper application to view PGN games in your
+Web browser, or to load and save your own PGN files.</p>
+
+<p>XBoard runs under Unix or Unix-compatible systems.  It requires the
+X Window System, version X11R4 or later.  There are also ports of
+XBoard to 32-bit Microsoft Windows and to
+the Amiga.  See topics <a href="#tag-B.2">[B.2]</a> and <a
+HREF="#tag-B.3">[B.3]</a> respectively.</p>
+
+<hr />
+<h3><a name="tag-B.2">[B.2] Is there an XBoard for Microsoft Windows?  What is WinBoard?  How do I install WinBoard?</a></h3>
+
+<p>WinBoard is a port of XBoard to 32-bit Microsoft Windows systems, such
+as Windows 95, 98, NT, 2000, ME, and XP.  It uses the same back end
+chess code as XBoard, but the front end graphics code is a complete
+rewrite.  WinBoard is free software.</p>
+
+<p>The WinBoard distribution includes a sample Chess engine.</p>
+
+<p>The WinBoard distribution also includes the ICC timestamp and FICS
+timeseal programs (topic <a href="#tag-B.12">[B.12]</a>).</p>
+
+<p>cmail (topic <a href="#tag-B.6">[B.6]</a>) has not been ported to
+Windows.  All the other XBoard functions are included in WinBoard.
+The International Email Chess Group web site at <a
+href="http://www.iecg.org/" >http://www.iecg.org/</a> recommends
+ECTool (<a href="http://www.ectool.nu/" >http://www.ectool.nu/</a>)
+for playing correspondence chess under Windows.</p>
+
+<p>You install WinBoard as follows. Download the WinBoard package to
+your PC (see topic <a href="#tag-A.2">[A.2]</a>).  It will be a file
+with a name like winboard-4_0_0.exe.  Double-click on this file
+in the Explorer or File Manager to run it. Follow the on-screen
+prompts.</p>
+
+<hr />
+<h3><a name="tag-B.3">[B.3] Is there an XBoard for the Amiga?  What is AmyBoard?</a></h3>
+
+<p>AmyBoard is a port of XBoard to the Amiga, by Jochen Wiedmann.
+The distribution includes a port of GNU Chess.
+AmyBoard is free software.</p>
+
+<p>The current version of AmyBoard is 330.5 (based on XBoard 3.3.0).
+No one is currently maintaining it.</p>
+
+<p>System requirements:</p>
+
+<ul>
+<li>An Amiga (obviously :-), running OS 2.04 or later, 2Mb RAM or more.</li>
+<li>MUI 2.0 or later.</li>
+<li>Workbench or another screen with no less than 640x400 pixels (adjustable
+  with the MUI-Prefs); this restriction is just because we don't have
+  bitmaps with less than 40x40 pixels per square. If someone contributes
+  bitmaps with 20x20 or 20x25, they will work with any Hires mode.</li>
+</ul>
+
+<p>If you would like to use an ICS, you need an Internet connection via either</p>
+
+<ul>
+<li>a telnet-like program, or</li>
+<li>a terminal program reading from stdin and writing to stdout.</li>
+</ul>
+
+<p>AmyBoard is available in the Internet Chess Library (topic <a href="#tag-A.2">[A.2]</a>).</p>
+
+<hr />
+<h3><a name="tag-B.4">[B.4] Is there an XBoard for the Macintosh?</a></h3>
+
+<p>Note: I am not a Mac user and have not tried this myself, so I cannot 
+answer questions about it. </p>
+ 
+<p>Because MacOS X has a Unix base, XBoard will compile and run on it. 
+You do need an X11 (X Window System) server and client libraries. I'm 
+told that these come standard with MacOS X 10.3 and later. Once you 
+install the X11 package, XBoard is reported to compile and run without 
+changes.</p>
+ 
+<p>You can avoid having to compile XBoard (and GNU Chess) yourself by 
+using the Fink sofware packaging system. See 
+http://fink.sourceforge.net/ and 
+http://finkcommander.sourceforge.net/ for more info on Fink.</p>
+ 
+<p>There is no version of XBoard or WinBoard that runs with the native
+(non-X11) Mac graphical interface, and none that runs on MacOS 9 or
+earlier.</p>
+
+
+<hr />
+<h3><a name="tag-B.5">[B.5] Does XBoard run on VMS?</a></h3>
+
+<p>No.  This port would probably be a lot easier than the Win32 and Amiga
+ports were, because VMS has the X Window system (under the name
+DECwindows) and is now POSIX compliant. If you are working on this, 
+send mail to bug-xboard<a name="nospam02">&#x40;</a>gnu.org to let us know.</p>
+
+
+<hr />
+<h3><a name="tag-B.6">[B.6] What is cmail?</a></h3>
+
+<p>cmail is a program that helps you play and keep track of electronic mail
+correspondence chess games using XBoard.  It is distributed with XBoard and
+has its own manual page.  cmail is free software.  It was written by
+Even Welsh.  cmail has not been ported to Windows; sorry.</p>
+
+<hr />
+<h3><a name="tag-B.7">[B.7] How do I build XBoard?  Do I need gcc?</a></h3>
+
+<p>The first step to building XBoard is to get the distribution file.  See topic
+<a href="#tag-A.2">[A.2]</a> for places you can ftp the software from.</p>
+
+<p>Next, decide what directory tree you are going to install XBoard
+in.  The default is /usr/local, but you probably don't have write
+access to that directory unless you are a system administrator.  If
+you do, type the following to install it there:</p>
+
+<pre>
+    gzip -cd xboard-*.tar.gz | tar -xvf -
+    cd xboard-*/
+    ./configure
+    make
+    su
+    make install
+</pre>
+
+<p>If you want to install xboard in your personal home directory ($HOME/bin),
+type this:</p>
+
+<pre>
+    gzip -cd xboard-*.tar.gz | tar -xvf -
+    cd xboard-*/
+    ./configure --prefix=$HOME
+    make
+    make install
+</pre>
+
+<p>If the first step above fails because you don't have gzip, see
+topic <a href="#tag-A.2">[A.2]</a>, and ask a local Unix expert if you
+need more help.  If you have any problems with the last two steps,
+read the READ_ME and INSTALL files in the xboard-*/ directory.  You
+will also find this FAQ there.</p>
+
+<p>You don't need to have gcc to build XBoard.  Almost any Unix C
+compiler should do.</p>
+
+<hr />
+<h3><a name="tag-B.8">[B.8] Can I use XBoard or WinBoard to play a game
+  of chess with another human?</a></h3>
+
+<p>The only way for two humans on different machines to play chess in
+real time using XBoard/WinBoard is to use an Internet Chess Server
+as an intermediary.  That is, each player runs his own copy of XBoard
+or WinBoard, both of them log into an ICS, and they play a game there.
+Two copies of XBoard/WinBoard cannot communicate with each other
+directly.</p>
+
+<p>Instructions on how to get started with Internet chess are included
+with the XBoard and WinBoard distributions.  The network addresses
+included in the distribution may not always be current.  The oldest
+and largest ICS is the Internet Chess Club at chessclub.com, which now
+has a fee for registered use, but still allows free unregistered use.
+There are also many newer sites with no fees, using the Free Internet
+Chess Server implementation (FICS).  The most active FICS site is
+freechess.org.  On these and most other chess servers,
+the port number to use is 5000.</p>
+
+<p>If you don't have network connectivity to any ICS site, you
+can run your own server using a version of the FICS code, but this
+is not easy.  See <a href="http://www.tim-mann.org/ics.html#ownics"
+>http://www.tim-mann.org/ics.html#ownics</a> for advice and pointers.</p>
+
+<p>The cmail program included with XBoard lets you play email postal games with
+another human; see topic <a href="#tag-B.6">[B.6]</a>.</p>
+
+<p>Two humans can play chess on the same machine using one copy of
+XBoard/WinBoard in
+Edit Game mode, but the clocks don't run in this mode, so it's of limited
+usefulness.</p>
+
+<p>See also topic <a href="#tag-D.2">[D.2]</a>, Winsock Chess.</p>
+
+<hr />
+<h3><a name="tag-B.9">[B.9] Will WinBoard run on Windows 3.1?
+  How about Windows CE (also known as Pocket PC)?
+</a></h3>
+
+<p>WinBoard does not run on Windows 3.1, Windows for Workgroups 3.11, etc.,
+not even with the Win32s compatibility package.  The main problem is
+that Win32s does not have threads or real concurrent processes.  A
+port of WinBoard to Windows 3.1 is possible in theory, but it would be
+difficult and messy, and no one is going to do it.</p>
+
+<p>WinBoard does not run on Windows CE (also
+known as Pocket PC).  I don't know what would be required to port it.</p>
+
+<p>WinBoard does run well on full 32-bit versions of Windows, such as
+Windows 95, 98, NT, 2000, ME, and XP, and should continue to work
+on future 32-bit Windows systems.</p>
+
+<hr />
+<h3><a name="tag-B.10">[B.10] How do I use XBoard or WinBoard as an external viewer for PGN files
+  with my Web browser?</a></h3>
+
+<ol>
+<li> On Unix systems:
+<ul>
+<li> Add the following line to the file .mime.types in your home directory.
+(Create the file if it doesn't exist already.)
+<pre>
+    application/x-chess-pgn    pgn
+</pre>
+</li>
+<li>
+Add the following line to the file .mailcap in your home directory.
+(Create the file if it doesn't exist already.)
+<pre>
+    application/x-chess-pgn; xboard -ncp -lgf %s
+</pre>
+</li>
+<li>
+ Exit from your Web browser and restart it.
+</li>
+</ul>
+</li>
+<li> On MS Windows systems:
+<p>The exact procedure depends on which Web browser you are using.
+The current version of WinBoard automatically configures itself as
+your PGN viewer for local files, Netscape 4.x and later, and Internet
+Explorer.  This automatic setup probably works for all other current Web
+browsers, too.</p>
+</li>
+</ol>
+
+<hr />
+<h3><a name="tag-B.11">[B.11] How do I use WinBoard as an external viewer
+  for PGN files with the MS Windows File Manager or Explorer?</a></h3>
+
+<p>WinBoard sets this up automatically when you install it, except on old
+versions of Windows NT (prior to 4.0).  On Windows NT 3.51 or earlier,
+go to the File Manager, click on the File menu, select Associate,
+enter "pgn" as the extension, and use the Browse button to find your
+copy of WinBoard and set up the association.</p>
+
+<hr />
+<h3><a name="tag-B.12">[B.12] How do I use ICC timestamp or FICS timeseal
+with XBoard?</a></h3>
+
+<p>First, get the appropriate version of timestamp or timeseal for your
+machine from ftp.chessclub.com or ftp.freechess.org.
+Second, be sure that you can connect using XBoard <I>without</I>
+timestamp/timeseal.  Third, be sure that you can connect using
+timestamp/timeseal without XBoard.  See the help files on ICC and FICS
+or ask people online if you have problems.</p>
+
+<p>If you are in a completely ordinary situation, where your machine
+is directly on the Internet and you can connect to ICC or FICS 
+without timestamp/timeseal using
+just the command "xboard -ics" or "xboard -ics -icshost freechess.org",
+change that command to one of the following:</p>
+
+<pre>
+    xboard -ics -icshost 204.178.125.65 -icshelper timestamp
+
+    xboard -ics -icshost 164.58.253.13 -icshelper timeseal
+</pre>
+
+<p>If you have a firewall between your machine and the ICS, see topic
+<a href="#tag-B.19">[B.19]</a>.</p>
+
+<p>If you normally have to use the "/icscomm" command line option on
+xboard to log into a second machine, and then telnet to ICC or FICS
+from there, you are going to have to run the Unix version of timestamp
+or timeseal on the second machine.  (If the second machine is not
+running Unix, you are out of luck.)  Get the appropriate version of
+timestamp or timeseal onto the shell machine via FTP; see the help
+files on ICC and FICS for instructions.  Then simply run it when you
+would normally run telnet.  In this configuration you are not
+protected against lag between your PC and the shell machine, or for
+lag caused by heavy load on the shell machine itself from other users.</p>
+
+<p>For further information on timestamp and timeseal, see the help
+files on ICC and FICS.</p>
+
+<hr />
+<h3><a name="tag-B.13">[B.13] How do I use ICC timestamp or FICS timeseal
+with WinBoard?</a></h3>
+
+<p>If you select an ICS from either the WinBoard Startup dialog or the
+Windows Start submenu that WinBoard installs, WinBoard automatically
+runs timestamp or timeseal if the ICS you chose is known to support it.</p>
+
+<p>If you are constructing a WinBoard command line by hand, add the
+option "/icshelper timestamp" or "/icshelper timeseal" to the WinBoard
+command line to use timestamp or timeseal.  Both timestamp.exe and
+timeseal.exe are included in the WinBoard distribution.  They both
+function identically to the Unix versions, as documented in "help
+timestamp" on ICC and "help timeseal" on FICS.</p>
+
+<p>If you have a firewall between your machine and the ICS, see topic
+<a href="#tag-B.19">[B.19]</a>.</p>
+
+<p>If you normally have to use the "/icscomm" command line option on
+WinBoard to log into a shell account, and then telnet to ICC or FICS
+from there, you are going to have to run the Unix version of timestamp
+or timeseal on the shell machine.  (If the shell account is not on a
+Unix machine, you are out of luck.)  Get the appropriate version of
+timestamp or timeseal onto the shell machine via FTP; see the help
+files on ICC and FICS for instructions.  Then simply run it when you
+would normally run telnet.  In this configuration you are not protected
+against lag between your PC and the shell machine, or for lag caused by
+heavy load on the shell machine itself from other users.</p>
+
+<p>For further information on timestamp and timeseal, see the help
+files on ICC and FICS.</p>
+
+<hr />
+<h3><a name="tag-B.14">[B.14] How do I play bughouse with XBoard or WinBoard?
+</a></h3>
+
+<p>XBoard and WinBoard have full bughouse support.
+Offboard piece holdings are shown next to the board, and
+you drop offboard pieces by dragging them with the mouse 
+(holding the left button down) to their drop square,
+or left-click the piece and the drop square, just like when you enter
+any ordinary move.</p>
+
+<p>XBoard and WinBoard can display only one board at a time, but you
+can observe your partner's game by running a second copy of the
+program and logging in as a guest.  (Unfortunately, this is not
+possible if you are using the /icscomm option.)  To observe your
+partner's games automatically, use the "follow" or "pfollow" ICS
+command; see the ICS online help for details.</p>
+
+<hr />
+<h3><a name="tag-B.16">[B.16] What is Zippy?  How can I interface a 
+chess program to the Internet Chess Servers?</a></h3>
+
+<p>Zippy is an interface that lets a compatible chess engine (such as GNU
+Chess or Crafty) act as a computer
+player on an Internet Chess Server.  Zippy is included in both the
+XBoard and WinBoard distributions.  It is implemented as a small
+amount of additional code within XBoard or WinBoard.  
+For documentation, see the file
+zippy.README, included in both distributions or available
+from my chess Web page,
+<a href=
+"http://www.tim-mann.org/chess.html"
+>http://www.tim-mann/chess.html</a>.
+The version of zippy.README on my Web page is often more up-to-date
+than those in the XBoard/WinBoard distributions.
+You'll also find a "biography" of Zippy and pointers to the original
+Zippy the Pinhead comic strips on my Web page.
+Please read zippy.README carefully before you ask me any questions about Zippy.</p>
+
+<p>Using a computer to choose your moves on a chess server is
+considered cheating unless your account is on the computer (C) list.
+Read "help computer" on your favorite server for details on their
+policy.  Most of the servers have plenty of computers running now, so they
+will not be excited about having you run a new one unless you have
+written your own chess engine.  They don't really need yet another 
+Crafty or GNU Chess clone.</p>
+
+<hr />
+<h3><a name="tag-B.17">[B.17] How can I interface my own chess program
+to XBoard or WinBoard?</a></h3>
+
+<p>This is a non-trivial task.  XBoard and WinBoard were not designed
+with a clean interface for talking to chess programs; they were
+written to work with an existing version of GNU Chess that expects to
+be talking to a person.  Your program has to emulate GNU Chess's
+rather idiosyncratic command structure to work with XBoard and
+WinBoard.  We are gradually cleaning up, improving, and documenting
+the interface as newer versions of XBoard and WinBoard come out,
+however.</p>
+
+<p>For documentation, see the file engine-intf.html, included in both
+distributions or available from my chess Web page, <a href=
+"http://www.tim-mann.org/chess.html"
+>http://www.tim-mann.org/chess.html</a>.
+The version of engine-intf.html on my Web page is often more up-to-date
+than those in the XBoard/WinBoard distributions.</p>
+
+<hr />
+<h3><a name="tag-B.18">[B.18] How can I recompile WinBoard from source?</a></h3>
+
+<p>The source code for WinBoard is available from the author's Web page,
+<a href=
+"http://www.tim-mann.org/chess.html"
+>http://www.tim-mann.org/chess.html</a>.</p>
+
+<p>WinBoard is currently developed using Microsoft Visual C++ 5.0.
+You can build the program from the MSVC++ GUI by opening the project
+file (winboard.dsp) and telling MSVC++ to build the project.  You can
+also build it from the the command line by using the nmake program
+supplied with MSVC++.</p>
+
+<p>To build WinBoard with the free Cygwin tools, available from <a
+href= "http://www.cygwin.com/" >http://www.cygwin.com/</a>), use the
+command "make -f cygwin.mak".  WinBoard 4.2.5 was successfully
+compiled with the net release of Cygwin as downloaded on 20-March-2001
+(cygwin1.dll 1.1.8, gcc 2.95.2-6, binutils 20001221-1, flex 2.5.4-1),
+but exhibits a command-line parsing bug; see item 511 in the ToDo file
+that comes with WinBoard.  WinBoard 4.1.0 does not compile with
+Cygwin.  WinBoard 4.0.7 is known to compile with Cygwin BL20.1.</p>
+
+<p>To build WinBoard with Borland C++ 4.5, use "borland.mak", supplied
+with the WinBoard sources, as the Makefile.  Support for Borland C++
+was contributed by Don Fong and has not been tested by the author of WinBoard.</p>
+
+<p>WinBoard is a Win32 application, so you definitely need a compiler
+and tool set that supports Win32.  In particular, older versions of
+DJGPP can build only 32-bit MSDOS programs; that is, programs that use
+a DOS extender to get a 32-bit address space and do not make any
+Windows calls.  The latest versions of DJGPP are said to be able to 
+build Win32 programs when used with the proper extension package(s),
+but this is not known to work with WinBoard.  Use Cygwin instead.</p>
+
+<p>See also topic <a href="#tag-C.16">[C.16]</a>.</p>
+
+<hr />
+<h3><a name="tag-B.19">[B.19] 
+How can I use XBoard or WinBoard to talk
+to an Internet Chess Server through a firewall or proxy?
+</a></h3>
+
+<p>There is no single answer to this question, because there are many
+different kinds of firewalls in use.  They work in various different
+ways and have various different security policies.  This answer can
+only provide hints.</p>
+
+<p>Note that you can't access Internet Chess Servers through a Web proxy,
+because they are not a Web service.  You talk to them through a raw
+TCP connection, not an HTTP connection.  If you can only access the
+Web through a proxy, there may be a firewall that stops you from
+making direct TCP connections, but there may also be a way through it.
+Read on for hints, and contact your local system administrator if you
+need more information about your local configuration.</p>
+
+<p>A helpful user mailed me the following explanation of how to use
+WinBoard with WinGate:</p>
+<blockquote>
+"I have managed to setup WinBoard though my WinGate proxy.  I have the
+Office version.  What I needed to do was to setup the TCP/IP
+connection to add the User/Host name and my provider service name for
+the DNS, but I had to leave the HOST IP address blank.  I have not
+played with all the variations, so it may be just that I have the DNS
+lookup enabled."
+</blockquote>
+<p>I hope this helps, though I don't find it very clear.  I don't have
+a copy of WinGate myself and can't help if you have questions about it.</p>
+
+<p>If you are using some other non-SOCKS firewall, read the FIREWALLS section
+in your XBoard or WinBoard documentation (man page, info document, or
+Help file).  If you can telnet to a chess server in some way, then you
+can almost certainly connect to it with xboard/WinBoard, though in
+some cases you may not be able to run timestamp or timeseal.  The
+timestamp and timeseal protocols require a clean, 8-bit wide TCP
+connection from your machine to the ICS, which some firewalls do not
+provide.</p>
+
+<p>If you have a SOCKS firewall and are using <strong>XBoard</strong>,
+you should be able to SOCKSify xboard and use it.  See <a
+href="http://www.socks.nec.com/">http://www.socks.nec.com/</a> for
+information about SOCKS and socksification.  However, if you do this,
+you can't use timestamp or timeseal; what you really need is a
+socksified version of timestamp or timeseal.  This is hard because the
+source code for timestamp and timeseal is proprietary; the folks
+running the chess servers don't give it out because that would make it
+too easy to cheat.  On some versions of Unix, you may be able to
+socksify a program that you don't have the source code to by running
+it with an appropriate dynamic library; see <a
+href="http://www.socks.nec.com/">http://www.socks.nec.com/</a>.  For
+others, you might be able to get a pre-built socksified version from
+the chess server administrators.  For timeseal versions, see <a
+href="ftp://ftp.freechess.org/pub/chess/timeseal/"
+>ftp://ftp.freechess.org/pub/chess/timeseal/</a>.  For timestamp
+versions, the directory would be <a
+href="ftp://ftp.chessclub.com/pub/icc/timestamp/"
+>ftp://ftp.chessclub.com/pub/icc/timestamp/</a>, but at this writing
+there don't seem to be any socksified timestamps there.  Once you have
+a socksified timestamp or timeseal, simply run it with a normal,
+non-socksified xboard in place of the standard timestamp or timeseal.</p>
+
+<p>If you have a SOCKS firewall and you are using
+<strong>WinBoard</strong>, we now know how to make this configuration
+work, complete with timestamp or timeseal!</p>
+
+<p>Start by getting SocksCap32.  This software is freely available
+from <a href="http://www.socks.nec.com/">http://www.socks.nec.com/</a>.
+Install it on your machine, read the documentation, and learn to use
+it.  You may find it useful with many other programs besides WinBoard.</p>
+
+<p>Next, <strong>don't</strong> socksify WinBoard.  Socksifying
+WinBoard itself doesn't let you use it with timestamp or timeseal.
+For some reason I don't understand -- something strange that
+SocksCap32 does -- the socksified WinBoard runs but does nothing, and
+timestamp/timeseal runs all by itself in its own window.</p>
+
+<p>Instead, use the following workaround.  Follow the instructions
+exactly; don't try to skip steps or simplify things.</p>
+
+<p>First, make SocksCap32 application profiles for timestamp and
+timeseal.  Use the following command lines in the SocksCap32
+profiles. Name the first profile "timestamp" and the second
+"timeseal".</p>
+
+<pre>
+    "c:\program files\winboard\timestamp.exe" chessclub.com 5000 -p 5000
+    "c:\program files\winboard\timeseal.exe" freechess.org 5000 -p 5000
+</pre>
+
+<p>Second, run timestamp or timeseal by itself, socksified, using its
+profile.  This will open an unneeded, black window that will not
+respond to typing.  Minimize it to the task bar and ignore it. It will
+go away when you exit from WinBoard.</p>
+  
+<p>Next, run WinBoard using the following command line.  Make a shortcut
+or type this command into an MS-DOS Prompt box.  Don't run WinBoard
+itself socksified, just run it directly.</p>
+
+<pre>
+    "c:\program files\winboard.exe" /ics /icshost=localhost /icsport=5000
+</pre>
+
+<p>After you get this working, you can try getting the timestamp window to
+auto-minimize by starting it from a shortcut instead of from the
+SocksCap32 control window. As it says in the SocksCap32 help file, put
+the following in the Target field of a shortcut's Properties page:</p>
+
+<pre>
+    "c:\program files\sockscap32\sc32.exe" timestamp
+</pre>
+
+<p>Then select "Run: Minimized" on the same page.  Do the same for timeseal.</p>
+
+<p>Another method that can work is to use a .bat file to start both
+timestamp and WinBoard.  It would look something like this:</p>
+
+<pre>
+    REM --
+    REM -- icc.bat
+    REM -- Start timestamp under SocksCap32 and use WinBoard to connect to it.
+    REM -- The string "timestamp" refers to a SocksCap32 profile for timestamp.
+    REM --  Do not change it to the filename of the timestamp program!
+    REM --
+    start /minimized "c:\program files\sockscap32\sc32.exe" timestamp
+    cd "c:\program files\winboard"
+    winboard /ics /icshost=localhost /icsport=5000
+</pre>
+
+<p>This workaround has a problem if you want to run two copies of
+WinBoard at once, talking to the same chess server twice (for
+bughouse) or to two different chess servers. If you need to do that,
+you will need to run a separate copy of timestamp with <i>a different
+port number</i> for each connection.  You'll need to make a second set of
+profile entries with a different value after the -p flag (say, 5001)
+and you'll need to change the WinBoard command line /icsport=5000 for
+the second WinBoard to match.</p>
+
+<hr />
+<h3><a name="tag-B.20">[B.20] 
+How can I use XBoard or WinBoard on chess.net with accuclock?
+</a></h3>
+
+<p>I believe chess.net provides a Win32 command-line version of
+accuclock that will work with WinBoard.  Please see the documentation
+on the chess.net server itself; don't ask the author of WinBoard.</p>
+
+<p>I don't know whether chess.net provides versions of accuclock for
+Unix at this time.  Ask them.</p>
+
+<hr />
+<h3><a name="tag-B.21">[B.21]
+  Can I get Zippy to do one or more ICS commands automatically at the 
+  start or end of each game?</a></h3>
+
+<p>By default, Zippy automatically sends the command "gameend" to ICS
+at the end of each game.  You can alias this command (using the ICS
+"alias" feature) to anything you want.  On ICC, you can use the
+"multi" feature to alias gameend to several commands, but other
+servers don't have that feature.  Zippy doesn't send anything at the
+start of the game by default.</p>
+
+<p>You can get Zippy to send one or more commands of your choosing, at
+the start and/or end of each game, by using the -zippyGameStart and
+-zippyGameEnd command line options, newly added in version 4.0.3.
+Both xboard and WinBoard have (somewhat obscure) ways of getting
+newlines into this option to send several commands.  Here is an
+example of one way to do it for each.</p>
+
+<pre>
+    xboard -ics -zp -xrm '*zippyGameStart: say hi\nsay prepare to die\n'
+
+    WinBoard /ics /zp /zippyGameEnd='say thanks\nseek 5 0\nseek 2 12\n'
+</pre>
+
+<hr />
+<h3><a name="tag-B.22">[B.22]
+  How do I print from WinBoard?
+</a></h3>
+
+<p>WinBoard does not have built-in printing functionality.
+If you want to print a picture of the board, press Alt+PrintScrn, run the
+standard Windows application Paintbrush, select Paste, and print from there.
+If you want to print a list of moves, save your game as a PGN file,
+then open the PGN file with Notepad or any other plain text editor and
+print it from there.</p>
+
+<hr />
+<h3><a name="tag-B.23">[B.23]
+  Can I get Zippy to automatically reconnect to ICS when its connection 
+  breaks?</a></h3>
+
+<p>There isn't a perfect solution to this problem yet, but a pretty
+good one is to write a shell script (for xboard) or .bat script (for
+WinBoard) that automatically restarts the program whenever it exits.
+Use the -xexit flag so that you don't get a popup dialog that must be
+dismissed with the OK button before the program will exit.  The gap in
+this solution is that your connection to ICS can sometimes get into a
+state where the program does not notice that the connection is broken
+until the next time it tries to send a command.  Perhaps some future
+version of xboard/WinBoard will have an option to send a harmless
+command every five minutes or so.</p>
+
+<p>Anyway, here is a sample Windows .bat file that restarts WinBoard each
+time it exits.  Thanks to Jason Williamson.  It assumes that you have put
+your computer account's name and password in a file named logon.ini.</p>
+
+<pre>
+REM --
+REM -- wbrecon.bat
+REM -- Start WinBoard in Zippy mode, and restart it each time it exits.
+REM -- Add or change parameters as needed for your application.
+REM --
+:loop
+start /w winboard /zp /ics /icslogon logon.ini /xexit /xautoraise
+REM -- The next line is to have a short delay setup for 139 seconds.
+REM -- Leave it out if it doesn't work on the version of Windows you use.
+TYPE NUL | CHOICE.COM /N /CY /TY,99 &gt;NUL
+goto loop
+</pre>
+
+<p>Here is a Unix shell script to do the same thing for xboard.
+It's a bit more elaborate.  It is based on the script I use for the
+original Zippy.  It logs all ICS output to a file named zippy.out,
+and it lets you type commands to Zippy by running "cat &gt; zippy.fifo".</p>
+
+<pre>
+#! /bin/sh
+host="204.178.125.65 -icsport 5000 -telnet -telnetProgram timestamp"
+#host="164.58.253.13 -icsport 5000 -telnet -telnetProgram timeseal"
+out=zippy.out
+fifo=zippy.fifo
+ZIPPYPASSWORD='something'
+export ZIPPYPASSWORD
+ZIPPYPASSWORD2='orother'
+export ZIPPYPASSWORD2
+ZIPPYLINES=`pwd`/all.lines
+export ZIPPYLINES
+ZIPPYGAMEEND='say Yow, that was FUN!
+gameend'
+export ZIPPYGAMEEND
+zippylogon=`pwd`/logon.ini
+DISPLAY=`hostname`:0.0
+export DISPLAY
+mv -f $out ${out}.old
+rm -f $fifo
+mkfifo $fifo
+pid=$$
+( while [ true ] ; do cat -u $fifo ; done ) | \
+      ( while [ true ] ; do
+          xboard -iconic -ics -icshost $host \
+                 -zt -zp -xbell -xanimate \
+                 -xautosave -xquiet -fcp "gnuchessx -h" \
+                 -icslogon $zippylogon -xexit -autoflag -xautoraise $*
+          sleep 600
+        done ) &gt; $out 2&gt;&amp;1 &amp;
+</pre>
+
+<hr />
+<h3><a name="tag-B.24">[B.24]
+  The chess engines are too strong and always beat me.  How can I adjust
+  the difficulty level to make them weaker?</a></h3>
+
+<p>The best way is to get a weaker chess engine.
+On the <a href="http://www.open-aurec.com/chesswar">ChessWar</a> website
+you will find a rating list of virtually all engines that are able to
+play under XBoard/WinBoard, from super-humanly strong to ridculously weak.
+Most of them can be downloaded for free from the internet.</p>
+
+<p>A way to get that effect is to limit the time the engine can use for
+deciding on its move. The time-odds options or menu items in the 
+time-control dialog) can be used to this end. This is only of limited 
+help, as engines do not weeken that much at faster time-control,
+and there is a practical limit to how fast you can order the engine
+to go. Also feel free to use Retract Move if
+you make a blunder. </p>
+
+<p>Many chess coaches will let you switch sides after
+they get a stronger position so that you can get experience playing
+positions where you are winning.  You can try this with XBoard/WinBoard
+by using the Machine White or Machine Black menu command to make the
+machine take over your position.</p>
+
+<p>The -depth command-line option to XBoard/WinBoard can also be used to
+weaken the engine (see the man page or Help file).  It's a bit of a
+nuisance to set command line options in Windows, but see topic <a
+href="#tag-C.7">[C.7]</a> for instructions.</p>
+
+<p>Other ways of weakening engines are engine-specific.  Many of them
+let you adjust various parameters, and if you choose bad settings, the
+engine will play more poorly.  Consult whatever documentation came with
+the engine you are using.</p>
+
+<hr />
+<h3><a name="tag-B.25">[B.25]
+  May I use the piece bitmaps from XBoard/WinBoard in my own program?</a></h3>
+
+<p>The piece bitmaps used in XBoard and WinBoard were designed by
+Elmar Bartel.  He released them under the <a
+href="http://www.gnu.org/copyleft/gpl.html">GNU General Public
+License</a>.  This means that if your program is also free software
+distributed under the GPL, you can use them freely.  If your program
+is distributed under some other license, including commercial,
+shareware, or non-GPL freeware, then you cannot use the bitmaps unless
+you obtain special permission from Elmar.  See the file README.bitmaps
+that comes with the XBoard and WinBoard source code for more
+information and an email address you can write to.</p>
+
+<hr /><h2><a name="tag-C">[C] XBoard and WinBoard, bugs and problems</a></h2>
+
+<hr /><h3><a name="tag-C.1">[C.1] I can't build XBoard
+because the X11/Xaw/...  include files are not found.</a></h3>
+
+<p>These are the header files for the Athena Widgets library, which XBoard uses
+heavily.  Some versions of Unix don't supply these files, but they are part of
+the standard X distribution, freely available from MIT.  </p>
+
+<p>For general information on getting missing X sources, see the FAQ on
+comp.windows.x.  Note that you may be missing only the header files, or you
+may be missing the libraries themselves too.</p>
+
+<p>HP-UX users are missing only the header files.  You can get them by
+anonymous FTP as follows.  (But first check with your system
+administrator to see if someone else at your site has already done
+this.)  Get the archive file /hpux9/X11R5/Core/Xaw-5.00.tar.gz (Xaw
+header files) via anonymous FTP from the site hpux.csc.liv.ac.uk
+(138.253.42.172), or one of the other official sites---Germany:
+hpux.ask.uni-karlsruhe.de (129.13.200.57), US: hpux.cae.wisc.edu
+(144.92.4.15), France: hpux.cict.fr (192.70.79.53) or Netherlands:
+hpux.ced.tudelft.nl (130.161.140.100). Unpack the archive using gzip
+and follow the instructions in its README and/or HPUX.Install files.
+Thanks to Richard Lloyd for this information.</p>
+
+<p>If you have the Xaw header files installed in a different place
+than the other X11 headers, you may need to configure XBoard with an
+extra flag to help it find them.  For example, if yours are in
+/foo/bar/X11/Xaw, try this:</p>
+
+<pre>
+    rm config.cache
+    (setenv CFLAGS -I/foo/bar ; configure)
+</pre>
+
+<p>Also see topic <a href="#tag-C.2">[C.2]</a>.</p>
+
+<hr />
+<h3><a name="tag-C.2">[C.2] Configuring or building XBoard fails due to
+missing header files, missing libraries, or undefined symbols.
+</a></h3>
+
+<p>Perhaps you have the X server and client programs installed on your
+machine, but not the X header files and link-time libraries.  If so,
+you can run existing X programs, but you cannot compile a new X
+program from source code.  In this case the XBoard configure script
+will fail and will tell you to look at this question in the FAQ.  Many
+GNU/Linux distributions put the headers and libraries in a separate
+package, which you might not have installed.  If you are using RedHat,
+install the XFree86-devel package.  If you are using some other
+kind of Unix, ask your system administrator where to find the X header
+files and link-time libraries.  If this is not your problem, read on.</p>
+
+<p>The configure script for XBoard looks for X libraries and header
+files in some common places.  Sometimes it fails: If yours are
+installed in an odd place, it may not find them at all.  If you have
+more than one version of X installed on your system, it may find the
+"wrong" one, or occasionally it may find libraries from one version
+and incompatible header files from another.  You can work around these
+problems by telling the configure script where the files are.  For
+example:</p>
+
+<pre>
+    configure --x-includes=/odd/place/include \
+              --x-libraries=/odd/place/lib
+</pre>
+
+<p>The directory named in the argument to --x-includes must have a
+subdirectory "X11" that contains the actual .h files.  That is, if
+your X.h file has full pathname /odd/place/X11R6/include/X11/X.h, then
+you must give the argument --x-includes=/odd/place/X11R6/include.</p>
+
+<p>Some linkers have bugs that cause bogus error messages when you try
+to link X programs.  The configure script includes a workaround for a
+bug of this kind that exists in some SunOS 4.x.x installations.  See
+the FAQ on comp.windows.x for more information about problems of this
+kind.</p>
+
+<p>If all else fails, check whether anyone else at your site has been able to
+compile any X programs on your system.  Your X installation might be buggy.
+If so, the system administrator at your site might know how to fix or work
+around the problem.</p>
+
+<p>Also see topic <a href="#tag-C.1">[C.1]</a>.</p>
+
+<hr /><h3><a name="tag-C.3">[C.3] I have problems using WinBoard on ICS
+with a modem.  I'm not running SLIP or PPP, but just dialing in to an
+ordinary login account ("shell account").</a></h3>
+
+<p>Here are solutions to some common problems in this area.</p>
+
+<p>Some people want to connect to ICS through HyperTerminal or some other
+terminal program first, then run WinBoard.  This is not how it works.
+WinBoard wants to talk directly with your modem, acting as a terminal program
+itself.  Start out with the modem "on hook" (not making a call).</p>
+
+<p>Run WinBoard with a command line like this (adding more options if desired):</p>
+
+<pre>
+    WinBoard /ics /icscom com1
+</pre>
+
+<p>Use com2, com3, or com4 in place of com1 if your modem is connected to one of those ports.</p>
+
+<p>After you start WinBoard, you may need to change some of the options in the
+Communications dialog (on the Options menu).  The dialog has the usual options
+for talking to modems: bits per second, bits per byte, parity, number of stop
+bits.  You will probably want to use Save Settings Now when you're done.</p>
+
+<p>Next, type dialing commands to your modem in the text window that WinBoard
+creates.  You may need to turn off Local Line Editing on the Options menu
+while you are typing commands to your modem.  Turn it back on when you're
+done.  See the WinBoard Help file for instructions if you see your typing
+echoed an extra time after you hit Enter.</p>
+
+<hr />
+<h3><a name="tag-C.4">[C.4]
+I have problems using WinBoard on ICS with Windows 95 and SLIP
+or PPP.  When trying to start up, it gets the error "Address family
+not supported by protocol family" (or some equally strange message).
+</a></h3>
+
+<p>WinBoard is a 32-bit application, but some Winsock (TCP/IP) implementations
+support only 16-bit applications.  You get a strange looking error message
+if you try to use a 32-bit application because
+there is no standard Winsock error code number
+for "32-bit application not supported."</p>
+
+<p>Microsoft TCP/IP works with both 16-bit and
+32-bit applications, supports SLIP, PPP, Ethernet, etc., and is included
+with Windows 95 and later Windows systems.
+If possible, I recommend that you uninstall
+whatever Winsock you are using and install Microsoft TCP/IP instead.
+For more information, see
+<a href=
+"http://walden.mo.net/~rymabry/95winfaq.html"
+>http://walden.mo.net/~rymabry/95winfaq.html (the Win95-L FAQ)</a>.</p>
+
+<p>Trumpet Winsock 2.1 (and earlier) supports only 16-bit
+applications, and hence does not work with WinBoard.  But there is a
+beta-test release available that does support 32-bit applications.  
+I have not tried it with WinBoard, but it 
+should work.  See Trumpet's Web page
+<a href=
+"http://www.trumpet.com.au/wsk/winsock.htm"
+>http://www.trumpet.com.au/wsk/winsock.htm</a>
+for more information.</p>
+
+<p>The 16-bit versions of America On-Line's software do not support
+32-bit Winsock applications.  Get the 32-bit version.  At one time the
+32-bit version was called "AOL for Windows 95," but I imagine that has
+changed.  Hopefully the current versions are all 32-bit.</p>
+
+<p>A few versions of Winsock may have bugs that prevent
+Windows timestamp/timeseal from working with them.  I'm not sure if
+such bugs exist in any versions that actually have 32-bit support,
+so this point might be moot.  Again, Microsoft TCP/IP is known to work.</p>
+
+<hr />
+<h3><a name="tag-C.5">[C.5] When I try to run WinBoard, I get the
+message "Failed to start chess program gnuchess on localhost: NO
+LANGFILE (file gnuchess.lan not found)".</a></h3>
+
+<p>This message means that WinBoard is trying to run GNU Chess, but
+GNU Chess cannot find a file that it needs, named gnuchess.lan.
+If you see it, you've probably customized WinBoard's /fcp, /fd, /scp,
+and/or /sd options and made a mistake in the process.  Review what
+you did, and see the WinBoard help file.</p>
+
+<hr />
+<h3><a name="tag-C.6">[C.6] I want to use XBoard or WinBoard as an Internet
+Chess Server interface, but the ICS Client option is grayed out on the
+menu.</a></h3> 
+
+<p>XBoard and WinBoard have three major modes that can't be changed from the
+menus: local chess engine mode,
+ICS mode, and standalone mode.</p>
+
+<p>With XBoard, you have to set the mode using command-line options.
+Local chess engine mode is the default, -ics selects ICS mode, and
+-ncp ("no chess program") selects standalone mode.</p>
+
+<p>With WinBoard, if you don't set the mode using command-line
+options, you get a dialog box asking which mode you want.  To bypass
+the dialog box, use -cp ("chess program") for local chess engine mode,
+or -ics or -ncp as with XBoard.  Also see topic <a href="#tag-C.7">[C.7]</a>.</p>
+
+<hr />
+<h3><a name="tag-C.7">[C.7] How do I give command-line options to
+a Windows program like WinBoard?</a></h3>
+
+<p>There are many ways; pick your favorite:</p>
+
+<ul>
+<li>Type the command line into an MS-DOS Prompt box.  Example:
+"WinBoard -ics".</li>
+
+<li>Make a Windows shortcut for WinBoard.  You can do this by
+right-dragging WinBoard.exe to the desktop and selecting "Create
+Shortcut(s) Here" from the menu that appears.  Right-click on the
+shortcut, select Properties, and click the Shortcut tab.  The
+command-line text box is labelled "Target" instead of "Command line"
+just to confuse you.  Edit the text in this box, adding the command
+line options to the end.</li>
+
+<li>Choose Run from the Start menu, or File / Run from the Program
+Manager or File Manager, and type the command line into the dialog you
+get.  You may have to give WinBoard's full drivespec and filename if
+it is not in a directory on your search path.</li>
+
+<li>Make a Program Manager icon for WinBoard.  You can do this by
+dragging WinBoard.exe from the File Manager into the Program Manager,
+or by using File / New in the Program Manager.  Select the icon and
+choose File / Properties.  Edit the Command Line text box to add the
+command-line options to the end.</li>
+</ul>
+
+<hr />
+<h3><a name="tag-C.9">[C.9]
+When I exit from WinBoard after using it to play against a chess
+program on my machine, the chess program keeps running in the background.
+</a></h3>
+
+<p>Be sure you have the current versions of WinBoard and the chess
+engine you are using.  WinBoard 3.4.1 and earlier had a bug that
+caused this problem to occur with all chess engines.  A buggy chess
+engine that does not respond to the "quit" command will also cause
+this.</p>
+
+<p>If you still see this problem, you can stop the rogue chess engine
+by pressing Ctrl+Alt+Del, selecting the chess engine process from the
+menu, and pressing the End Task button.</p>
+
+<hr />
+<h3><a name="tag-C.12">[C.12]
+Why do my ICS 
+opponents often get extra time after they make their moves?
+Why do I sometimes lose time off my clock after I make my move?
+</a></h3>
+
+<p>If you are playing with the ICS incremental clock, both you and your
+opponent get a set amount of extra time after each move.</p>
+
+<p>If your or your opponent has netlag, your opponent might appear to
+get extra time, especially if your opponent is using timestamp or
+timeseal.  The ICS charges each player who is using timestamp or
+timeseal only for the time between when the player received his
+opponent's move and the time he sent his own move.  Thus delays in
+network transmission do not count against either player.  But WinBoard
+counts down the display of your opponent's clock on your screen under
+the assumption that there is no netlag.  When his move comes in, if
+there was netlag, the ICS may not have really charged him for that
+much time, and WinBoard corrects the clock to what the ICS says it
+should read.</p>
+
+<p>If you are not using timestamp or timeseal, you may appear to lose
+time off your clock at some point after you make your move.  In this
+case, the ICS charges you for the time between when it sent you your
+opponent's move and the time it received your move.  Thus delays in
+network transmission count against you.  WinBoard stops counting down
+the display of your clock on your screen (and starts your opponent's)
+when you make your move.  When the ICS echoes your move back to you, it
+may have charged you for more time than that, and WinBoard corrects
+the clocks to what the ICS says they should read.</p>
+
+<p>See "help lag" and "help timestamp" or "help timeseal" on your ICS for
+more detailed information.</p>
+
+<hr />
+<h3><a name="tag-C.13">[C.13]
+I can't run WinBoard unless I delete the WinBoard.ini file each time!
+</a></h3>
+
+<p>Most people don't have this problem, but two or three people using
+Windows NT 4.0 with Service Pack 3 or 4 have reported it.  I have no
+idea what causes this problem.  Contrary to what was reported in a
+previous version of this FAQ, reinstalling the service pack after
+installing WinBoard does not seem to solve the problem.</p>
+
+<hr />
+<h3><a name="tag-C.15">[C.15]
+I get errors compiling XBoard's parser.c.
+</a></h3>
+
+<p>The file parser.c is automatically generated from parser.l.  The
+copy included with XBoard 4.0.2 was generated by lex on Tru64 Unix and
+has problems compiling and linking on current GNU/Linux versions.  The
+copy included with XBoard 4.0.3 was generated by flex on a GNU/Linux
+machine, but it too won't necessarily work on other versions of Unix.
+If you have this problem, you can fix it by deleting parser.c and
+letting the Makefile re-create it from parser.l.  This will work if
+you have either lex or flex on your system.  Flex is available in all
+GNU/Linux distributions and can be obtained at no charge from the Free
+Software Foundation, www.fsf.org.</p>
+
+<hr />
+<h3><a name="tag-C.16">[C.16]
+I get an error building WinBoard from source because "flex" is not found.
+</a></h3>
+
+<p>The file parser.c is automatically generated from parser.l.  The
+Makefile included with the WinBoard source kit has a rule for
+generating parser.c using the program "flex", which will fail if you
+don't have flex.  However, the source kit also includes a ready-made
+copy of parser.c, so you don't really need flex unless you have made
+changes to parser.l.  Check that you still have a copy of parser.c; if
+you don't, unpack the WinBoard source zip file again to get one.
+Either set the last-modified time of parser.c to be later than that of
+parser.l, delete parser.l, or comment out the Makefile rule for
+building parser.c from parser.l, and then try building WinBoard again.</p>
+
+<p>If you do want to change parser.l and rebuild parser.c, you can get
+flex as part of the free Cygwin kit from 
+<a href="http://sourceware.cygnus.com/cygwin/"
+>http://sourceware.cygnus.com/cygwin/</a>.  You can
+probably also get flex for Windows by itself from various other places
+around the Internet.  It is free software distributed by the Free
+Software Foundation, www.fsf.org.</p>
+
+<hr />
+<h3><a name="tag-C.17">[C.17]
+  XBoard hangs shortly after connecting to an ICS when used with dxterm,
+ cmdtool, dtterm, kterm, konsole, or other substitutes for xterm.
+</a></h3>
+
+<p>After connecting to a chess server, XBoard 4.0.2 and later sends an
+escape sequence to its terminal that is meant to display your handle
+and the ICS host name (for example, 
+"user<a name="nospam03">&#x40;</a>chessclub.com") in the
+terminal's banner and icon.  It seems that several of the alternative
+X terminal programs have a bug that makes them hang when sent this
+escape sequence.</p>
+
+<p>You can work
+around the problem by using xterm, nxterm, rxvt, aterm, xiterm, or
+gnome-terminal, all of which seem to work fine.  In fact, current
+versions of kterm and konsole seem to work fine too, so if you are
+having problems with one of them, be sure you are not running an
+outdated version.  </p>
+
+<p>Alternatively, you can disable this feature by commenting out the
+body of DisplayIcsInteractionTitle in xboard.c and recompling xboard.</p>
+
+<hr />
+<h3><a name="tag-C.18">[C.18]
+  The WinBoard pieces show up in the wrong colors, appear distorted,
+  or are not visible at all.
+</a></h3>
+
+<p>This can happen if you have a bug in your Windows display driver.
+Check with the manufacturer of your display card, the manufacturer of
+your computer, or Microsoft to see if there is an updated driver
+available.  You can usually download updated drivers from the Web.</p>
+
+<p>If you can't find an updated driver, you can try running Windows
+using a different number of colors and/or disabling some of the
+hardware acceleration features on your display card.  To change the
+number of colors, go to Windows Start / Settings / Control Panel /
+Display / Settings / Color Palette.  To disable hardware acceleration
+features, go to Windows Start / Settings / Control Panel / Display /
+Settings / Advanced Properties / Performance / Hardware Acceleration.</p>
+
+<p>It's also possible that Windows has the right driver for your
+hardware already but you are not using it.  It may help to reinstall
+your driver.  Go to Windows Start / Settings / Control Panel / System
+and delete your display card (maybe even your monitor too), then
+reboot.  Windows should automatically re-detect your card and monitor
+and re-install the drivers; if it doesn't, run Start / Settings /
+Control Panel / Add New Hardware to force it to.</p>
+
+<p>If all else fails, try Monochrome mode.  On WinBoard's menus, go
+to Options / Color and check Monochrome.  WinBoard will display in black
+and white.</p>
+
+<hr />
+<h3><a name="tag-C.19">[C.19] XBoard or WinBoard tells me "Error: first chess
+  program (...) exited unexpectedly".</a></h3>
+
+<p>This message means that your chess engine crashed, probably due to
+a bug in the engine, or because you have it configured incorrectly.
+You can try running XBoard or WinBoard again with the "-debug" flag on
+the command line.  This will print out all the messages received from
+the chess engine.  (With WinBoard, the messages go into a file called
+WinBoard.debug; with XBoard, they go to the xterm that you started
+XBoard from.)</p>
+
+<p>If you are using GNU Chess and you see this problem as soon as it
+starts up, most likely GNU Chess is exiting with an error message.  If
+you see the message "NO LANGFILE", it means that you did not install
+GNU Chess correctly, and it is unable to find the file gnuchess.lang.
+Make sure that you defined LIBDIR in the gnuchess Makefile, and that
+gnuchess.lang is in that directory.  If gnuchess.lang is not there,
+you probably didn't type "make install" in the gnuchess src directory;
+you must do this to install gnuchess.lang (and the gnuchess book).  If
+you defined LIBDIR to something that is not an absolute pathname (that
+is, to something that does not start with a "/"), GNU Chess will work
+only if you run it from the GNU Chess "src" directory where you built
+it.</p>
+
+<hr /><h3><a name="tag-C.20">[C.20]
+  XBoard tells me "Warning: Cannot allocate colormap entry", or
+  "too few colors available; trying monochrome mode", or
+  "XPM pieces cannot be used in monochrome mode".
+</a></h3>
+
+<p>You are running your X server with 8-bit color depth, and you are running
+some program that has used up all 256 of your colors.  Netscape tends
+to do this, or maybe you have a background image that uses up all of
+your colors.</p>
+
+<p>If you have a modern machine, you probably have enough display
+memory to run your X server with 16-, 24-, or 32-bit color depth.  If
+you're using "startx" to start the X server, try giving the command as
+"<tt>startx -- -bpp 24</tt>" (or 16, or 32).  On newer X servers you
+may have to use -depth instead of -bpp.  Further details on
+configuring your X server are beyond the scope of this FAQ.</p>
+
+<p>If you must run in 8-bit mode, try the following:
+Avoid background images that use up all your colors.  If you
+run Netscape, try starting it up with the <tt>-install</tt> command-line
+option; this gives Netscape its own private colormap that X will
+switch to when Netscape has the keyboard focus.  </p>
+
+<p>If all else fails, another possibility is to run xboard in
+monochrome (black and white) mode by giving it the <tt>-mono</tt>
+command-line option.  XBoard will try this by itself in some cases.
+Monochrome mode works only with bitmap pieces, not pixmap pieces, so
+trying to use it may give you the error "XPM pieces cannot be used in
+monochrome mode".  To get around this, either use the -bitmapDirectory
+command line option to point XBoard to the directory containing the
+bitmap pieces included with the XBoard source code, or rebuild XBoard
+with pixmap support disabled, using "./configure --disable-xpm ; make
+clean ; make".</p>
+
+<hr /><h3><a name="tag-C.21">[C.21]
+  When I log in to freechess.org, the Enter key doesn't work, and I 
+  have to use Ctrl+J instead.  But when I use WinBoard, Ctrl+J doesn't
+  work either, so I'm stuck.
+</a></h3>
+
+<p>This is a pretty rare problem.  It should only arise if you have to
+reach freechess.org by telnetting (or connecting with WinBoard
+/icsport=23) from a Windows PC to a Unix box, and then telnetting from
+there to freechess.org.  The Enter key should always work when
+connecting directly from your PC to freechess.org.</p>
+
+<p>The best way to get around the problem is to run timeseal on the
+intermediate Unix box instead of telnet.  Get the appropriate version
+of timeseal for your box from ftp.freechess.org and follow the
+directions in the help files on FICS.</p>
+
+<p>If you can't run timeseal for some reason, there are some things
+you can do to make telnet stay in line mode instead of going to
+character mode.  Then the Enter key will work.  First, try "telnet
+freechess.org 5000" instead of "telnet freechess.org."
+If that still doesn't work, then when the Enter key stops working,
+type the following.  Here <tt>&lt;</tt> and <tt>&gt;</tt> surround the
+names of keys.</p>
+
+<pre>
+    &lt;Ctrl+S&gt;&lt;Ctrl+]&gt;mode line&lt;Enter&gt;
+</pre>
+
+<hr /><h3><a name="tag-C.22">[C.22]
+  XBoard says, "Failed to start first chess program gnuchessx
+  on localhost: gnuchessx: No such file or directory."
+</a></h3>
+
+<p>XBoard is looking for GNU Chess 4.0.  If you didn't want to use
+XBoard with GNU Chess, please see topic <a href="#tag-C.6">[C.6]</a>.
+If you did want to use GNU Chess 4.0, be sure you have it installed and
+that it is on your $PATH.  If you wanted to use GNU Chess 5 instead,
+see topic <a href="#tag-D.6">[D.6]</a>.</p>
+
+<hr />
+<h2><a name="tag-D">[D] Crafty and other topics</a></h2>
+<hr />
+<h3><a name="tag-D.1">[D.1] What is XChess?</a></h3>
+
+<p>XChess is an older chessboard program that is no longer supported.  XChess was
+written for X version 10, and you may or may not be able to build and run it
+on an X11 system.</p>
+
+<p>XChess has only one significant feature that is not present in XBoard: Two
+humans can play chess using XChess on different machines, without using the
+Internet Chess Server as an intermediary.  This feature is of interest only if
+you don't have network connectivity to the Internet Chess Server.</p>
+
+<p>Note: There actually have been several different programs called "XChess" in
+circulation at various times.  The above describes one that was associated
+with GNU Chess.</p>
+
+<hr />
+<h3><a name="tag-D.2">[D.2] What is Winsock Chess?</a></h3>
+
+<p>Winsock Chess is a program that lets two people play chess across a
+network.  It runs only under Microsoft Windows.  Some of the code in
+Winsock Chess is derived from GNU Chess, but it is not maintained by
+the GNU Chess team.  You can get a copy from the Internet Chess
+Library; see topic <a href="#tag-A.2">[A.2]</a>.  For more information,
+contact its author, Donald Munro, 
+ccahdm<a name="nospam04">&#x40;</a>beluga.upe.ac.za.</p>
+
+<hr />
+<h3><a name="tag-D.3">[D.3] What is Crafty?</a></h3>
+
+<p>Crafty is a freely-available chess program written by Bob Hyatt.  
+Bob is the main author of the well-known chess program Cray
+Blitz.  Crafty is a very strong program, its code is available, commented
+and fairly readable, and its author is actively working on improvements.</p>
+
+<p>You can download Crafty from <a
+href="ftp://ftp.cis.uab.edu/pub/hyatt/"
+>ftp://ftp.cis.uab.edu/pub/hyatt/</a>.  Start by getting the <a
+href="ftp://ftp.cis.uab.edu/pub/hyatt/read.me" >read.me</a> file and
+reading it.  Among other things, this file contains instructions on
+how to install Crafty as a command-line application on your machine.</p>
+
+<p>There is a Crafty mailing list.
+To subscribe, send email to 
+majordomo<a name="nospam05">&#x40;</a>cis.uab.edu, with 
+"subscribe crafty-list" in the body.</p>
+
+<hr />
+<h3><a name="tag-D.4">[D.4] How do I use Crafty with XBoard?</a></h3>
+
+<p>First, you need to get Crafty and install it as a command-line
+application on your machine.  See topic <a href="#tag-D.3">[D.3]</a>.</p>
+
+<p>To use Crafty with XBoard, give the -fcp
+parameter like this:</p>
+
+<pre>
+    xboard -fcp "./crafty" -fd <I>crafty_directory</I>
+</pre>
+
+<p>Here <I>crafty_directory</I> is the directory where you installed Crafty.
+You can add more xboard options at the end of the command line.</p>
+
+<p>Crafty 15.14 or later is required to work properly with XBoard
+4.0.0 or later.  We generally recommend using the latest versions of
+both XBoard and Crafty.</p>
+
+<hr />
+<h3><a name="tag-D.5">[D.5] How do I use Crafty with WinBoard?</a></h3>
+
+<p>First, you need to get Crafty and install it as a command-line
+application on your machine.  See topic <a href="#tag-D.3">[D.3]</a>.
+It is best to use the latest version of Crafty with the latest version
+of WinBoard to make sure all features are compatible and function
+correctly.  You can install Crafty in any directory you like.</p>
+
+<p>You also need to get WinBoard and install it in the normal way
+using its built-in installer.  You can do that either before or after
+you install Crafty.</p>
+
+<p>After both Crafty and WinBoard are installed separately, follow the
+directions in the WinBoard Help file (included with WinBoard) for
+connecting new chess engines to WinBoard.</p>
+
+<p>If you want to have Crafty act as an automated computer player on a
+chess server, see topic <a href="#tag-B.16">[B.16]</a>.  Before you try
+to get that working, be sure you can play against Crafty locally,
+first without WinBoard, then with it.  Also be sure you can use
+WinBoard to play on the chess server yourself, without having Crafty
+connected to it.  You have to crawl before you can walk!</p>
+
+<hr />
+<h3><a name="tag-D.6">[D.6] How do I use GNU Chess 5 with XBoard?</a></h3>
+
+<p>By default, XBoard still tries to use GNU Chess 4 by running the
+command "gnuchessx".  That's why if you don't have GNU Chess 4, you
+get the error message "Failed to start first chess program gnuchessx
+on localhost: gnuchessx: No such file or directory."</p>
+
+<p>If you have GNU Chess 5, the command should be "gnuchess xboard"
+instead.  To make XBoard use this command, give the -fcp parameter
+like this:</p>
+
+<pre>
+    xboard -fd <I>gnuchess_directory</I> -fcp "./gnuchess xboard" 
+</pre>
+
+<p>Here <I>gnuchess_directory</I> is the directory where you installed
+GNU Chess 5 and its book.  You can add more xboard options at the
+end of the command line.</p>
+
+<hr />
+** End of XBoard/WinBoard FAQ **
+</body></html>
diff --git a/INSTALL b/INSTALL
index 50dbe43..c0f221c 100644
--- a/INSTALL
+++ b/INSTALL
@@ -13,15 +13,11 @@ you can run in the future to recreate the current configuration, a file
 reconfiguring, and a file `config.log' containing compiler output
 (useful mainly for debugging `configure').
 
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
+   The file `configure.ac' is used to create `configure' by a program
+called `autoconf'.  You only need `configure.ac' if you want to change
+it or regenerate `configure' using a newer version of
+`autoconf'. Please use the autogen.sh shell script, which will run all
+the autotools to generate the `configure' script if it is missing.
 
 The simplest way to compile this package is:
 
@@ -137,7 +133,7 @@ need to know the host type.
    If you are building compiler tools for cross-compiling, you can also
 use the `--target=TYPE' option to select the type of system they will
 produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
+system on which you are compiling the package. 
 
 Sharing Defaults
 ================
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..580e36b
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,11 @@
+bin_PROGRAMS = xboard
+xboard_SOURCES = backend.c lists.c pgntags.c xedittags.c xhistory.c zippy.c childio.c moves.c uci.c xengineoutput.c xoptions.c gamelist.c parser.l xboard.c xgamelist.c book.c
+
+AM_CPPFLAGS=-DINFODIR='"$(infodir)"'
+AM_LDFLAGS=-lXt -lm @XAW_LIBS@
+
+info_TEXINFOS = copyright.texi xboard.texi
+man6_MANS = xboard.man 
+
+xboard.man: xboard.texi copyright.texi gpl.texinfo version.texi
+	$(srcdir)/texi2man xboard.texi > xboard.man || (rm -f xboard.man ; false)
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index bb8ec86..0000000
--- a/Makefile.in
+++ /dev/null
@@ -1,248 +0,0 @@
-#
-# Run ./configure to generate a Makefile from Makefile.in
-# See INSTALL for more information
-# $Id: Makefile.in,v 2.7 2003/11/28 18:26:06 mann Exp $
-#
-
-PRODUCT = @PRODUCT@
-VERSION = @VERSION@
-PATCHLEVEL = @PATCHLEVEL@
-
-SHELL = /bin/sh
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-mandir = @mandir@
-man6dir = $(mandir)/man6
-man6ext = .6
-# Yuck; the autoconf generated configure script sets an infodir variable
-# and provides a command-line flag to change it, but the default is 
-# /usr/info instead of /usr/share/info.
-infodir = $(prefix)/share/info
-
-CC = @CC@
-CFLAGS = @CFLAGS@ @CPPFLAGS@ -DINFODIR=\"$(infodir)\"
-ALL_CFLAGS = -I. -I$(srcdir) @X_CFLAGS@ @CONF_CFLAGS@ $(CFLAGS)
-DEFINES = @DEFS@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-LDFLAGS = @LDFLAGS@
-ALL_LDFLAGS = @CONF_LDFLAGS@ $(LDFLAGS)
-LEX = @LEX@
-LEXFLAGS = 
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBS = @X_LIBS@ @XAW_LIBS@ @PRE_XMULIB@ -lXmu @POST_XMULIB@ -lXt -lXext \
-	@X_PRE_LIBS@ -lX11 @X_EXTRA_LIBS@ @LIBS@ -lm
-NROFF = @NROFF@
-NROFFFLAGS = @NROFFFLAGS@
-
-DISTSOURCE = acconfig.h AUTHORS backend.c backend.h backendz.h bitmaps	\
-  ChangeLog ChangeLog.2 childio.c childio.h cmail.in common.h		\
-  config.guess config.h.in config.sub configure configure.in COPYING	\
-  COPYRIGHT copyright.texi engine-intf.html FAQ.html frontend.h		\
-  gamelist.c gpl.texinfo ics-parsing.txt INSTALL install-sh lists.c	\
-  lists.h Makefile.in mkinstalldirs moves.c moves.h NEWS parser.h	\
-  parser.l pgntags.c pixmaps pxboard READ_ME shiphtml sounds texi2man	\
-  ToDo winboard xboard.c xboard.h xboard.texi xboard.texinfo.in		\
-  xedittags.c xedittags.h xgamelist.c xgamelist.h xhistory.c xhistory.h	\
-  zic2xpm.c zic2xpm.man zippy.c zippy.h zippy.lines zippy.README
-
-PSEUDOSOURCE = parser.c xboard.man xboard.info xboard.txt zic2xpm.txt FAQ
-
-DISTDIR = @PRODUCT at -@VERSION at .@PATCHLEVEL@
-
-XBOARDOBJ = parser.o xboard.o backend.o moves.o childio.o gamelist.o \
-	lists.o pgntags.o xgamelist.o xedittags.o xhistory.o @ZIPPY_O@
-
-default: xboard zic2xpm
-
-all: default pseudosource info FAQ html dvi ps
-
-install: installdirs default
-	$(INSTALL_PROGRAM) -s xboard $(bindir)/xboard
-	$(INSTALL_PROGRAM) -s zic2xpm $(bindir)/zic2xpm
-	$(INSTALL_PROGRAM) cmail $(bindir)/cmail
-	$(INSTALL_PROGRAM) $(srcdir)/pxboard $(bindir)/pxboard
-	$(INSTALL_DATA) $(srcdir)/xboard.man $(man6dir)/xboard$(man6ext)
-	$(INSTALL_DATA) $(srcdir)/zic2xpm.man $(man6dir)/zic2xpm$(man6ext)
-	$(INSTALL_DATA) xboard.info $(infodir)/xboard.info
-	-PATH=$$PATH:/sbin:/usr/sbin install-info \
-		$(infodir)/xboard.info $(infodir)/dir
-
-installdirs: mkinstalldirs
-	$(srcdir)/mkinstalldirs $(bindir) $(mandir) $(man6dir) $(infodir)
-
-uninstall:
-	rm -f $(bindir)/xboard $(bindir)/cmail $(bindir)/pxboard
-	rm -f $(bindir)/zic2xpm
-	rm -f $(man6dir)/xboard$(man6ext) $(man6dir)/cmail$(man6ext)
-	rm -f $(man6dir)/zic2xpm$(man6ext)
-	rm -f $(infodir)/xboard.info
-	-PATH=$$PATH:/sbin:/usr/sbin install-info --delete \
-		$(infodir)/xboard.info $(infodir)/dir
-
-clean:
-	rm -f xboard zic2xpm *.o xboard.txt zic2xpm.txt $(LEX_OUTPUT_ROOT).c
-	rm -f xboard*.html xboard.aux* xboard.cp* xboard.dvi xboard.fn*
-	rm -f xboard.ky* xboard.log xboard.pg* xboard.toc xboard.tp*
-	rm -f xboard.vr* xboard.ps
-
-distclean: clean tidy
-	rm -f config.cache config.log config.status Makefile 
-	rm -f config.h stamp-h xboard.texinfo cmail
-	-cd winboard ; make -f cygwin.mak clean
-
-mostlyclean: clean
-
-maintainer-clean: distclean
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
-	rm -f $(PSEUDOSOURCE)
-	-cd winboard ; make -f cygwin.mak maintainer-clean
-
-TAGS:
-	etags *.c *.h
-
-info: xboard.info
-
-xboard.info: xboard.texinfo xboard.texi gpl.texinfo configure.in
-	makeinfo --no-split -I $(srcdir) xboard.texinfo
-
-ps: xboard.ps
-
-xboard.ps: xboard.dvi	
-	dvips -o xboard.ps xboard.dvi
-
-dvi: xboard.dvi
-
-xboard.dvi: xboard.texinfo xboard.texi gpl.texinfo configure.in
-	TEXINPUTS=.:$(srcdir): texi2dvi xboard.texinfo
-
-html: xboard.html
-
-xboard.html: xboard.texinfo xboard.texi gpl.texinfo configure.in
-	texi2html -split_chapter -I $(srcdir) xboard.texinfo
-
-FAQ: FAQ.html
-	lynx -dump -nolist $(srcdir)/FAQ.html > FAQ
-
-pseudosource: $(PSEUDOSOURCE)
-
-dist: distclean
-	if [ -f winboard/WINBOARD.HLP ] ; then mv winboard/WINBOARD.HLP winboard/winboard.hlp ; fi
-	rm -rf $(DISTDIR)
-	mkdir $(DISTDIR)
-	cp -a $(DISTSOURCE) $(DISTDIR)/
-	(cd linux && make pseudosource && \
-                     cp $(PSEUDOSOURCE) -a ../$(DISTDIR)/) || \
-	    cp -a $(PSEUDOSOURCE) $(DISTDIR)/
-	tar cvf - $(DISTDIR) | gzip > $(DISTDIR).tar.gz
-	rm -rf $(DISTDIR)
-
-check: all
-
-.SUFFIXES:
-.SUFFIXES: .c .o .man .txt
-
-.c.o:
-	$(CC) $(DEFINES) $(ALL_CFLAGS) -c $<
-
-.man.txt:
-	$(NROFF) $(NROFFFLAGS) $< | cat -s > $*.txt \
-		|| (rm -f $*.txt ; false)
-
-xboard: $(XBOARDOBJ)
-	$(CC) -o xboard $(ALL_LDFLAGS) $(XBOARDOBJ) $(LIBS)
-
-zic2xpm: zic2xpm.o
-	$(CC) -o zic2xpm zic2xpm.o
-
-parser.c: parser.l
-	$(LEX) $(LEXFLAGS) $(srcdir)/parser.l
-	mv $(LEX_OUTPUT_ROOT).c parser.c
-
-parser.o: parser.c
-
-xboard.man: xboard.texinfo xboard.texi copyright.texi gpl.texinfo
-	$(srcdir)/texi2man xboard.texinfo > xboard.man \
-		|| (rm -f xboard.man ; false)
-
-tidy:
-	rm -f ,* .,* .emacs_[0-9]* core a.out *~ *.BAK *.CKP .nfs*
-
-backend.o: backendz.h
-backend.o: config.h
-backend.o: common.h
-backend.o: frontend.h
-backend.o: backend.h lists.h
-backend.o: parser.h
-backend.o: moves.h
-backend.o: zippy.h
-childio.o: config.h
-childio.o: common.h
-childio.o: frontend.h
-gamelist.o: config.h
-gamelist.o: common.h
-gamelist.o: frontend.h
-gamelist.o: backend.h lists.h
-gamelist.o: parser.h
-lists.o: config.h
-lists.o: common.h
-lists.o: lists.h
-moves.o: config.h
-moves.o: common.h
-moves.o: backend.h lists.h
-moves.o: moves.h
-moves.o: parser.h
-parser.o: config.h
-parser.o: common.h
-parser.o: backend.h
-parser.o: frontend.h
-parser.o: parser.h
-parser.o: moves.h
-pgntags.o: config.h
-pgntags.o: common.h
-pgntags.o: frontend.h
-pgntags.o: backend.h lists.h
-pgntags.o: parser.h
-xboard.o: config.h
-xboard.o: common.h
-xboard.o: frontend.h
-xboard.o: backend.h lists.h
-xboard.o: moves.h
-xboard.o: xboard.h
-xboard.o: childio.h
-xboard.o: $(srcdir)/bitmaps/bitmaps.h
-xboard.o: xgamelist.h
-xboard.o: xedittags.h
-xboard.o: xhistory.h
-xedittags.o: config.h
-xedittags.o: common.h
-xedittags.o: frontend.h
-xedittags.o: backend.h lists.h
-xedittags.o: xboard.h
-xedittags.o: xedittags.h
-xgamelist.o: config.h
-xgamelist.o: common.h
-xgamelist.o: frontend.h
-xgamelist.o: backend.h lists.h
-xgamelist.o: xboard.h
-xgamelist.o: xgamelist.h
-xhistory.o: config.h
-xhistory.o: common.h
-xhistory.o: frontend.h
-xhistory.o: backend.h
-xhistory.o: xboard.h
-xhistory.o: xhistory.h
-xhistory.o: lists.h
-zippy.o: backend.h
-zippy.o: backendz.h
-zippy.o: config.h
-zippy.o: common.h
-zippy.o: zippy.h
-zippy.o: frontend.h
-
diff --git a/NEWS b/NEWS
index 96e812c..96872f2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,40 +1,188 @@
-** Announcing the release of XBoard and WinBoard, version 4.2.7 **
+** Version 4.4.0 **
 
-XBoard is a graphical chessboard for the X Window System that can
-serve as a user interface for GNU Chess, Crafty, and other chess
-engines, for the Internet Chess Servers, and for electronic mail
-correspondence chess.  XBoard can also be used by itself.  It can read
-and write game files in PGN (portable game notation).
+A new release of both XBoard and WinBoard is now available.  Version
+4.4.0 includes many changes. It is the first major release of
+xboard/winboard after a fork of the project after version 4.2.7. It
+includes small changes made in the main line and changes made by a
+fork of Alessandro Scotti and lots of changes made afterwards by
+H.G. Muller (released as versions 4.3.x). This release represents a
+unified version of all changes made after the fork. It includes many
+new features and bugfixes.
 
-WinBoard is a similar program for 32-bit Microsoft Windows.  It
-includes all the major features of XBoard except email correspondence
-chess.
+You can get both XBoard and WinBoard from the Savannah
+project pages:
 
-A new release of both XBoard and WinBoard is now available.  Version
-4.2.7 corrects about two dozen bugs in the 4.2.6 release.  See the
-ChangeLog for a list.  In addition, WinBoard 4.2.7 comes bundled with
-GNU Chess 5.07 instead of the old 5.02+ version.  The XBoard and
-WinBoard source code trees have been merged, so the xboard download
-now contains the complete source for both.
-
-The various larger contributions that people have submitted since the
-4.2.6 release are not yet included in 4.2.7.  The source code for
-these contributions is now available, however (see
-http://www.tim-mann.org/extensions.html), and we plan to include most
-of them in a future release once the contributors complete necessary
-copyright assignment paperwork.
-
-You can get both XBoard and WinBoard from either our new Savannah
-project pages or their existing pages on Tim Mann's web site:
-
-- https://savannah.gnu.org/projects/xboard/
-- http://www.tim-mann.org/chess.html
-
-Most of the known bugs and deficiencies in previous versions have
-*not* been addressed in this release.  It is not necessary to report
-your favorite bug again if you have reported it before, unless the
-ChangeLog erroneously says it has been fixed.  Most known bugs,
-deficiencies, and suggestions received are now listed in the ToDo
-file.  If you find a bug not listed there, please report it in the bug
-tracker at https://savannah.gnu.org/projects/xboard/ or by email to 
-bug-xboard [AT] tim-mann.org.
+https://savannah.gnu.org/projects/xboard/
+
+If you find a bug, please report it in the bug tracker at
+https://savannah.gnu.org/projects/xboard/ or by email to bug-xboard
+(AT) gnu.org.
+
+
+** Version 4.3.16 **
+
+New command-line options
+/niceEngines=N       for adjusting the priority of engine processes so they don't soak up all your system resources
+/firstOptions="..."   Allows the setting of options that engines define through the feature option="..." commands
+/secondOptions="..."
+/firstLogo=filename.bmp  Displays the mentioned bitmap next to the clock (with H:W =1:2 aspect ratio) (WB only)
+/secondLogo=filename.bmp
+/autoLogo=false          get logo files automatically from engineDirectory\logo.bmp
+
+General enhancements:
+* New WB-protocol command: 'feature option="NAME -TYPE VALUE OTHER"', which engines can use to define options
+* New WB-protocol command: 'option NAME VALUE' used to set value of engine-defned options.
+* implements /delayAfterQuit and /delayBeforeQuit in XBoard, and uses SIGKILL to terminate rogue engine processes
+
+
+** Version 4.3.15 **
+
+New command-line options
+/rewindIndex=N (for the new auto-increment mode of the loadGameIndex or loadPositionIndex in match mode)
+/sameColorGames=N (for playing a match where the same player has white all the time)
+/egtFormats="..." (for specifying where various end-game tables are installed on the computer)
+
+New menu items
++ Time-odds factors can be set in the time-control dialog
++ Nr of CPUs for SMP engines can be set in the Options -> UCI dialog
++ Own-Book options can be switched from the Options -> UCI dialog
++ The ScoreIsAbs options can be set from the Options -> Engine dialog
++ New-Variant menu adds Superchess
+
+General Enhancements:
+* WinBoard engines can now also use the Polyglot opening book (implemented as general GUI book)
+* New WB-protocol commands memory, cores and egtpath make interactive setting of these parameters 
+  possible on WB engines
+* New Polyglot is available that relays the interactive setting of these parameters to UCI engines
+* Match mode suports an auto-increment mode, so that all games or positions from a file can be played
+* Draw claims with Kings and an arbitrary number of like Bishops (e.g. KBBKB) are accepted
+
+The source tree in original xboard 4.2.7 format can now be compiled under Cygwin with the aid
+of the cygwin.mak file in the ~/winboard/ subdirectory of the source releasy, after you put
+the hep-file from an executabl distribution there. Maefiles for other compilers are not updated
+since 4.2.7, as I do not have those compilers.
+
+
+** Version 4.3.14k **
+
+Compared to version 4.3.13 described below, this version features
+
+New command-line options: 
+/autoKibitz (for relaying the PV info of the engine to the ICS) 
+/userName="..." (for setting the name of the Human player, also as menu) 
+/engineDebugOutput=N (controlling the writing of engine output to debug file) 
+/firstNPS=N (for time management by node count or CPU time) 
+/secondNPS=N (likewise for the other engine) 
+
+New Menu items 
++ Enter Username (same as /userName command-line option) 
++ Save Diagram (for saving the Chessboard display as bitmap file) 
++ Machine Both (not implemented yet, but menu item already provided) 
++ New-Variant menu adds CRC, Janus and Berolina (the latter only with legality testing off!) 
++ Any variant can be played from a shuffled opening setup 
+
+Bugfixes: 
+* Problems with switching the variant in ICS zippy mode solved 
+* In ICS observing mode game history is now fully accessible 
+* Moves are not fed to engine in zippy mode, when observing a game from a variant unknown to the engine 
+* a problem with loading PGN of FRC games with move disambiguation and initial castling rights was fixed.
+* A bug in the clock display that made previous versions of WinBoard crash for tiny displays is fixed
+
+General enhancements: 
+* variant name displayed in title bar in ICS mode, when not 'normal' 
+* when receiving a challenge in ICS zippy mode, it is checked if the engine supports the variant (/zippyVariants="..." can still be used to limit the allowed variants, and for protocol-1 engines is still the only thing to go on) 
+* when loading a game from a PGN file, WB automatically switches to the variant specified in the PGN tags 
+* when starting from a loaded position (using /loadPositionFile), this position will be used on subsequent 'New Game' commands as well (until we switch variant)
+
+New is also that the source tree is now brought back in the original WinBoard 4.2.7 format, including
+xboard source files. Note, however, that the xboard sources are from an older date, and I did not test
+if they still compile together with the much newer backend sources. I did add code in xboard.c to recognize
+the new command-line options I added since then, and in so far they are back-end options that should be enough 
+to make them work. This is completely untested, though; I did not even try to compile it. Last time anyone
+built a working xboard.exe from this was at a stage where WinBoard did have adjustable board size, allowing
+it to play Xiangqi. But no crazyhouse holdings yet.
+
+
+** Version 4.3.13a **
+
+This version of WinBoard_F fixes several bugs in 4.3.12, and also addse a few new features.
+The new features include:
+- some more fairy pieces, so that each side now has 22 piece types in stead of 17,
+making most fairy pieces available in board size "petite" (next to "bulky" and "middling"),
+making the ArchBishop and Chancellor, as well as one wildcard piece (the Lance) available in all 
+sizes from "petite" to "bulky".
+- The FRC support is fully fixed, both in local and ICS mode.
+- A mechanism is provided for safe draw claiming in cases where a 3-fold repetition woud occur only
+  after your own move. In this case a draw will be awarded by WinBoard if the engine sends "offer draw"
+  before making its move.
+- Genuine draw offers are not passed on immediately to the opponent but held up to when the offerer announces
+  its move.
+- Variants FRC, Cylinder and Falcon are added to the "New Variant..." menu.
+- Support for playing time-odds games is added. (Options /firstTimeOdds, /secondTimeOdds, /timeOddsMode)
+- A mechanism is provided for attaching WinBoard options to the engine command, to create options that
+follow the engine (e.g. time odds) in a tournament run under a tournament manager.
+Bugfixes include:
+- Shatranj in ICS mode (did not work at all before)
+- Some draw adjudications (QRKR was mistaken for KRKR, and KBKB with like Bishops is now recognized)
+- time info in the PGN is now correct
+
+
+
+** Version 4.3.14 **
+
+This relaese was not made by the GNU xboard team, but by H.G.Muller.
+It mainly contains developments on WinBoard. Nevertheless, an attempt
+has been started to back-port the enormous number of improvements that
+have been made to WinBoard since the Linux and Windows developments branched
+to xboard. This is reflected by the source tree now having the same format
+as that of xboard 4.2.7, including all the xboard sources. 
+
+An enormous amount of work still has to be done to make the xboard version
+fully equivalent to WinBoard, especially on user-interface side. As a modest
+beginning, the xboard source files have been patched to allow their compilation
+with the newer back-end files from WinBoard. To this end, the number of piece
+types in xboard has been increased from 6 to 22, and the WinBoard bitmaps
+have been converted to xboard source format (.bm) and are included in the
+xboard bitmaps directory. Other quick patches include the coloring of the
+board squares (for xiangqi and holdings), and some code in the user-move
+handling to suppress all moves into or out of the area between board and
+holdings in crazyhouse, and the treatment of king-captures-own-piece
+as a possibly valid move (for FRC castling). This should make it possible 
+to run xboard with the new back-end files without too much inconvenience.
+
+New xboard command-line options have been added to make the added back-end 
+features available. The include the new variants (as argument of the old
+-variant option), -boardWidth, -boardHeight and -holdingsSize. Be sure
+to call xboard with "-boardSize middling" or "-boardSize bulky" if you
+want to play with fairy pieces, or xboard might crash due to unavailability
+of bitmaps. Other added xboard options are:
+
+ADJUDICATION OPTIONS:
+-checkMates
+-testClaims
+-materialDraws
+-trivialDraws
+-ruleMoves
+-repeatsToDraw
+-adjudicateLossThreshold
+-firstScoreAbsolute
+-secondScoreAbsolute
+
+TIME-CONTROL OPTIONS
+-firstTimeOdds
+-secondTimeOdds
+-timeOddsMode
+-firstNPS
+-secondNPS
+
+GENERAL OPTIONS
+-matchPause
+-engineDebugOutput
+-userName
+-pgnExtendedInfo
+-pgnEventHeader
+-hideThinkingFromHuman
+
+This is all completely untested, but as the options merely switch on well-tested
+code in the back-end, there should not be too many problems with them.
+Bugs can be reported in the WinBoard forum.
diff --git a/README b/README
new file mode 100644
index 0000000..2a78c7b
--- /dev/null
+++ b/README
@@ -0,0 +1,75 @@
+What is XBoard?
+===============
+XBoard is a graphical chessboard for the X Window System.  It can
+serve as a user interface for chess engines such as GNU Chess, for the
+Internet Chess Server, or for electronic mail correspondence chess.
+XBoard can also be used by itself.  See the manual page xboard.txt for
+further details.
+
+XBoard is free software, copyrighted by the Free Software Foundation
+and released under the GNU General Public License (GPL).  See the file
+COPYING for details.
+
+You can build xboard on most systems with the following commands.
+
+	./configure
+	make
+
+See the file INSTALL for more detailed instructions.
+
+See the file FAQ.html for answers to frequently asked questions.
+
+
+What is WinBoard?
+=================
+WinBoard is a port of XBoard to run natively on Windows.  It is part
+of the XBoard project and is released under the same terms as XBoard.
+
+You can build WinBoard using the free Cygwin toolchain from
+www.cygnus.com with the following commands.
+
+	cd winboard
+	make -f cygwin.mak
+
+You can build WinBoard using Microsoft Visual C with the following
+commands, or by opening the project in Visual Studio and clicking the
+build button.
+
+	cd winboard
+	nmake -f msvc.mak
+
+There is also a contributed .mak file for Borland C.  It's not
+maintained and thus may need updating if you want to use it.
+
+
+Reporting problems
+==================
+
+Report bugs and problems with XBoard and WinBoard to
+<bug-xboard at gnu.org>.  With XBoard, please use the "script" program
+to start a typescript, run XBoard with the -debug command line option,
+and include the typescript output in your message.  With WinBoard,
+please use the /debug command line option and include the contents of
+the file WinBoard.debug.  Also tell us what kind of machine and what
+operating system version you are using.  On Unix, the command "uname
+-a" will tell you this.  On Windows, right-click on My Computer and
+select Properties.
+
+Here is a sample of approximately what you should type (on Unix):
+
+    script
+    uname -a
+    ./configure
+    make
+    ./xboard -debug
+    exit
+    mail bug-xboard at gnu.org
+    Subject: Your short description of the problem
+    Your detailed description of the problem
+    ~r typescript
+    .
+
+If you improve XBoard, please send a message about your changes, and
+we will get in touch with you about merging them in to the main line
+of development.
+
diff --git a/READ_ME b/READ_ME
deleted file mode 100644
index 4ddc997..0000000
--- a/READ_ME
+++ /dev/null
@@ -1,75 +0,0 @@
-
-What is XBoard?
-===============
-XBoard is a graphical chessboard for the X Window System.  It can
-serve as a user interface for chess engines such as GNU Chess, for the
-Internet Chess Server, or for electronic mail correspondence chess.
-XBoard can also be used by itself.  See the manual page xboard.txt for
-further details.
-
-XBoard is free software, copyrighted by the Free Software Foundation
-and released under the GNU General Public License (GPL).  See the file
-COPYING for details.
-
-You can build xboard on most systems with the following commands.
-
-	./configure
-	make
-
-See the file INSTALL for more detailed instructions.
-
-See the file FAQ.html for answers to frequently asked questions.
-
-
-What is WinBoard?
-=================
-WinBoard is a port of XBoard to run natively on Windows.  It is part
-of the XBoard project and is released under the same terms as XBoard.
-
-You can build WinBoard using the free Cygwin toolchain from
-www.cygnus.com with the following commands.
-
-	cd winboard
-	make -f cygwin.mak
-
-You can build WinBoard using Microsoft Visual C with the following
-commands, or by opening the project in Visual Studio and clicking the
-build button.
-
-	cd winboard
-	nmake -f msvc.mak
-
-There is also a contributed .mak file for Borland C.  It's not
-maintained and thus may need updating if you want to use it.
-
-
-Reporting problems
-==================
-
-Report bugs and problems with XBoard and WinBoard to
-<bug-xboard at gnu.org>.  With XBoard, please use the "script" program
-to start a typescript, run XBoard with the -debug command line option,
-and include the typescript output in your message.  With WinBoard,
-please use the /debug command line option and include the contents of
-the file WinBoard.debug.  Also tell us what kind of machine and what
-operating system version you are using.  On Unix, the command "uname
--a" will tell you this.  On Windows, right-click on My Computer and
-select Properties.
-
-Here is a sample of approximately what you should type (on Unix):
-
-    script
-    uname -a
-    ./configure
-    make
-    ./xboard -debug
-    exit
-    mail bug-xboard at gnu.org
-    Subject: Your short description of the problem
-    Your detailed description of the problem
-    ~r typescript
-    .
-
-If you improve XBoard, please send a message about your changes, and
-we will get in touch with you about merging them in to the main line
-of development.
diff --git a/ToDo b/ToDo
index 62be85a..9a84006 100644
--- a/ToDo
+++ b/ToDo
@@ -84,23 +84,24 @@ allowing dragging from the icons to drop a piece).  Actually, moving
 the clocks would be beneficial too, so that it's easier to visually
 associate the right clock with the right player when looking at two
 boards during a bughouse match (with two copies of xboard running).
-Maybe multiple window layouts should be user-selectable.
+Maybe multiple window layouts should be user-selectable. [4.3 supports
+drag-drops from holdings]
 
 150. Keep track of castling availability, en-passant availability, and
 FEN half-move clock (for 50-move rule), pass the availability
 information to the move generator through the existing interface, and
-load/save it in the FEN code.
+load/save it in the FEN code. [Fixed in 4.3]
 
 150a. Note that not keeping track of ep creates a bug in mate
 detection.  In certain positions, moving a pawn from the 3rd to 4th
 rank gives mate, but it is not detected because if the pawn had moved
 to the same position from the 2nd rank, ep capture would have been
-legal and there would be no mate.
+legal and there would be no mate. [problem disappeared in 4.3]
 
 150b. Note that although we try to put in e.p. availability when
 writing FEN, this works only if we have the move that got us to this
 position in the moveList. If we load a position from FEN, the
-e.p. availability field of the FEN is lost.
+e.p. availability field of the FEN is lost. [disappeared in 4.3]
 
 152. Generate the info file, man page, perhaps html, and perhaps even
 the WinBoard help file from the same sources.  Right now,
@@ -122,7 +123,8 @@ engine don't "have the same console"; indeed, neither has a console.
 162. Supply a non-X Zippy for Unix.  Perhaps use the code from Klaus
 Knopper.
 
-167. Alternative bitmaps loaded at runtime for WinBoard.
+167. Alternative bitmaps loaded at runtime for WinBoard. [font-based
+piece rendering provides this functionality since WinBoard_x]
 
 169. Upload Game on file menu?  This would upload the current game
 moves into a scratch examined game on ICS.  Could do Upload Position
@@ -136,10 +138,11 @@ turn on at any time, not just in LoadGame.  What should GUI be?
 171. Displaying thinking in a separate window should be an option
 available at all times when Show Thinking makes sense, not just in
 analysis mode.  It should perhaps be orthogonal to analysis mode.
+[added in WinBoard_x]
 
 172. Should analysis window scroll instead of showing only the last
 line?  There could be an extra checkbox to show all chess engine
-output in it.
+output in it. [fixed in WinBoard_x]
 
 178. Need reliable kill for chess engine on Win32.  See also 161.
 
@@ -272,7 +275,7 @@ automatically based on the info sent from mamer.  [I would need to
 play in some tournaments before I could evaluate this idea or fill in
 the details.]
 
-222. Could support time handicaps.
+222. Could support time handicaps. [Added in 4.3]
 
 223. Bug: very long comments cause buffer overflow.  Need to revamp
 the way comments are parsed and returned from parser.l to fix this.
@@ -280,7 +283,7 @@ the way comments are parsed and returned from parser.l to fix this.
 224. Larry Parrish requests: In an automated multi-games match I would
 like to load the n-th game from the file for the n-th game of the
 match.  [That is, when -mg and -lgf or -lpf are used together without
--lgi or -lpi.]
+-lgi or -lpi.] [4.3.15 provides auto-increment og game and pos index]
 
 225. From pulp: another bug (maybe with the Microsoft RichEdit
 control) I've observed is when you flood the edit control it loses the
@@ -297,7 +300,8 @@ web page address, close, go to browser, paste *nothing*.  [How does
 one do this in Windows?]
 
 227a. In engine-engine matches, an engine that crashes should lose and
-perhaps get restarted for the next game.
+perhaps get restarted for the next game. [In 4.3 a crashing engine 
+forfeits the game, but still terminates a match.]
 
 227b. Maybe when an engine playing in Zippy mode exhibits a bug, we
 should do a little more too.  Perhaps "say Sorry, the engine seems to
@@ -308,7 +312,7 @@ next game.
 claims, rejecting a legal move, or (maybe) missed claims of mate or
 draw.  Note that draw claims require checking for repetition, 50 move
 rule, and insufficient material as well as stalemate, so this is
-nontrivial.
+nontrivial. [Added in 4.3]
 
 228. RichEdit bug: sometimes a line gets indented as if it were
 wrapped when it should be flush left.
@@ -424,6 +428,8 @@ commands" from Steffen Jakob:
 
   "1" tells xboard to ask for an additional parameter (here: filename)
   which will replace the "%s" in the command string.
+[XBoard 4.3.16 has an experimental implementation of this ide through
+the 'feature option="..."' command.]
 
 261. Check that "quit" is sent to engine properly if ICS connection
 fails to open due to error from timestamp/timeseal.  "wzrdking" had a
@@ -438,7 +444,8 @@ poor idea.)
 274. Command to go to move number N, with entry box for N.
 
 276. Make grid optional in winboard?  Note that the highlight options
-don't work without it.
+don't work without it. [The Winboard_x -overrideLineGap option provides
+this.]
 
 276a. Make color of grid an option, instead of always black.
 
@@ -456,6 +463,7 @@ windows explorer then crashed when he tried to close winboard.
 279. Idea from an anonymous ICSer: piece drop menu could have images,
 not words.  [Or maybe both?]  Also might be easier to select
 accurately from it if horizontally arranged, or in a 3x2 grid.
+[Now 4.3 has drag & drop, piece-drop menu should be deprecated]
 
 284. dxterm hangs when it receives the escape sequence that sets the
 title bar on xterm.  I think some other xterm substitutes do too.
@@ -550,14 +558,16 @@ it too.  As yet I haven't.
 326. Full support for variants and variant-capable engines in all
 modes, not just ICS mode.  Here are some items still needed.  Some if
 not all should probably wait for a rewrite, not be added to the
-current code base.
+current code base. [4.3 supports many variants, even those not supported
+by ICS. Not bughouse, though]
 
 326a. Menu to let you see and change the current variant type, not
-just a command-line argument as at present.
+just a command-line argument as at present. [Added in 4.3]
 
 326b. crazyhouse: Keep track of holdings and display them, keep track
 of what onboard pieces are promoted so they will revert if captured,
-understand offboard interposition to stop mate.  
+understand offboard interposition to stop mate.  [Added in 4.3, (not
+sure about the interposition)]
 
 326bb. One user asked for a Czech variant of crazyhouse where pawns are
 given to the opponent when they reach the 8th rank (after capturing, if
@@ -568,7 +578,8 @@ of a bughouse game, and getting mate indication right even in ICS mode.
 In the longer term, could understand BPGN, support editing two-board games.
 
 326d. wildcastle: Allow wildcastle castling only when playing this variant!
-Maybe support automatic shuffling for local play.
+Maybe support automatic shuffling for local play. [4.3 adds shuffling
+for any variant played locally]
 
 326e. nocastle: Maybe support automatic shuffling for local play.
 Note that several types of ICS shuffle chess fall under this variant.
@@ -589,7 +600,7 @@ violates a deeply ingrained assumption in the implementation.  It also
 breaks the GUI -- you need more than just dragging the king two
 squares to indicate castling.  (Note: In FR notation, O-O is h-side
 castling, O-O-O is a-side.  See "help fr_rules" and "help fr" on FICS
-for rules.)
+for rules.) [All fixed in 4.3]
 
 326g. kriegspiel: Could give some thought to how to support a
 kriegspiel engine.  I doubt anyone will ever write one, though.
@@ -621,7 +632,8 @@ server-side autoflag on/off by sending an appropriate set command.
 **332. Bug: Autoflag for local engine/engine or engine/human matches
 does not recognize that having your flag fall when your opponent has
 insufficient mating material is a draw.  It counts the flag fall as a
-loss.
+loss. [Partly fixed in 4.3, which corrects any kind of losses against 
+a bare King to draws.]
 
 336. Of course lots of people ask for a graphical seek window.
 
@@ -742,7 +754,7 @@ customizing the positions with X resources.
 366. Feature to let an engine observe an ICS game and run analysis
 mode on the moves, perhaps whispering or channel-telling the results.
 It's a little too easy to cheat with this feature or I might have
-added it long ago.
+added it long ago. [Added in 4.2.8 and 4.4]
 
 369. Optionally send a periodic keepalive command to ICS.  Can be
 used to defeat autologout, so should probably not be on by default.
@@ -799,6 +811,8 @@ black pre-first-move is needed.
 **387. Have winboard draw opaque details on black pieces too.
 Hmm, this should probably be optional, and the detail colors should
 be selectable instead of hardwired to the opposite piece color.
+[The 4.3 -allWhite option goes in this direction. Details always
+in black, though.]
 
 **387a. Add "no piece border" option to WinBoard.  See code from
 Robert Jurjevic sent 4/9/2001.
@@ -838,7 +852,8 @@ as at present.
 console window, or something.
 
 402. Internationalization.  It probably isn't practical to retrofit
-this into the current code base.
+this into the current code base. [4.2.8 and 4.4 have international-
+ization of xboard.]
 
 409. One user requested a way to put a time delay in the middle of
 sending zippyGameEnd commands.  This would (for example) let the
@@ -849,6 +864,7 @@ ScheduleDelayedEvent is OK, but I think it may already be in use in
 this situation, and it only supports one event at a time.
 
 411. Add zippyKibitzThinking and zippyWhisperThinking features?
+[4.3 has an -autoKibitz option]
 
 412. Maybe optimize setting the move list in the case where only the
 current move number changes; avoid slow XawListChange.
@@ -859,7 +875,8 @@ patch that I believe includes this; need to integrate and test it.
 **415. It was suggested that a few common options that many chess
 engines need be promoted to xboard/WinBoard options so that the user
 can set them from the GUI in a uniform way.  In particular: hash size,
-directory name for endgame tables.
+directory name for endgame tables. [4.3 has extended WB protocol
+with a memory, egtpath and cores command.]
 
 **416. Can we avoid dying when xboard is in 8-bit mode, pixmap pieces
 are chosen (by default), and we can't get enough colors?  Ugh.
@@ -912,6 +929,7 @@ be needed for draw by repetition (creating the 3rd repetition with the
 move) and by the 50 move rule (the move is the 50th).  Add to
 protocol, and implement using the individual methods on FICS and ICC.
 Need to be sure it's really a FICS that has the feature (somehow).
+[Fixed in 4.3 by usng 'offer draw' for this purpose]
 
 455. Suggested: Add the epdkit commands such as epdpfga to the
 protocol, since Crafty and "many" (which?) other engines include the
@@ -930,6 +948,8 @@ with the EPD spec.  Maybe a feature command should indicate that the
 engine matches this part of the spec, but then again, it's not clear
 what we can do about it if the engine doesn't give that command, so
 maybe there is no point.  See discussion on chess-engines list.
+[Winboard_x adds an argument to tell WinBoard an egine uses absolute
+scores]
 
 458. Bug: xboard will try to use an engine to play normal chess even
 if the engine has given the feature variant command and did not
@@ -962,11 +982,13 @@ timeseal issue and nothing to do with WinBoard itself.
 476. For some reason (I guess some GUI supports them), most WinBoard
 engines now have a graphical logo, 100x50 pixels in Windows .bmp
 format.  It's been requested that WinBoard have a place to show the
-logo.
+logo. [4.3.16 supports logos]
 
 477. Implement the "book engine" idea I proposed in the protover 3
 discussions.  Some folks have offered to write them (e.g., Bruce
-Morland).
+Morland). [4.3.15 supports a GUI book, which is another way to
+acheive the same, as the only thing that would distinguish book
+engines is their book, not what they do.]
 
 478. Recognize URLs in the WinBoard ics interaction window and make
 them work as hyperlinks (firing up your browser).
@@ -991,7 +1013,8 @@ just trying to win a single game."
 examine mode while -zp is active, and the engine supports analyze,
 then put it into analyze mode and let it work on the examined game.  I
 guess this could work for observed games too.  Should it be optional
-or always done?
+or always done? [4.2.8 and 4.4 support analysis in zippy mode, but
+as yet only while observing games.]
 
 483.  It would be nice if the KingShine 3D board could be integrated
 as an alternative xboard GUI rendering.
@@ -1001,25 +1024,33 @@ us those feature commands.  Useful kludge for certain buggy engines.
 
 485. Add "reset" to protover 3.  (Clear the hash tables and other such
 info; used to put the engine into a known state before running a
-test/benchmark position.)
+test/benchmark position.) [the WB 'memory' command could be defined
+to have this side effect? Normally we would have to clear the hash
+table when changing its size.]
 
 486. Other protover 3 features listed in my 6/21/2001 message to
 chess-engines list.  Write a full protover 3 draft for comment.
+[Note that 4.3 already uses protocol extensions that differ from
+the v3 specs.]
 
 487. Adjudicate non-ICS games as a draw when there is insufficient
 mating material on both sides, especially engine/engine games.  Well,
 maybe.  I argued against this in a 6/26/2001 message to chess-engines.
+[Added in 4.3]
 
 487a. Probably also adjudicate when we detect checkmate or stalemate,
-before bothering to notice whether the engine detected this.
+before bothering to notice whether the engine detected this. [Added
+in 4.3]
 
 487b. Note: Do not adjudicate 50 move rule or 3x repetition since those
 must be claimed by a player -- at least not by default.  It would be
 OK to have a flag to do this someday when we are smart enough to
 notice it.  Would definitely be good to be smart enough to notice an
-incorrect draw claim by an engine.
+incorrect draw claim by an engine. [In 4.3 you can set the number of 
+moves or repeats after which draw is adjudicated]
 
 487c. Another request: allow the operator to adjudicate engine/engine games.
+[Winboard_x provided menu items for this.]
 
 488. Option to suppress tags popup on game load?  This has been
 requested a few times, and I received one partial implementation (not
@@ -1039,7 +1070,9 @@ kibitzing from the engine dynamically.  I had thought it would be
 better to make the GUI able to relay thinking output as kibitzing on
 its own (and be able to turn this on/off dynamically), but Bruce
 points out that what engine authors want to send as kibitzing output
-usually includes more than the PV thinking output.
+usually includes more than the PV thinking output. [Note that engines
+can put whatever info they want in the PV field of the thinking 
+output].
 
 492.  One user reports that GNU Chess 5 crashes if you start a game,
 play far enough to get GNU Chess out of book, select Reset, and play
@@ -1056,7 +1089,7 @@ Ugh, but I suppose it would be helpful sometimes.
 they were doing) partial conversions of WinBoard to German or Spanish
 by manually translating the messages.  I think it would be much better
 (but a big job) to use GNU gettext.  I haven't looked into the details
-of that at all.
+of that at all. [4.2.8 and 4.4 have gettext support.]
 
 495. JamesBaud points out that FEN is not sufficient to correctly
 represent a crazyhouse position (or bughouse, for that matter),
@@ -1066,10 +1099,12 @@ information.  I really don't know what I could do about this -- take
 the lead in proposing an extension to FEN and to style 12 with new
 piece letters, I suppose.  I don't really have time or motivation for
 that.  If you always use PGN, not FEN, to save Crazyhouse, that works
-around the problem.
+around the problem. [4.3 uses bFENs which fix this, but not in ICS
+mode]
 
 **496. DAV sent some code to save a screen shot in xboard.  Look at
-merging this in.
+merging this in. [4.3 has an option to save the board display (but
+not the entire window) as bitmap.]
 
 **497. Igor Eged reports: I make a move on opponents time using
 premove. Right in the time I am holding another piece in case of
@@ -1166,7 +1201,7 @@ The "new" command should set the search depth back to unlimited.  This
 is already stated in the spec.  The "level" command should not affect
 the search depth.  As it happens, xboard/WinBoard currently always
 sends sd (if needed) right after level, but that isn't part of the
-spec.
+spec. [Added to the specs that go with 4.4]
 
 518. Warn in doc that -initString is a dangerous feature.  Also move
 doc of dalogs for sending commands directly to the engine out of the
@@ -1196,7 +1231,7 @@ be nice.
 
 525. Support a 64-bit node counter in analysis mode when compiled with
 something that has 64-bit integer support.  Both gcc and msvc++ have
-this, though under different names.
+this, though under different names. [Done in 4.2.8 and 4.4]
 
 526. "-initialMode analysis -lgf -" doesn't get the engine into
 analysis mode properly.  "-initialMode analyzeFile" is a workaround,
@@ -1224,6 +1259,7 @@ Any support needed?
 
 529. Protover 3 needs a prefix character that says "this is debug
 output" and prevents the GUI from parsing that line (say ";").
+[4.3 uses '#' for this purpose, when the engine sets feature debug=1]
 
 530. The undocumented (?) checking for rsh error messages tripped up
 one engine author who had a "not found" in a message.  Tighten this
@@ -1260,7 +1296,8 @@ already?)
 538. Need a way for the user to adjust the clocks.  This is important
 for WCCC and other computer competitions, where xboard/winboard's
 clock is not the master.  I was going to do it in time for the July
-2002 WCCC.  Oops.
+2002 WCCC.  Oops. [4.3 allows adjusting the clocks by clicking them
+in 'edit game' mode, in steps of 1 minute]
 
 541. Related to #327, John Iverson says, "It would be nice to have the
 coordinates shown outside of the board along the edges, rather than in
@@ -1348,6 +1385,25 @@ HTML, at the cost of losing the index and search capability.
 a pain to create new dialogs by editing the text file.  The original
 ones were all created using the graphical dialog editor in MSVC 5.
 
+553. It would be nice for xboard's ICS Input box to have a history 
+feature similar to WinBoard's ICS Interaction window. Actually it 
+would be nice for xboard to have its own ICS Interaction window with 
+all the bells and whistles that WinBoard's has instead of limping 
+along using an xterm for interaction. 
+
+**554. Port evaluation-graph window to XBoard.
+
+555. Split x/wengineoutput.c in a front-end and common backend file.
+
+556. Fix -stickyWindows option under XP and Vista, and port to XBoard.
+
+557. Port display of engine logos to XBoard.
+
+558. Device a smart way for -autoLogo to select logos in other modes
+than Two Machines.
+
+
+
 * * *
 
 Before each release:
diff --git a/acconfig.h b/acconfig.h
deleted file mode 100644
index ceb3f58..0000000
--- a/acconfig.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* This file is just here to make autoheader happy, so it will generate
-   config.h for me. */
-
-#define FIRST_PTY_LETTER 'p'
-
-#define HAVE_FCNTL_H 0
-
-#define HAVE_GETHOSTNAME 0
-
-#define HAVE_GETTIMEOFDAY 0
-
-#define HAVE_RANDOM 0
-
-#define HAVE_SYS_SOCKET_H 0
-
-#undef IBMRTAIX
-
-#define LAST_PTY_LETTER 'q'
-
-#define PATCHLEVEL "0"
-
-#define PRODUCT "xboard"
-
-#undef PTY_ITERATION
-
-#undef PTY_NAME_SPRINTF
-
-#undef PTY_OPEN
-
-#undef PTY_TTY_NAME_SPRINTF
-
-#define REMOTE_SHELL "rsh"
-
-#undef RTU
-
-#undef UNIPLUS
-
-#define USE_PTYS 0
-
-#define VERSION "x.y"
-
-#undef X_WCHAR
-
-#undef ZIPPY
-
-#undef ATTENTION 
-
-#undef DEFINED_SYS_ERRLIST
-
-#undef HAVE_LIBXPM
-
-#define HAVE_USLEEP 0
-
-#undef USE_XAW3D
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..4b7da24
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,25 @@
+#! /bin/sh
+
+# This file is part of GNU XBoard.
+# 
+# Copyright 2009 Free Software Foundation, Inc.
+# 
+# GNU XBoard is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or (at
+# your option) any later version.
+# 
+# GNU XBoard is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/. 
+# 
+#  See the file ChangeLog for a revision history. 
+
+aclocal \
+&& autoheader \
+&& automake --add-missing \
+&& autoconf
\ No newline at end of file
diff --git a/backend.c b/backend.c
index 8b4c47e..c34724e 100644
--- a/backend.c
+++ b/backend.c
@@ -1,9971 +1,13712 @@
-/*
- * backend.c -- Common back end for X and Windows NT versions of
- * XBoard $Id: backend.c,v 2.6 2003/11/28 09:37:36 mann Exp $
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-2001 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 XBoard distributed
- * by the Free Software Foundation:
- * ------------------------------------------------------------------------
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- *
- * See the file ChangeLog for a revision history.  */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <math.h>
-
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <string.h>
-#else /* not STDC_HEADERS */
-# if HAVE_STRING_H
-#  include <string.h>
-# else /* not HAVE_STRING_H */
-#  include <strings.h>
-# endif /* not HAVE_STRING_H */
-#endif /* not STDC_HEADERS */
-
-#if HAVE_SYS_FCNTL_H
-# include <sys/fcntl.h>
-#else /* not HAVE_SYS_FCNTL_H */
-# if HAVE_FCNTL_H
-#  include <fcntl.h>
-# endif /* HAVE_FCNTL_H */
-#endif /* not HAVE_SYS_FCNTL_H */
-
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-
-#if defined(_amigados) && !defined(__GNUC__)
-struct timezone {
-    int tz_minuteswest;
-    int tz_dsttime;
-};
-extern int gettimeofday(struct timeval *, struct timezone *);
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#include "common.h"
-#include "frontend.h"
-#include "backend.h"
-#include "parser.h"
-#include "moves.h"
-#if ZIPPY
-# include "zippy.h"
-#endif
-#include "backendz.h"
-
-/* A point in time */
-typedef struct {
-    long sec;  /* Assuming this is >= 32 bits */
-    int ms;    /* Assuming this is >= 16 bits */
-} TimeMark;
-
-/* Search stats from chessprogram */
-typedef struct {
-  char movelist[2*MSG_SIZ]; /* Last PV we were sent */
-  int depth;              /* Current search depth */
-  int nr_moves;           /* Total nr of root moves */
-  int moves_left;         /* Moves remaining to be searched */
-  char move_name[MOVE_LEN];  /* Current move being searched, if provided */
-  unsigned long nodes;    /* # of nodes searched */
-  int time;               /* Search time (centiseconds) */
-  int score;              /* Score (centipawns) */
-  int got_only_move;      /* If last msg was "(only move)" */
-  int got_fail;           /* 0 - nothing, 1 - got "--", 2 - got "++" */
-  int ok_to_send;         /* handshaking between send & recv */
-  int line_is_book;       /* 1 if movelist is book moves */
-  int seen_stat;          /* 1 if we've seen the stat01: line */
-} ChessProgramStats;
-
-int establish P((void));
-void read_from_player P((InputSourceRef isr, VOIDSTAR closure,
-			 char *buf, int count, int error));
-void read_from_ics P((InputSourceRef isr, VOIDSTAR closure,
-		      char *buf, int count, int error));
-void SendToICS P((char *s));
-void SendToICSDelayed P((char *s, long msdelay));
-void SendMoveToICS P((ChessMove moveType, int fromX, int fromY,
-		      int toX, int toY));
-void InitPosition P((int redraw));
-void HandleMachineMove P((char *message, ChessProgramState *cps));
-int AutoPlayOneMove P((void));
-int LoadGameOneMove P((ChessMove readAhead));
-int LoadGameFromFile P((char *filename, int n, char *title, int useList));
-int LoadPositionFromFile P((char *filename, int n, char *title));
-int SavePositionToFile P((char *filename));
-void ApplyMove P((int fromX, int fromY, int toX, int toY, int promoChar,
-		  Board board));
-void MakeMove P((int fromX, int fromY, int toX, int toY, int promoChar));
-void ShowMove P((int fromX, int fromY, int toX, int toY));
-void FinishMove P((ChessMove moveType, int fromX, int fromY, int toX, int toY,
-		   /*char*/int promoChar));
-void BackwardInner P((int target));
-void ForwardInner P((int target));
-void GameEnds P((ChessMove result, char *resultDetails, int whosays));
-void EditPositionDone P((void));
-void PrintOpponents P((FILE *fp));
-void PrintPosition P((FILE *fp, int move));
-void StartChessProgram P((ChessProgramState *cps));
-void SendToProgram P((char *message, ChessProgramState *cps));
-void SendMoveToProgram P((int moveNum, ChessProgramState *cps));
-void ReceiveFromProgram P((InputSourceRef isr, VOIDSTAR closure,
-			   char *buf, int count, int error));
-void SendTimeControl P((ChessProgramState *cps,
-			int mps, long tc, int inc, int sd, int st));
-char *TimeControlTagValue P((void));
-void Attention P((ChessProgramState *cps));
-void FeedMovesToProgram P((ChessProgramState *cps, int upto));
-void ResurrectChessProgram P((void));
-void DisplayComment P((int moveNumber, char *text));
-void DisplayMove P((int moveNumber));
-void DisplayAnalysis P((void));
-
-void ParseGameHistory P((char *game));
-void ParseBoard12 P((char *string));
-void StartClocks P((void));
-void SwitchClocks P((void));
-void StopClocks P((void));
-void ResetClocks P((void));
-char *PGNDate P((void));
-void SetGameInfo P((void));
-Boolean ParseFEN P((Board board, int *blackPlaysFirst, char *fen));
-int RegisterMove P((void));
-void MakeRegisteredMove P((void));
-void TruncateGame P((void));
-int looking_at P((char *, int *, char *));
-void CopyPlayerNameIntoFileName P((char **, char *));
-char *SavePart P((char *));
-int SaveGameOldStyle P((FILE *));
-int SaveGamePGN P((FILE *));
-void GetTimeMark P((TimeMark *));
-long SubtractTimeMarks P((TimeMark *, TimeMark *));
-int CheckFlags P((void));
-long NextTickLength P((long));
-void CheckTimeControl P((void));
-void show_bytes P((FILE *, char *, int));
-int string_to_rating P((char *str));
-void ParseFeatures P((char* args, ChessProgramState *cps));
-void InitBackEnd3 P((void));
-void FeatureDone P((ChessProgramState* cps, int val));
-void InitChessProgram P((ChessProgramState *cps));
-
-extern int tinyLayout, smallLayout;
-static ChessProgramStats programStats;
-
-/* States for ics_getting_history */
-#define H_FALSE 0
-#define H_REQUESTED 1
-#define H_GOT_REQ_HEADER 2
-#define H_GOT_UNREQ_HEADER 3
-#define H_GETTING_MOVES 4
-#define H_GOT_UNWANTED_HEADER 5
-
-/* whosays values for GameEnds */
-#define GE_ICS 0
-#define GE_ENGINE 1
-#define GE_PLAYER 2
-#define GE_FILE 3
-#define GE_XBOARD 4
-
-/* Maximum number of games in a cmail message */
-#define CMAIL_MAX_GAMES 20
-
-/* Different types of move when calling RegisterMove */
-#define CMAIL_MOVE   0
-#define CMAIL_RESIGN 1
-#define CMAIL_DRAW   2
-#define CMAIL_ACCEPT 3
-
-/* Different types of result to remember for each game */
-#define CMAIL_NOT_RESULT 0
-#define CMAIL_OLD_RESULT 1
-#define CMAIL_NEW_RESULT 2
-
-/* Telnet protocol constants */
-#define TN_WILL 0373
-#define TN_WONT 0374
-#define TN_DO   0375
-#define TN_DONT 0376
-#define TN_IAC  0377
-#define TN_ECHO 0001
-#define TN_SGA  0003
-#define TN_PORT 23
-
-/* Fake up flags for now, as we aren't keeping track of castling
-   availability yet */
-int
-PosFlags(index)
-{
-  int flags = F_ALL_CASTLE_OK;
-  if ((index % 2) == 0) flags |= F_WHITE_ON_MOVE;
-  switch (gameInfo.variant) {
-  case VariantSuicide:
-  case VariantGiveaway:
-    flags |= F_IGNORE_CHECK;
-    flags &= ~F_ALL_CASTLE_OK;
-    break;
-  case VariantAtomic:
-    flags |= F_IGNORE_CHECK | F_ATOMIC_CAPTURE;
-    break;
-  case VariantKriegspiel:
-    flags |= F_KRIEGSPIEL_CAPTURE;
-    break;
-  case VariantNoCastle:
-    flags &= ~F_ALL_CASTLE_OK;
-    break;
-  default:
-    break;
-  }
-  return flags;
-}
-
-FILE *gameFileFP, *debugFP;
-
-char cmailMove[CMAIL_MAX_GAMES][MOVE_LEN], cmailMsg[MSG_SIZ];
-char bookOutput[MSG_SIZ*10], thinkOutput[MSG_SIZ*10], lastHint[MSG_SIZ];
-char thinkOutput1[MSG_SIZ*10];
-
-ChessProgramState first, second;
-
-/* premove variables */
-int premoveToX = 0;
-int premoveToY = 0;
-int premoveFromX = 0;
-int premoveFromY = 0;
-int premovePromoChar = 0;
-int gotPremove = 0;
-Boolean alarmSounded;
-/* end premove variables */
-
-#define ICS_GENERIC 0
-#define ICS_ICC 1
-#define ICS_FICS 2
-#define ICS_CHESSNET 3 /* not really supported */
-int ics_type = ICS_GENERIC;
-char *ics_prefix = "$";
-
-int currentMove = 0, forwardMostMove = 0, backwardMostMove = 0;
-int pauseExamForwardMostMove = 0;
-int nCmailGames = 0, nCmailResults = 0, nCmailMovesRegistered = 0;
-int cmailMoveRegistered[CMAIL_MAX_GAMES], cmailResult[CMAIL_MAX_GAMES];
-int cmailMsgLoaded = FALSE, cmailMailedMove = FALSE;
-int cmailOldMove = -1, firstMove = TRUE, flipView = FALSE;
-int blackPlaysFirst = FALSE, startedFromSetupPosition = FALSE;
-int searchTime = 0, pausing = FALSE, pauseExamInvalid = FALSE;
-int whiteFlag = FALSE, blackFlag = FALSE;
-int userOfferedDraw = FALSE;
-int ics_user_moved = 0, ics_gamenum = -1, ics_getting_history = H_FALSE;
-int matchMode = FALSE, hintRequested = FALSE, bookRequested = FALSE;
-int cmailMoveType[CMAIL_MAX_GAMES];
-long ics_clock_paused = 0;
-ProcRef icsPR = NoProc, cmailPR = NoProc;
-InputSourceRef telnetISR = NULL, fromUserISR = NULL, cmailISR = NULL;
-GameMode gameMode = BeginningOfGame;
-char moveList[MAX_MOVES][MOVE_LEN], parseList[MAX_MOVES][MOVE_LEN * 2];
-char *commentList[MAX_MOVES], *cmailCommentList[CMAIL_MAX_GAMES];
-char white_holding[64], black_holding[64];
-TimeMark lastNodeCountTime;
-long lastNodeCount=0;
-int have_sent_ICS_logon = 0;
-int movesPerSession;
-long whiteTimeRemaining, blackTimeRemaining, timeControl, timeIncrement;
-long timeRemaining[2][MAX_MOVES];
-int matchGame = 0;
-TimeMark programStartTime;
-char ics_handle[MSG_SIZ];
-int have_set_title = 0;
-
-/* animateTraining preserves the state of appData.animate
- * when Training mode is activated. This allows the
- * response to be animated when appData.animate == TRUE and
- * appData.animateDragging == TRUE.
- */
-Boolean animateTraining;
-
-GameInfo gameInfo;
-
-AppData appData;
-
-Board boards[MAX_MOVES];
-Board initialPosition = {
-    { WhiteRook, WhiteKnight, WhiteBishop, WhiteQueen,
-	WhiteKing, WhiteBishop, WhiteKnight, WhiteRook },
-    { WhitePawn, WhitePawn, WhitePawn, WhitePawn,
-	WhitePawn, WhitePawn, WhitePawn, WhitePawn },
-    { EmptySquare, EmptySquare, EmptySquare, EmptySquare,
-	EmptySquare, EmptySquare, EmptySquare, EmptySquare },
-    { EmptySquare, EmptySquare, EmptySquare, EmptySquare,
-	EmptySquare, EmptySquare, EmptySquare, EmptySquare },
-    { EmptySquare, EmptySquare, EmptySquare, EmptySquare,
-	EmptySquare, EmptySquare, EmptySquare, EmptySquare },
-    { EmptySquare, EmptySquare, EmptySquare, EmptySquare,
-	EmptySquare, EmptySquare, EmptySquare, EmptySquare },
-    { BlackPawn, BlackPawn, BlackPawn, BlackPawn,
-	BlackPawn, BlackPawn, BlackPawn, BlackPawn },
-    { BlackRook, BlackKnight, BlackBishop, BlackQueen,
-	BlackKing, BlackBishop, BlackKnight, BlackRook }
-};
-Board twoKingsPosition = {
-    { WhiteRook, WhiteKnight, WhiteBishop, WhiteQueen,
-	WhiteKing, WhiteKing, WhiteKnight, WhiteRook },
-    { WhitePawn, WhitePawn, WhitePawn, WhitePawn,
-	WhitePawn, WhitePawn, WhitePawn, WhitePawn },
-    { EmptySquare, EmptySquare, EmptySquare, EmptySquare,
-	EmptySquare, EmptySquare, EmptySquare, EmptySquare },
-    { EmptySquare, EmptySquare, EmptySquare, EmptySquare,
-	EmptySquare, EmptySquare, EmptySquare, EmptySquare },
-    { EmptySquare, EmptySquare, EmptySquare, EmptySquare,
-	EmptySquare, EmptySquare, EmptySquare, EmptySquare },
-    { EmptySquare, EmptySquare, EmptySquare, EmptySquare,
-	EmptySquare, EmptySquare, EmptySquare, EmptySquare },
-    { BlackPawn, BlackPawn, BlackPawn, BlackPawn,
-	BlackPawn, BlackPawn, BlackPawn, BlackPawn },
-    { BlackRook, BlackKnight, BlackBishop, BlackQueen,
-	BlackKing, BlackKing, BlackKnight, BlackRook }
-};
-
-
-/* Convert str to a rating. Checks for special cases of "----",
-   "++++", etc. Also strips ()'s */
-int
-string_to_rating(str)
-  char *str;
-{
-  while(*str && !isdigit(*str)) ++str;
-  if (!*str)
-    return 0;	/* One of the special "no rating" cases */
-  else
-    return atoi(str);
-}
-
-void
-ClearProgramStats()
-{
-    /* Init programStats */
-    programStats.movelist[0] = 0;
-    programStats.depth = 0;
-    programStats.nr_moves = 0;
-    programStats.moves_left = 0;
-    programStats.nodes = 0;
-    programStats.time = 100;
-    programStats.score = 0;
-    programStats.got_only_move = 0;
-    programStats.got_fail = 0;
-    programStats.line_is_book = 0;
-}
-
-void
-InitBackEnd1()
-{
-    int matched, min, sec;
-
-    GetTimeMark(&programStartTime);
-
-    ClearProgramStats();
-    programStats.ok_to_send = 1;
-    programStats.seen_stat = 0;
-
-    /*
-     * Initialize game list
-     */
-    ListNew(&gameList);
-
-
-    /*
-     * Internet chess server status
-     */
-    if (appData.icsActive) {
-	appData.matchMode = FALSE;
-	appData.matchGames = 0;
-#if ZIPPY	
-	appData.noChessProgram = !appData.zippyPlay;
-#else
-	appData.zippyPlay = FALSE;
-	appData.zippyTalk = FALSE;
-	appData.noChessProgram = TRUE;
-#endif
-	if (*appData.icsHelper != NULLCHAR) {
-	    appData.useTelnet = TRUE;
-	    appData.telnetProgram = appData.icsHelper;
-	}
-    } else {
-	appData.zippyTalk = appData.zippyPlay = FALSE;
-    }
-
-    /*
-     * Parse timeControl resource
-     */
-    if (!ParseTimeControl(appData.timeControl, appData.timeIncrement,
-			  appData.movesPerSession)) {
-	char buf[MSG_SIZ];
-	sprintf(buf, "bad timeControl option %s", appData.timeControl);
-	DisplayFatalError(buf, 0, 2);
-    }
-
-    /*
-     * Parse searchTime resource
-     */
-    if (*appData.searchTime != NULLCHAR) {
-	matched = sscanf(appData.searchTime, "%d:%d", &min, &sec);
-	if (matched == 1) {
-	    searchTime = min * 60;
-	} else if (matched == 2) {
-	    searchTime = min * 60 + sec;
-	} else {
-	    char buf[MSG_SIZ];
-	    sprintf(buf, "bad searchTime option %s", appData.searchTime);
-	    DisplayFatalError(buf, 0, 2);
-	}
-    }
-    
-    first.which = "first";
-    second.which = "second";
-    first.maybeThinking = second.maybeThinking = FALSE;
-    first.pr = second.pr = NoProc;
-    first.isr = second.isr = NULL;
-    first.sendTime = second.sendTime = 2;
-    first.sendDrawOffers = 1;
-    if (appData.firstPlaysBlack) {
-	first.twoMachinesColor = "black\n";
-	second.twoMachinesColor = "white\n";
-    } else {
-	first.twoMachinesColor = "white\n";
-	second.twoMachinesColor = "black\n";
-    }
-    first.program = appData.firstChessProgram;
-    second.program = appData.secondChessProgram;
-    first.host = appData.firstHost;
-    second.host = appData.secondHost;
-    first.dir = appData.firstDirectory;
-    second.dir = appData.secondDirectory;
-    first.other = &second;
-    second.other = &first;
-    first.initString = appData.initString;
-    second.initString = appData.secondInitString;
-    first.computerString = appData.firstComputerString;
-    second.computerString = appData.secondComputerString;
-    first.useSigint = second.useSigint = TRUE;
-    first.useSigterm = second.useSigterm = TRUE;
-    first.reuse = appData.reuseFirst;
-    second.reuse = appData.reuseSecond;
-    first.useSetboard = second.useSetboard = FALSE;
-    first.useSAN = second.useSAN = FALSE;
-    first.usePing = second.usePing = FALSE;
-    first.lastPing = second.lastPing = 0;
-    first.lastPong = second.lastPong = 0;
-    first.usePlayother = second.usePlayother = FALSE;
-    first.useColors = second.useColors = TRUE;
-    first.useUsermove = second.useUsermove = FALSE;
-    first.sendICS = second.sendICS = FALSE;
-    first.sendName = second.sendName = appData.icsActive;
-    first.sdKludge = second.sdKludge = FALSE;
-    first.stKludge = second.stKludge = FALSE;
-    TidyProgramName(first.program, first.host, first.tidy);
-    TidyProgramName(second.program, second.host, second.tidy);
-    first.matchWins = second.matchWins = 0;
-    strcpy(first.variants, appData.variant);
-    strcpy(second.variants, appData.variant);
-    first.analysisSupport = second.analysisSupport = 2; /* detect */
-    first.analyzing = second.analyzing = FALSE;
-    first.initDone = second.initDone = FALSE;
-
-    if (appData.firstProtocolVersion > PROTOVER ||
-	appData.firstProtocolVersion < 1) {
-      char buf[MSG_SIZ];
-      sprintf(buf, "protocol version %d not supported",
-	      appData.firstProtocolVersion);
-      DisplayFatalError(buf, 0, 2);
-    } else {
-      first.protocolVersion = appData.firstProtocolVersion;
-    }
-
-    if (appData.secondProtocolVersion > PROTOVER ||
-	appData.secondProtocolVersion < 1) {
-      char buf[MSG_SIZ];
-      sprintf(buf, "protocol version %d not supported",
-	      appData.secondProtocolVersion);
-      DisplayFatalError(buf, 0, 2);
-    } else {
-      second.protocolVersion = appData.secondProtocolVersion;
-    }
-
-    if (appData.icsActive) {
-        appData.clockMode = TRUE;  /* changes dynamically in ICS mode */
-    } else if (*appData.searchTime != NULLCHAR || appData.noChessProgram) {
-	appData.clockMode = FALSE;
-	first.sendTime = second.sendTime = 0;
-    }
-    
-#if ZIPPY
-    /* Override some settings from environment variables, for backward
-       compatibility.  Unfortunately it's not feasible to have the env
-       vars just set defaults, at least in xboard.  Ugh.
-    */
-    if (appData.icsActive && (appData.zippyPlay || appData.zippyTalk)) {
-      ZippyInit();
-    }
-#endif
-    
-    if (appData.noChessProgram) {
-	programVersion = (char*) malloc(5 + strlen(PRODUCT) + strlen(VERSION)
-					+ strlen(PATCHLEVEL));
-	sprintf(programVersion, "%s %s.%s", PRODUCT, VERSION, PATCHLEVEL);
-    } else {
-	char *p, *q;
-	q = first.program;
-	while (*q != ' ' && *q != NULLCHAR) q++;
-	p = q;
-	while (p > first.program && *(p-1) != '/') p--;
-	programVersion = (char*) malloc(8 + strlen(PRODUCT) + strlen(VERSION)
-					+ strlen(PATCHLEVEL) + (q - p));
-	sprintf(programVersion, "%s %s.%s + ", PRODUCT, VERSION, PATCHLEVEL);
-	strncat(programVersion, p, q - p);
-    }
-
-    if (!appData.icsActive) {
-      char buf[MSG_SIZ];
-      /* Check for variants that are supported only in ICS mode,
-         or not at all.  Some that are accepted here nevertheless
-         have bugs; see comments below.
-      */
-      VariantClass variant = StringToVariant(appData.variant);
-      switch (variant) {
-      case VariantBughouse:     /* need four players and two boards */
-      case VariantKriegspiel:   /* need to hide pieces and move details */
-      case VariantFischeRandom: /* castling doesn't work, shuffle not done */
-	sprintf(buf, "Variant %s supported only in ICS mode", appData.variant);
-	DisplayFatalError(buf, 0, 2);
-	return;
-
-      case VariantUnknown:
-      case VariantLoadable:
-      case Variant29:
-      case Variant30:
-      case Variant31:
-      case Variant32:
-      case Variant33:
-      case Variant34:
-      case Variant35:
-      case Variant36:
-      default:
-	sprintf(buf, "Unknown variant name %s", appData.variant);
-	DisplayFatalError(buf, 0, 2);
-	return;
-
-      case VariantNormal:     /* definitely works! */
-      case VariantWildCastle: /* pieces not automatically shuffled */
-      case VariantNoCastle:   /* pieces not automatically shuffled */
-      case VariantCrazyhouse: /* holdings not shown,
-			         offboard interposition not understood */
-      case VariantLosers:     /* should work except for win condition,
-			         and doesn't know captures are mandatory */
-      case VariantSuicide:    /* should work except for win condition,
-			         and doesn't know captures are mandatory */
-      case VariantGiveaway:   /* should work except for win condition,
-			         and doesn't know captures are mandatory */
-      case VariantTwoKings:   /* should work */
-      case VariantAtomic:     /* should work except for win condition */
-      case Variant3Check:     /* should work except for win condition */
-      case VariantShatranj:   /* might work if TestLegality is off */
-	break;
-      }
-    }
-}
-
-int
-ParseTimeControl(tc, ti, mps)
-     char *tc;
-     int ti;
-     int mps;
-{
-    int matched, min, sec;
-
-    matched = sscanf(tc, "%d:%d", &min, &sec);
-    if (matched == 1) {
-	timeControl = min * 60 * 1000;
-    } else if (matched == 2) {
-	timeControl = (min * 60 + sec) * 1000;
-    } else {
-	return FALSE;
-    }
-
-    if (ti >= 0) {
-	timeIncrement = ti * 1000;  /* convert to ms */
-	movesPerSession = 0;
-    } else {
-	timeIncrement = 0;
-	movesPerSession = mps;
-    }
-    return TRUE;
-}
-
-void
-InitBackEnd2()
-{
-    if (appData.debugMode) {
-	fprintf(debugFP, "%s\n", programVersion);
-    }
-
-    if (appData.matchGames > 0) {
-	appData.matchMode = TRUE;
-    } else if (appData.matchMode) {
-	appData.matchGames = 1;
-    }
-    Reset(TRUE, FALSE);
-    if (appData.noChessProgram || first.protocolVersion == 1) {
-      InitBackEnd3();
-    } else {
-      /* kludge: allow timeout for initial "feature" commands */
-      FreezeUI();
-      DisplayMessage("", "Starting chess program");
-      ScheduleDelayedEvent(InitBackEnd3, FEATURE_TIMEOUT);
-    }
-}
-
-void
-InitBackEnd3 P((void))
-{
-    GameMode initialMode;
-    char buf[MSG_SIZ];
-    int err;
-
-    InitChessProgram(&first);
-
-    if (appData.icsActive) {
-	err = establish();
-	if (err != 0) {
-	    if (*appData.icsCommPort != NULLCHAR) {
-		sprintf(buf, "Could not open comm port %s",  
-			appData.icsCommPort);
-	    } else {
-		sprintf(buf, "Could not connect to host %s, port %s",  
-			appData.icsHost, appData.icsPort);
-	    }
-	    DisplayFatalError(buf, err, 1);
-	    return;
-	}
-	SetICSMode();
-	telnetISR =
-	  AddInputSource(icsPR, FALSE, read_from_ics, &telnetISR);
-	fromUserISR =
-	  AddInputSource(NoProc, FALSE, read_from_player, &fromUserISR);
-    } else if (appData.noChessProgram) {
-	SetNCPMode();
-    } else {
-	SetGNUMode();
-    }
-
-    if (*appData.cmailGameName != NULLCHAR) {
-	SetCmailMode();
-	OpenLoopback(&cmailPR);
-	cmailISR =
-	  AddInputSource(cmailPR, FALSE, CmailSigHandlerCallBack, &cmailISR);
-    }
-    
-    ThawUI();
-    DisplayMessage("", "");
-    if (StrCaseCmp(appData.initialMode, "") == 0) {
-      initialMode = BeginningOfGame;
-    } else if (StrCaseCmp(appData.initialMode, "TwoMachines") == 0) {
-      initialMode = TwoMachinesPlay;
-    } else if (StrCaseCmp(appData.initialMode, "AnalyzeFile") == 0) {
-      initialMode = AnalyzeFile; 
-    } else if (StrCaseCmp(appData.initialMode, "Analysis") == 0) {
-      initialMode = AnalyzeMode;
-    } else if (StrCaseCmp(appData.initialMode, "MachineWhite") == 0) {
-      initialMode = MachinePlaysWhite;
-    } else if (StrCaseCmp(appData.initialMode, "MachineBlack") == 0) {
-      initialMode = MachinePlaysBlack;
-    } else if (StrCaseCmp(appData.initialMode, "EditGame") == 0) {
-      initialMode = EditGame;
-    } else if (StrCaseCmp(appData.initialMode, "EditPosition") == 0) {
-      initialMode = EditPosition;
-    } else if (StrCaseCmp(appData.initialMode, "Training") == 0) {
-      initialMode = Training;
-    } else {
-      sprintf(buf, "Unknown initialMode %s", appData.initialMode);
-      DisplayFatalError(buf, 0, 2);
-      return;
-    }
-
-    if (appData.matchMode) {
-	/* Set up machine vs. machine match */
-	if (appData.noChessProgram) {
-	    DisplayFatalError("Can't have a match with no chess programs",
-			      0, 2);
-	    return;
-	}
-	matchMode = TRUE;
-	matchGame = 1;
-	if (*appData.loadGameFile != NULLCHAR) {
-	    if (!LoadGameFromFile(appData.loadGameFile,
-				  appData.loadGameIndex,
-				  appData.loadGameFile, FALSE)) {
-		DisplayFatalError("Bad game file", 0, 1);
-		return;
-	    }
-	} else if (*appData.loadPositionFile != NULLCHAR) {
-	    if (!LoadPositionFromFile(appData.loadPositionFile,
-				      appData.loadPositionIndex,
-				      appData.loadPositionFile)) {
-		DisplayFatalError("Bad position file", 0, 1);
-		return;
-	    }
-	}
-	TwoMachinesEvent();
-    } else if (*appData.cmailGameName != NULLCHAR) {
-	/* Set up cmail mode */
-	ReloadCmailMsgEvent(TRUE);
-    } else {
-	/* Set up other modes */
-	if (initialMode == AnalyzeFile) {
-	  if (*appData.loadGameFile == NULLCHAR) {
-	    DisplayFatalError("AnalyzeFile mode requires a game file", 0, 1);
-	    return;
-	  }
-	}
-	if (*appData.loadGameFile != NULLCHAR) {
-	    (void) LoadGameFromFile(appData.loadGameFile,
-				    appData.loadGameIndex,
-				    appData.loadGameFile, TRUE);
-	} else if (*appData.loadPositionFile != NULLCHAR) {
-	    (void) LoadPositionFromFile(appData.loadPositionFile,
-					appData.loadPositionIndex,
-					appData.loadPositionFile);
-	}
-	if (initialMode == AnalyzeMode) {
-	  if (appData.noChessProgram) {
-	    DisplayFatalError("Analysis mode requires a chess engine", 0, 2);
-	    return;
-	  }
-	  if (appData.icsActive) {
-	    DisplayFatalError("Analysis mode does not work with ICS mode",0,2);
-	    return;
-	  }
-	  AnalyzeModeEvent();
-	} else if (initialMode == AnalyzeFile) {
-	  ShowThinkingEvent(TRUE);
-	  AnalyzeFileEvent();
-	  AnalysisPeriodicEvent(1);
-	} else if (initialMode == MachinePlaysWhite) {
-	  if (appData.noChessProgram) {
-	    DisplayFatalError("MachineWhite mode requires a chess engine",
-			      0, 2);
-	    return;
-	  }
-	  if (appData.icsActive) {
-	    DisplayFatalError("MachineWhite mode does not work with ICS mode",
-			      0, 2);
-	    return;
-	  }
-	  MachineWhiteEvent();
-	} else if (initialMode == MachinePlaysBlack) {
-	  if (appData.noChessProgram) {
-	    DisplayFatalError("MachineBlack mode requires a chess engine",
-			      0, 2);
-	    return;
-	  }
-	  if (appData.icsActive) {
-	    DisplayFatalError("MachineBlack mode does not work with ICS mode",
-			      0, 2);
-	    return;
-	  }
-	  MachineBlackEvent();
-	} else if (initialMode == TwoMachinesPlay) {
-	  if (appData.noChessProgram) {
-	    DisplayFatalError("TwoMachines mode requires a chess engine",
-			      0, 2);
-	    return;
-	  }
-	  if (appData.icsActive) {
-	    DisplayFatalError("TwoMachines mode does not work with ICS mode",
-			      0, 2);
-	    return;
-	  }
-	  TwoMachinesEvent();
-	} else if (initialMode == EditGame) {
-	  EditGameEvent();
-	} else if (initialMode == EditPosition) {
-	  EditPositionEvent();
-	} else if (initialMode == Training) {
-	  if (*appData.loadGameFile == NULLCHAR) {
-	    DisplayFatalError("Training mode requires a game file", 0, 2);
-	    return;
-	  }
-	  TrainingEvent();
-	}
-    }
-}
-
-/*
- * Establish will establish a contact to a remote host.port.
- * Sets icsPR to a ProcRef for a process (or pseudo-process)
- *  used to talk to the host.
- * Returns 0 if okay, error code if not.
- */
-int
-establish()
-{
-    char buf[MSG_SIZ];
-
-    if (*appData.icsCommPort != NULLCHAR) {
-	/* Talk to the host through a serial comm port */
-	return OpenCommPort(appData.icsCommPort, &icsPR);
-
-    } else if (*appData.gateway != NULLCHAR) {
-	if (*appData.remoteShell == NULLCHAR) {
-	    /* Use the rcmd protocol to run telnet program on a gateway host */
-	    sprintf(buf, "%s %s %s",
-		    appData.telnetProgram, appData.icsHost, appData.icsPort);
-	    return OpenRcmd(appData.gateway, appData.remoteUser, buf, &icsPR);
-
-	} else {
-	    /* Use the rsh program to run telnet program on a gateway host */
-	    if (*appData.remoteUser == NULLCHAR) {
-		sprintf(buf, "%s %s %s %s %s", appData.remoteShell,
-			appData.gateway, appData.telnetProgram,
-			appData.icsHost, appData.icsPort);
-	    } else {
-		sprintf(buf, "%s %s -l %s %s %s %s",
-			appData.remoteShell, appData.gateway, 
-			appData.remoteUser, appData.telnetProgram,
-			appData.icsHost, appData.icsPort);
-	    }
-	    return StartChildProcess(buf, "", &icsPR);
-
-	}
-    } else if (appData.useTelnet) {
-	return OpenTelnet(appData.icsHost, appData.icsPort, &icsPR);
-
-    } else {
-	/* TCP socket interface differs somewhat between
-	   Unix and NT; handle details in the front end.
-	   */
-	return OpenTCP(appData.icsHost, appData.icsPort, &icsPR);
-    }
-}
-
-void
-show_bytes(fp, buf, count)
-     FILE *fp;
-     char *buf;
-     int count;
-{
-    while (count--) {
-	if (*buf < 040 || *(unsigned char *) buf > 0177) {
-	    fprintf(fp, "\\%03o", *buf & 0xff);
-	} else {
-	    putc(*buf, fp);
-	}
-	buf++;
-    }
-    fflush(fp);
-}
-
-/* Returns an errno value */
-int
-OutputMaybeTelnet(pr, message, count, outError)
-     ProcRef pr;
-     char *message;
-     int count;
-     int *outError;
-{
-    char buf[8192], *p, *q, *buflim;
-    int left, newcount, outcount;
-
-    if (*appData.icsCommPort != NULLCHAR || appData.useTelnet ||
-	*appData.gateway != NULLCHAR) {
-	if (appData.debugMode) {
-	    fprintf(debugFP, ">ICS: ");
-	    show_bytes(debugFP, message, count);
-	    fprintf(debugFP, "\n");
-	}
-	return OutputToProcess(pr, message, count, outError);
-    }
-
-    buflim = &buf[sizeof(buf)-1]; /* allow 1 byte for expanding last char */
-    p = message;
-    q = buf;
-    left = count;
-    newcount = 0;
-    while (left) {
-	if (q >= buflim) {
-	    if (appData.debugMode) {
-		fprintf(debugFP, ">ICS: ");
-		show_bytes(debugFP, buf, newcount);
-		fprintf(debugFP, "\n");
-	    }
-	    outcount = OutputToProcess(pr, buf, newcount, outError);
-	    if (outcount < newcount) return -1; /* to be sure */
-	    q = buf;
-	    newcount = 0;
-	}
-	if (*p == '\n') {
-	    *q++ = '\r';
-	    newcount++;
-	} else if (((unsigned char) *p) == TN_IAC) {
-	    *q++ = (char) TN_IAC;
-	    newcount ++;
-	}
-	*q++ = *p++;
-	newcount++;
-	left--;
-    }
-    if (appData.debugMode) {
-	fprintf(debugFP, ">ICS: ");
-	show_bytes(debugFP, buf, newcount);
-	fprintf(debugFP, "\n");
-    }
-    outcount = OutputToProcess(pr, buf, newcount, outError);
-    if (outcount < newcount) return -1; /* to be sure */
-    return count;
-}
-
-void
-read_from_player(isr, closure, message, count, error)
-     InputSourceRef isr;
-     VOIDSTAR closure;
-     char *message;
-     int count;
-     int error;
-{
-    int outError, outCount;
-    static int gotEof = 0;
-
-    /* Pass data read from player on to ICS */
-    if (count > 0) {
-	gotEof = 0;
-	outCount = OutputMaybeTelnet(icsPR, message, count, &outError);
-	if (outCount < count) {
-	    DisplayFatalError("Error writing to ICS", outError, 1);
-	}
-    } else if (count < 0) {
-	RemoveInputSource(isr);
-	DisplayFatalError("Error reading from keyboard", error, 1);
-    } else if (gotEof++ > 0) {
-	RemoveInputSource(isr);
-	DisplayFatalError("Got end of file from keyboard", 0, 0);
-    }
-}
-
-void
-SendToICS(s)
-     char *s;
-{
-    int count, outCount, outError;
-
-    if (icsPR == NULL) return;
-
-    count = strlen(s);
-    outCount = OutputMaybeTelnet(icsPR, s, count, &outError);
-    if (outCount < count) {
-	DisplayFatalError("Error writing to ICS", outError, 1);
-    }
-}
-
-/* This is used for sending logon scripts to the ICS. Sending
-   without a delay causes problems when using timestamp on ICC
-   (at least on my machine). */
-void
-SendToICSDelayed(s,msdelay)
-     char *s;
-     long msdelay;
-{
-    int count, outCount, outError;
-
-    if (icsPR == NULL) return;
-
-    count = strlen(s);
-    if (appData.debugMode) {
-	fprintf(debugFP, ">ICS: ");
-	show_bytes(debugFP, s, count);
-	fprintf(debugFP, "\n");
-    }
-    outCount = OutputToProcessDelayed(icsPR, s, count, &outError,
-				      msdelay);
-    if (outCount < count) {
-	DisplayFatalError("Error writing to ICS", outError, 1);
-    }
-}
-
-
-/* Remove all highlighting escape sequences in s
-   Also deletes any suffix starting with '(' 
-   */
-char *
-StripHighlightAndTitle(s)
-     char *s;
-{
-    static char retbuf[MSG_SIZ];
-    char *p = retbuf;
-
-    while (*s != NULLCHAR) {
-	while (*s == '\033') {
-	    while (*s != NULLCHAR && !isalpha(*s)) s++;
-	    if (*s != NULLCHAR) s++;
-	}
-	while (*s != NULLCHAR && *s != '\033') {
-	    if (*s == '(' || *s == '[') {
-		*p = NULLCHAR;
-		return retbuf;
-	    }
-	    *p++ = *s++;
-	}
-    }
-    *p = NULLCHAR;
-    return retbuf;
-}
-
-/* Remove all highlighting escape sequences in s */
-char *
-StripHighlight(s)
-     char *s;
-{
-    static char retbuf[MSG_SIZ];
-    char *p = retbuf;
-
-    while (*s != NULLCHAR) {
-	while (*s == '\033') {
-	    while (*s != NULLCHAR && !isalpha(*s)) s++;
-	    if (*s != NULLCHAR) s++;
-	}
-	while (*s != NULLCHAR && *s != '\033') {
-	    *p++ = *s++;
-	}
-    }
-    *p = NULLCHAR;
-    return retbuf;
-}
-
-char *variantNames[] = VARIANT_NAMES;
-char *
-VariantName(v)
-     VariantClass v;
-{
-    return variantNames[v];
-}
-
-
-/* Identify a variant from the strings the chess servers use or the
-   PGN Variant tag names we use. */
-VariantClass
-StringToVariant(e)
-     char *e;
-{
-    char *p;
-    int wnum = -1;
-    VariantClass v = VariantNormal;
-    int i, found = FALSE;
-    char buf[MSG_SIZ];
-
-    if (!e) return v;
-    
-    for (i=0; i<sizeof(variantNames)/sizeof(char*); i++) {
-      if (StrCaseStr(e, variantNames[i])) {
-	v = (VariantClass) i;
-	found = TRUE;
-	break;
-      }
-    }
-
-    if (!found) {
-      if ((StrCaseStr(e, "fischer") && StrCaseStr(e, "random"))
-	  || StrCaseStr(e, "wild/fr")) {
-        v = VariantFischeRandom;
-      } else if ((i = 4, p = StrCaseStr(e, "wild")) ||
-		 (i = 1, p = StrCaseStr(e, "w"))) {
-	p += i;
-	while (*p && (isspace(*p) || *p == '(' || *p == '/')) p++;
-	if (isdigit(*p)) {
-	  wnum = atoi(p);
-	} else {
-	  wnum = -1;
-	}
-	switch (wnum) {
-	case 0: /* FICS only, actually */
-	case 1:
-	  /* Castling legal even if K starts on d-file */
-	  v = VariantWildCastle;
-	  break;
-	case 2:
-	case 3:
-	case 4:
-	  /* Castling illegal even if K & R happen to start in
-	     normal positions. */
-	  v = VariantNoCastle;
-	  break;
-	case 5:
-	case 7:
-	case 8:
-	case 10:
-	case 11:
-	case 12:
-	case 13:
-	case 14:
-	case 15:
-	case 18:
-	case 19:
-	  /* Castling legal iff K & R start in normal positions */
-	  v = VariantNormal;
-	  break;
-	case 6:
-	case 20:
-	case 21:
-	  /* Special wilds for position setup; unclear what to do here */
-	  v = VariantLoadable;
-	  break;
-	case 9:
-	  /* Bizarre ICC game */
-	  v = VariantTwoKings;
-	  break;
-	case 16:
-	  v = VariantKriegspiel;
-	  break;
-	case 17:
-	  v = VariantLosers;
-	  break;
-	case 22:
-	  v = VariantFischeRandom;
-	  break;
-	case 23:
-	  v = VariantCrazyhouse;
-	  break;
-	case 24:
-	  v = VariantBughouse;
-	  break;
-	case 25:
-	  v = Variant3Check;
-	  break;
-	case 26:
-	  /* Not quite the same as FICS suicide! */
-	  v = VariantGiveaway;
-	  break;
-	case 27:
-	  v = VariantAtomic;
-	  break;
-	case 28:
-	  v = VariantShatranj;
-	  break;
-
-	/* Temporary names for future ICC types.  The name *will* change in 
-	   the next xboard/WinBoard release after ICC defines it. */
-	case 29:
-	  v = Variant29;
-	  break;
-	case 30:
-	  v = Variant30;
-	  break;
-	case 31:
-	  v = Variant31;
-	  break;
-	case 32:
-	  v = Variant32;
-	  break;
-	case 33:
-	  v = Variant33;
-	  break;
-	case 34:
-	  v = Variant34;
-	  break;
-	case 35:
-	  v = Variant35;
-	  break;
-	case 36:
-	  v = Variant36;
-	  break;
-
-	case -1:
-	  /* Found "wild" or "w" in the string but no number;
-	     must assume it's normal chess. */
-	  v = VariantNormal;
-	  break;
-	default:
-	  sprintf(buf, "Unknown wild type %d", wnum);
-	  DisplayError(buf, 0);
-	  v = VariantUnknown;
-	  break;
-	}
-      }
-    }
-    if (appData.debugMode) {
-      fprintf(debugFP, "recognized '%s' (%d) as variant %s\n",
-	      e, wnum, VariantName(v));
-    }
-    return v;
-}
-
-static int leftover_start = 0, leftover_len = 0;
-char star_match[STAR_MATCH_N][MSG_SIZ];
-
-/* Test whether pattern is present at &buf[*index]; if so, return TRUE,
-   advance *index beyond it, and set leftover_start to the new value of
-   *index; else return FALSE.  If pattern contains the character '*', it
-   matches any sequence of characters not containing '\r', '\n', or the
-   character following the '*' (if any), and the matched sequence(s) are
-   copied into star_match.
-   */
-int
-looking_at(buf, index, pattern)
-     char *buf;
-     int *index;
-     char *pattern;
-{
-    char *bufp = &buf[*index], *patternp = pattern;
-    int star_count = 0;
-    char *matchp = star_match[0];
-    
-    for (;;) {
-	if (*patternp == NULLCHAR) {
-	    *index = leftover_start = bufp - buf;
-	    *matchp = NULLCHAR;
-	    return TRUE;
-	}
-	if (*bufp == NULLCHAR) return FALSE;
-	if (*patternp == '*') {
-	    if (*bufp == *(patternp + 1)) {
-		*matchp = NULLCHAR;
-		matchp = star_match[++star_count];
-		patternp += 2;
-		bufp++;
-		continue;
-	    } else if (*bufp == '\n' || *bufp == '\r') {
-		patternp++;
-		if (*patternp == NULLCHAR)
-		  continue;
-		else
-		  return FALSE;
-	    } else {
-		*matchp++ = *bufp++;
-		continue;
-	    }
-	}
-	if (*patternp != *bufp) return FALSE;
-	patternp++;
-	bufp++;
-    }
-}
-
-void
-SendToPlayer(data, length)
-     char *data;
-     int length;
-{
-    int error, outCount;
-    outCount = OutputToProcess(NoProc, data, length, &error);
-    if (outCount < length) {
-	DisplayFatalError("Error writing to display", error, 1);
-    }
-}
-
-void
-PackHolding(packed, holding)
-     char packed[];
-     char *holding;
-{
-    char *p = holding;
-    char *q = packed;
-    int runlength = 0;
-    int curr = 9999;
-    do {
-	if (*p == curr) {
-	    runlength++;
-	} else {
-	    switch (runlength) {
-	      case 0:
-		break;
-	      case 1:
-		*q++ = curr;
-		break;
-	      case 2:
-		*q++ = curr;
-		*q++ = curr;
-		break;
-	      default:
-		sprintf(q, "%d", runlength);
-		while (*q) q++;
-		*q++ = curr;
-		break;
-	    }
-	    runlength = 1;
-	    curr = *p;
-	}
-    } while (*p++);
-    *q = NULLCHAR;
-}
-
-/* Telnet protocol requests from the front end */
-void
-TelnetRequest(ddww, option)
-     unsigned char ddww, option;
-{
-    unsigned char msg[3];
-    int outCount, outError;
-
-    if (*appData.icsCommPort != NULLCHAR || appData.useTelnet) return;
-
-    if (appData.debugMode) {
-	char buf1[8], buf2[8], *ddwwStr, *optionStr;
-	switch (ddww) {
-	  case TN_DO:
-	    ddwwStr = "DO";
-	    break;
-	  case TN_DONT:
-	    ddwwStr = "DONT";
-	    break;
-	  case TN_WILL:
-	    ddwwStr = "WILL";
-	    break;
-	  case TN_WONT:
-	    ddwwStr = "WONT";
-	    break;
-	  default:
-	    ddwwStr = buf1;
-	    sprintf(buf1, "%d", ddww);
-	    break;
-	}
-	switch (option) {
-	  case TN_ECHO:
-	    optionStr = "ECHO";
-	    break;
-	  default:
-	    optionStr = buf2;
-	    sprintf(buf2, "%d", option);
-	    break;
-	}
-	fprintf(debugFP, ">%s %s ", ddwwStr, optionStr);
-    }
-    msg[0] = TN_IAC;
-    msg[1] = ddww;
-    msg[2] = option;
-    outCount = OutputToProcess(icsPR, (char *)msg, 3, &outError);
-    if (outCount < 3) {
-	DisplayFatalError("Error writing to ICS", outError, 1);
-    }
-}
-
-void
-DoEcho()
-{
-    if (!appData.icsActive) return;
-    TelnetRequest(TN_DO, TN_ECHO);
-}
-
-void
-DontEcho()
-{
-    if (!appData.icsActive) return;
-    TelnetRequest(TN_DONT, TN_ECHO);
-}
-
-static int loggedOn = FALSE;
-
-/*-- Game start info cache: --*/
-int gs_gamenum;
-char gs_kind[MSG_SIZ];
-static char player1Name[128] = "";
-static char player2Name[128] = "";
-static int player1Rating = -1;
-static int player2Rating = -1;
-/*----------------------------*/
-
-void
-read_from_ics(isr, closure, data, count, error)
-     InputSourceRef isr;
-     VOIDSTAR closure;
-     char *data;
-     int count;
-     int error;
-{
-#define BUF_SIZE 8192
-#define STARTED_NONE 0
-#define STARTED_MOVES 1
-#define STARTED_BOARD 2
-#define STARTED_OBSERVE 3
-#define STARTED_HOLDINGS 4
-#define STARTED_CHATTER 5
-#define STARTED_COMMENT 6
-#define STARTED_MOVES_NOHIDE 7
-    
-    static int started = STARTED_NONE;
-    static char parse[20000];
-    static int parse_pos = 0;
-    static char buf[BUF_SIZE + 1];
-    static int firstTime = TRUE, intfSet = FALSE;
-    static ColorClass curColor = ColorNormal;
-    static ColorClass prevColor = ColorNormal;
-    static int savingComment = FALSE;
-    char str[500];
-    int i, oldi;
-    int buf_len;
-    int next_out;
-    int tkind;
-    char *p;
-
-#ifdef WIN32
-    if (appData.debugMode) {
-      if (!error) {
-	fprintf(debugFP, "<ICS: ");
-	show_bytes(debugFP, data, count);
-	fprintf(debugFP, "\n");
-      }
-    }
-#endif
-
-    if (count > 0) {
-	/* If last read ended with a partial line that we couldn't parse,
-	   prepend it to the new read and try again. */
-	if (leftover_len > 0) {
-	    for (i=0; i<leftover_len; i++)
-	      buf[i] = buf[leftover_start + i];
-	}
-
-	/* Copy in new characters, removing nulls and \r's */
-	buf_len = leftover_len;
-	for (i = 0; i < count; i++) {
-	    if (data[i] != NULLCHAR && data[i] != '\r')
-	      buf[buf_len++] = data[i];
-	}
-
-	buf[buf_len] = NULLCHAR;
-	next_out = leftover_len;
-	leftover_start = 0;
-	
-	i = 0;
-	while (i < buf_len) {
-	    /* Deal with part of the TELNET option negotiation
-	       protocol.  We refuse to do anything beyond the
-	       defaults, except that we allow the WILL ECHO option,
-	       which ICS uses to turn off password echoing when we are
-	       directly connected to it.  We reject this option
-	       if localLineEditing mode is on (always on in xboard)
-               and we are talking to port 23, which might be a real
-	       telnet server that will try to keep WILL ECHO on permanently.
-             */
-	    if (buf_len - i >= 3 && (unsigned char) buf[i] == TN_IAC) {
-		static int remoteEchoOption = FALSE; /* telnet ECHO option */
-		unsigned char option;
-		oldi = i;
-		switch ((unsigned char) buf[++i]) {
-		  case TN_WILL:
-		    if (appData.debugMode)
-		      fprintf(debugFP, "\n<WILL ");
-		    switch (option = (unsigned char) buf[++i]) {
-		      case TN_ECHO:
-			if (appData.debugMode)
-			  fprintf(debugFP, "ECHO ");
-			/* Reply only if this is a change, according
-			   to the protocol rules. */
-			if (remoteEchoOption) break;
-			if (appData.localLineEditing &&
-			    atoi(appData.icsPort) == TN_PORT) {
-			    TelnetRequest(TN_DONT, TN_ECHO);
-			} else {
-			    EchoOff();
-			    TelnetRequest(TN_DO, TN_ECHO);
-			    remoteEchoOption = TRUE;
-			}
-			break;
-		      default:
-			if (appData.debugMode)
-			  fprintf(debugFP, "%d ", option);
-			/* Whatever this is, we don't want it. */
-			TelnetRequest(TN_DONT, option);
-			break;
-		    }
-		    break;
-		  case TN_WONT:
-		    if (appData.debugMode)
-		      fprintf(debugFP, "\n<WONT ");
-		    switch (option = (unsigned char) buf[++i]) {
-		      case TN_ECHO:
-			if (appData.debugMode)
-			  fprintf(debugFP, "ECHO ");
-			/* Reply only if this is a change, according
-			   to the protocol rules. */
-			if (!remoteEchoOption) break;
-			EchoOn();
-			TelnetRequest(TN_DONT, TN_ECHO);
-			remoteEchoOption = FALSE;
-			break;
-		      default:
-			if (appData.debugMode)
-			  fprintf(debugFP, "%d ", (unsigned char) option);
-			/* Whatever this is, it must already be turned
-			   off, because we never agree to turn on
-			   anything non-default, so according to the
-			   protocol rules, we don't reply. */
-			break;
-		    }
-		    break;
-		  case TN_DO:
-		    if (appData.debugMode)
-		      fprintf(debugFP, "\n<DO ");
-		    switch (option = (unsigned char) buf[++i]) {
-		      default:
-			/* Whatever this is, we refuse to do it. */
-			if (appData.debugMode)
-			  fprintf(debugFP, "%d ", option);
-			TelnetRequest(TN_WONT, option);
-			break;
-		    }
-		    break;
-		  case TN_DONT:
-		    if (appData.debugMode)
-		      fprintf(debugFP, "\n<DONT ");
-		    switch (option = (unsigned char) buf[++i]) {
-		      default:
-			if (appData.debugMode)
-			  fprintf(debugFP, "%d ", option);
-			/* Whatever this is, we are already not doing
-			   it, because we never agree to do anything
-			   non-default, so according to the protocol
-			   rules, we don't reply. */
-			break;
-		    }
-		    break;
-		  case TN_IAC:
-		    if (appData.debugMode)
-		      fprintf(debugFP, "\n<IAC ");
-		    /* Doubled IAC; pass it through */
-		    i--;
-		    break;
-		  default:
-		    if (appData.debugMode)
-		      fprintf(debugFP, "\n<%d ", (unsigned char) buf[i]);
-		    /* Drop all other telnet commands on the floor */
-		    break;
-		}
-		if (oldi > next_out)
-		  SendToPlayer(&buf[next_out], oldi - next_out);
-		if (++i > next_out)
-		  next_out = i;
-		continue;
-	    }
-		
-	    /* OK, this at least will *usually* work */
-	    if (!loggedOn && looking_at(buf, &i, "ics%")) {
-		loggedOn = TRUE;
-	    }
-	    
-	    if (loggedOn && !intfSet) {
-		if (ics_type == ICS_ICC) {
-		  sprintf(str,
-			  "/set-quietly interface %s\n/set-quietly style 12\n",
-			  programVersion);
-
-		} else if (ics_type == ICS_CHESSNET) {
-		  sprintf(str, "/style 12\n");
-		} else {
-		  strcpy(str, "alias $ @\n$set interface ");
-		  strcat(str, programVersion);
-		  strcat(str, "\n$iset startpos 1\n$iset ms 1\n");
-#ifdef WIN32
-		  strcat(str, "$iset nohighlight 1\n");
-#endif
-		  strcat(str, "$iset lock 1\n$style 12\n");
-		}
-		SendToICS(str);
-		intfSet = TRUE;
-	    }
-
-	    if (started == STARTED_COMMENT) {
-		/* Accumulate characters in comment */
-		parse[parse_pos++] = buf[i];
-		if (buf[i] == '\n') {
-		    parse[parse_pos] = NULLCHAR;
-		    AppendComment(forwardMostMove, StripHighlight(parse));
-		    started = STARTED_NONE;
-		} else {
-		    /* Don't match patterns against characters in chatter */
-		    i++;
-		    continue;
-		}
-	    }
-	    if (started == STARTED_CHATTER) {
-		if (buf[i] != '\n') {
-		    /* Don't match patterns against characters in chatter */
-		    i++;
-		    continue;
-		}
-		started = STARTED_NONE;
-	    }
-
-            /* Kludge to deal with rcmd protocol */
-	    if (firstTime && looking_at(buf, &i, "\001*")) {
-		DisplayFatalError(&buf[1], 0, 1);
-		continue;
-	    } else {
-	        firstTime = FALSE;
-	    }
-
-	    if (!loggedOn && looking_at(buf, &i, "chessclub.com")) {
-		ics_type = ICS_ICC;
-		ics_prefix = "/";
-		if (appData.debugMode)
-		  fprintf(debugFP, "ics_type %d\n", ics_type);
-		continue;
-	    }
-	    if (!loggedOn && looking_at(buf, &i, "freechess.org")) {
-		ics_type = ICS_FICS;
-		ics_prefix = "$";
-		if (appData.debugMode)
-		  fprintf(debugFP, "ics_type %d\n", ics_type);
-		continue;
-	    }
-	    if (!loggedOn && looking_at(buf, &i, "chess.net")) {
-		ics_type = ICS_CHESSNET;
-		ics_prefix = "/";
-		if (appData.debugMode)
-		  fprintf(debugFP, "ics_type %d\n", ics_type);
-		continue;
-	    }
-
-	    if (!loggedOn &&
-		(looking_at(buf, &i, "\"*\" is *a registered name") ||
-		 looking_at(buf, &i, "Logging you in as \"*\"") ||
-		 looking_at(buf, &i, "will be \"*\""))) {
-	      strcpy(ics_handle, star_match[0]);
-	      continue;
-	    }
-
-	    if (loggedOn && !have_set_title && ics_handle[0] != NULLCHAR) {
-	      char buf[MSG_SIZ];
-	      sprintf(buf, "%s@%s", ics_handle, appData.icsHost);
-	      DisplayIcsInteractionTitle(buf);
-	      have_set_title = TRUE;
-	    }
-
-	    /* skip finger notes */
-	    if (started == STARTED_NONE &&
-		((buf[i] == ' ' && isdigit(buf[i+1])) ||
-		 (buf[i] == '1' && buf[i+1] == '0')) &&
-		buf[i+2] == ':' && buf[i+3] == ' ') {
-	      started = STARTED_CHATTER;
-	      i += 3;
-	      continue;
-	    }
-
-	    /* skip formula vars */
-	    if (started == STARTED_NONE &&
-		buf[i] == 'f' && isdigit(buf[i+1]) && buf[i+2] == ':') {
-	      started = STARTED_CHATTER;
-	      i += 3;
-	      continue;
-	    }
-
-	    oldi = i;
-	    if (appData.zippyTalk || appData.zippyPlay) {
-#if ZIPPY
-		if (ZippyControl(buf, &i) ||
-		    ZippyConverse(buf, &i) ||
-		    (appData.zippyPlay && ZippyMatch(buf, &i))) {
-		    loggedOn = TRUE;
-		    continue;
-		}
-#endif
-	    } else {
-		if (/* Don't color "message" or "messages" output */
-		    (tkind = 5, looking_at(buf, &i, "*. * (*:*): ")) ||
-		    looking_at(buf, &i, "*. * at *:*: ") ||
-		    looking_at(buf, &i, "--* (*:*): ") ||
-		    /* Regular tells and says */
-		    (tkind = 1, looking_at(buf, &i, "* tells you: ")) ||
-		    looking_at(buf, &i, "* (your partner) tells you: ") ||
-		    looking_at(buf, &i, "* says: ") ||
-		    /* Message notifications (same color as tells) */
-		    looking_at(buf, &i, "* has left a message ") ||
-		    looking_at(buf, &i, "* just sent you a message:\n") ||
-		    /* Whispers and kibitzes */
-		    (tkind = 2, looking_at(buf, &i, "* whispers: ")) ||
- 		    looking_at(buf, &i, "* kibitzes: ") ||
- 		    /* Channel tells */
- 		    (tkind = 3, looking_at(buf, &i, "*(*: "))) {
-
-		  if (tkind == 1 && strchr(star_match[0], ':')) {
-		      /* Avoid "tells you:" spoofs in channels */
-		     tkind = 3;
-		  }
-		  if (star_match[0][0] == NULLCHAR ||
-		      strchr(star_match[0], ' ') ||
-		      (tkind == 3 && strchr(star_match[1], ' '))) {
-		    /* Reject bogus matches */
-		    i = oldi;
-		  } else {
-		    if (appData.colorize) {
-		      if (oldi > next_out) {
-			SendToPlayer(&buf[next_out], oldi - next_out);
-			next_out = oldi;
-		      }
-		      switch (tkind) {
-		      case 1:
-			Colorize(ColorTell, FALSE);
-			curColor = ColorTell;
-			break;
-		      case 2:
-			Colorize(ColorKibitz, FALSE);
-			curColor = ColorKibitz;
-			break;
-		      case 3:
-			p = strrchr(star_match[1], '(');
-			if (p == NULL) {
-			  p = star_match[1];
-			} else {
-			  p++;
-			}
-			if (atoi(p) == 1) {
-			  Colorize(ColorChannel1, FALSE);
-			  curColor = ColorChannel1;
-			} else {
-			  Colorize(ColorChannel, FALSE);
-			  curColor = ColorChannel;
-			}
-			break;
-		      case 5:
-			curColor = ColorNormal;
-			break;
-		      }
-		    }
-		    if (started == STARTED_NONE && appData.autoComment &&
-			(gameMode == IcsObserving ||
-			 gameMode == IcsPlayingWhite ||
-			 gameMode == IcsPlayingBlack)) {
-		      parse_pos = i - oldi;
-		      memcpy(parse, &buf[oldi], parse_pos);
-		      parse[parse_pos] = NULLCHAR;
-		      started = STARTED_COMMENT;
-		      savingComment = TRUE;
-		    } else {
-		      started = STARTED_CHATTER;
-		      savingComment = FALSE;
-		    }
-		    loggedOn = TRUE;
-		    continue;
-		  }
-		}
-
-		if (looking_at(buf, &i, "* s-shouts: ") ||
-		    looking_at(buf, &i, "* c-shouts: ")) {
-		    if (appData.colorize) {
-			if (oldi > next_out) {
-			    SendToPlayer(&buf[next_out], oldi - next_out);
-			    next_out = oldi;
-			}
-			Colorize(ColorSShout, FALSE);
-			curColor = ColorSShout;
-		    }
-		    loggedOn = TRUE;
-		    started = STARTED_CHATTER;
-		    continue;
-		}
-
-		if (looking_at(buf, &i, "--->")) {
-		    loggedOn = TRUE;
-		    continue;
-		}
-
-		if (looking_at(buf, &i, "* shouts: ") ||
-		    looking_at(buf, &i, "--> ")) {
-		    if (appData.colorize) {
-			if (oldi > next_out) {
-			    SendToPlayer(&buf[next_out], oldi - next_out);
-			    next_out = oldi;
-			}
-			Colorize(ColorShout, FALSE);
-			curColor = ColorShout;
-		    }
-		    loggedOn = TRUE;
-		    started = STARTED_CHATTER;
-		    continue;
-		}
-
-		if (looking_at( buf, &i, "Challenge:")) {
-		    if (appData.colorize) {
-			if (oldi > next_out) {
-			    SendToPlayer(&buf[next_out], oldi - next_out);
-			    next_out = oldi;
-			}
-			Colorize(ColorChallenge, FALSE);
-			curColor = ColorChallenge;
-		    }
-		    loggedOn = TRUE;
-		    continue;
-		}
-
-		if (looking_at(buf, &i, "* offers you") ||
-		    looking_at(buf, &i, "* offers to be") ||
-		    looking_at(buf, &i, "* would like to") ||
-		    looking_at(buf, &i, "* requests to") ||
-		    looking_at(buf, &i, "Your opponent offers") ||
-		    looking_at(buf, &i, "Your opponent requests")) {
-
-		    if (appData.colorize) {
-			if (oldi > next_out) {
-			    SendToPlayer(&buf[next_out], oldi - next_out);
-			    next_out = oldi;
-			}
-			Colorize(ColorRequest, FALSE);
-			curColor = ColorRequest;
-		    }
-		    continue;
-		}
-
-		if (looking_at(buf, &i, "* (*) seeking")) {
-		    if (appData.colorize) {
-			if (oldi > next_out) {
-			    SendToPlayer(&buf[next_out], oldi - next_out);
-			    next_out = oldi;
-			}
-			Colorize(ColorSeek, FALSE);
-			curColor = ColorSeek;
-		    }
-		    continue;
-		}
-	    }
-
-	    if (looking_at(buf, &i, "\\   ")) {
-		if (prevColor != ColorNormal) {
-		    if (oldi > next_out) {
-			SendToPlayer(&buf[next_out], oldi - next_out);
-			next_out = oldi;
-		    }
-		    Colorize(prevColor, TRUE);
-		    curColor = prevColor;
-		}
-		if (savingComment) {
-		    parse_pos = i - oldi;
-		    memcpy(parse, &buf[oldi], parse_pos);
-		    parse[parse_pos] = NULLCHAR;
-		    started = STARTED_COMMENT;
-		} else {
-		    started = STARTED_CHATTER;
-		}
-		continue;
-	    }
-
-	    if (looking_at(buf, &i, "Black Strength :") ||
-		looking_at(buf, &i, "<<< style 10 board >>>") ||
-		looking_at(buf, &i, "<10>") ||
-		looking_at(buf, &i, "#@#")) {
-		/* Wrong board style */
-		loggedOn = TRUE;
-		SendToICS(ics_prefix);
-		SendToICS("set style 12\n");
-		SendToICS(ics_prefix);
-    	        SendToICS("refresh\n");
-		continue;
-	    }
-	    
-	    if (!have_sent_ICS_logon && looking_at(buf, &i, "login:")) {
-		ICSInitScript();
-		have_sent_ICS_logon = 1;
-		continue;
-	    }
-	      
-	    if (ics_getting_history != H_GETTING_MOVES /*smpos kludge*/ && 
-		(looking_at(buf, &i, "\n<12> ") ||
-		 looking_at(buf, &i, "<12> "))) {
-		loggedOn = TRUE;
-		if (oldi > next_out) {
-		    SendToPlayer(&buf[next_out], oldi - next_out);
-		}
-		next_out = i;
-		started = STARTED_BOARD;
-		parse_pos = 0;
-		continue;
-	    }
-
-	    if ((started == STARTED_NONE && looking_at(buf, &i, "\n<b1> ")) ||
-		looking_at(buf, &i, "<b1> ")) {
-		if (oldi > next_out) {
-		    SendToPlayer(&buf[next_out], oldi - next_out);
-		}
-		next_out = i;
-		started = STARTED_HOLDINGS;
-		parse_pos = 0;
-		continue;
-	    }
-
-	    if (looking_at(buf, &i, "* *vs. * *--- *")) {
-		loggedOn = TRUE;
-		/* Header for a move list -- first line */
-
-		switch (ics_getting_history) {
-		  case H_FALSE:
-		    switch (gameMode) {
-		      case IcsIdle:
-		      case BeginningOfGame:
-			/* User typed "moves" or "oldmoves" while we
-			   were idle.  Pretend we asked for these
-			   moves and soak them up so user can step
-			   through them and/or save them.
-			   */
-			Reset(FALSE, TRUE);
-			gameMode = IcsObserving;
-			ModeHighlight();
-			ics_gamenum = -1;
-			ics_getting_history = H_GOT_UNREQ_HEADER;
-			break;
-		      case EditGame: /*?*/
-		      case EditPosition: /*?*/
-			/* Should above feature work in these modes too? */
-			/* For now it doesn't */
-			ics_getting_history = H_GOT_UNWANTED_HEADER;
-			break;
-		      default:
-			ics_getting_history = H_GOT_UNWANTED_HEADER;
-			break;
-		    }
-		    break;
-		  case H_REQUESTED:
-		    /* Is this the right one? */
-		    if (gameInfo.white && gameInfo.black &&
-			strcmp(gameInfo.white, star_match[0]) == 0 &&
-			strcmp(gameInfo.black, star_match[2]) == 0) {
-			/* All is well */
-			ics_getting_history = H_GOT_REQ_HEADER;
-		    }
-		    break;
-		  case H_GOT_REQ_HEADER:
-		  case H_GOT_UNREQ_HEADER:
-		  case H_GOT_UNWANTED_HEADER:
-		  case H_GETTING_MOVES:
-		    /* Should not happen */
-		    DisplayError("Error gathering move list: two headers", 0);
-		    ics_getting_history = H_FALSE;
-		    break;
-		}
-
-		/* Save player ratings into gameInfo if needed */
-		if ((ics_getting_history == H_GOT_REQ_HEADER ||
-		     ics_getting_history == H_GOT_UNREQ_HEADER) &&
-		    (gameInfo.whiteRating == -1 ||
-		     gameInfo.blackRating == -1)) {
-
-		    gameInfo.whiteRating = string_to_rating(star_match[1]);
-		    gameInfo.blackRating = string_to_rating(star_match[3]);
-		    if (appData.debugMode)
-		      fprintf(debugFP, "Ratings from header: W %d, B %d\n", 
-			      gameInfo.whiteRating, gameInfo.blackRating);
-		}
-		continue;
-	    }
-
-	    if (looking_at(buf, &i,
-	      "* * match, initial time: * minute*, increment: * second")) {
-		/* Header for a move list -- second line */
-		/* Initial board will follow if this is a wild game */
-
-		if (gameInfo.event != NULL) free(gameInfo.event);
-		sprintf(str, "ICS %s %s match", star_match[0], star_match[1]);
-		gameInfo.event = StrSave(str);
-		gameInfo.variant = StringToVariant(gameInfo.event);
-		continue;
-	    }
-
-	    if (looking_at(buf, &i, "Move  ")) {
-		/* Beginning of a move list */
-		switch (ics_getting_history) {
-		  case H_FALSE:
-		    /* Normally should not happen */
-		    /* Maybe user hit reset while we were parsing */
-		    break;
-		  case H_REQUESTED:
-		    /* Happens if we are ignoring a move list that is not
-		     * the one we just requested.  Common if the user
-		     * tries to observe two games without turning off
-		     * getMoveList */
-		    break;
-		  case H_GETTING_MOVES:
-		    /* Should not happen */
-		    DisplayError("Error gathering move list: nested", 0);
-		    ics_getting_history = H_FALSE;
-		    break;
-		  case H_GOT_REQ_HEADER:
-		    ics_getting_history = H_GETTING_MOVES;
-		    started = STARTED_MOVES;
-		    parse_pos = 0;
-		    if (oldi > next_out) {
-			SendToPlayer(&buf[next_out], oldi - next_out);
-		    }
-		    break;
-		  case H_GOT_UNREQ_HEADER:
-		    ics_getting_history = H_GETTING_MOVES;
-		    started = STARTED_MOVES_NOHIDE;
-		    parse_pos = 0;
-		    break;
-		  case H_GOT_UNWANTED_HEADER:
-		    ics_getting_history = H_FALSE;
-		    break;
-		}
-		continue;
-	    }				
-	    
-	    if (looking_at(buf, &i, "% ") ||
-		((started == STARTED_MOVES || started == STARTED_MOVES_NOHIDE)
-		 && looking_at(buf, &i, "}*"))) {
-		savingComment = FALSE;
-		switch (started) {
-		  case STARTED_MOVES:
-		  case STARTED_MOVES_NOHIDE:
-		    memcpy(&parse[parse_pos], &buf[oldi], i - oldi);
-		    parse[parse_pos + i - oldi] = NULLCHAR;
-		    ParseGameHistory(parse);
-#if ZIPPY
-		    if (appData.zippyPlay && first.initDone) {
-		        FeedMovesToProgram(&first, forwardMostMove);
-			if (gameMode == IcsPlayingWhite) {
-			    if (WhiteOnMove(forwardMostMove)) {
-				if (first.sendTime) {
-				  if (first.useColors) {
-				    SendToProgram("black\n", &first); 
-				  }
-				  SendTimeRemaining(&first, TRUE);
-				}
-				if (first.useColors) {
-				  SendToProgram("white\ngo\n", &first);
-				} else {
-				  SendToProgram("go\n", &first);
-				}
-				first.maybeThinking = TRUE;
-			    } else {
-			        if (first.usePlayother) {
-				  if (first.sendTime) {
-				    SendTimeRemaining(&first, TRUE);
-				  }
-				  SendToProgram("playother\n", &first);
-				  firstMove = FALSE;
-			        } else {
-				  firstMove = TRUE;
-				}
-			    }
-			} else if (gameMode == IcsPlayingBlack) {
-			    if (!WhiteOnMove(forwardMostMove)) {
-				if (first.sendTime) {
-				  if (first.useColors) {
-				    SendToProgram("white\n", &first);
-				  }
-				  SendTimeRemaining(&first, FALSE);
-				}
-				if (first.useColors) {
-				  SendToProgram("black\ngo\n", &first);
-				} else {
-				  SendToProgram("go\n", &first);
-				}
-				first.maybeThinking = TRUE;
-			    } else {
-			        if (first.usePlayother) {
-				  if (first.sendTime) {
-				    SendTimeRemaining(&first, FALSE);
-				  }
-				  SendToProgram("playother\n", &first);
-				  firstMove = FALSE;
-			        } else {
-				  firstMove = TRUE;
-				}
-			    }
-			}			
-		    }
-#endif
-		    if (gameMode == IcsObserving && ics_gamenum == -1) {
-			/* Moves came from oldmoves or moves command
-			   while we weren't doing anything else.
-			   */
-			currentMove = forwardMostMove;
-			ClearHighlights();/*!!could figure this out*/
-			flipView = appData.flipView;
-			DrawPosition(FALSE, boards[currentMove]);
-			DisplayBothClocks();
-			sprintf(str, "%s vs. %s",
-				gameInfo.white, gameInfo.black);
-			DisplayTitle(str);
-			gameMode = IcsIdle;
-		    } else {
-			/* Moves were history of an active game */
-			if (gameInfo.resultDetails != NULL) {
-			    free(gameInfo.resultDetails);
-			    gameInfo.resultDetails = NULL;
-			}
-		    }
-		    HistorySet(parseList, backwardMostMove,
-			       forwardMostMove, currentMove-1);
-		    DisplayMove(currentMove - 1);
-		    if (started == STARTED_MOVES) next_out = i;
-		    started = STARTED_NONE;
-		    ics_getting_history = H_FALSE;
-		    break;
-
-		  case STARTED_OBSERVE:
-		    started = STARTED_NONE;
-		    SendToICS(ics_prefix);
-		    SendToICS("refresh\n");
-		    break;
-
-		  default:
-		    break;
-		}
-		continue;
-	    }
-	    
-	    if ((started == STARTED_MOVES || started == STARTED_BOARD ||
-		 started == STARTED_HOLDINGS ||
-		 started == STARTED_MOVES_NOHIDE) && i >= leftover_len) {
-		/* Accumulate characters in move list or board */
-		parse[parse_pos++] = buf[i];
-	    }
-	    
-	    /* Start of game messages.  Mostly we detect start of game
-	       when the first board image arrives.  On some versions
-	       of the ICS, though, we need to do a "refresh" after starting
-	       to observe in order to get the current board right away. */
-	    if (looking_at(buf, &i, "Adding game * to observation list")) {
-		started = STARTED_OBSERVE;
-		continue;
-	    }
-
-	    /* Handle auto-observe */
-	    if (appData.autoObserve &&
-		(gameMode == IcsIdle || gameMode == BeginningOfGame) &&
-		looking_at(buf, &i, "Game notification: * (*) vs. * (*)")) {
-		char *player;
-		/* Choose the player that was highlighted, if any. */
-		if (star_match[0][0] == '\033' ||
-		    star_match[1][0] != '\033') {
-		    player = star_match[0];
-		} else {
-		    player = star_match[2];
-		}
-		sprintf(str, "%sobserve %s\n",
-			ics_prefix, StripHighlightAndTitle(player));
-		SendToICS(str);
-
-		/* Save ratings from notify string */
-		strcpy(player1Name, star_match[0]);
-		player1Rating = string_to_rating(star_match[1]);
-		strcpy(player2Name, star_match[2]);
-		player2Rating = string_to_rating(star_match[3]);
-
-		if (appData.debugMode)
-		  fprintf(debugFP, 
-			  "Ratings from 'Game notification:' %s %d, %s %d\n",
-			  player1Name, player1Rating,
-			  player2Name, player2Rating);
-
-		continue;
-	    }
-
-	    /* Deal with automatic examine mode after a game,
-	       and with IcsObserving -> IcsExamining transition */
-	    if (looking_at(buf, &i, "Entering examine mode for game *") ||
-		looking_at(buf, &i, "has made you an examiner of game *")) {
-
-		int gamenum = atoi(star_match[0]);
-		if ((gameMode == IcsIdle || gameMode == IcsObserving) &&
-		    gamenum == ics_gamenum) {
-		    /* We were already playing or observing this game;
-		       no need to refetch history */
-		    gameMode = IcsExamining;
-		    if (pausing) {
-			pauseExamForwardMostMove = forwardMostMove;
-		    } else if (currentMove < forwardMostMove) {
-			ForwardInner(forwardMostMove);
-		    }
-		} else {
-		    /* I don't think this case really can happen */
-		    SendToICS(ics_prefix);
-		    SendToICS("refresh\n");
-		}
-		continue;
-	    }    
-	    
-	    /* Error messages */
-	    if (ics_user_moved) {
-		if (looking_at(buf, &i, "Illegal move") ||
-		    looking_at(buf, &i, "Not a legal move") ||
-		    looking_at(buf, &i, "Your king is in check") ||
-		    looking_at(buf, &i, "It isn't your turn") ||
-		    looking_at(buf, &i, "It is not your move")) {
-		    /* Illegal move */
-		    ics_user_moved = 0;
-		    if (forwardMostMove > backwardMostMove) {
-			currentMove = --forwardMostMove;
-			DisplayMove(currentMove - 1); /* before DMError */
-			DisplayMoveError("Illegal move (rejected by ICS)");
-			DrawPosition(FALSE, boards[currentMove]);
-			SwitchClocks();
-			DisplayBothClocks();
-		    }
-		    continue;
-		}
-	    }
-
-	    if (looking_at(buf, &i, "still have time") ||
-		looking_at(buf, &i, "not out of time") ||
-		looking_at(buf, &i, "either player is out of time") ||
-		looking_at(buf, &i, "has timeseal; checking")) {
-		/* We must have called his flag a little too soon */
-		whiteFlag = blackFlag = FALSE;
-		continue;
-	    }
-
-	    if (looking_at(buf, &i, "added * seconds to") ||
-		looking_at(buf, &i, "seconds were added to")) {
-		/* Update the clocks */
-		SendToICS(ics_prefix);
-		SendToICS("refresh\n");
-		continue;
-	    }
-
-	    if (!ics_clock_paused && looking_at(buf, &i, "clock paused")) {
-		ics_clock_paused = TRUE;
-		StopClocks();
-		continue;
-	    }
-
-	    if (ics_clock_paused && looking_at(buf, &i, "clock resumed")) {
-		ics_clock_paused = FALSE;
-		StartClocks();
-		continue;
-	    }
-
-	    /* Grab player ratings from the Creating: message.
-	       Note we have to check for the special case when
-	       the ICS inserts things like [white] or [black]. */
-	    if (looking_at(buf, &i, "Creating: * (*)* * (*)") ||
-		looking_at(buf, &i, "Creating: * (*) [*] * (*)")) {
-		/* star_matches:
-		   0    player 1 name (not necessarily white)
-		   1	player 1 rating
-		   2	empty, white, or black (IGNORED)
-		   3	player 2 name (not necessarily black)
-		   4    player 2 rating
-		   
-		   The names/ratings are sorted out when the game
-		   actually starts (below).
-		*/
-		strcpy(player1Name, StripHighlightAndTitle(star_match[0]));
-		player1Rating = string_to_rating(star_match[1]);
-		strcpy(player2Name, StripHighlightAndTitle(star_match[3]));
-		player2Rating = string_to_rating(star_match[4]);
-
-		if (appData.debugMode)
-		  fprintf(debugFP, 
-			  "Ratings from 'Creating:' %s %d, %s %d\n",
-			  player1Name, player1Rating,
-			  player2Name, player2Rating);
-
-		continue;
-	    }
-	    
-	    /* Improved generic start/end-of-game messages */
-	    if ((tkind=0, looking_at(buf, &i, "{Game * (* vs. *) *}*")) ||
-		(tkind=1, looking_at(buf, &i, "{Game * (*(*) vs. *(*)) *}*"))){
-	        /* If tkind == 0: */
-		/* star_match[0] is the game number */
-		/*           [1] is the white player's name */
-		/*           [2] is the black player's name */
-		/* For end-of-game: */
-		/*           [3] is the reason for the game end */
-		/*           [4] is a PGN end game-token, preceded by " " */
-		/* For start-of-game: */
-		/*           [3] begins with "Creating" or "Continuing" */
-		/*           [4] is " *" or empty (don't care). */
-		int gamenum = atoi(star_match[0]);
-		char *whitename, *blackname, *why, *endtoken;
-		ChessMove endtype = (ChessMove) 0;
-
-		if (tkind == 0) {
-		  whitename = star_match[1];
-		  blackname = star_match[2];
-		  why = star_match[3];
-		  endtoken = star_match[4];
-		} else {
-		  whitename = star_match[1];
-		  blackname = star_match[3];
-		  why = star_match[5];
-		  endtoken = star_match[6];
-		}
-
-                /* Game start messages */
-		if (strncmp(why, "Creating ", 9) == 0 ||
-		    strncmp(why, "Continuing ", 11) == 0) {
-		    gs_gamenum = gamenum;
-		    strcpy(gs_kind, strchr(why, ' ') + 1);
-#if ZIPPY
-		    if (appData.zippyPlay) {
-			ZippyGameStart(whitename, blackname);
-		    }
-#endif /*ZIPPY*/
-		    continue;
-		}
-
-		/* Game end messages */
-		if (gameMode == IcsIdle || gameMode == BeginningOfGame ||
-		    ics_gamenum != gamenum) {
-		    continue;
-		}
-		while (endtoken[0] == ' ') endtoken++;
-		switch (endtoken[0]) {
-		  case '*':
-		  default:
-		    endtype = GameUnfinished;
-		    break;
-		  case '0':
-		    endtype = BlackWins;
-		    break;
-		  case '1':
-		    if (endtoken[1] == '/')
-		      endtype = GameIsDrawn;
-		    else
-		      endtype = WhiteWins;
-		    break;
-		}
-		GameEnds(endtype, why, GE_ICS);
-#if ZIPPY
-		if (appData.zippyPlay && first.initDone) {
-		    ZippyGameEnd(endtype, why);
-		    if (first.pr == NULL) {
-		      /* Start the next process early so that we'll
-			 be ready for the next challenge */
-		      StartChessProgram(&first);
-		    }
-		    /* Send "new" early, in case this command takes
-		       a long time to finish, so that we'll be ready
-		       for the next challenge. */
-		    Reset(TRUE, TRUE);
-		}
-#endif /*ZIPPY*/
-		continue;
-	    }
-
-	    if (looking_at(buf, &i, "Removing game * from observation") ||
-		looking_at(buf, &i, "no longer observing game *") ||
-		looking_at(buf, &i, "Game * (*) has no examiners")) {
-		if (gameMode == IcsObserving &&
-		    atoi(star_match[0]) == ics_gamenum)
-		  {
-		      StopClocks();
-		      gameMode = IcsIdle;
-		      ics_gamenum = -1;
-		      ics_user_moved = FALSE;
-		  }
-		continue;
-	    }
-
-	    if (looking_at(buf, &i, "no longer examining game *")) {
-		if (gameMode == IcsExamining &&
-		    atoi(star_match[0]) == ics_gamenum)
-		  {
-		      gameMode = IcsIdle;
-		      ics_gamenum = -1;
-		      ics_user_moved = FALSE;
-		  }
-		continue;
-	    }
-
-	    /* Advance leftover_start past any newlines we find,
-	       so only partial lines can get reparsed */
-	    if (looking_at(buf, &i, "\n")) {
-		prevColor = curColor;
-		if (curColor != ColorNormal) {
-		    if (oldi > next_out) {
-			SendToPlayer(&buf[next_out], oldi - next_out);
-			next_out = oldi;
-		    }
-		    Colorize(ColorNormal, FALSE);
-		    curColor = ColorNormal;
-		}
-		if (started == STARTED_BOARD) {
-		    started = STARTED_NONE;
-		    parse[parse_pos] = NULLCHAR;
-		    ParseBoard12(parse);
-		    ics_user_moved = 0;
-
-		    /* Send premove here */
-		    if (appData.premove) {
-		      char str[MSG_SIZ];
-		      if (currentMove == 0 &&
-			  gameMode == IcsPlayingWhite &&
-			  appData.premoveWhite) {
-			sprintf(str, "%s%s\n", ics_prefix,
-				appData.premoveWhiteText);
-			if (appData.debugMode)
-			  fprintf(debugFP, "Sending premove:\n");
-			SendToICS(str);
-		      } else if (currentMove == 1 &&
-				 gameMode == IcsPlayingBlack &&
-				 appData.premoveBlack) {
-			sprintf(str, "%s%s\n", ics_prefix,
-				appData.premoveBlackText);
-			if (appData.debugMode)
-			  fprintf(debugFP, "Sending premove:\n");
-			SendToICS(str);
-		      } else if (gotPremove) {
-			gotPremove = 0;
-			ClearPremoveHighlights();
-			if (appData.debugMode)
-			  fprintf(debugFP, "Sending premove:\n");
-			  UserMoveEvent(premoveFromX, premoveFromY, 
-				        premoveToX, premoveToY, 
-				        premovePromoChar);
-		      }
-		    }
-
-		    /* Usually suppress following prompt */
-		    if (!(forwardMostMove == 0 && gameMode == IcsExamining)) {
-			if (looking_at(buf, &i, "*% ")) {
-			    savingComment = FALSE;
-			}
-		    }
-		    next_out = i;
-		} else if (started == STARTED_HOLDINGS) {
-		    int gamenum;
-		    char new_piece[MSG_SIZ];
-		    started = STARTED_NONE;
-		    parse[parse_pos] = NULLCHAR;
-		    if (appData.debugMode)
-		      fprintf(debugFP, "Parsing holdings: %s\n", parse);
-		    if (sscanf(parse, " game %d", &gamenum) == 1 &&
-			gamenum == ics_gamenum) {
-		        if (gameInfo.variant == VariantNormal) {
-			  gameInfo.variant = VariantCrazyhouse; /*temp guess*/
-			  /* Get a move list just to see the header, which
-			     will tell us whether this is really bug or zh */
-			  if (ics_getting_history == H_FALSE) {
-			    ics_getting_history = H_REQUESTED;
-			    sprintf(str, "%smoves %d\n", ics_prefix, gamenum);
-			    SendToICS(str);
-			  }
-			}
-			new_piece[0] = NULLCHAR;
-			sscanf(parse, "game %d white [%s black [%s <- %s",
-			       &gamenum, white_holding, black_holding,
-			       new_piece);
-                        white_holding[strlen(white_holding)-1] = NULLCHAR;
-                        black_holding[strlen(black_holding)-1] = NULLCHAR;
-#if ZIPPY
-			if (appData.zippyPlay && first.initDone) {
-			    ZippyHoldings(white_holding, black_holding,
-					  new_piece);
-			}
-#endif /*ZIPPY*/
-			if (tinyLayout || smallLayout) {
-			    char wh[16], bh[16];
-			    PackHolding(wh, white_holding);
-			    PackHolding(bh, black_holding);
-			    sprintf(str, "[%s-%s] %s-%s", wh, bh,
-				    gameInfo.white, gameInfo.black);
-			} else {
-			    sprintf(str, "%s [%s] vs. %s [%s]",
-				    gameInfo.white, white_holding,
-				    gameInfo.black, black_holding);
-			}
-			DrawPosition(FALSE, NULL);
-			DisplayTitle(str);
-		    }
-		    /* Suppress following prompt */
-		    if (looking_at(buf, &i, "*% ")) {
-			savingComment = FALSE;
-		    }
-		    next_out = i;
-		}
-		continue;
-	    }
-
-	    i++;		/* skip unparsed character and loop back */
-	}
-	
-	if (started != STARTED_MOVES && started != STARTED_BOARD &&
-	    started != STARTED_HOLDINGS && i > next_out) {
-	    SendToPlayer(&buf[next_out], i - next_out);
-	    next_out = i;
-	}
-	
-	leftover_len = buf_len - leftover_start;
-	/* if buffer ends with something we couldn't parse,
-	   reparse it after appending the next read */
-	
-    } else if (count == 0) {
-	RemoveInputSource(isr);
-        DisplayFatalError("Connection closed by ICS", 0, 0);
-    } else {
-	DisplayFatalError("Error reading from ICS", error, 1);
-    }
-}
-
-
-/* Board style 12 looks like this:
-   
-   <12> r-b---k- pp----pp ---bP--- ---p---- q------- ------P- P--Q--BP -----R-K W -1 0 0 0 0 0 0 paf MaxII 0 2 12 21 25 234 174 24 Q/d7-a4 (0:06) Qxa4 0 0
-   
- * The "<12> " is stripped before it gets to this routine.  The two
- * trailing 0's (flip state and clock ticking) are later addition, and
- * some chess servers may not have them, or may have only the first.
- * Additional trailing fields may be added in the future.  
- */
-
-#define PATTERN "%72c%c%d%d%d%d%d%d%d%s%s%d%d%d%d%d%d%d%d%s%s%s%d%d"
-
-#define RELATION_OBSERVING_PLAYED    0
-#define RELATION_OBSERVING_STATIC   -2   /* examined, oldmoves, or smoves */
-#define RELATION_PLAYING_MYMOVE      1
-#define RELATION_PLAYING_NOTMYMOVE  -1
-#define RELATION_EXAMINING           2
-#define RELATION_ISOLATED_BOARD     -3
-#define RELATION_STARTING_POSITION  -4   /* FICS only */
-
-void
-ParseBoard12(string)
-     char *string;
-{ 
-    GameMode newGameMode;
-    int gamenum, newGame, newMove, relation, basetime, increment, ics_flip = 0;
-    int j, k, n, moveNum, white_stren, black_stren, white_time, black_time;
-    int double_push, castle_ws, castle_wl, castle_bs, castle_bl, irrev_count;
-    char to_play, board_chars[72];
-    char move_str[500], str[500], elapsed_time[500];
-    char black[32], white[32];
-    Board board;
-    int prevMove = currentMove;
-    int ticking = 2;
-    ChessMove moveType;
-    int fromX, fromY, toX, toY;
-    char promoChar;
-
-    fromX = fromY = toX = toY = -1;
-    
-    newGame = FALSE;
-
-    if (appData.debugMode)
-      fprintf(debugFP, "Parsing board: %s\n", string);
-
-    move_str[0] = NULLCHAR;
-    elapsed_time[0] = NULLCHAR;
-    n = sscanf(string, PATTERN, board_chars, &to_play, &double_push,
-	       &castle_ws, &castle_wl, &castle_bs, &castle_bl, &irrev_count,
-	       &gamenum, white, black, &relation, &basetime, &increment,
-	       &white_stren, &black_stren, &white_time, &black_time,
-	       &moveNum, str, elapsed_time, move_str, &ics_flip,
-	       &ticking);
-
-    if (n < 22) {
-	sprintf(str, "Failed to parse board string:\n\"%s\"", string);
-	DisplayError(str, 0);
-	return;
-    }
-
-    /* Convert the move number to internal form */
-    moveNum = (moveNum - 1) * 2;
-    if (to_play == 'B') moveNum++;
-    if (moveNum >= MAX_MOVES) {
-      DisplayFatalError("Game too long; increase MAX_MOVES and recompile",
-			0, 1);
-      return;
-    }
-    
-    switch (relation) {
-      case RELATION_OBSERVING_PLAYED:
-      case RELATION_OBSERVING_STATIC:
-	if (gamenum == -1) {
-	    /* Old ICC buglet */
-	    relation = RELATION_OBSERVING_STATIC;
-	}
-	newGameMode = IcsObserving;
-	break;
-      case RELATION_PLAYING_MYMOVE:
-      case RELATION_PLAYING_NOTMYMOVE:
-	newGameMode =
-	  ((relation == RELATION_PLAYING_MYMOVE) == (to_play == 'W')) ?
-	    IcsPlayingWhite : IcsPlayingBlack;
-	break;
-      case RELATION_EXAMINING:
-	newGameMode = IcsExamining;
-	break;
-      case RELATION_ISOLATED_BOARD:
-      default:
-	/* Just display this board.  If user was doing something else,
-	   we will forget about it until the next board comes. */ 
-	newGameMode = IcsIdle;
-	break;
-      case RELATION_STARTING_POSITION:
-	newGameMode = gameMode;
-	break;
-    }
-    
-    /* Modify behavior for initial board display on move listing
-       of wild games.
-       */
-    switch (ics_getting_history) {
-      case H_FALSE:
-      case H_REQUESTED:
-	break;
-      case H_GOT_REQ_HEADER:
-      case H_GOT_UNREQ_HEADER:
-	/* This is the initial position of the current game */
-	gamenum = ics_gamenum;
-	moveNum = 0;		/* old ICS bug workaround */
- 	if (to_play == 'B') {
-	  startedFromSetupPosition = TRUE;
-	  blackPlaysFirst = TRUE;
-	  moveNum = 1;
-	  if (forwardMostMove == 0) forwardMostMove = 1;
-	  if (backwardMostMove == 0) backwardMostMove = 1;
-	  if (currentMove == 0) currentMove = 1;
-	}
-	newGameMode = gameMode;
-	relation = RELATION_STARTING_POSITION; /* ICC needs this */
-	break;
-      case H_GOT_UNWANTED_HEADER:
-	/* This is an initial board that we don't want */
-	return;
-      case H_GETTING_MOVES:
-	/* Should not happen */
-	DisplayError("Error gathering move list: extra board", 0);
-	ics_getting_history = H_FALSE;
-	return;
-    }
-    
-    /* Take action if this is the first board of a new game, or of a
-       different game than is currently being displayed.  */
-    if (gamenum != ics_gamenum || newGameMode != gameMode ||
-	relation == RELATION_ISOLATED_BOARD) {
-	
-	/* Forget the old game and get the history (if any) of the new one */
-	if (gameMode != BeginningOfGame) {
-	  Reset(FALSE, TRUE);
-	}
-	newGame = TRUE;
-	if (appData.autoRaiseBoard) BoardToTop();
-	prevMove = -3;
-	if (gamenum == -1) {
-	    newGameMode = IcsIdle;
-	} else if (moveNum > 0 && newGameMode != IcsIdle &&
-		   appData.getMoveList) {
-	    /* Need to get game history */
-	    ics_getting_history = H_REQUESTED;
-	    sprintf(str, "%smoves %d\n", ics_prefix, gamenum);
-	    SendToICS(str);
-	}
-	
-	/* Initially flip the board to have black on the bottom if playing
-	   black or if the ICS flip flag is set, but let the user change
-	   it with the Flip View button. */
-	flipView = appData.autoFlipView ? 
-	  (newGameMode == IcsPlayingBlack) || ics_flip :
-	  appData.flipView;
-	
-	/* Done with values from previous mode; copy in new ones */
-	gameMode = newGameMode;
-	ModeHighlight();
-	ics_gamenum = gamenum;
-	if (gamenum == gs_gamenum) {
-	    int klen = strlen(gs_kind);
-	    if (gs_kind[klen - 1] == '.') gs_kind[klen - 1] = NULLCHAR;
-	    sprintf(str, "ICS %s", gs_kind);
-	    gameInfo.event = StrSave(str);
-	} else {
-	    gameInfo.event = StrSave("ICS game");
-	}
-	gameInfo.site = StrSave(appData.icsHost);
-	gameInfo.date = PGNDate();
-	gameInfo.round = StrSave("-");
-	gameInfo.white = StrSave(white);
-	gameInfo.black = StrSave(black);
-	timeControl = basetime * 60 * 1000;
-	timeIncrement = increment * 1000;
-	movesPerSession = 0;
-	gameInfo.timeControl = TimeControlTagValue();
-	gameInfo.variant = StringToVariant(gameInfo.event);
-	
-	/* Do we have the ratings? */
-	if (strcmp(player1Name, white) == 0 &&
-	    strcmp(player2Name, black) == 0) {
-	    if (appData.debugMode)
-	      fprintf(debugFP, "Remembered ratings: W %d, B %d\n",
-		      player1Rating, player2Rating);
-	    gameInfo.whiteRating = player1Rating;
-	    gameInfo.blackRating = player2Rating;
-	} else if (strcmp(player2Name, white) == 0 &&
-		   strcmp(player1Name, black) == 0) {
-	    if (appData.debugMode)
-	      fprintf(debugFP, "Remembered ratings: W %d, B %d\n",
-		      player2Rating, player1Rating);
-	    gameInfo.whiteRating = player2Rating;
-	    gameInfo.blackRating = player1Rating;
-	}
-	player1Name[0] = player2Name[0] = NULLCHAR;
-
-	/* Silence shouts if requested */
-	if (appData.quietPlay &&
-	    (gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack)) {
-	    SendToICS(ics_prefix);
-	    SendToICS("set shout 0\n");
-	}
-    }
-    
-    /* Deal with midgame name changes */
-    if (!newGame) {
-	if (!gameInfo.white || strcmp(gameInfo.white, white) != 0) {
-	    if (gameInfo.white) free(gameInfo.white);
-	    gameInfo.white = StrSave(white);
-	}
-	if (!gameInfo.black || strcmp(gameInfo.black, black) != 0) {
-	    if (gameInfo.black) free(gameInfo.black);
-	    gameInfo.black = StrSave(black);
-	}
-    }
-    
-    /* Throw away game result if anything actually changes in examine mode */
-    if (gameMode == IcsExamining && !newGame) {
-	gameInfo.result = GameUnfinished;
-	if (gameInfo.resultDetails != NULL) {
-	    free(gameInfo.resultDetails);
-	    gameInfo.resultDetails = NULL;
-	}
-    }
-    
-    /* In pausing && IcsExamining mode, we ignore boards coming
-       in if they are in a different variation than we are. */
-    if (pauseExamInvalid) return;
-    if (pausing && gameMode == IcsExamining) {
-	if (moveNum <= pauseExamForwardMostMove) {
-	    pauseExamInvalid = TRUE;
-	    forwardMostMove = pauseExamForwardMostMove;
-	    return;
-	}
-    }
-    
-    /* Parse the board */
-    for (k = 0; k < 8; k++)
-      for (j = 0; j < 8; j++)
-	board[k][j] = CharToPiece(board_chars[(7-k)*9 + j]);
-    CopyBoard(boards[moveNum], board);
-    if (moveNum == 0) {
-	startedFromSetupPosition =
-	  !CompareBoards(board, initialPosition);
-    }
-    
-    if (ics_getting_history == H_GOT_REQ_HEADER ||
-	ics_getting_history == H_GOT_UNREQ_HEADER) {
-	/* This was an initial position from a move list, not
-	   the current position */
-	return;
-    }
-    
-    /* Update currentMove and known move number limits */
-    newMove = newGame || moveNum > forwardMostMove;
-    if (newGame) {
-	forwardMostMove = backwardMostMove = currentMove = moveNum;
-	if (gameMode == IcsExamining && moveNum == 0) {
-	  /* Workaround for ICS limitation: we are not told the wild
-	     type when starting to examine a game.  But if we ask for
-	     the move list, the move list header will tell us */
-	    ics_getting_history = H_REQUESTED;
-	    sprintf(str, "%smoves %d\n", ics_prefix, gamenum);
-	    SendToICS(str);
-	}
-    } else if (moveNum == forwardMostMove + 1 || moveNum == forwardMostMove
-	       || (moveNum < forwardMostMove && moveNum >= backwardMostMove)) {
-	forwardMostMove = moveNum;
-	if (!pausing || currentMove > forwardMostMove)
-	  currentMove = forwardMostMove;
-    } else {
-	/* New part of history that is not contiguous with old part */ 
-	if (pausing && gameMode == IcsExamining) {
-	    pauseExamInvalid = TRUE;
-	    forwardMostMove = pauseExamForwardMostMove;
-	    return;
-	}
-	forwardMostMove = backwardMostMove = currentMove = moveNum;
-	if (gameMode == IcsExamining && moveNum > 0 && appData.getMoveList) {
-	    ics_getting_history = H_REQUESTED;
-	    sprintf(str, "%smoves %d\n", ics_prefix, gamenum);
-	    SendToICS(str);
-	}
-    }
-    
-    /* Update the clocks */
-    if (strchr(elapsed_time, '.')) {
-      /* Time is in ms */
-      timeRemaining[0][moveNum] = whiteTimeRemaining = white_time;
-      timeRemaining[1][moveNum] = blackTimeRemaining = black_time;
-    } else {
-      /* Time is in seconds */
-      timeRemaining[0][moveNum] = whiteTimeRemaining = white_time * 1000;
-      timeRemaining[1][moveNum] = blackTimeRemaining = black_time * 1000;
-    }
-      
-
-#if ZIPPY
-    if (appData.zippyPlay && newGame &&
-	gameMode != IcsObserving && gameMode != IcsIdle &&
-	gameMode != IcsExamining)
-      ZippyFirstBoard(moveNum, basetime, increment);
-#endif
-    
-    /* Put the move on the move list, first converting
-       to canonical algebraic form. */
-    if (moveNum > 0) {
-	if (moveNum <= backwardMostMove) {
-	    /* We don't know what the board looked like before
-	       this move.  Punt. */
-	    strcpy(parseList[moveNum - 1], move_str);
-	    strcat(parseList[moveNum - 1], " ");
-	    strcat(parseList[moveNum - 1], elapsed_time);
-	    moveList[moveNum - 1][0] = NULLCHAR;
-	} else if (ParseOneMove(move_str, moveNum - 1, &moveType,
-				&fromX, &fromY, &toX, &toY, &promoChar)) {
-	    (void) CoordsToAlgebraic(boards[moveNum - 1],
-				     PosFlags(moveNum - 1), EP_UNKNOWN,
-				     fromY, fromX, toY, toX, promoChar,
-				     parseList[moveNum-1]);
-	    switch (MateTest(boards[moveNum], PosFlags(moveNum), EP_UNKNOWN)){
-	      case MT_NONE:
-	      case MT_STALEMATE:
-	      default:
-		break;
-	      case MT_CHECK:
-		strcat(parseList[moveNum - 1], "+");
-		break;
-	      case MT_CHECKMATE:
-		strcat(parseList[moveNum - 1], "#");
-		break;
-	    }
-	    strcat(parseList[moveNum - 1], " ");
-	    strcat(parseList[moveNum - 1], elapsed_time);
-	    /* currentMoveString is set as a side-effect of ParseOneMove */
-	    strcpy(moveList[moveNum - 1], currentMoveString);
-	    strcat(moveList[moveNum - 1], "\n");
-	} else if (strcmp(move_str, "none") == 0) {
-	    /* Again, we don't know what the board looked like;
-	       this is really the start of the game. */
-	    parseList[moveNum - 1][0] = NULLCHAR;
-	    moveList[moveNum - 1][0] = NULLCHAR;
-	    backwardMostMove = moveNum;
-	    startedFromSetupPosition = TRUE;
- 	    fromX = fromY = toX = toY = -1;
-	} else {
-	    /* Move from ICS was illegal!?  Punt. */
-#if 0
-	    if (appData.testLegality && appData.debugMode) {
-		sprintf(str, "Illegal move \"%s\" from ICS", move_str);
-		DisplayError(str, 0);
-	    }
-#endif
-	    strcpy(parseList[moveNum - 1], move_str);
-	    strcat(parseList[moveNum - 1], " ");
-	    strcat(parseList[moveNum - 1], elapsed_time);
-	    moveList[moveNum - 1][0] = NULLCHAR;
- 	    fromX = fromY = toX = toY = -1;
-	}
-
-#if ZIPPY
-	/* Send move to chess program (BEFORE animating it). */
-	if (appData.zippyPlay && !newGame && newMove && 
-	   (!appData.getMoveList || backwardMostMove == 0) && first.initDone) {
-
-	    if ((gameMode == IcsPlayingWhite && WhiteOnMove(moveNum)) ||
-		(gameMode == IcsPlayingBlack && !WhiteOnMove(moveNum))) {
-		if (moveList[moveNum - 1][0] == NULLCHAR) {
-		    sprintf(str, "Couldn't parse move \"%s\" from ICS",
-			    move_str);
-		    DisplayError(str, 0);
-		} else {
-		    if (first.sendTime) {
-			SendTimeRemaining(&first, gameMode == IcsPlayingWhite);
-		    }
-		    SendMoveToProgram(moveNum - 1, &first);
-		    if (firstMove) {
-			firstMove = FALSE;
-			if (first.useColors) {
-			  SendToProgram(gameMode == IcsPlayingWhite ?
-					"white\ngo\n" :
-					"black\ngo\n", &first);
-			} else {
-			  SendToProgram("go\n", &first);
-			}
-			first.maybeThinking = TRUE;
-		    }
-		}
-	    } else if (gameMode == IcsObserving || gameMode == IcsExamining) {
-	      if (moveList[moveNum - 1][0] == NULLCHAR) {
-		sprintf(str, "Couldn't parse move \"%s\" from ICS", move_str);
-		DisplayError(str, 0);
-	      } else {
-		SendMoveToProgram(moveNum - 1, &first);
-	      }
-	    }
-	}
-#endif
-    }
-
-    if (moveNum > 0 && !gotPremove) {
-	/* If move comes from a remote source, animate it.  If it
-	   isn't remote, it will have already been animated. */
-	if (!pausing && !ics_user_moved && prevMove == moveNum - 1) {
-	    AnimateMove(boards[moveNum - 1], fromX, fromY, toX, toY);
-	}
-	if (!pausing && appData.highlightLastMove) {
-	    SetHighlights(fromX, fromY, toX, toY);
-	}
-    }
-    
-    /* Start the clocks */
-    whiteFlag = blackFlag = FALSE;
-    appData.clockMode = !(basetime == 0 && increment == 0);
-    if (ticking == 0) {
-      ics_clock_paused = TRUE;
-      StopClocks();
-    } else if (ticking == 1) {
-      ics_clock_paused = FALSE;
-    }
-    if (gameMode == IcsIdle ||
-	relation == RELATION_OBSERVING_STATIC ||
-	relation == RELATION_EXAMINING ||
-	ics_clock_paused)
-      DisplayBothClocks();
-    else
-      StartClocks();
-    
-    /* Display opponents and material strengths */
-    if (gameInfo.variant != VariantBughouse &&
-	gameInfo.variant != VariantCrazyhouse) {
-	if (tinyLayout || smallLayout) {
-	    sprintf(str, "%s(%d) %s(%d) {%d %d}", 
-		    gameInfo.white, white_stren, gameInfo.black, black_stren,
-		    basetime, increment);
-	} else {
-	    sprintf(str, "%s (%d) vs. %s (%d) {%d %d}", 
-		    gameInfo.white, white_stren, gameInfo.black, black_stren,
-		    basetime, increment);
-	}
-	DisplayTitle(str);
-    }
-
-   
-    /* Display the board */
-    if (!pausing) {
-      
-      if (appData.premove)
-	  if (!gotPremove || 
-	     ((gameMode == IcsPlayingWhite) && (WhiteOnMove(currentMove))) ||
-	     ((gameMode == IcsPlayingBlack) && (!WhiteOnMove(currentMove))))
-	      ClearPremoveHighlights();
-
-      DrawPosition(FALSE, boards[currentMove]);
-      DisplayMove(moveNum - 1);
-      if (appData.ringBellAfterMoves && !ics_user_moved)
-	RingBell();
-    }
-
-    HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
-}
-
-void
-GetMoveListEvent()
-{
-    char buf[MSG_SIZ];
-    if (appData.icsActive && gameMode != IcsIdle && ics_gamenum > 0) {
-	ics_getting_history = H_REQUESTED;
-	sprintf(buf, "%smoves %d\n", ics_prefix, ics_gamenum);
-	SendToICS(buf);
-    }
-}
-
-void
-AnalysisPeriodicEvent(force)
-     int force;
-{
-    if (((programStats.ok_to_send == 0 || programStats.line_is_book)
-	 && !force) || !appData.periodicUpdates)
-      return;
-
-    /* Send . command to Crafty to collect stats */
-    SendToProgram(".\n", &first);
-
-    /* Don't send another until we get a response (this makes
-       us stop sending to old Crafty's which don't understand
-       the "." command (sending illegal cmds resets node count & time,
-       which looks bad)) */
-    programStats.ok_to_send = 0;
-}
-
-void
-SendMoveToProgram(moveNum, cps)
-     int moveNum;
-     ChessProgramState *cps;
-{
-    char buf[MSG_SIZ];
-    if (cps->useUsermove) {
-      SendToProgram("usermove ", cps);
-    }
-    if (cps->useSAN) {
-      char *space;
-      if ((space = strchr(parseList[moveNum], ' ')) != NULL) {
-	int len = space - parseList[moveNum];
-	memcpy(buf, parseList[moveNum], len);
-	buf[len++] = '\n';
-	buf[len] = NULLCHAR;
-      } else {
-	sprintf(buf, "%s\n", parseList[moveNum]);
-      }
-      SendToProgram(buf, cps);
-    } else {
-      SendToProgram(moveList[moveNum], cps);
-    }
-}
-
-void
-SendMoveToICS(moveType, fromX, fromY, toX, toY)
-     ChessMove moveType;
-     int fromX, fromY, toX, toY;
-{
-    char user_move[MSG_SIZ];
-
-    switch (moveType) {
-      default:
-	sprintf(user_move, "say Internal error; bad moveType %d (%d,%d-%d,%d)",
-		(int)moveType, fromX, fromY, toX, toY);
-	DisplayError(user_move + strlen("say "), 0);
-	break;
-      case WhiteKingSideCastle:
-      case BlackKingSideCastle:
-      case WhiteQueenSideCastleWild:
-      case BlackQueenSideCastleWild:
-	sprintf(user_move, "o-o\n");
-	break;
-      case WhiteQueenSideCastle:
-      case BlackQueenSideCastle:
-      case WhiteKingSideCastleWild:
-      case BlackKingSideCastleWild:
-	sprintf(user_move, "o-o-o\n");
-	break;
-      case WhitePromotionQueen:
-      case BlackPromotionQueen:
-      case WhitePromotionRook:
-      case BlackPromotionRook:
-      case WhitePromotionBishop:
-      case BlackPromotionBishop:
-      case WhitePromotionKnight:
-      case BlackPromotionKnight:
-      case WhitePromotionKing:
-      case BlackPromotionKing:
-	sprintf(user_move, "%c%c%c%c=%c\n",
-		'a' + fromX, '1' + fromY, 'a' + toX, '1' + toY,
-		PieceToChar(PromoPiece(moveType)));
-	break;
-      case WhiteDrop:
-      case BlackDrop:
-	sprintf(user_move, "%c@%c%c\n",
-		ToUpper(PieceToChar((ChessSquare) fromX)),
-		'a' + toX, '1' + toY);
-	break;
-      case NormalMove:
-      case WhiteCapturesEnPassant:
-      case BlackCapturesEnPassant:
-      case IllegalMove:  /* could be a variant we don't quite understand */
-	sprintf(user_move, "%c%c%c%c\n",
-		'a' + fromX, '1' + fromY, 'a' + toX, '1' + toY);
-	break;
-    }
-    SendToICS(user_move);
-}
-
-void
-CoordsToComputerAlgebraic(rf, ff, rt, ft, promoChar, move)
-     int rf, ff, rt, ft;
-     char promoChar;
-     char move[7];
-{
-    if (rf == DROP_RANK) {
-	sprintf(move, "%c@%c%c\n",
-		ToUpper(PieceToChar((ChessSquare) ff)), 'a' + ft, '1' + rt);
-    } else {
-	if (promoChar == 'x' || promoChar == NULLCHAR) {
-	    sprintf(move, "%c%c%c%c\n",
-		    'a' + ff, '1' + rf, 'a' + ft, '1' + rt);
-	} else {
-	    sprintf(move, "%c%c%c%c%c\n",
-		    'a' + ff, '1' + rf, 'a' + ft, '1' + rt, promoChar);
-	}
-    }
-}
-
-void
-ProcessICSInitScript(f)
-     FILE *f;
-{
-    char buf[MSG_SIZ];
-
-    while (fgets(buf, MSG_SIZ, f)) {
-	SendToICSDelayed(buf,(long)appData.msLoginDelay);
-    }
-
-    fclose(f);
-}
-
-
-/* Parser for moves from gnuchess, ICS, or user typein box */
-Boolean
-ParseOneMove(move, moveNum, moveType, fromX, fromY, toX, toY, promoChar)
-     char *move;
-     int moveNum;
-     ChessMove *moveType;
-     int *fromX, *fromY, *toX, *toY;
-     char *promoChar;
-{       
-    *moveType = yylexstr(moveNum, move);
-    switch (*moveType) {
-      case WhitePromotionQueen:
-      case BlackPromotionQueen:
-      case WhitePromotionRook:
-      case BlackPromotionRook:
-      case WhitePromotionBishop:
-      case BlackPromotionBishop:
-      case WhitePromotionKnight:
-      case BlackPromotionKnight:
-      case WhitePromotionKing:
-      case BlackPromotionKing:
-      case NormalMove:
-      case WhiteCapturesEnPassant:
-      case BlackCapturesEnPassant:
-      case WhiteKingSideCastle:
-      case WhiteQueenSideCastle:
-      case BlackKingSideCastle:
-      case BlackQueenSideCastle:
-      case WhiteKingSideCastleWild:
-      case WhiteQueenSideCastleWild:
-      case BlackKingSideCastleWild:
-      case BlackQueenSideCastleWild:
-      case IllegalMove:		/* bug or odd chess variant */
-	*fromX = currentMoveString[0] - 'a';
-	*fromY = currentMoveString[1] - '1';
-	*toX = currentMoveString[2] - 'a';
-	*toY = currentMoveString[3] - '1';
-	*promoChar = currentMoveString[4];
-	if (*fromX < 0 || *fromX > 7 || *fromY < 0 || *fromY > 7 ||
-	    *toX < 0 || *toX > 7 || *toY < 0 || *toY > 7) {
-	    *fromX = *fromY = *toX = *toY = 0;
-	    return FALSE;
-	}
-	if (appData.testLegality) {
-	  return (*moveType != IllegalMove);
-	} else {
-	  return !(fromX == fromY && toX == toY);
-	}
-
-      case WhiteDrop:
-      case BlackDrop:
-	*fromX = *moveType == WhiteDrop ?
-	  (int) CharToPiece(ToUpper(currentMoveString[0])) :
-	(int) CharToPiece(ToLower(currentMoveString[0]));
-	*fromY = DROP_RANK;
-	*toX = currentMoveString[2] - 'a';
-	*toY = currentMoveString[3] - '1';
-	*promoChar = NULLCHAR;
-	return TRUE;
-
-      case AmbiguousMove:
-      case ImpossibleMove:
-      case (ChessMove) 0:	/* end of file */
-      case ElapsedTime:
-      case Comment:
-      case PGNTag:
-      case NAG:
-      case WhiteWins:
-      case BlackWins:
-      case GameIsDrawn:
-      default:
-	/* bug? */
-	*fromX = *fromY = *toX = *toY = 0;
-	*promoChar = NULLCHAR;
-	return FALSE;
-    }
-}
-
-
-void
-InitPosition(redraw)
-     int redraw;
-{
-    currentMove = forwardMostMove = backwardMostMove = 0;
-    switch (gameInfo.variant) {
-    default:
-      CopyBoard(boards[0], initialPosition);
-      break;
-    case VariantTwoKings:
-      CopyBoard(boards[0], twoKingsPosition);
-      startedFromSetupPosition = TRUE;
-      break;
-    case VariantWildCastle:
-      CopyBoard(boards[0], initialPosition);
-      /* !!?shuffle with kings guaranteed to be on d or e file */
-      break;
-    case VariantNoCastle:
-      CopyBoard(boards[0], initialPosition);
-      /* !!?unconstrained back-rank shuffle */
-      break;
-    case VariantFischeRandom:
-      CopyBoard(boards[0], initialPosition);
-      /* !!shuffle according to FR rules */
-      break;
-    }
-    if (redraw)
-      DrawPosition(FALSE, boards[currentMove]);
-}
-
-void
-SendBoard(cps, moveNum)
-     ChessProgramState *cps;
-     int moveNum;
-{
-    char message[MSG_SIZ];
-    
-    if (cps->useSetboard) {
-      char* fen = PositionToFEN(moveNum);
-      sprintf(message, "setboard %s\n", fen);
-      SendToProgram(message, cps);
-      free(fen);
-
-    } else {
-      ChessSquare *bp;
-      int i, j;
-      /* Kludge to set black to move, avoiding the troublesome and now
-       * deprecated "black" command.
-       */
-      if (!WhiteOnMove(moveNum)) SendToProgram("a2a3\n", cps);
-
-      SendToProgram("edit\n", cps);
-      SendToProgram("#\n", cps);
-      for (i = BOARD_SIZE - 1; i >= 0; i--) {
-	bp = &boards[moveNum][i][0];
-	for (j = 0; j < BOARD_SIZE; j++, bp++) {
-	  if ((int) *bp < (int) BlackPawn) {
-	    sprintf(message, "%c%c%c\n", PieceToChar(*bp), 
-		    'a' + j, '1' + i);
-	    SendToProgram(message, cps);
-	  }
-	}
-      }
-    
-      SendToProgram("c\n", cps);
-      for (i = BOARD_SIZE - 1; i >= 0; i--) {
-	bp = &boards[moveNum][i][0];
-	for (j = 0; j < BOARD_SIZE; j++, bp++) {
-	  if (((int) *bp != (int) EmptySquare)
-	      && ((int) *bp >= (int) BlackPawn)) {
-	    sprintf(message, "%c%c%c\n", ToUpper(PieceToChar(*bp)),
-		    'a' + j, '1' + i);
-	    SendToProgram(message, cps);
-	  }
-	}
-      }
-    
-      SendToProgram(".\n", cps);
-    }
-}
-
-int
-IsPromotion(fromX, fromY, toX, toY)
-     int fromX, fromY, toX, toY;
-{
-    return gameMode != EditPosition &&
-      fromX >=0 && fromY >= 0 && toX >= 0 && toY >= 0 &&
-	((boards[currentMove][fromY][fromX] == WhitePawn && toY == 7) ||
-	 (boards[currentMove][fromY][fromX] == BlackPawn && toY == 0));
-}
-
-
-int
-PieceForSquare (x, y)
-     int x;
-     int y;
-{
-  if (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE)
-     return -1;
-  else
-     return boards[currentMove][y][x];
-}
-
-int
-OKToStartUserMove(x, y)
-     int x, y;
-{
-    ChessSquare from_piece;
-    int white_piece;
-
-    if (matchMode) return FALSE;
-    if (gameMode == EditPosition) return TRUE;
-
-    if (x >= 0 && y >= 0)
-      from_piece = boards[currentMove][y][x];
-    else
-      from_piece = EmptySquare;
-
-    if (from_piece == EmptySquare) return FALSE;
-
-    white_piece = (int)from_piece >= (int)WhitePawn &&
-      (int)from_piece <= (int)WhiteKing;
-
-    switch (gameMode) {
-      case PlayFromGameFile:
-      case AnalyzeFile:
-      case TwoMachinesPlay:
-      case EndOfGame:
-	return FALSE;
-
-      case IcsObserving:
-      case IcsIdle:
-	return FALSE;
-
-      case MachinePlaysWhite:
-      case IcsPlayingBlack:
-	if (appData.zippyPlay) return FALSE;
-	if (white_piece) {
-	    DisplayMoveError("You are playing Black");
-	    return FALSE;
-	}
-	break;
-
-      case MachinePlaysBlack:
-      case IcsPlayingWhite:
-	if (appData.zippyPlay) return FALSE;
-	if (!white_piece) {
-	    DisplayMoveError("You are playing White");
-	    return FALSE;
-	}
-	break;
-
-      case EditGame:
-	if (!white_piece && WhiteOnMove(currentMove)) {
-	    DisplayMoveError("It is White's turn");
-	    return FALSE;
-	}	    
-	if (white_piece && !WhiteOnMove(currentMove)) {
-	    DisplayMoveError("It is Black's turn");
-	    return FALSE;
-	}	    
-	if (cmailMsgLoaded && (currentMove < cmailOldMove)) {
-	    /* Editing correspondence game history */
-	    /* Could disallow this or prompt for confirmation */
-	    cmailOldMove = -1;
-	}
-	if (currentMove < forwardMostMove) {
-	    /* Discarding moves */
-	    /* Could prompt for confirmation here,
-	       but I don't think that's such a good idea */
-	    forwardMostMove = currentMove;
-	}
-	break;
-
-      case BeginningOfGame:
-	if (appData.icsActive) return FALSE;
-	if (!appData.noChessProgram) {
-	    if (!white_piece) {
-		DisplayMoveError("You are playing White");
-		return FALSE;
-	    }
-	}
-	break;
-	
-      case Training:
-	if (!white_piece && WhiteOnMove(currentMove)) {
-	    DisplayMoveError("It is White's turn");
-	    return FALSE;
-	}	    
-	if (white_piece && !WhiteOnMove(currentMove)) {
-	    DisplayMoveError("It is Black's turn");
-	    return FALSE;
-	}	    
-	break;
-
-      default:
-      case IcsExamining:
-	break;
-    }
-    if (currentMove != forwardMostMove && gameMode != AnalyzeMode
-	&& gameMode != AnalyzeFile && gameMode != Training) {
-	DisplayMoveError("Displayed position is not current");
-	return FALSE;
-    }
-    return TRUE;
-}
-
-FILE *lastLoadGameFP = NULL, *lastLoadPositionFP = NULL;
-int lastLoadGameNumber = 0, lastLoadPositionNumber = 0;
-int lastLoadGameUseList = FALSE;
-char lastLoadGameTitle[MSG_SIZ], lastLoadPositionTitle[MSG_SIZ];
-ChessMove lastLoadGameStart = (ChessMove) 0;
-
-
-void
-UserMoveEvent(fromX, fromY, toX, toY, promoChar)
-     int fromX, fromY, toX, toY;
-     int promoChar;
-{
-    ChessMove moveType;
-
-    if (fromX < 0 || fromY < 0) return;
-    if ((fromX == toX) && (fromY == toY)) {
-	return;
-    }
-	
-    /* Check if the user is playing in turn.  This is complicated because we
-       let the user "pick up" a piece before it is his turn.  So the piece he
-       tried to pick up may have been captured by the time he puts it down!
-       Therefore we use the color the user is supposed to be playing in this
-       test, not the color of the piece that is currently on the starting
-       square---except in EditGame mode, where the user is playing both
-       sides; fortunately there the capture race can't happen.  (It can
-       now happen in IcsExamining mode, but that's just too bad.  The user
-       will get a somewhat confusing message in that case.)
-       */
-
-    switch (gameMode) {
-      case PlayFromGameFile:
-      case AnalyzeFile:
-      case TwoMachinesPlay:
-      case EndOfGame:
-      case IcsObserving:
-      case IcsIdle:
-	/* We switched into a game mode where moves are not accepted,
-           perhaps while the mouse button was down. */
-	return;
-
-      case MachinePlaysWhite:
-	/* User is moving for Black */
-	if (WhiteOnMove(currentMove)) {
-	    DisplayMoveError("It is White's turn");
-	    return;
-	}
-	break;
-
-      case MachinePlaysBlack:
-	/* User is moving for White */
-	if (!WhiteOnMove(currentMove)) {
-	    DisplayMoveError("It is Black's turn");
-	    return;
-	}
-	break;
-
-      case EditGame:
-      case IcsExamining:
-      case BeginningOfGame:
-      case AnalyzeMode:
-      case Training:
-	if ((int) boards[currentMove][fromY][fromX] >= (int) BlackPawn &&
-	    (int) boards[currentMove][fromY][fromX] <= (int) BlackKing) {
-	    /* User is moving for Black */
-	    if (WhiteOnMove(currentMove)) {
-		DisplayMoveError("It is White's turn");
-		return;
-	    }
-	} else {
-	    /* User is moving for White */
-	    if (!WhiteOnMove(currentMove)) {
-		DisplayMoveError("It is Black's turn");
-		return;
-	    }
-	}
-	break;
-
-      case IcsPlayingBlack:
-	/* User is moving for Black */
-	if (WhiteOnMove(currentMove)) {
-	    if (!appData.premove) {
-		DisplayMoveError("It is White's turn");
-	    } else if (toX >= 0 && toY >= 0) {
-		premoveToX = toX;
-		premoveToY = toY;
-		premoveFromX = fromX;
-		premoveFromY = fromY;
-		premovePromoChar = promoChar;
-		gotPremove = 1;
-		if (appData.debugMode) 
-		    fprintf(debugFP, "Got premove: fromX %d,"
-			    "fromY %d, toX %d, toY %d\n",
-			    fromX, fromY, toX, toY);
-	    }
-	    return;
-	}
-	break;
-
-      case IcsPlayingWhite:
-	/* User is moving for White */
-	if (!WhiteOnMove(currentMove)) {
-	    if (!appData.premove) {
-		DisplayMoveError("It is Black's turn");
-	    } else if (toX >= 0 && toY >= 0) {
-		premoveToX = toX;
-		premoveToY = toY;
-		premoveFromX = fromX;
-		premoveFromY = fromY;
-		premovePromoChar = promoChar;
-		gotPremove = 1;
-		if (appData.debugMode) 
-		    fprintf(debugFP, "Got premove: fromX %d,"
-			    "fromY %d, toX %d, toY %d\n",
-			    fromX, fromY, toX, toY);
-	    }
-	    return;
-	}
-	break;
-
-      default:
-	break;
-
-      case EditPosition:
-	if (toX == -2 || toY == -2) {
-	    boards[0][fromY][fromX] = EmptySquare;
-	    DrawPosition(FALSE, boards[currentMove]);
-	} else if (toX >= 0 && toY >= 0) {
-	    boards[0][toY][toX] = boards[0][fromY][fromX];
-	    boards[0][fromY][fromX] = EmptySquare;
-	    DrawPosition(FALSE, boards[currentMove]);
-	}
-	return;
-    }
-
-    if (toX < 0 || toY < 0) return;
-    userOfferedDraw = FALSE;
-	
-    if (appData.testLegality) {
-	moveType = LegalityTest(boards[currentMove], PosFlags(currentMove),
-				EP_UNKNOWN, fromY, fromX, toY, toX, promoChar);
-	if (moveType == IllegalMove || moveType == ImpossibleMove) {
-	    DisplayMoveError("Illegal move");
-	    return;
-	}
-    } else {
-	moveType = PromoCharToMoveType(WhiteOnMove(currentMove), promoChar);
-    }
-
-    if (gameMode == Training) {
-      /* compare the move played on the board to the next move in the
-       * game. If they match, display the move and the opponent's response. 
-       * If they don't match, display an error message.
-       */
-      int saveAnimate;
-      Board testBoard;
-      CopyBoard(testBoard, boards[currentMove]);
-      ApplyMove(fromX, fromY, toX, toY, promoChar, testBoard);
-
-      if (CompareBoards(testBoard, boards[currentMove+1])) {
-	ForwardInner(currentMove+1);
-
-	/* Autoplay the opponent's response.
-	 * if appData.animate was TRUE when Training mode was entered,
-	 * the response will be animated.
-	 */
-	saveAnimate = appData.animate;
-	appData.animate = animateTraining;
-	ForwardInner(currentMove+1);
-	appData.animate = saveAnimate;
-
-	/* check for the end of the game */
-	if (currentMove >= forwardMostMove) {
-	  gameMode = PlayFromGameFile;
-	  ModeHighlight();
-	  SetTrainingModeOff();
-	  DisplayInformation("End of game");
-	}
-      } else {
-	DisplayError("Incorrect move", 0);
-      }
-      return;
-    }
-
-    FinishMove(moveType, fromX, fromY, toX, toY, promoChar);
-}
-
-/* Common tail of UserMoveEvent and DropMenuEvent */
-void
-FinishMove(moveType, fromX, fromY, toX, toY, promoChar)
-     ChessMove moveType;
-     int fromX, fromY, toX, toY;
-     /*char*/int promoChar;
-{
-  /* Ok, now we know that the move is good, so we can kill
-     the previous line in Analysis Mode */
-  if (gameMode == AnalyzeMode && currentMove < forwardMostMove) {
-    forwardMostMove = currentMove;
-  }
-
-  /* If we need the chess program but it's dead, restart it */
-  ResurrectChessProgram();
-
-  /* A user move restarts a paused game*/
-  if (pausing)
-    PauseEvent();
-
-  thinkOutput[0] = NULLCHAR;
-
-  MakeMove(fromX, fromY, toX, toY, promoChar); /*updates forwardMostMove*/
-
-  if (gameMode == BeginningOfGame) {
-    if (appData.noChessProgram) {
-      gameMode = EditGame;
-      SetGameInfo();
-    } else {
-      char buf[MSG_SIZ];
-      gameMode = MachinePlaysBlack;
-      SetGameInfo();
-      sprintf(buf, "%s vs. %s", gameInfo.white, gameInfo.black);
-      DisplayTitle(buf);
-      if (first.sendName) {
-	sprintf(buf, "name %s\n", gameInfo.white);
-	SendToProgram(buf, &first);
-      }
-    }
-    ModeHighlight();
-  }
-
-  /* Relay move to ICS or chess engine */
-  if (appData.icsActive) {
-    if (gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack ||
-	gameMode == IcsExamining) {
-      SendMoveToICS(moveType, fromX, fromY, toX, toY);
-      ics_user_moved = 1;
-    }
-  } else {
-    if (first.sendTime && (gameMode == BeginningOfGame ||
-			   gameMode == MachinePlaysWhite ||
-			   gameMode == MachinePlaysBlack)) {
-      SendTimeRemaining(&first, gameMode != MachinePlaysBlack);
-    }
-    SendMoveToProgram(forwardMostMove-1, &first);
-    if (gameMode != EditGame && gameMode != PlayFromGameFile) {
-      first.maybeThinking = TRUE;
-    }
-    if (currentMove == cmailOldMove + 1) {
-      cmailMoveType[lastLoadGameNumber - 1] = CMAIL_MOVE;
-    }
-  }
-
-  ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
-
-  switch (gameMode) {
-  case EditGame:
-    switch (MateTest(boards[currentMove], PosFlags(currentMove),
-		     EP_UNKNOWN)) {
-    case MT_NONE:
-    case MT_CHECK:
-      break;
-    case MT_CHECKMATE:
-      if (WhiteOnMove(currentMove)) {
-	GameEnds(BlackWins, "Black mates", GE_PLAYER);
-      } else {
-	GameEnds(WhiteWins, "White mates", GE_PLAYER);
-      }
-      break;
-    case MT_STALEMATE:
-      GameEnds(GameIsDrawn, "Stalemate", GE_PLAYER);
-      break;
-    }
-    break;
-    
-  case MachinePlaysBlack:
-  case MachinePlaysWhite:
-    /* disable certain menu options while machine is thinking */
-    SetMachineThinkingEnables();
-    break;
-
-  default:
-    break;
-  }
-}
-
-void
-HandleMachineMove(message, cps)
-     char *message;
-     ChessProgramState *cps;
-{
-    char machineMove[MSG_SIZ], buf1[MSG_SIZ*10], buf2[MSG_SIZ];
-    char realname[MSG_SIZ];
-    int fromX, fromY, toX, toY;
-    ChessMove moveType;
-    char promoChar;
-    char *p;
-    int machineWhite;
-
-    /*
-     * Kludge to ignore BEL characters
-     */
-    while (*message == '\007') message++;
-
-    /*
-     * Look for book output
-     */
-    if (cps == &first && bookRequested) {
-	if (message[0] == '\t' || message[0] == ' ') {
-	    /* Part of the book output is here; append it */
-	    strcat(bookOutput, message);
-	    strcat(bookOutput, "  \n");
-	    return;
-	} else if (bookOutput[0] != NULLCHAR) {
-	    /* All of book output has arrived; display it */
-	    char *p = bookOutput;
-	    while (*p != NULLCHAR) {
-		if (*p == '\t') *p = ' ';
-		p++;
-	    }
-	    DisplayInformation(bookOutput);
-	    bookRequested = FALSE;
-	    /* Fall through to parse the current output */
-	}
-    }
-
-    /*
-     * Look for machine move.
-     */
-    if ((sscanf(message, "%s %s %s", buf1, buf2, machineMove) == 3 &&
-	 strcmp(buf2, "...") == 0) ||
-	(sscanf(message, "%s %s", buf1, machineMove) == 2 &&
-	 strcmp(buf1, "move") == 0)) {
-
-        /* This method is only useful on engines that support ping */
-        if (cps->lastPing != cps->lastPong) {
-	  if (gameMode == BeginningOfGame) {
-	    /* Extra move from before last new; ignore */
-	    if (appData.debugMode) {
-		fprintf(debugFP, "Ignoring extra move from %s\n", cps->which);
-	    }
-	  } else {
-	    if (appData.debugMode) {
-		fprintf(debugFP, "Undoing extra move from %s, gameMode %d\n",
-			cps->which, gameMode);
-	    }
-	    SendToProgram("undo\n", cps);
-	  }
-	  return;
-	}
-
-	switch (gameMode) {
-	  case BeginningOfGame:
-	    /* Extra move from before last reset; ignore */
-	    if (appData.debugMode) {
-		fprintf(debugFP, "Ignoring extra move from %s\n", cps->which);
-	    }
-	    return;
-
-	  case EndOfGame:
-	  case IcsIdle:
-	  default:
-	    /* Extra move after we tried to stop.  The mode test is
-	       not a reliable way of detecting this problem, but it's
-	       the best we can do on engines that don't support ping.
-	    */
-	    if (appData.debugMode) {
-		fprintf(debugFP, "Undoing extra move from %s, gameMode %d\n",
-			cps->which, gameMode);
-	    }
-	    SendToProgram("undo\n", cps);
-	    return;
-
-	  case MachinePlaysWhite:
-	  case IcsPlayingWhite:
-	    machineWhite = TRUE;
-	    break;
-
-	  case MachinePlaysBlack:
-	  case IcsPlayingBlack:
-	    machineWhite = FALSE;
-	    break;
-
-	  case TwoMachinesPlay:
-	    machineWhite = (cps->twoMachinesColor[0] == 'w');
-	    break;
-	}
-	if (WhiteOnMove(forwardMostMove) != machineWhite) {
-	    if (appData.debugMode) {
-		fprintf(debugFP,
-			"Ignoring move out of turn by %s, gameMode %d"
-			", forwardMost %d\n",
-			cps->which, gameMode, forwardMostMove);
-	    }
-	    return;
-	}
-
-	if (!ParseOneMove(machineMove, forwardMostMove, &moveType,
-			      &fromX, &fromY, &toX, &toY, &promoChar)) {
-	    /* Machine move could not be parsed; ignore it. */
-	    sprintf(buf1, "Illegal move \"%s\" from %s machine",
-		    machineMove, cps->which);
-	    DisplayError(buf1, 0);
-	    if (gameMode == TwoMachinesPlay) {
-	      GameEnds(machineWhite ? BlackWins : WhiteWins,
-		       "Forfeit due to illegal move", GE_XBOARD);
-	    }
-	    return;
-	}
-
-	hintRequested = FALSE;
-	lastHint[0] = NULLCHAR;
-	bookRequested = FALSE;
-	/* Program may be pondering now */
-	cps->maybeThinking = TRUE;
-	if (cps->sendTime == 2) cps->sendTime = 1;
-	if (cps->offeredDraw) cps->offeredDraw--;
-
-#if ZIPPY
-	if ((gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack) &&
-	    first.initDone) {
-	  SendMoveToICS(moveType, fromX, fromY, toX, toY);
-	  ics_user_moved = 1;
-	}
-#endif
-	/* currentMoveString is set as a side-effect of ParseOneMove */
-	strcpy(machineMove, currentMoveString);
-	strcat(machineMove, "\n");
-	strcpy(moveList[forwardMostMove], machineMove);
-    
-	MakeMove(fromX, fromY, toX, toY, promoChar);/*updates forwardMostMove*/
-    
-	if (gameMode == TwoMachinesPlay) {
-	    if (cps->other->sendTime) {
-		SendTimeRemaining(cps->other,
-				  cps->other->twoMachinesColor[0] == 'w');
-	    }
-	    SendMoveToProgram(forwardMostMove-1, cps->other);
-	    if (firstMove) {
-		firstMove = FALSE;
-		if (cps->other->useColors) {
-		  SendToProgram(cps->other->twoMachinesColor, cps->other);
-		}
-		SendToProgram("go\n", cps->other);
-	    }
-	    cps->other->maybeThinking = TRUE;
-	}
-
-	ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
-	if (!pausing && appData.ringBellAfterMoves) {
-	    RingBell();
-	}
-	/* 
-	 * Reenable menu items that were disabled while
-	 * machine was thinking
-	 */
-	if (gameMode != TwoMachinesPlay)
-	    SetUserThinkingEnables();
-	return;
-    }
-
-    /* Set special modes for chess engines.  Later something general
-     *  could be added here; for now there is just one kludge feature,
-     *  needed because Crafty 15.10 and earlier don't ignore SIGINT
-     *  when "xboard" is given as an interactive command.
-     */
-    if (strncmp(message, "kibitz Hello from Crafty", 24) == 0) {
-	cps->useSigint = FALSE;
-	cps->useSigterm = FALSE;
-    }
-
-    /*
-     * Look for communication commands
-     */
-    if (!strncmp(message, "telluser ", 9)) {
-	DisplayNote(message + 9);
-	return;
-    }
-    if (!strncmp(message, "tellusererror ", 14)) {
-	DisplayError(message + 14, 0);
-	return;
-    }
-    if (!strncmp(message, "tellopponent ", 13)) {
-      if (appData.icsActive) {
-	if (loggedOn) {
-	  sprintf(buf1, "%ssay %s\n", ics_prefix, message + 13);
-	  SendToICS(buf1);
-	}
-      } else {
-	DisplayNote(message + 13);
-      }
-      return;
-    }
-    if (!strncmp(message, "tellothers ", 11)) {
-      if (appData.icsActive) {
-	if (loggedOn) {
-	  sprintf(buf1, "%swhisper %s\n", ics_prefix, message + 11);
-	  SendToICS(buf1);
-	}
-      }
-      return;
-    }
-    if (!strncmp(message, "tellall ", 8)) {
-      if (appData.icsActive) {
-	if (loggedOn) {
-	  sprintf(buf1, "%skibitz %s\n", ics_prefix, message + 8);
-	  SendToICS(buf1);
-	}
-      } else {
-	DisplayNote(message + 8);
-      }
-      return;
-    }
-    if (strncmp(message, "warning", 7) == 0) {
-	/* Undocumented feature, use tellusererror in new code */
-	DisplayError(message, 0);
-	return;
-    }
-    if (sscanf(message, "askuser %s %[^\n]", buf1, buf2) == 2) {
-	strcpy(realname, cps->tidy);
-	strcat(realname, " query");
-	AskQuestion(realname, buf2, buf1, cps->pr);
-	return;
-    }
-    /* Commands from the engine directly to ICS.  We don't allow these to be 
-     *  sent until we are logged on. Crafty kibitzes have been known to 
-     *  interfere with the login process.
-     */
-    if (loggedOn) {
-	if (!strncmp(message, "tellics ", 8)) {
-	    SendToICS(message + 8);
-	    SendToICS("\n");
-	    return;
-	}
-	if (!strncmp(message, "tellicsnoalias ", 15)) {
-	    SendToICS(ics_prefix);
-	    SendToICS(message + 15);
-	    SendToICS("\n");
-	    return;
-	}
-	/* The following are for backward compatibility only */
-	if (!strncmp(message,"whisper",7) || !strncmp(message,"kibitz",6) ||
-	    !strncmp(message,"draw",4) || !strncmp(message,"tell",3)) {
-	    SendToICS(ics_prefix);
-	    SendToICS(message);
-	    SendToICS("\n");
-	    return;
-	}
-    }
-    if (strncmp(message, "feature ", 8) == 0) {
-      ParseFeatures(message+8, cps);
-    }
-    if (sscanf(message, "pong %d", &cps->lastPong) == 1) {
-      return;
-    }
-    /*
-     * If the move is illegal, cancel it and redraw the board.
-     * Also deal with other error cases.  Matching is rather loose
-     * here to accommodate engines written before the spec.
-     */
-    if (strncmp(message + 1, "llegal move", 11) == 0 ||
-	strncmp(message, "Error", 5) == 0) {
-	if (StrStr(message, "name") || 
-	    StrStr(message, "rating") || StrStr(message, "?") ||
-	    StrStr(message, "result") || StrStr(message, "board") ||
-	    StrStr(message, "bk") || StrStr(message, "computer") ||
-	    StrStr(message, "variant") || StrStr(message, "hint") ||
-	    StrStr(message, "random") || StrStr(message, "depth") ||
-	    StrStr(message, "accepted")) {
-	    return;
-	}
-	if (StrStr(message, "protover")) {
-	  /* Program is responding to input, so it's apparently done
-             initializing, and this error message indicates it is
-             protocol version 1.  So we don't need to wait any longer
-             for it to initialize and send feature commands. */
-	  FeatureDone(cps, 1);
-	  cps->protocolVersion = 1;
-	  return;
-	}
-	cps->maybeThinking = FALSE;
-
-	if (StrStr(message, "draw")) {
-	    /* Program doesn't have "draw" command */
-	    cps->sendDrawOffers = 0;
-	    return;
-	}
-	if (cps->sendTime != 1 &&
-	    (StrStr(message, "time") || StrStr(message, "otim"))) {
-	  /* Program apparently doesn't have "time" or "otim" command */
-	  cps->sendTime = 0;
-	  return;
-	}
-	if (StrStr(message, "analyze")) {
-	    cps->analysisSupport = FALSE;
-	    cps->analyzing = FALSE;
-	    Reset(FALSE, TRUE);
-	    sprintf(buf2, "%s does not support analysis", cps->tidy);
-	    DisplayError(buf2, 0);
-	    return;
-	}
-	if (StrStr(message, "(no matching move)st")) {
-	  /* Special kludge for GNU Chess 4 only */
-	  cps->stKludge = TRUE;
-	  SendTimeControl(cps, movesPerSession, timeControl,
-			  timeIncrement, appData.searchDepth,
-			  searchTime);
-	  return;
-	}
-	if (StrStr(message, "(no matching move)sd")) {
-	  /* Special kludge for GNU Chess 4 only */
-	  cps->sdKludge = TRUE;
-	  SendTimeControl(cps, movesPerSession, timeControl,
-			  timeIncrement, appData.searchDepth,
-			  searchTime);
-	  return;
-	}
-	if (!StrStr(message, "llegal")) return;
-	if (gameMode == BeginningOfGame || gameMode == EndOfGame ||
-	    gameMode == IcsIdle) return;
-	if (forwardMostMove <= backwardMostMove) return;
-#if 0
-	/* Following removed: it caused a bug where a real illegal move
-	   message in analyze mored would be ignored. */
-	if (cps == &first && programStats.ok_to_send == 0) {
-	    /* Bogus message from Crafty responding to "."  This filtering
-	       can miss some of the bad messages, but fortunately the bug 
-	       is fixed in current Crafty versions, so it doesn't matter. */
-	    return;
-	}
-#endif
-	if (pausing) PauseEvent();
-	if (gameMode == PlayFromGameFile) {
-	    /* Stop reading this game file */
-	    gameMode = EditGame;
-	    ModeHighlight();
-	}
-	currentMove = --forwardMostMove;
-	DisplayMove(currentMove-1); /* before DisplayMoveError */
-	SwitchClocks();
-	DisplayBothClocks();
-	sprintf(buf1, "Illegal move \"%s\" (rejected by %s chess program)",
-		parseList[currentMove], cps->which);
-	DisplayMoveError(buf1);
-	DrawPosition(FALSE, boards[currentMove]);
-	return;
-    }
-    if (strncmp(message, "time", 4) == 0 && StrStr(message, "Illegal")) {
-	/* Program has a broken "time" command that
-	   outputs a string not ending in newline.
-	   Don't use it. */
-	cps->sendTime = 0;
-    }
-    
-    /*
-     * If chess program startup fails, exit with an error message.
-     * Attempts to recover here are futile.
-     */
-    if ((StrStr(message, "unknown host") != NULL)
-	|| (StrStr(message, "No remote directory") != NULL)
-	|| (StrStr(message, "not found") != NULL)
-	|| (StrStr(message, "No such file") != NULL)
-	|| (StrStr(message, "can't alloc") != NULL)
-	|| (StrStr(message, "Permission denied") != NULL)) {
-
-	cps->maybeThinking = FALSE;
-	sprintf(buf1, "Failed to start %s chess program %s on %s: %s\n",
-		cps->which, cps->program, cps->host, message);
-	RemoveInputSource(cps->isr);
-	DisplayFatalError(buf1, 0, 1);
-	return;
-    }
-    
-    /* 
-     * Look for hint output
-     */
-    if (sscanf(message, "Hint: %s", buf1) == 1) {
-	if (cps == &first && hintRequested) {
-	    hintRequested = FALSE;
-	    if (ParseOneMove(buf1, forwardMostMove, &moveType,
-				 &fromX, &fromY, &toX, &toY, &promoChar)) {
-		(void) CoordsToAlgebraic(boards[forwardMostMove],
-				    PosFlags(forwardMostMove), EP_UNKNOWN,
-				    fromY, fromX, toY, toX, promoChar, buf1);
-		sprintf(buf2, "Hint: %s", buf1);
-		DisplayInformation(buf2);
-	    } else {
-		/* Hint move could not be parsed!? */
-		sprintf(buf2,
-			"Illegal hint move \"%s\"\nfrom %s chess program",
-			buf1, cps->which);
-		DisplayError(buf2, 0);
-	    }
-	} else {
-	    strcpy(lastHint, buf1);
-	}
-	return;
-    }
-
-    /*
-     * Ignore other messages if game is not in progress
-     */
-    if (gameMode == BeginningOfGame || gameMode == EndOfGame ||
-	gameMode == IcsIdle || cps->lastPing != cps->lastPong) return;
-
-    /*
-     * look for win, lose, draw, or draw offer
-     */
-    if (strncmp(message, "1-0", 3) == 0) {
-	char *p, *q, *r = "";
-        p = strchr(message, '{');
-	if (p) {
-	    q = strchr(p, '}');
-	    if (q) {
-		*q = NULLCHAR;
-		r = p + 1;
-	    }
-	}
-	GameEnds(WhiteWins, r, GE_ENGINE);
-	return;
-    } else if (strncmp(message, "0-1", 3) == 0) {
-	char *p, *q, *r = "";
-        p = strchr(message, '{');
-	if (p) {
-	    q = strchr(p, '}');
-	    if (q) {
-		*q = NULLCHAR;
-		r = p + 1;
-	    }
-	}
-	/* Kludge for Arasan 4.1 bug */
-	if (strcmp(r, "Black resigns") == 0) {
-	    GameEnds(WhiteWins, r, GE_ENGINE);
-	    return;
-	}
-	GameEnds(BlackWins, r, GE_ENGINE);
-	return;
-    } else if (strncmp(message, "1/2", 3) == 0) {
-	char *p, *q, *r = "";
-        p = strchr(message, '{');
-	if (p) {
-	    q = strchr(p, '}');
-	    if (q) {
-		*q = NULLCHAR;
-		r = p + 1;
-	    }
-	}
-	GameEnds(GameIsDrawn, r, GE_ENGINE);
-	return;
-
-    } else if (strncmp(message, "White resign", 12) == 0) {
-	GameEnds(BlackWins, "White resigns", GE_ENGINE);
-	return;
-    } else if (strncmp(message, "Black resign", 12) == 0) {
-	GameEnds(WhiteWins, "Black resigns", GE_ENGINE);
-	return;
-    } else if (strncmp(message, "White", 5) == 0 &&
-	       message[5] != '(' &&
-	       StrStr(message, "Black") == NULL) {
-	GameEnds(WhiteWins, "White mates", GE_ENGINE);
-	return;
-    } else if (strncmp(message, "Black", 5) == 0 &&
-	       message[5] != '(') {
-	GameEnds(BlackWins, "Black mates", GE_ENGINE);
-	return;
-    } else if (strcmp(message, "resign") == 0 ||
-	       strcmp(message, "computer resigns") == 0) {
-	switch (gameMode) {
-	  case MachinePlaysBlack:
-	  case IcsPlayingBlack:
-	    GameEnds(WhiteWins, "Black resigns", GE_ENGINE);
-	    break;
-	  case MachinePlaysWhite:
-	  case IcsPlayingWhite:
-	    GameEnds(BlackWins, "White resigns", GE_ENGINE);
-	    break;
-	  case TwoMachinesPlay:
-	    if (cps->twoMachinesColor[0] == 'w')
-	      GameEnds(BlackWins, "White resigns", GE_ENGINE);
-	    else
-	      GameEnds(WhiteWins, "Black resigns", GE_ENGINE);
-	    break;
-	  default:
-	    /* can't happen */
-	    break;
-	}
-	return;
-    } else if (strncmp(message, "opponent mates", 14) == 0) {
-	switch (gameMode) {
-	  case MachinePlaysBlack:
-	  case IcsPlayingBlack:
-	    GameEnds(WhiteWins, "White mates", GE_ENGINE);
-	    break;
-	  case MachinePlaysWhite:
-	  case IcsPlayingWhite:
-	    GameEnds(BlackWins, "Black mates", GE_ENGINE);
-	    break;
-	  case TwoMachinesPlay:
-	    if (cps->twoMachinesColor[0] == 'w')
-	      GameEnds(BlackWins, "Black mates", GE_ENGINE);
-	    else
-	      GameEnds(WhiteWins, "White mates", GE_ENGINE);
-	    break;
-	  default:
-	    /* can't happen */
-	    break;
-	}
-	return;
-    } else if (strncmp(message, "computer mates", 14) == 0) {
-	switch (gameMode) {
-	  case MachinePlaysBlack:
-	  case IcsPlayingBlack:
-	    GameEnds(BlackWins, "Black mates", GE_ENGINE);
-	    break;
-	  case MachinePlaysWhite:
-	  case IcsPlayingWhite:
-	    GameEnds(WhiteWins, "White mates", GE_ENGINE);
-	    break;
-	  case TwoMachinesPlay:
-	    if (cps->twoMachinesColor[0] == 'w')
-	      GameEnds(WhiteWins, "White mates", GE_ENGINE);
-	    else
-	      GameEnds(BlackWins, "Black mates", GE_ENGINE);
-	    break;
-	  default:
-	    /* can't happen */
-	    break;
-	}
-	return;
-    } else if (strncmp(message, "checkmate", 9) == 0) {
-	if (WhiteOnMove(forwardMostMove)) {
-	    GameEnds(BlackWins, "Black mates", GE_ENGINE);
-	} else {
-	    GameEnds(WhiteWins, "White mates", GE_ENGINE);
-	}
-	return;
-    } else if (strstr(message, "Draw") != NULL ||
-	       strstr(message, "game is a draw") != NULL) {
-	GameEnds(GameIsDrawn, "Draw", GE_ENGINE);
-	return;
-    } else if (strstr(message, "offer") != NULL &&
-	       strstr(message, "draw") != NULL) {
-#if ZIPPY
-	if (appData.zippyPlay && first.initDone) {
-	    /* Relay offer to ICS */
-	    SendToICS(ics_prefix);
-	    SendToICS("draw\n");
-	}
-#endif
-	cps->offeredDraw = 2; /* valid until this engine moves twice */
-	if (gameMode == TwoMachinesPlay) {
-	    if (cps->other->offeredDraw) {
-		GameEnds(GameIsDrawn, "Draw agreed", GE_XBOARD);
-	    } else {
-	        if (cps->other->sendDrawOffers) {
-		    SendToProgram("draw\n", cps->other);
-		}
-	    }
-	} else if (gameMode == MachinePlaysWhite ||
-		   gameMode == MachinePlaysBlack) {
-	  if (userOfferedDraw) {
-	    DisplayInformation("Machine accepts your draw offer");
-	    GameEnds(GameIsDrawn, "Draw agreed", GE_XBOARD);
-	  } else {
-            DisplayInformation("Machine offers a draw\nSelect Action / Draw to agree");
-	  }
-	}
-    }
-
-    
-    /*
-     * Look for thinking output
-     */
-    if (appData.showThinking) {
-	int plylev, mvleft, mvtot, curscore, time;
-	char mvname[MOVE_LEN];
-	unsigned long nodes;
-	char plyext;
-	int ignore = FALSE;
-	int prefixHint = FALSE;
-	mvname[0] = NULLCHAR;
-
-	switch (gameMode) {
-	  case MachinePlaysBlack:
-	  case IcsPlayingBlack:
-	    if (WhiteOnMove(forwardMostMove)) prefixHint = TRUE;
-	    break;
-	  case MachinePlaysWhite:
-	  case IcsPlayingWhite:
-	    if (!WhiteOnMove(forwardMostMove)) prefixHint = TRUE;
-	    break;
-	  case AnalyzeMode:
-	  case AnalyzeFile:
-	    break;
-	  case TwoMachinesPlay:
-	    if ((cps->twoMachinesColor[0] == 'w') !=
-		WhiteOnMove(forwardMostMove)) {
-		ignore = TRUE;
-	    }
-	    break;
-	  default:
-	    ignore = TRUE;
-	    break;
-	}
-
-	if (!ignore) {
-	    buf1[0] = NULLCHAR;
-	    if (sscanf(message, "%d%c %d %d %lu %[^\n]\n",
-		       &plylev, &plyext, &curscore, &time, &nodes, buf1) >= 5) {
-
-		if (plyext != ' ' && plyext != '\t') {
-		    time *= 100;
-		}
-		programStats.depth = plylev;
-		programStats.nodes = nodes;
-		programStats.time = time;
-		programStats.score = curscore;
-		programStats.got_only_move = 0;
-
-		/* Buffer overflow protection */
-		if (buf1[0] != NULLCHAR) {
-		    if (strlen(buf1) >= sizeof(programStats.movelist)
-			&& appData.debugMode) {
-			fprintf(debugFP,
-				"PV is too long; using the first %d bytes.\n",
-				sizeof(programStats.movelist) - 1);
-		    }
-		    strncpy(programStats.movelist, buf1,
-			    sizeof(programStats.movelist));
-		    programStats.movelist[sizeof(programStats.movelist) - 1]
-		      = NULLCHAR;
-		} else {
-		    sprintf(programStats.movelist, " no PV\n");
-		}
-
-		if (programStats.seen_stat) {
-		    programStats.ok_to_send = 1;
-		}
-
-		if (strchr(programStats.movelist, '(') != NULL) {
-		    programStats.line_is_book = 1;
-		    programStats.nr_moves = 0;
-		    programStats.moves_left = 0;
-		} else {
-		    programStats.line_is_book = 0;
-		}
-		  
-		sprintf(thinkOutput, "[%d]%c%+.2f %s%s%s",
-			plylev, 
-			(gameMode == TwoMachinesPlay ?
-			 ToUpper(cps->twoMachinesColor[0]) : ' '),
-			((double) curscore) / 100.0,
-			prefixHint ? lastHint : "",
-			prefixHint ? " " : "", buf1);
-
-		if (currentMove == forwardMostMove ||
-		    gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
-		    DisplayMove(currentMove - 1);
-		    DisplayAnalysis();
-		}
-		return;
-
-	    } else if ((p=StrStr(message, "(only move)")) != NULL) {
-		/* crafty (9.25+) says "(only move) <move>"
-		 * if there is only 1 legal move
-                 */
-		sscanf(p, "(only move) %s", buf1);
-		sprintf(thinkOutput, "%s (only move)", buf1);
-		sprintf(programStats.movelist, "%s (only move)", buf1);
-		programStats.depth = 1;
-		programStats.nr_moves = 1;
-		programStats.moves_left = 1;
-		programStats.nodes = 1;
-		programStats.time = 1;
-		programStats.got_only_move = 1;
-
-		/* Not really, but we also use this member to
-		   mean "line isn't going to change" (Crafty
-		   isn't searching, so stats won't change) */
-		programStats.line_is_book = 1;
-		  
-		if (currentMove == forwardMostMove || gameMode==AnalyzeMode ||
-		    gameMode == AnalyzeFile) {
-		    DisplayMove(currentMove - 1);
-		    DisplayAnalysis();
-		}
-		return;
-	    } else if (sscanf(message,"stat01: %d %lu %d %d %d %s",
-			      &time, &nodes, &plylev, &mvleft,
-			      &mvtot, mvname) >= 5) {
-		/* The stat01: line is from Crafty (9.29+) in response
-		   to the "." command */
-		programStats.seen_stat = 1;
-		cps->maybeThinking = TRUE;
-
-		if (programStats.got_only_move || !appData.periodicUpdates)
-		  return;
-
-		programStats.depth = plylev;
-		programStats.time = time;
-		programStats.nodes = nodes;
-		programStats.moves_left = mvleft;
-		programStats.nr_moves = mvtot;
-		strcpy(programStats.move_name, mvname);
-		programStats.ok_to_send = 1;
-		DisplayAnalysis();
-		return;
-
-	    } else if (strncmp(message,"++",2) == 0) {
-		/* Crafty 9.29+ outputs this */
-		programStats.got_fail = 2;
-		return;
-
-	    } else if (strncmp(message,"--",2) == 0) {
-		/* Crafty 9.29+ outputs this */
-		programStats.got_fail = 1;
-		return;
-
-	    } else if (thinkOutput[0] != NULLCHAR &&
-		       strncmp(message, "    ", 4) == 0) {
-	        p = message;
-		while (*p && *p == ' ') p++;
-		strcat(thinkOutput, " ");
-		strcat(thinkOutput, p);
-		strcat(programStats.movelist, " ");
-		strcat(programStats.movelist, p);
-		if (currentMove == forwardMostMove || gameMode==AnalyzeMode ||
-		    gameMode == AnalyzeFile) {
-		    DisplayMove(currentMove - 1);
-		    DisplayAnalysis();
-		}
-		return;
-	    }
-	}
-    }
-}
-
-
-/* Parse a game score from the character string "game", and
-   record it as the history of the current game.  The game
-   score is NOT assumed to start from the standard position. 
-   The display is not updated in any way.
-   */
-void
-ParseGameHistory(game)
-     char *game;
-{
-    ChessMove moveType;
-    int fromX, fromY, toX, toY, boardIndex;
-    char promoChar;
-    char *p, *q;
-    char buf[MSG_SIZ];
-
-    if (appData.debugMode)
-      fprintf(debugFP, "Parsing game history: %s\n", game);
-
-    if (gameInfo.event == NULL) gameInfo.event = StrSave("ICS game");
-    gameInfo.site = StrSave(appData.icsHost);
-    gameInfo.date = PGNDate();
-    gameInfo.round = StrSave("-");
-
-    /* Parse out names of players */
-    while (*game == ' ') game++;
-    p = buf;
-    while (*game != ' ') *p++ = *game++;
-    *p = NULLCHAR;
-    gameInfo.white = StrSave(buf);
-    while (*game == ' ') game++;
-    p = buf;
-    while (*game != ' ' && *game != '\n') *p++ = *game++;
-    *p = NULLCHAR;
-    gameInfo.black = StrSave(buf);
-
-    /* Parse moves */
-    boardIndex = blackPlaysFirst ? 1 : 0;
-    yynewstr(game);
-    for (;;) {
-	yyboardindex = boardIndex;
-	moveType = (ChessMove) yylex();
-	switch (moveType) {
-	  case WhitePromotionQueen:
-	  case BlackPromotionQueen:
-	  case WhitePromotionRook:
-	  case BlackPromotionRook:
-	  case WhitePromotionBishop:
-	  case BlackPromotionBishop:
-	  case WhitePromotionKnight:
-	  case BlackPromotionKnight:
-	  case WhitePromotionKing:
-	  case BlackPromotionKing:
-	  case NormalMove:
-	  case WhiteCapturesEnPassant:
-	  case BlackCapturesEnPassant:
-	  case WhiteKingSideCastle:
-	  case WhiteQueenSideCastle:
-	  case BlackKingSideCastle:
-	  case BlackQueenSideCastle:
-	  case WhiteKingSideCastleWild:
-	  case WhiteQueenSideCastleWild:
-	  case BlackKingSideCastleWild:
-	  case BlackQueenSideCastleWild:
-	  case IllegalMove:		/* maybe suicide chess, etc. */
-	    fromX = currentMoveString[0] - 'a';
-	    fromY = currentMoveString[1] - '1';
-	    toX = currentMoveString[2] - 'a';
-	    toY = currentMoveString[3] - '1';
-	    promoChar = currentMoveString[4];
-	    break;
-	  case WhiteDrop:
-	  case BlackDrop:
-	    fromX = moveType == WhiteDrop ?
-	      (int) CharToPiece(ToUpper(currentMoveString[0])) :
-	    (int) CharToPiece(ToLower(currentMoveString[0]));
-	    fromY = DROP_RANK;
-	    toX = currentMoveString[2] - 'a';
-	    toY = currentMoveString[3] - '1';
-	    promoChar = NULLCHAR;
-	    break;
-	  case AmbiguousMove:
-	    /* bug? */
-	    sprintf(buf, "Ambiguous move in ICS output: \"%s\"", yy_text);
-	    DisplayError(buf, 0);
-	    return;
-	  case ImpossibleMove:
-	    /* bug? */
-	    sprintf(buf, "Illegal move in ICS output: \"%s\"", yy_text);
-	    DisplayError(buf, 0);
-	    return;
-	  case (ChessMove) 0:	/* end of file */
-	    if (boardIndex < backwardMostMove) {
-		/* Oops, gap.  How did that happen? */
-		DisplayError("Gap in move list", 0);
-		return;
-	    }
-	    backwardMostMove =  blackPlaysFirst ? 1 : 0;
-	    if (boardIndex > forwardMostMove) {
-		forwardMostMove = boardIndex;
-	    }
-	    return;
-	  case ElapsedTime:
-	    if (boardIndex > (blackPlaysFirst ? 1 : 0)) {
-		strcat(parseList[boardIndex-1], " ");
-		strcat(parseList[boardIndex-1], yy_text);
-	    }
-	    continue;
-	  case Comment:
-	  case PGNTag:
-	  case NAG:
-	  default:
-	    /* ignore */
-	    continue;
-	  case WhiteWins:
-	  case BlackWins:
-	  case GameIsDrawn:
-	  case GameUnfinished:
-	    if (gameMode == IcsExamining) {
-		if (boardIndex < backwardMostMove) {
-		    /* Oops, gap.  How did that happen? */
-		    return;
-		}
-		backwardMostMove = blackPlaysFirst ? 1 : 0;
-		return;
-	    }
-	    gameInfo.result = moveType;
-	    p = strchr(yy_text, '{');
-	    if (p == NULL) p = strchr(yy_text, '(');
-	    if (p == NULL) {
-		p = yy_text;
-		if (p[0] == '0' || p[0] == '1' || p[0] == '*') p = "";
-	    } else {
-		q = strchr(p, *p == '{' ? '}' : ')');
-		if (q != NULL) *q = NULLCHAR;
-		p++;
-	    }
-	    gameInfo.resultDetails = StrSave(p);
-	    continue;
-	}
-	if (boardIndex >= forwardMostMove &&
-	    !(gameMode == IcsObserving && ics_gamenum == -1)) {
-	    backwardMostMove = blackPlaysFirst ? 1 : 0;
-	    return;
-	}
-	(void) CoordsToAlgebraic(boards[boardIndex], PosFlags(boardIndex),
-				 EP_UNKNOWN, fromY, fromX, toY, toX, promoChar,
-				 parseList[boardIndex]);
-	CopyBoard(boards[boardIndex + 1], boards[boardIndex]);
-	/* currentMoveString is set as a side-effect of yylex */
-	strcpy(moveList[boardIndex], currentMoveString);
-	strcat(moveList[boardIndex], "\n");
-	boardIndex++;
-	ApplyMove(fromX, fromY, toX, toY, promoChar, boards[boardIndex]);
-	switch (MateTest(boards[boardIndex],
-			 PosFlags(boardIndex), EP_UNKNOWN)) {
-	  case MT_NONE:
-	  case MT_STALEMATE:
-	  default:
-	    break;
-	  case MT_CHECK:
-	    strcat(parseList[boardIndex - 1], "+");
-	    break;
-	  case MT_CHECKMATE:
-	    strcat(parseList[boardIndex - 1], "#");
-	    break;
-	}
-    }
-}
-
-
-/* Apply a move to the given board  */
-void
-ApplyMove(fromX, fromY, toX, toY, promoChar, board)
-     int fromX, fromY, toX, toY;
-     int promoChar;
-     Board board;
-{
-    ChessSquare captured = board[toY][toX];
-    if (fromY == DROP_RANK) {
-	/* must be first */
-	board[toY][toX] = (ChessSquare) fromX;
-    } else if (fromX == toX && fromY == toY) {
-	return;
-    } else if (fromY == 0 && fromX == 4
-	&& board[fromY][fromX] == WhiteKing
-	&& toY == 0 && toX == 6) {
-	board[fromY][fromX] = EmptySquare;
-	board[toY][toX] = WhiteKing;
-	board[fromY][7] = EmptySquare;
-	board[toY][5] = WhiteRook;
-    } else if (fromY == 0 && fromX == 4
-	       && board[fromY][fromX] == WhiteKing
-	       && toY == 0 && toX == 2) {
-	board[fromY][fromX] = EmptySquare;
-	board[toY][toX] = WhiteKing;
-	board[fromY][0] = EmptySquare;
-	board[toY][3] = WhiteRook;
-    } else if (fromY == 0 && fromX == 3
-	       && board[fromY][fromX] == WhiteKing
-	       && toY == 0 && toX == 5) {
-	board[fromY][fromX] = EmptySquare;
-	board[toY][toX] = WhiteKing;
-	board[fromY][7] = EmptySquare;
-	board[toY][4] = WhiteRook;
-    } else if (fromY == 0 && fromX == 3
-	       && board[fromY][fromX] == WhiteKing
-	       && toY == 0 && toX == 1) {
-	board[fromY][fromX] = EmptySquare;
-	board[toY][toX] = WhiteKing;
-	board[fromY][0] = EmptySquare;
-	board[toY][2] = WhiteRook;
-    } else if (board[fromY][fromX] == WhitePawn
-	       && toY == 7) {
-	/* white pawn promotion */
-	board[7][toX] = CharToPiece(ToUpper(promoChar));
-	if (board[7][toX] == EmptySquare) {
-	    board[7][toX] = WhiteQueen;
-	}
-	board[fromY][fromX] = EmptySquare;
-    } else if ((fromY == 4)
-	       && (toX != fromX)
-	       && (board[fromY][fromX] == WhitePawn)
-	       && (board[toY][toX] == EmptySquare)) {
-	board[fromY][fromX] = EmptySquare;
-	board[toY][toX] = WhitePawn;
-	captured = board[toY - 1][toX];
-	board[toY - 1][toX] = EmptySquare;
-    } else if (fromY == 7 && fromX == 4
-	       && board[fromY][fromX] == BlackKing
-	       && toY == 7 && toX == 6) {
-	board[fromY][fromX] = EmptySquare;
-	board[toY][toX] = BlackKing;
-	board[fromY][7] = EmptySquare;
-	board[toY][5] = BlackRook;
-    } else if (fromY == 7 && fromX == 4
-	       && board[fromY][fromX] == BlackKing
-	       && toY == 7 && toX == 2) {
-	board[fromY][fromX] = EmptySquare;
-	board[toY][toX] = BlackKing;
-	board[fromY][0] = EmptySquare;
-	board[toY][3] = BlackRook;
-    } else if (fromY == 7 && fromX == 3
-	       && board[fromY][fromX] == BlackKing
-	       && toY == 7 && toX == 5) {
-	board[fromY][fromX] = EmptySquare;
-	board[toY][toX] = BlackKing;
-	board[fromY][7] = EmptySquare;
-	board[toY][4] = BlackRook;
-    } else if (fromY == 7 && fromX == 3
-	       && board[fromY][fromX] == BlackKing
-	       && toY == 7 && toX == 1) {
-	board[fromY][fromX] = EmptySquare;
-	board[toY][toX] = BlackKing;
-	board[fromY][0] = EmptySquare;
-	board[toY][2] = BlackRook;
-    } else if (board[fromY][fromX] == BlackPawn
-	       && toY == 0) {
-	/* black pawn promotion */
-	board[0][toX] = CharToPiece(ToLower(promoChar));
-	if (board[0][toX] == EmptySquare) {
-	    board[0][toX] = BlackQueen;
-	}
-	board[fromY][fromX] = EmptySquare;
-    } else if ((fromY == 3)
-	       && (toX != fromX)
-	       && (board[fromY][fromX] == BlackPawn)
-	       && (board[toY][toX] == EmptySquare)) {
-	board[fromY][fromX] = EmptySquare;
-	board[toY][toX] = BlackPawn;
-	captured = board[toY + 1][toX];
-	board[toY + 1][toX] = EmptySquare;
-    } else {
-	board[toY][toX] = board[fromY][fromX];
-	board[fromY][fromX] = EmptySquare;
-    }
-    if (gameInfo.variant == VariantCrazyhouse) {
-#if 0
-      /* !!A lot more code needs to be written to support holdings */
-      if (fromY == DROP_RANK) {
-	/* Delete from holdings */
-	if (holdings[(int) fromX] > 0) holdings[(int) fromX]--;
-      }
-      if (captured != EmptySquare) {
-	/* Add to holdings */
-	if (captured < BlackPawn) {
-	  holdings[(int)captured - (int)BlackPawn + (int)WhitePawn]++;
-	} else {
-	  holdings[(int)captured - (int)WhitePawn + (int)BlackPawn]++;
-	}
-      }
-#endif
-    } else if (gameInfo.variant == VariantAtomic) {
-      if (captured != EmptySquare) {
-	int y, x;
-	for (y = toY-1; y <= toY+1; y++) {
-	  for (x = toX-1; x <= toX+1; x++) {
-	    if (y >= 0 && y <= 7 && x >= 0 && x <= 7 &&
-		board[y][x] != WhitePawn && board[y][x] != BlackPawn) {
-	      board[y][x] = EmptySquare;
-	    }
-	  }
-	}
-	board[toY][toX] = EmptySquare;
-      }
-    }
-}
-
-/* Updates forwardMostMove */
-void
-MakeMove(fromX, fromY, toX, toY, promoChar)
-     int fromX, fromY, toX, toY;
-     int promoChar;
-{
-    forwardMostMove++;
-    if (forwardMostMove >= MAX_MOVES) {
-      DisplayFatalError("Game too long; increase MAX_MOVES and recompile",
-			0, 1);
-      return;
-    }
-    SwitchClocks();
-    timeRemaining[0][forwardMostMove] = whiteTimeRemaining;
-    timeRemaining[1][forwardMostMove] = blackTimeRemaining;
-    if (commentList[forwardMostMove] != NULL) {
-	free(commentList[forwardMostMove]);
-	commentList[forwardMostMove] = NULL;
-    }
-    CopyBoard(boards[forwardMostMove], boards[forwardMostMove - 1]);
-    ApplyMove(fromX, fromY, toX, toY, promoChar, boards[forwardMostMove]);
-    gameInfo.result = GameUnfinished;
-    if (gameInfo.resultDetails != NULL) {
-	free(gameInfo.resultDetails);
-	gameInfo.resultDetails = NULL;
-    }
-    CoordsToComputerAlgebraic(fromY, fromX, toY, toX, promoChar,
-			      moveList[forwardMostMove - 1]);
-    (void) CoordsToAlgebraic(boards[forwardMostMove - 1],
-			     PosFlags(forwardMostMove - 1), EP_UNKNOWN,
-			     fromY, fromX, toY, toX, promoChar,
-			     parseList[forwardMostMove - 1]);
-    switch (MateTest(boards[forwardMostMove],
-		     PosFlags(forwardMostMove), EP_UNKNOWN)){
-      case MT_NONE:
-      case MT_STALEMATE:
-      default:
-	break;
-      case MT_CHECK:
-	strcat(parseList[forwardMostMove - 1], "+");
-	break;
-      case MT_CHECKMATE:
-	strcat(parseList[forwardMostMove - 1], "#");
-	break;
-    }
-}
-
-/* Updates currentMove if not pausing */
-void
-ShowMove(fromX, fromY, toX, toY)
-{
-    int instant = (gameMode == PlayFromGameFile) ?
-	(matchMode || (appData.timeDelay == 0 && !pausing)) : pausing;
-    if (!pausing || gameMode == PlayFromGameFile || gameMode == AnalyzeFile) {
-	if (!instant) {
-	    if (forwardMostMove == currentMove + 1) {
-		AnimateMove(boards[forwardMostMove - 1],
-			    fromX, fromY, toX, toY);
-	    }
-	    if (appData.highlightLastMove) {
-		SetHighlights(fromX, fromY, toX, toY);
-	    }
-	}
-	currentMove = forwardMostMove;
-    }
-
-    if (instant) return;
-    DisplayMove(currentMove - 1);
-    DrawPosition(FALSE, boards[currentMove]);
-    DisplayBothClocks();
-    HistorySet(parseList,backwardMostMove,forwardMostMove,currentMove-1);
-}
-
-
-void
-InitChessProgram(cps)
-     ChessProgramState *cps;
-{
-    char buf[MSG_SIZ];
-    if (appData.noChessProgram) return;
-    hintRequested = FALSE;
-    bookRequested = FALSE;
-    SendToProgram(cps->initString, cps);
-    if (gameInfo.variant != VariantNormal &&
-	gameInfo.variant != VariantLoadable) {
-      char *v = VariantName(gameInfo.variant);
-      if (StrStr(cps->variants, v) == NULL) {
-	sprintf(buf, "Variant %s not supported by %s", v, cps->tidy);
-	DisplayFatalError(buf, 0, 1);
-	return;
-      }
-      sprintf(buf, "variant %s\n", VariantName(gameInfo.variant));
-      SendToProgram(buf, cps);
-    }
-    if (cps->sendICS) {
-      sprintf(buf, "ics %s\n", appData.icsActive ? appData.icsHost : "-");
-      SendToProgram(buf, cps);
-    }
-    cps->maybeThinking = FALSE;
-    cps->offeredDraw = 0;
-    if (!appData.icsActive) {
-	SendTimeControl(cps, movesPerSession, timeControl,
-			timeIncrement, appData.searchDepth,
-			searchTime);
-    }
-    if (appData.showThinking) {
-	SendToProgram("post\n", cps);
-    }
-    SendToProgram("hard\n", cps);
-    if (!appData.ponderNextMove) {
-	/* Warning: "easy" is a toggle in GNU Chess, so don't send
-	   it without being sure what state we are in first.  "hard"
-	   is not a toggle, so that one is OK.
-	 */
-	SendToProgram("easy\n", cps);
-    }
-    if (cps->usePing) {
-      sprintf(buf, "ping %d\n", ++cps->lastPing);
-      SendToProgram(buf, cps);
-    }
-    cps->initDone = TRUE;
-}   
-
-
-void
-StartChessProgram(cps)
-     ChessProgramState *cps;
-{
-    char buf[MSG_SIZ];
-    int err;
-
-    if (appData.noChessProgram) return;
-    cps->initDone = FALSE;
-
-    if (strcmp(cps->host, "localhost") == 0) {
-	err = StartChildProcess(cps->program, cps->dir, &cps->pr);
-    } else if (*appData.remoteShell == NULLCHAR) {
-	err = OpenRcmd(cps->host, appData.remoteUser, cps->program, &cps->pr);
-    } else {
-	if (*appData.remoteUser == NULLCHAR) {
-	    sprintf(buf, "%s %s %s", appData.remoteShell, cps->host,
-		    cps->program);
-	} else {
-	    sprintf(buf, "%s %s -l %s %s", appData.remoteShell,
-		    cps->host, appData.remoteUser, cps->program);
-	}
-	err = StartChildProcess(buf, "", &cps->pr);
-    }
-    
-    if (err != 0) {
-	sprintf(buf, "Startup failure on '%s'", cps->program);
-	DisplayFatalError(buf, err, 1);
-	cps->pr = NoProc;
-	cps->isr = NULL;
-	return;
-    }
-    
-    cps->isr = AddInputSource(cps->pr, TRUE, ReceiveFromProgram, cps);
-    if (cps->protocolVersion > 1) {
-      sprintf(buf, "xboard\nprotover %d\n", cps->protocolVersion);
-      SendToProgram(buf, cps);
-    } else {
-      SendToProgram("xboard\n", cps);
-    }
-}
-
-
-void
-TwoMachinesEventIfReady P((void))
-{
-  if (first.lastPing != first.lastPong) {
-    DisplayMessage("", "Waiting for first chess program");
-    ScheduleDelayedEvent(TwoMachinesEventIfReady, 1000);
-    return;
-  }
-  if (second.lastPing != second.lastPong) {
-    DisplayMessage("", "Waiting for second chess program");
-    ScheduleDelayedEvent(TwoMachinesEventIfReady, 1000);
-    return;
-  }
-  ThawUI();
-  TwoMachinesEvent();
-}
-
-void
-NextMatchGame P((void))
-{
-    Reset(FALSE, TRUE);
-    if (*appData.loadGameFile != NULLCHAR) {
-	LoadGameFromFile(appData.loadGameFile,
-			 appData.loadGameIndex,
-			 appData.loadGameFile, FALSE);
-    } else if (*appData.loadPositionFile != NULLCHAR) {
-	LoadPositionFromFile(appData.loadPositionFile,
-			     appData.loadPositionIndex,
-			     appData.loadPositionFile);
-    }
-    TwoMachinesEventIfReady();
-}
-
-void
-GameEnds(result, resultDetails, whosays)
-     ChessMove result;
-     char *resultDetails;
-     int whosays;
-{
-    GameMode nextGameMode;
-    int isIcsGame;
-
-    if (appData.debugMode) {
-      fprintf(debugFP, "GameEnds(%d, %s, %d)\n",
-	      result, resultDetails ? resultDetails : "(null)", whosays);
-    }
-
-    if (appData.icsActive && whosays == GE_ENGINE) {
-	/* If we are playing on ICS, the server decides when the
-	   game is over, but the engine can offer to draw, claim 
-	   a draw, or resign. 
-	 */
-#if ZIPPY
-	if (appData.zippyPlay && first.initDone) {
-	    if (result == GameIsDrawn) {
-		/* In case draw still needs to be claimed */
-		SendToICS(ics_prefix);
-		SendToICS("draw\n");
-	    } else if (StrCaseStr(resultDetails, "resign")) {
-		SendToICS(ics_prefix);
-		SendToICS("resign\n");
-	    }
-        }
-#endif
-	return;
-    }
-
-    /* If we're loading the game from a file, stop */
-    if (whosays == GE_FILE) {
-      (void) StopLoadGameTimer();
-      gameFileFP = NULL;
-    }
-
-    /* Cancel draw offers */
-   first.offeredDraw = second.offeredDraw = 0;
-
-    /* If this is an ICS game, only ICS can really say it's done;
-       if not, anyone can. */
-    isIcsGame = (gameMode == IcsPlayingWhite || 
-	         gameMode == IcsPlayingBlack || 
-		 gameMode == IcsObserving    || 
-		 gameMode == IcsExamining);
-
-    if (!isIcsGame || whosays == GE_ICS) {
-	/* OK -- not an ICS game, or ICS said it was done */
-	StopClocks();
-	if (!isIcsGame && !appData.noChessProgram) 
-	  SetUserThinkingEnables();
-    
-	if (resultDetails != NULL) {
-	    gameInfo.result = result;
-	    gameInfo.resultDetails = StrSave(resultDetails);
-
-	    /* Tell program how game ended in case it is learning */
-	    if (gameMode == MachinePlaysWhite ||
-		gameMode == MachinePlaysBlack ||
-		gameMode == TwoMachinesPlay ||
-		gameMode == IcsPlayingWhite ||
-		gameMode == IcsPlayingBlack ||
-		gameMode == BeginningOfGame) {
-		char buf[MSG_SIZ];
-		sprintf(buf, "result %s {%s}\n", PGNResult(result),
-			resultDetails);
-		if (first.pr != NoProc) {
-		    SendToProgram(buf, &first);
-		}
-		if (second.pr != NoProc &&
-		    gameMode == TwoMachinesPlay) {
-		    SendToProgram(buf, &second);
-		}
-	    }
-
-	    /* display last move only if game was not loaded from file */
-	    if ((whosays != GE_FILE) && (currentMove == forwardMostMove))
-		DisplayMove(currentMove - 1);
-    
-	    if (forwardMostMove != 0) {
-		if (gameMode != PlayFromGameFile && gameMode != EditGame) {
-		    if (*appData.saveGameFile != NULLCHAR) {
-			SaveGameToFile(appData.saveGameFile, TRUE);
-		    } else if (appData.autoSaveGames) {
-			AutoSaveGame();
-		    }
-		    if (*appData.savePositionFile != NULLCHAR) {
-			SavePositionToFile(appData.savePositionFile);
-		    }
-		}
-	    }
-	}
-
-	if (appData.icsActive) {
-	    if (appData.quietPlay &&
-		(gameMode == IcsPlayingWhite ||
-		 gameMode == IcsPlayingBlack)) {
-		SendToICS(ics_prefix);
-		SendToICS("set shout 1\n");
-	    }
-	    nextGameMode = IcsIdle;
-	    ics_user_moved = FALSE;
-	    /* clean up premove.  It's ugly when the game has ended and the
-	     * premove highlights are still on the board.
-	     */
-	    if (gotPremove) {
-	      gotPremove = FALSE;
-	      ClearPremoveHighlights();
-	      DrawPosition(FALSE, boards[currentMove]);
-	    }
-	    if (whosays == GE_ICS) {
-		switch (result) {
-		case WhiteWins:
-		    if (gameMode == IcsPlayingWhite)
-			PlayIcsWinSound();
-		    else if(gameMode == IcsPlayingBlack)
-			PlayIcsLossSound();
-		    break;
-		case BlackWins:
-		    if (gameMode == IcsPlayingBlack)
-			PlayIcsWinSound();
-		    else if(gameMode == IcsPlayingWhite)
-			PlayIcsLossSound();
-		    break;
-		case GameIsDrawn:
-		    PlayIcsDrawSound();
-		    break;
-		default:
-		    PlayIcsUnfinishedSound();
-		}
-	    }
-	} else if (gameMode == EditGame ||
-	           gameMode == PlayFromGameFile || 
-	           gameMode == AnalyzeMode || 
-		   gameMode == AnalyzeFile) {
-	    nextGameMode = gameMode;
-	} else {
-	    nextGameMode = EndOfGame;
-	}
-	pausing = FALSE;
-	ModeHighlight();
-    } else {
-	nextGameMode = gameMode;
-    }
-
-    if (appData.noChessProgram) {
-	gameMode = nextGameMode;
-	ModeHighlight();
-	return;
-    }
-
-    if (first.reuse) {
-	/* Put first chess program into idle state */
-	if (first.pr != NoProc &&
-	    (gameMode == MachinePlaysWhite ||
-	     gameMode == MachinePlaysBlack ||
-	     gameMode == TwoMachinesPlay ||
-	     gameMode == IcsPlayingWhite ||
-	     gameMode == IcsPlayingBlack ||
-	     gameMode == BeginningOfGame)) {
-	    SendToProgram("force\n", &first);
-	    if (first.usePing) {
-	      char buf[MSG_SIZ];
-	      sprintf(buf, "ping %d\n", ++first.lastPing);
-	      SendToProgram(buf, &first);
-	    }
-	}
-    } else if (result != GameUnfinished || nextGameMode == IcsIdle) {
-	/* Kill off first chess program */
-	if (first.isr != NULL)
-	  RemoveInputSource(first.isr);
-	first.isr = NULL;
-    
-	if (first.pr != NoProc) {
-	    ExitAnalyzeMode();
-	    SendToProgram("quit\n", &first);
-	    DestroyChildProcess(first.pr, first.useSigterm);
-	}
-	first.pr = NoProc;
-    }
-    if (second.reuse) {
-	/* Put second chess program into idle state */
-	if (second.pr != NoProc &&
-	    gameMode == TwoMachinesPlay) {
-	    SendToProgram("force\n", &second);
-	    if (second.usePing) {
-	      char buf[MSG_SIZ];
-	      sprintf(buf, "ping %d\n", ++second.lastPing);
-	      SendToProgram(buf, &second);
-	    }
-	}
-    } else if (result != GameUnfinished || nextGameMode == IcsIdle) {
-	/* Kill off second chess program */
-	if (second.isr != NULL)
-	  RemoveInputSource(second.isr);
-	second.isr = NULL;
-    
-	if (second.pr != NoProc) {
-	    SendToProgram("quit\n", &second);
-	    DestroyChildProcess(second.pr, second.useSigterm);
-	}
-	second.pr = NoProc;
-    }
-
-    if (matchMode && gameMode == TwoMachinesPlay) {
-        switch (result) {
-	case WhiteWins:
-	  if (first.twoMachinesColor[0] == 'w') {
-	    first.matchWins++;
-	  } else {
-	    second.matchWins++;
-	  }
-	  break;
-	case BlackWins:
-	  if (first.twoMachinesColor[0] == 'b') {
-	    first.matchWins++;
-	  } else {
-	    second.matchWins++;
-	  }
-	  break;
-	default:
-	  break;
-	}
-	if (matchGame < appData.matchGames) {
-	    char *tmp;
-	    tmp = first.twoMachinesColor;
-	    first.twoMachinesColor = second.twoMachinesColor;
-	    second.twoMachinesColor = tmp;
-	    gameMode = nextGameMode;
-	    matchGame++;
-	    ScheduleDelayedEvent(NextMatchGame, 10000);
-	    return;
-	} else {
-	    char buf[MSG_SIZ];
-	    gameMode = nextGameMode;
-	    sprintf(buf, "Match %s vs. %s: final score %d-%d-%d",
-		    first.tidy, second.tidy,
-		    first.matchWins, second.matchWins,
-		    appData.matchGames - (first.matchWins + second.matchWins));
-	    DisplayFatalError(buf, 0, 0);
-	}
-    }
-    if ((gameMode == AnalyzeMode || gameMode == AnalyzeFile) &&
-	!(nextGameMode == AnalyzeMode || nextGameMode == AnalyzeFile))
-      ExitAnalyzeMode();
-    gameMode = nextGameMode;
-    ModeHighlight();
-}
-
-/* Assumes program was just initialized (initString sent).
-   Leaves program in force mode. */
-void
-FeedMovesToProgram(cps, upto) 
-     ChessProgramState *cps;
-     int upto;
-{
-    int i;
-    
-    if (appData.debugMode)
-      fprintf(debugFP, "Feeding %smoves %d through %d to %s chess program\n",
-	      startedFromSetupPosition ? "position and " : "",
-	      backwardMostMove, upto, cps->which);
-    SendToProgram("force\n", cps);
-    if (startedFromSetupPosition) {
-	SendBoard(cps, backwardMostMove);
-    }
-    for (i = backwardMostMove; i < upto; i++) {
-	SendMoveToProgram(i, cps);
-    }
-}
-
-
-void
-ResurrectChessProgram()
-{
-     /* The chess program may have exited.
-	If so, restart it and feed it all the moves made so far. */
-
-    if (appData.noChessProgram || first.pr != NoProc) return;
-    
-    StartChessProgram(&first);
-    InitChessProgram(&first);
-    FeedMovesToProgram(&first, currentMove);
-
-    if (!first.sendTime) {
-	/* can't tell gnuchess what its clock should read,
-	   so we bow to its notion. */
-	ResetClocks();
-	timeRemaining[0][currentMove] = whiteTimeRemaining;
-	timeRemaining[1][currentMove] = blackTimeRemaining;
-    }
-
-    if ((gameMode == AnalyzeMode || gameMode == AnalyzeFile) &&
-	first.analysisSupport) {
-      SendToProgram("analyze\n", &first);
-      first.analyzing = TRUE;
-    }
-}
-
-/*
- * Button procedures
- */
-void
-Reset(redraw, init)
-     int redraw, init;
-{
-    int i;
-
-    if (appData.debugMode) {
-	fprintf(debugFP, "Reset(%d, %d) from gameMode %d\n",
-		redraw, init, gameMode);
-    }
-
-    pausing = pauseExamInvalid = FALSE;
-    startedFromSetupPosition = blackPlaysFirst = FALSE;
-    firstMove = TRUE;
-    whiteFlag = blackFlag = FALSE;
-    userOfferedDraw = FALSE;
-    hintRequested = bookRequested = FALSE;
-    first.maybeThinking = FALSE;
-    second.maybeThinking = FALSE;
-    thinkOutput[0] = NULLCHAR;
-    lastHint[0] = NULLCHAR;
-    ClearGameInfo(&gameInfo);
-    gameInfo.variant = StringToVariant(appData.variant);
-    ics_user_moved = ics_clock_paused = FALSE;
-    ics_getting_history = H_FALSE;
-    ics_gamenum = -1;
-    white_holding[0] = black_holding[0] = NULLCHAR;
-    ClearProgramStats();
-    
-    ResetFrontEnd();
-    ClearHighlights();
-    flipView = appData.flipView;
-    ClearPremoveHighlights();
-    gotPremove = FALSE;
-    alarmSounded = FALSE;
-
-    GameEnds((ChessMove) 0, NULL, GE_PLAYER);
-    ExitAnalyzeMode();
-    gameMode = BeginningOfGame;
-    ModeHighlight();
-    InitPosition(redraw);
-    for (i = 0; i < MAX_MOVES; i++) {
-	if (commentList[i] != NULL) {
-	    free(commentList[i]);
-	    commentList[i] = NULL;
-	}
-    }
-    ResetClocks();
-    timeRemaining[0][0] = whiteTimeRemaining;
-    timeRemaining[1][0] = blackTimeRemaining;
-    if (first.pr == NULL) {
-	StartChessProgram(&first);
-    }
-    if (init) InitChessProgram(&first);
-    DisplayTitle("");
-    DisplayMessage("", "");
-    HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
-}
-
-void
-AutoPlayGameLoop()
-{
-    for (;;) {
-	if (!AutoPlayOneMove())
-	  return;
-	if (matchMode || appData.timeDelay == 0)
-	  continue;
-	if (appData.timeDelay < 0 || gameMode == AnalyzeFile)
-	  return;
-	StartLoadGameTimer((long)(1000.0 * appData.timeDelay));
-	break;
-    }
-}
-
-
-int
-AutoPlayOneMove()
-{
-    int fromX, fromY, toX, toY;
-
-    if (appData.debugMode) {
-      fprintf(debugFP, "AutoPlayOneMove(): current %d\n", currentMove);
-    }
-
-    if (gameMode != PlayFromGameFile)
-      return FALSE;
-
-    if (currentMove >= forwardMostMove) {
-      gameMode = EditGame;
-      ModeHighlight();
-      return FALSE;
-    }
-    
-    toX = moveList[currentMove][2] - 'a';
-    toY = moveList[currentMove][3] - '1';
-
-    if (moveList[currentMove][1] == '@') {
-	if (appData.highlightLastMove) {
-	    SetHighlights(-1, -1, toX, toY);
-	}
-    } else {
-	fromX = moveList[currentMove][0] - 'a';
-	fromY = moveList[currentMove][1] - '1';
-	AnimateMove(boards[currentMove], fromX, fromY, toX, toY);
-
-	if (appData.highlightLastMove) {
-	    SetHighlights(fromX, fromY, toX, toY);
-	}
-    }
-    DisplayMove(currentMove);
-    SendMoveToProgram(currentMove++, &first);
-    DisplayBothClocks();
-    DrawPosition(FALSE, boards[currentMove]);
-    if (commentList[currentMove] != NULL) {
-	DisplayComment(currentMove - 1, commentList[currentMove]);
-    }
-    return TRUE;
-}
-
-
-int
-LoadGameOneMove(readAhead)
-     ChessMove readAhead;
-{
-    int fromX = 0, fromY = 0, toX = 0, toY = 0, done;
-    char promoChar = NULLCHAR;
-    ChessMove moveType;
-    char move[MSG_SIZ];
-    char *p, *q;
-    
-    if (gameMode != PlayFromGameFile && gameMode != AnalyzeFile && 
-	gameMode != AnalyzeMode && gameMode != Training) {
-	gameFileFP = NULL;
-	return FALSE;
-    }
-    
-    yyboardindex = forwardMostMove;
-    if (readAhead != (ChessMove)0) {
-      moveType = readAhead;
-    } else {
-      if (gameFileFP == NULL)
-	  return FALSE;
-      moveType = (ChessMove) yylex();
-    }
-    
-    done = FALSE;
-    switch (moveType) {
-      case Comment:
-	if (appData.debugMode) 
-	  fprintf(debugFP, "Parsed Comment: %s\n", yy_text);
-	p = yy_text;
-	if (*p == '{' || *p == '[' || *p == '(') {
-	    p[strlen(p) - 1] = NULLCHAR;
-	    p++;
-	}
-
-	/* append the comment but don't display it */
-	while (*p == '\n') p++;
-	AppendComment(currentMove, p);
-	return TRUE;
-
-      case WhiteCapturesEnPassant:
-      case BlackCapturesEnPassant:
-      case WhitePromotionQueen:
-      case BlackPromotionQueen:
-      case WhitePromotionRook:
-      case BlackPromotionRook:
-      case WhitePromotionBishop:
-      case BlackPromotionBishop:
-      case WhitePromotionKnight:
-      case BlackPromotionKnight:
-      case WhitePromotionKing:
-      case BlackPromotionKing:
-      case NormalMove:
-      case WhiteKingSideCastle:
-      case WhiteQueenSideCastle:
-      case BlackKingSideCastle:
-      case BlackQueenSideCastle:
-      case WhiteKingSideCastleWild:
-      case WhiteQueenSideCastleWild:
-      case BlackKingSideCastleWild:
-      case BlackQueenSideCastleWild:
-	if (appData.debugMode)
-	  fprintf(debugFP, "Parsed %s into %s\n", yy_text, currentMoveString);
-	fromX = currentMoveString[0] - 'a';
-	fromY = currentMoveString[1] - '1';
-	toX = currentMoveString[2] - 'a';
-	toY = currentMoveString[3] - '1';
-	promoChar = currentMoveString[4];
-	break;
-
-      case WhiteDrop:
-      case BlackDrop:
-	if (appData.debugMode)
-	  fprintf(debugFP, "Parsed %s into %s\n", yy_text, currentMoveString);
-	fromX = moveType == WhiteDrop ?
-	  (int) CharToPiece(ToUpper(currentMoveString[0])) :
-	(int) CharToPiece(ToLower(currentMoveString[0]));
-	fromY = DROP_RANK;
-	toX = currentMoveString[2] - 'a';
-	toY = currentMoveString[3] - '1';
-	break;
-
-      case WhiteWins:
-      case BlackWins:
-      case GameIsDrawn:
-      case GameUnfinished:
-	if (appData.debugMode)
-	  fprintf(debugFP, "Parsed game end: %s\n", yy_text);
-	p = strchr(yy_text, '{');
-	if (p == NULL) p = strchr(yy_text, '(');
-	if (p == NULL) {
-	    p = yy_text;
-	    if (p[0] == '0' || p[0] == '1' || p[0] == '*') p = "";
-	} else {
-	    q = strchr(p, *p == '{' ? '}' : ')');
-	    if (q != NULL) *q = NULLCHAR;
-	    p++;
-	}
-	GameEnds(moveType, p, GE_FILE);
-	done = TRUE;
-	if (cmailMsgLoaded) {
- 	    ClearHighlights();
-	    flipView = WhiteOnMove(currentMove);
-	    if (moveType == GameUnfinished) flipView = !flipView;
-	    if (appData.debugMode)
-	      fprintf(debugFP, "Setting flipView to %d\n", flipView) ;
-	}
-	break;
-
-      case (ChessMove) 0:	/* end of file */
-	if (appData.debugMode)
-	  fprintf(debugFP, "Parser hit end of file\n");
-	switch (MateTest(boards[currentMove], PosFlags(currentMove),
-			 EP_UNKNOWN)) {
-	  case MT_NONE:
-	  case MT_CHECK:
-	    break;
-	  case MT_CHECKMATE:
-	    if (WhiteOnMove(currentMove)) {
-		GameEnds(BlackWins, "Black mates", GE_FILE);
-	    } else {
-		GameEnds(WhiteWins, "White mates", GE_FILE);
-	    }
-	    break;
-	  case MT_STALEMATE:
-	    GameEnds(GameIsDrawn, "Stalemate", GE_FILE);
-	    break;
-	}
-	done = TRUE;
-	break;
-
-      case MoveNumberOne:
-	if (lastLoadGameStart == GNUChessGame) {
-	    /* GNUChessGames have numbers, but they aren't move numbers */
-	    if (appData.debugMode)
-	      fprintf(debugFP, "Parser ignoring: '%s' (%d)\n",
-		      yy_text, (int) moveType);
-	    return LoadGameOneMove((ChessMove)0); /* tail recursion */
-	}
-	/* else fall thru */
-
-      case XBoardGame:
-      case GNUChessGame:
-      case PGNTag:
-	/* Reached start of next game in file */
-	if (appData.debugMode)
-	  fprintf(debugFP, "Parsed start of next game: %s\n", yy_text);
-	switch (MateTest(boards[currentMove], PosFlags(currentMove),
-			 EP_UNKNOWN)) {
-	  case MT_NONE:
-	  case MT_CHECK:
-	    break;
-	  case MT_CHECKMATE:
-	    if (WhiteOnMove(currentMove)) {
-		GameEnds(BlackWins, "Black mates", GE_FILE);
-	    } else {
-		GameEnds(WhiteWins, "White mates", GE_FILE);
-	    }
-	    break;
-	  case MT_STALEMATE:
-	    GameEnds(GameIsDrawn, "Stalemate", GE_FILE);
-	    break;
-	}
-	done = TRUE;
-	break;
-
-      case PositionDiagram:	/* should not happen; ignore */
-      case ElapsedTime:		/* ignore */
-      case NAG:                 /* ignore */
-	if (appData.debugMode)
-	  fprintf(debugFP, "Parser ignoring: '%s' (%d)\n",
-		  yy_text, (int) moveType);
-	return LoadGameOneMove((ChessMove)0); /* tail recursion */
-
-      case IllegalMove:
-	if (appData.testLegality) {
-	    if (appData.debugMode)
-	      fprintf(debugFP, "Parsed IllegalMove: %s\n", yy_text);
-	    sprintf(move, "Illegal move: %d.%s%s",
-		    (forwardMostMove / 2) + 1,
-		    WhiteOnMove(forwardMostMove) ? " " : ".. ", yy_text);
-	    DisplayError(move, 0);
-	    done = TRUE;
-	} else {
-	    if (appData.debugMode)
-	      fprintf(debugFP, "Parsed %s into IllegalMove %s\n",
-		      yy_text, currentMoveString);
-	    fromX = currentMoveString[0] - 'a';
-	    fromY = currentMoveString[1] - '1';
-	    toX = currentMoveString[2] - 'a';
-	    toY = currentMoveString[3] - '1';
-	    promoChar = currentMoveString[4];
-	}
-	break;
-
-      case AmbiguousMove:
-	if (appData.debugMode)
-	  fprintf(debugFP, "Parsed AmbiguousMove: %s\n", yy_text);
-	sprintf(move, "Ambiguous move: %d.%s%s",
-		(forwardMostMove / 2) + 1,
-		WhiteOnMove(forwardMostMove) ? " " : ".. ", yy_text);
-	DisplayError(move, 0);
-	done = TRUE;
-	break;
-
-      default:
-      case ImpossibleMove:
-	if (appData.debugMode)
-	  fprintf(debugFP, "Parsed ImpossibleMove: %s\n", yy_text);
-	sprintf(move, "Illegal move: %d.%s%s",
-		(forwardMostMove / 2) + 1,
-		WhiteOnMove(forwardMostMove) ? " " : ".. ", yy_text);
-	DisplayError(move, 0);
-	done = TRUE;
-	break;
-    }
-
-    if (done) {
-	if (appData.matchMode || (appData.timeDelay == 0 && !pausing)) {
-	    DrawPosition(FALSE, boards[currentMove]);
-	    DisplayBothClocks();
-	    if (!appData.matchMode && commentList[currentMove] != NULL)
-	      DisplayComment(currentMove - 1, commentList[currentMove]);
-	}
-	(void) StopLoadGameTimer();
-	gameFileFP = NULL;
-	cmailOldMove = forwardMostMove;
-	return FALSE;
-    } else {
-	/* currentMoveString is set as a side-effect of yylex */
-	strcat(currentMoveString, "\n");
-	strcpy(moveList[forwardMostMove], currentMoveString);
-	
-	thinkOutput[0] = NULLCHAR;
-	MakeMove(fromX, fromY, toX, toY, promoChar);
-	currentMove = forwardMostMove;
-	return TRUE;
-    }
-}
-
-/* Load the nth game from the given file */
-int
-LoadGameFromFile(filename, n, title, useList)
-     char *filename;
-     int n;
-     char *title;
-     /*Boolean*/ int useList;
-{
-    FILE *f;
-    char buf[MSG_SIZ];
-
-    if (strcmp(filename, "-") == 0) {
-	f = stdin;
-	title = "stdin";
-    } else {
-	f = fopen(filename, "rb");
-	if (f == NULL) {
-	    sprintf(buf, "Can't open \"%s\"", filename);
-	    DisplayError(buf, errno);
-	    return FALSE;
-	}
-    }
-    if (fseek(f, 0, 0) == -1) {
-	/* f is not seekable; probably a pipe */
-	useList = FALSE;
-    }
-    if (useList && n == 0) {
-	int error = GameListBuild(f);
-	if (error) {
-	    DisplayError("Cannot build game list", error);
-	} else if (!ListEmpty(&gameList) &&
-		   ((ListGame *) gameList.tailPred)->number > 1) {
-	    GameListPopUp(f, title);
-	    return TRUE;
-	}
-	GameListDestroy();
-	n = 1;
-    }
-    if (n == 0) n = 1;
-    return LoadGame(f, n, title, FALSE);
-}
-
-
-void
-MakeRegisteredMove()
-{
-    int fromX, fromY, toX, toY;
-    char promoChar;
-    if (cmailMoveRegistered[lastLoadGameNumber - 1]) {
-	switch (cmailMoveType[lastLoadGameNumber - 1]) {
-	  case CMAIL_MOVE:
-	  case CMAIL_DRAW:
-	    if (appData.debugMode)
-	      fprintf(debugFP, "Restoring %s for game %d\n",
-		      cmailMove[lastLoadGameNumber - 1], lastLoadGameNumber);
-    
-	    thinkOutput[0] = NULLCHAR;
-	    strcpy(moveList[currentMove], cmailMove[lastLoadGameNumber - 1]);
-	    fromX = cmailMove[lastLoadGameNumber - 1][0] - 'a';
-	    fromY = cmailMove[lastLoadGameNumber - 1][1] - '1';
-	    toX = cmailMove[lastLoadGameNumber - 1][2] - 'a';
-	    toY = cmailMove[lastLoadGameNumber - 1][3] - '1';
-	    promoChar = cmailMove[lastLoadGameNumber - 1][4];
-	    MakeMove(fromX, fromY, toX, toY, promoChar);
-	    ShowMove(fromX, fromY, toX, toY);
-	      
-	    switch (MateTest(boards[currentMove], PosFlags(currentMove),
-			     EP_UNKNOWN)) {
-	      case MT_NONE:
-	      case MT_CHECK:
-		break;
-    		
-	      case MT_CHECKMATE:
-		if (WhiteOnMove(currentMove)) {
-		    GameEnds(BlackWins, "Black mates", GE_PLAYER);
-		} else {
-		    GameEnds(WhiteWins, "White mates", GE_PLAYER);
-		}
-		break;
-    		
-	      case MT_STALEMATE:
-		GameEnds(GameIsDrawn, "Stalemate", GE_PLAYER);
-		break;
-	    }
-
-	    break;
-	    
-	  case CMAIL_RESIGN:
-	    if (WhiteOnMove(currentMove)) {
-		GameEnds(BlackWins, "White resigns", GE_PLAYER);
-	    } else {
-		GameEnds(WhiteWins, "Black resigns", GE_PLAYER);
-	    }
-	    break;
-	    
-	  case CMAIL_ACCEPT:
-	    GameEnds(GameIsDrawn, "Draw agreed", GE_PLAYER);
-	    break;
-	      
-	  default:
-	    break;
-	}
-    }
-
-    return;
-}
-
-/* Wrapper around LoadGame for use when a Cmail message is loaded */
-int
-CmailLoadGame(f, gameNumber, title, useList)
-     FILE *f;
-     int gameNumber;
-     char *title;
-     int useList;
-{
-    int retVal;
-
-    if (gameNumber > nCmailGames) {
-	DisplayError("No more games in this message", 0);
-	return FALSE;
-    }
-    if (f == lastLoadGameFP) {
-	int offset = gameNumber - lastLoadGameNumber;
-	if (offset == 0) {
-	    cmailMsg[0] = NULLCHAR;
-	    if (cmailMoveRegistered[lastLoadGameNumber - 1]) {
-		cmailMoveRegistered[lastLoadGameNumber - 1] = FALSE;
-		nCmailMovesRegistered--;
-	    }
-	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_MOVE;
-	    if (cmailResult[lastLoadGameNumber - 1] == CMAIL_NEW_RESULT) {
-		cmailResult[lastLoadGameNumber - 1] = CMAIL_NOT_RESULT;
-	    }
-	} else {
-	    if (! RegisterMove()) return FALSE;
-	}
-    }
-
-    retVal = LoadGame(f, gameNumber, title, useList);
-
-    /* Make move registered during previous look at this game, if any */
-    MakeRegisteredMove();
-
-    if (cmailCommentList[lastLoadGameNumber - 1] != NULL) {
-	commentList[currentMove]
-	  = StrSave(cmailCommentList[lastLoadGameNumber - 1]);
-	DisplayComment(currentMove - 1, commentList[currentMove]);
-    }
-
-    return retVal;
-}
-
-/* Support for LoadNextGame, LoadPreviousGame, ReloadSameGame */
-int
-ReloadGame(offset)
-     int offset;
-{
-    int gameNumber = lastLoadGameNumber + offset;
-    if (lastLoadGameFP == NULL) {
-	DisplayError("No game has been loaded yet", 0);
-	return FALSE;
-    }
-    if (gameNumber <= 0) {
-	DisplayError("Can't back up any further", 0);
-	return FALSE;
-    }
-    if (cmailMsgLoaded) {
-	return CmailLoadGame(lastLoadGameFP, gameNumber,
-			     lastLoadGameTitle, lastLoadGameUseList);
-    } else {
-	return LoadGame(lastLoadGameFP, gameNumber,
-			lastLoadGameTitle, lastLoadGameUseList);
-    }
-}
-
-
-
-/* Load the nth game from open file f */
-int
-LoadGame(f, gameNumber, title, useList)
-     FILE *f;
-     int gameNumber;
-     char *title;
-     int useList;
-{
-    ChessMove cm;
-    char buf[MSG_SIZ];
-    int gn = gameNumber;
-    ListGame *lg = NULL;
-    int numPGNTags = 0;
-    int err;
-    GameMode oldGameMode;
-
-    if (appData.debugMode) 
-	fprintf(debugFP, "LoadGame(): on entry, gameMode %d\n", gameMode);
-
-    if (gameMode == Training )
-	SetTrainingModeOff();
-
-    oldGameMode = gameMode;
-    if (gameMode != BeginningOfGame) {
-      Reset(FALSE, TRUE);
-    }
-
-    gameFileFP = f;
-    if (lastLoadGameFP != NULL && lastLoadGameFP != f) {
-	fclose(lastLoadGameFP);
-    }
-
-    if (useList) {
-	lg = (ListGame *) ListElem(&gameList, gameNumber-1);
-	
-	if (lg) {
-	    fseek(f, lg->offset, 0);
-	    GameListHighlight(gameNumber);
-	    gn = 1;
-	}
-	else {
-	    DisplayError("Game number out of range", 0);
-	    return FALSE;
-	}
-    } else {
-	GameListDestroy();
-	if (fseek(f, 0, 0) == -1) {
-	    if (f == lastLoadGameFP ?
-	 	gameNumber == lastLoadGameNumber + 1 :
-		gameNumber == 1) {
-		gn = 1;
-	    } else {
-		DisplayError("Can't seek on game file", 0);
-		return FALSE;
-	    }
-	}
-    }
-    lastLoadGameFP = f;
-    lastLoadGameNumber = gameNumber;
-    strcpy(lastLoadGameTitle, title);
-    lastLoadGameUseList = useList;
-
-    yynewfile(f);
-
-
-    if (lg && lg->gameInfo.white && lg->gameInfo.black) {
-	sprintf(buf, "%s vs. %s", lg->gameInfo.white,
-		lg->gameInfo.black);
-	    DisplayTitle(buf);
-    } else if (*title != NULLCHAR) {
-	if (gameNumber > 1) {
-	    sprintf(buf, "%s %d", title, gameNumber);
-	    DisplayTitle(buf);
-	} else {
-	    DisplayTitle(title);
-	}
-    }
-
-    if (gameMode != AnalyzeFile && gameMode != AnalyzeMode) {
-	gameMode = PlayFromGameFile;
-	ModeHighlight();
-    }
-
-    currentMove = forwardMostMove = backwardMostMove = 0;
-    CopyBoard(boards[0], initialPosition);
-    StopClocks();
-
-    /*
-     * Skip the first gn-1 games in the file.
-     * Also skip over anything that precedes an identifiable 
-     * start of game marker, to avoid being confused by 
-     * garbage at the start of the file.  Currently 
-     * recognized start of game markers are the move number "1",
-     * the pattern "gnuchess .* game", the pattern
-     * "^[#;%] [^ ]* game file", and a PGN tag block.  
-     * A game that starts with one of the latter two patterns
-     * will also have a move number 1, possibly
-     * following a position diagram.
-     * 5-4-02: Let's try being more lenient and allowing a game to
-     * start with an unnumbered move.  Does that break anything?
-     */
-    cm = lastLoadGameStart = (ChessMove) 0;
-    while (gn > 0) {
-	yyboardindex = forwardMostMove;
-	cm = (ChessMove) yylex();
-	switch (cm) {
-	  case (ChessMove) 0:
-	    if (cmailMsgLoaded) {
-		nCmailGames = CMAIL_MAX_GAMES - gn;
-	    } else {
-		Reset(TRUE, TRUE);
-		DisplayError("Game not found in file", 0);
-	    }
-	    return FALSE;
-
-	  case GNUChessGame:
-	  case XBoardGame:
-	    gn--;
-	    lastLoadGameStart = cm;
-	    break;
-	    
-	  case MoveNumberOne:
-	    switch (lastLoadGameStart) {
-	      case GNUChessGame:
-	      case XBoardGame:
-	      case PGNTag:
-		break;
-	      case MoveNumberOne:
-	      case (ChessMove) 0:
-		gn--;		/* count this game */
-		lastLoadGameStart = cm;
-		break;
-	      default:
-		/* impossible */
-		break;
-	    }
-	    break;
-
-	  case PGNTag:
-	    switch (lastLoadGameStart) {
-	      case GNUChessGame:
-	      case PGNTag:
-	      case MoveNumberOne:
-	      case (ChessMove) 0:
-		gn--;		/* count this game */
-		lastLoadGameStart = cm;
-		break;
-	      case XBoardGame:
-		lastLoadGameStart = cm; /* game counted already */
-		break;
-	      default:
-		/* impossible */
-		break;
-	    }
-	    if (gn > 0) {
-		do {
-		    yyboardindex = forwardMostMove;
-		    cm = (ChessMove) yylex();
-		} while (cm == PGNTag || cm == Comment);
-	    }
-	    break;
-
-	  case WhiteWins:
-	  case BlackWins:
-	  case GameIsDrawn:
-	    if (cmailMsgLoaded && (CMAIL_MAX_GAMES == lastLoadGameNumber)) {
-		if (   cmailResult[CMAIL_MAX_GAMES - gn - 1]
-		    != CMAIL_OLD_RESULT) {
-		    nCmailResults ++ ;
-		    cmailResult[  CMAIL_MAX_GAMES
-				- gn - 1] = CMAIL_OLD_RESULT;
-		}
-	    }
-	    break;
-
-	  case NormalMove:
-	    /* Only a NormalMove can be at the start of a game
-	     * without a position diagram. */
-	    if (lastLoadGameStart == (ChessMove) 0) {
-	      gn--;
-	      lastLoadGameStart = MoveNumberOne;
-	    }
-	    break;
-
-	  default:
-	    break;
-	}
-    }
-    
-    if (appData.debugMode)
-      fprintf(debugFP, "Parsed game start '%s' (%d)\n", yy_text, (int) cm);
-
-    if (cm == XBoardGame) {
-	/* Skip any header junk before position diagram and/or move 1 */
-	for (;;) {
-	    yyboardindex = forwardMostMove;
-	    cm = (ChessMove) yylex();
-
-	    if (cm == (ChessMove) 0 ||
-		cm == GNUChessGame || cm == XBoardGame) {
-		/* Empty game; pretend end-of-file and handle later */
-		cm = (ChessMove) 0;
-		break;
-	    }
-
-	    if (cm == MoveNumberOne || cm == PositionDiagram ||
-		cm == PGNTag || cm == Comment)
-	      break;
-	}
-    } else if (cm == GNUChessGame) {
-	if (gameInfo.event != NULL) {
-	    free(gameInfo.event);
-	}
-	gameInfo.event = StrSave(yy_text);
-    }	
-
-    startedFromSetupPosition = FALSE;
-    while (cm == PGNTag) {
-	if (appData.debugMode) 
-	  fprintf(debugFP, "Parsed PGNTag: %s\n", yy_text);
-	err = ParsePGNTag(yy_text, &gameInfo);
-	if (!err) numPGNTags++;
-
-	if (gameInfo.fen != NULL) {
-	  Board initial_position;
-	  startedFromSetupPosition = TRUE;
-	  if (!ParseFEN(initial_position, &blackPlaysFirst, gameInfo.fen)) {
-	    Reset(TRUE, TRUE);
-	    DisplayError("Bad FEN position in file", 0);
-	    return FALSE;
-	  }
-	  CopyBoard(boards[0], initial_position);
-	  if (blackPlaysFirst) {
-	    currentMove = forwardMostMove = backwardMostMove = 1;
-	    CopyBoard(boards[1], initial_position);
-	    strcpy(moveList[0], "");
-	    strcpy(parseList[0], "");
-	    timeRemaining[0][1] = whiteTimeRemaining;
-	    timeRemaining[1][1] = blackTimeRemaining;
-	    if (commentList[0] != NULL) {
-	      commentList[1] = commentList[0];
-	      commentList[0] = NULL;
-	    }
-	  } else {
-	    currentMove = forwardMostMove = backwardMostMove = 0;
-	  }
-	  yyboardindex = forwardMostMove;
-	  free(gameInfo.fen);
-	  gameInfo.fen = NULL;
-	}
-
-	yyboardindex = forwardMostMove;
-	cm = (ChessMove) yylex();
-
-	/* Handle comments interspersed among the tags */
-	while (cm == Comment) {
-	    char *p;
-	    if (appData.debugMode) 
-	      fprintf(debugFP, "Parsed Comment: %s\n", yy_text);
-	    p = yy_text;
-	    if (*p == '{' || *p == '[' || *p == '(') {
-		p[strlen(p) - 1] = NULLCHAR;
-		p++;
-	    }
-	    while (*p == '\n') p++;
-	    AppendComment(currentMove, p);
-	    yyboardindex = forwardMostMove;
-	    cm = (ChessMove) yylex();
-	}
-    }
-
-    /* don't rely on existence of Event tag since if game was
-     * pasted from clipboard the Event tag may not exist
-     */
-    if (numPGNTags > 0){
-        char *tags;
-	if (gameInfo.variant == VariantNormal) {
-	  gameInfo.variant = StringToVariant(gameInfo.event);
-	}
-	if (!matchMode) {
-	  tags = PGNTags(&gameInfo);
-	  TagsPopUp(tags, CmailMsg());
-	  free(tags);
-	}
-    } else {
-	/* Make something up, but don't display it now */
-	SetGameInfo();
-	TagsPopDown();
-    }
-
-    if (cm == PositionDiagram) {
-	int i, j;
-	char *p;
-	Board initial_position;
-
-	if (appData.debugMode)
-	  fprintf(debugFP, "Parsed PositionDiagram: %s\n", yy_text);
-
-	if (!startedFromSetupPosition) {
-	    p = yy_text;
-	    for (i = BOARD_SIZE - 1; i >= 0; i--)
-	      for (j = 0; j < BOARD_SIZE; p++)
-		switch (*p) {
-		  case '[':
-		  case '-':
-		  case ' ':
-		  case '\t':
-		  case '\n':
-		  case '\r':
-		    break;
-		  default:
-		    initial_position[i][j++] = CharToPiece(*p);
-		    break;
-		}
-	    while (*p == ' ' || *p == '\t' ||
-		   *p == '\n' || *p == '\r') p++;
-	
-	    if (strncmp(p, "black", strlen("black"))==0)
-	      blackPlaysFirst = TRUE;
-	    else
-	      blackPlaysFirst = FALSE;
-	    startedFromSetupPosition = TRUE;
-	
-	    CopyBoard(boards[0], initial_position);
-	    if (blackPlaysFirst) {
-		currentMove = forwardMostMove = backwardMostMove = 1;
-		CopyBoard(boards[1], initial_position);
-		strcpy(moveList[0], "");
-		strcpy(parseList[0], "");
-		timeRemaining[0][1] = whiteTimeRemaining;
-		timeRemaining[1][1] = blackTimeRemaining;
-		if (commentList[0] != NULL) {
-		    commentList[1] = commentList[0];
-		    commentList[0] = NULL;
-		}
-	    } else {
-		currentMove = forwardMostMove = backwardMostMove = 0;
-	    }
-	}
-	yyboardindex = forwardMostMove;
-	cm = (ChessMove) yylex();
-    }
-
-    if (first.pr == NoProc) {
-	StartChessProgram(&first);
-    }
-    InitChessProgram(&first);
-    SendToProgram("force\n", &first);
-    if (startedFromSetupPosition) {
-	SendBoard(&first, forwardMostMove);
-	DisplayBothClocks();
-    }      
-
-    while (cm == Comment) {
-	char *p;
-	if (appData.debugMode) 
-	  fprintf(debugFP, "Parsed Comment: %s\n", yy_text);
-	p = yy_text;
-	if (*p == '{' || *p == '[' || *p == '(') {
-	    p[strlen(p) - 1] = NULLCHAR;
-	    p++;
-	}
-	while (*p == '\n') p++;
-	AppendComment(currentMove, p);
-	yyboardindex = forwardMostMove;
-	cm = (ChessMove) yylex();
-    }
-
-    if ((cm == (ChessMove) 0 && lastLoadGameStart != (ChessMove) 0) ||
-	cm == WhiteWins || cm == BlackWins ||
-	cm == GameIsDrawn || cm == GameUnfinished) {
-	DisplayMessage("", "No moves in game");
-	if (cmailMsgLoaded) {
-	    if (appData.debugMode)
-	      fprintf(debugFP, "Setting flipView to %d.\n", FALSE);
- 	    ClearHighlights();
-	    flipView = FALSE;
-	}
-	DrawPosition(FALSE, boards[currentMove]);
-	DisplayBothClocks();
-	gameMode = EditGame;
-	ModeHighlight();
-	gameFileFP = NULL;
-	cmailOldMove = 0;
-	return TRUE;
-    }
-
-    if (commentList[currentMove] != NULL) {
-      if (!matchMode && (pausing || appData.timeDelay != 0)) {
-	DisplayComment(currentMove - 1, commentList[currentMove]);
-      }
-    }
-    if (!matchMode && appData.timeDelay != 0) 
-      DrawPosition(FALSE, boards[currentMove]);
-
-    if (gameMode == AnalyzeFile || gameMode == AnalyzeMode) {
-      programStats.ok_to_send = 1;
-    }
-
-    /* if the first token after the PGN tags is a move
-     * and not move number 1, retrieve it from the parser 
-     */
-    if (cm != MoveNumberOne)
-	LoadGameOneMove(cm);
-
-    /* load the remaining moves from the file */
-    while (LoadGameOneMove((ChessMove)0)) {
-      timeRemaining[0][forwardMostMove] = whiteTimeRemaining;
-      timeRemaining[1][forwardMostMove] = blackTimeRemaining;
-    }
-
-    /* rewind to the start of the game */
-    currentMove = backwardMostMove;
-
-    HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
-
-    if (oldGameMode == AnalyzeFile ||
-	oldGameMode == AnalyzeMode) {
-      AnalyzeFileEvent();
-    }
-
-    if (matchMode || appData.timeDelay == 0) {
-      ToEndEvent();
-      gameMode = EditGame;
-      ModeHighlight();
-    } else if (appData.timeDelay > 0) {
-      AutoPlayGameLoop();
-    }
-
-    if (appData.debugMode) 
-	fprintf(debugFP, "LoadGame(): on exit, gameMode %d\n", gameMode);
-    return TRUE;
-}
-
-/* Support for LoadNextPosition, LoadPreviousPosition, ReloadSamePosition */
-int
-ReloadPosition(offset)
-     int offset;
-{
-    int positionNumber = lastLoadPositionNumber + offset;
-    if (lastLoadPositionFP == NULL) {
-	DisplayError("No position has been loaded yet", 0);
-	return FALSE;
-    }
-    if (positionNumber <= 0) {
-	DisplayError("Can't back up any further", 0);
-	return FALSE;
-    }
-    return LoadPosition(lastLoadPositionFP, positionNumber,
-			lastLoadPositionTitle);
-}
-
-/* Load the nth position from the given file */
-int
-LoadPositionFromFile(filename, n, title)
-     char *filename;
-     int n;
-     char *title;
-{
-    FILE *f;
-    char buf[MSG_SIZ];
-
-    if (strcmp(filename, "-") == 0) {
-	return LoadPosition(stdin, n, "stdin");
-    } else {
-	f = fopen(filename, "rb");
-	if (f == NULL) {
-	    sprintf(buf, "Can't open \"%s\"", filename);
-	    DisplayError(buf, errno);
-	    return FALSE;
-	} else {
-	    return LoadPosition(f, n, title);
-	}
-    }
-}
-
-/* Load the nth position from the given open file, and close it */
-int
-LoadPosition(f, positionNumber, title)
-     FILE *f;
-     int positionNumber;
-     char *title;
-{
-    char *p, line[MSG_SIZ];
-    Board initial_position;
-    int i, j, fenMode, pn;
-    
-    if (gameMode == Training )
-	SetTrainingModeOff();
-
-    if (gameMode != BeginningOfGame) {
-	Reset(FALSE, TRUE);
-    }
-    if (lastLoadPositionFP != NULL && lastLoadPositionFP != f) {
-	fclose(lastLoadPositionFP);
-    }
-    if (positionNumber == 0) positionNumber = 1;
-    lastLoadPositionFP = f;
-    lastLoadPositionNumber = positionNumber;
-    strcpy(lastLoadPositionTitle, title);
-    if (first.pr == NoProc) {
-      StartChessProgram(&first);
-      InitChessProgram(&first);
-    }    
-    pn = positionNumber;
-    if (positionNumber < 0) {
-	/* Negative position number means to seek to that byte offset */
-	if (fseek(f, -positionNumber, 0) == -1) {
-	    DisplayError("Can't seek on position file", 0);
-	    return FALSE;
-	};
-	pn = 1;
-    } else {
-	if (fseek(f, 0, 0) == -1) {
-	    if (f == lastLoadPositionFP ?
-		positionNumber == lastLoadPositionNumber + 1 :
-		positionNumber == 1) {
-		pn = 1;
-	    } else {
-		DisplayError("Can't seek on position file", 0);
-		return FALSE;
-	    }
-	}
-    }
-    /* See if this file is FEN or old-style xboard */
-    if (fgets(line, MSG_SIZ, f) == NULL) {
-	DisplayError("Position not found in file", 0);
-	return FALSE;
-    }
-    switch (line[0]) {
-      case '#':  case 'x':
-      default:
-	fenMode = FALSE;
-	break;
-      case 'p':  case 'n':  case 'b':  case 'r':  case 'q':  case 'k':
-      case 'P':  case 'N':  case 'B':  case 'R':  case 'Q':  case 'K':
-      case '1':  case '2':  case '3':  case '4':  case '5':  case '6':
-      case '7':  case '8':
-	fenMode = TRUE;
-	break;
-    }
-
-    if (pn >= 2) {
-	if (fenMode || line[0] == '#') pn--;
-	while (pn > 0) {
-	    /* skip postions before number pn */
-	    if (fgets(line, MSG_SIZ, f) == NULL) {
-	        Reset(TRUE, TRUE);
-		DisplayError("Position not found in file", 0);
-		return FALSE;
-	    }
-	    if (fenMode || line[0] == '#') pn--;
-	}
-    }
-
-    if (fenMode) {
-	if (!ParseFEN(initial_position, &blackPlaysFirst, line)) {
-	    DisplayError("Bad FEN position in file", 0);
-	    return FALSE;
-	}
-    } else {
-	(void) fgets(line, MSG_SIZ, f);
-	(void) fgets(line, MSG_SIZ, f);
-    
-	for (i = BOARD_SIZE - 1; i >= 0; i--) {
-	    (void) fgets(line, MSG_SIZ, f);
-	    for (p = line, j = 0; j < BOARD_SIZE; p++) {
-		if (*p == ' ')
-		  continue;
-		initial_position[i][j++] = CharToPiece(*p);
-	    }
-	}
-    
-	blackPlaysFirst = FALSE;
-	if (!feof(f)) {
-	    (void) fgets(line, MSG_SIZ, f);
-	    if (strncmp(line, "black", strlen("black"))==0)
-	      blackPlaysFirst = TRUE;
-	}
-    }
-    startedFromSetupPosition = TRUE;
-    
-    SendToProgram("force\n", &first);
-    CopyBoard(boards[0], initial_position);
-    if (blackPlaysFirst) {
-	currentMove = forwardMostMove = backwardMostMove = 1;
-	strcpy(moveList[0], "");
-	strcpy(parseList[0], "");
-	CopyBoard(boards[1], initial_position);
-	DisplayMessage("", "Black to play");
-    } else {
-	currentMove = forwardMostMove = backwardMostMove = 0;
-	DisplayMessage("", "White to play");
-    }
-    SendBoard(&first, forwardMostMove);
-
-    if (positionNumber > 1) {
-	sprintf(line, "%s %d", title, positionNumber);
-	DisplayTitle(line);
-    } else {
-	DisplayTitle(title);
-    }
-    gameMode = EditGame;
-    ModeHighlight();
-    ResetClocks();
-    timeRemaining[0][1] = whiteTimeRemaining;
-    timeRemaining[1][1] = blackTimeRemaining;
-    DrawPosition(FALSE, boards[currentMove]);
-   
-    return TRUE;
-}
-
-
-void
-CopyPlayerNameIntoFileName(dest, src)
-     char **dest, *src;
-{
-    while (*src != NULLCHAR && *src != ',') {
-	if (*src == ' ') {
-	    *(*dest)++ = '_';
-	    src++;
-	} else {
-	    *(*dest)++ = *src++;
-	}
-    }
-}
-
-char *DefaultFileName(ext)
-     char *ext;
-{
-    static char def[MSG_SIZ];
-    char *p;
-
-    if (gameInfo.white != NULL && gameInfo.white[0] != '-') {
-	p = def;
-	CopyPlayerNameIntoFileName(&p, gameInfo.white);
-	*p++ = '-';
-	CopyPlayerNameIntoFileName(&p, gameInfo.black);
-	*p++ = '.';
-	strcpy(p, ext);
-    } else {
-	def[0] = NULLCHAR;
-    }
-    return def;
-}
-
-/* Save the current game to the given file */
-int
-SaveGameToFile(filename, append)
-     char *filename;
-     int append;
-{
-    FILE *f;
-    char buf[MSG_SIZ];
-
-    if (strcmp(filename, "-") == 0) {
-	return SaveGame(stdout, 0, NULL);
-    } else {
-	f = fopen(filename, append ? "a" : "w");
-	if (f == NULL) {
-	    sprintf(buf, "Can't open \"%s\"", filename);
-	    DisplayError(buf, errno);
-	    return FALSE;
-	} else {
-	    return SaveGame(f, 0, NULL);
-	}
-    }
-}
-
-char *
-SavePart(str)
-     char *str;
-{
-    static char buf[MSG_SIZ];
-    char *p;
-    
-    p = strchr(str, ' ');
-    if (p == NULL) return str;
-    strncpy(buf, str, p - str);
-    buf[p - str] = NULLCHAR;
-    return buf;
-}
-
-#define PGN_MAX_LINE 75
-
-/* Save game in PGN style and close the file */
-int
-SaveGamePGN(f)
-     FILE *f;
-{
-    int i, offset, linelen, newblock;
-    time_t tm;
-    char *movetext;
-    char numtext[32];
-    int movelen, numlen, blank;
-    
-    tm = time((time_t *) NULL);
-    
-    PrintPGNTags(f, &gameInfo);
-    
-    if (backwardMostMove > 0 || startedFromSetupPosition) {
-        char *fen = PositionToFEN(backwardMostMove);
-        fprintf(f, "[FEN \"%s\"]\n[SetUp \"1\"]\n", fen);
-	fprintf(f, "\n{--------------\n");
-	PrintPosition(f, backwardMostMove);
-	fprintf(f, "--------------}\n");
-        free(fen);
-    } else {
-	fprintf(f, "\n");
-    }
-
-    i = backwardMostMove;
-    offset = backwardMostMove & (~1L); /* output move numbers start at 1 */
-    linelen = 0;
-    newblock = TRUE;
-
-    while (i < forwardMostMove) {
-	/* Print comments preceding this move */
-	if (commentList[i] != NULL) {
-	    if (linelen > 0) fprintf(f, "\n");
-	    fprintf(f, "{\n%s}\n", commentList[i]);
-	    linelen = 0;
-	    newblock = TRUE;
-	}
-
-	/* Format move number */
-	if ((i % 2) == 0) {
-	    sprintf(numtext, "%d.", (i - offset)/2 + 1);
-	} else {
-	    if (newblock) {
-		sprintf(numtext, "%d...", (i - offset)/2 + 1);
-	    } else {
-		numtext[0] = NULLCHAR;
-	    }
-	}
-	numlen = strlen(numtext);
-	newblock = FALSE;
-
-	/* Print move number */
-	blank = linelen > 0 && numlen > 0;
-	if (linelen + (blank ? 1 : 0) + numlen > PGN_MAX_LINE) {
-	    fprintf(f, "\n");
-	    linelen = 0;
-	    blank = 0;
-	}
-	if (blank) {
-	    fprintf(f, " ");
-	    linelen++;
-	}
-	fprintf(f, numtext);
-	linelen += numlen;
-
-	/* Get move */
-	movetext = SavePart(parseList[i]);
-	movelen = strlen(movetext);
-
-	/* Print move */
-	blank = linelen > 0 && movelen > 0;
-	if (linelen + (blank ? 1 : 0) + movelen > PGN_MAX_LINE) {
-	    fprintf(f, "\n");
-	    linelen = 0;
-	    blank = 0;
-	}
-	if (blank) {
-	    fprintf(f, " ");
-	    linelen++;
-	}
-	fprintf(f, movetext);
-	linelen += movelen;
-
-	i++;
-    }
-    
-    /* Start a new line */
-    if (linelen > 0) fprintf(f, "\n");
-
-    /* Print comments after last move */
-    if (commentList[i] != NULL) {
-	fprintf(f, "{\n%s}\n", commentList[i]);
-    }
-
-    /* Print result */
-    if (gameInfo.resultDetails != NULL &&
-	gameInfo.resultDetails[0] != NULLCHAR) {
-	fprintf(f, "{%s} %s\n\n", gameInfo.resultDetails,
-		PGNResult(gameInfo.result));
-    } else {
-	fprintf(f, "%s\n\n", PGNResult(gameInfo.result));
-    }
-
-    fclose(f);
-    return TRUE;
-}
-
-/* Save game in old style and close the file */
-int
-SaveGameOldStyle(f)
-     FILE *f;
-{
-    int i, offset;
-    time_t tm;
-    
-    tm = time((time_t *) NULL);
-    
-    fprintf(f, "# %s game file -- %s", programName, ctime(&tm));
-    PrintOpponents(f);
-    
-    if (backwardMostMove > 0 || startedFromSetupPosition) {
-	fprintf(f, "\n[--------------\n");
-	PrintPosition(f, backwardMostMove);
-	fprintf(f, "--------------]\n");
-    } else {
-	fprintf(f, "\n");
-    }
-
-    i = backwardMostMove;
-    offset = backwardMostMove & (~1L); /* output move numbers start at 1 */
-
-    while (i < forwardMostMove) {
-	if (commentList[i] != NULL) {
-	    fprintf(f, "[%s]\n", commentList[i]);
-	}
-
-	if ((i % 2) == 1) {
-	    fprintf(f, "%d. ...  %s\n", (i - offset)/2 + 1, parseList[i]);
-	    i++;
-	} else {
-	    fprintf(f, "%d. %s  ", (i - offset)/2 + 1, parseList[i]);
-	    i++;
-	    if (commentList[i] != NULL) {
-		fprintf(f, "\n");
-		continue;
-	    }
-	    if (i >= forwardMostMove) {
-		fprintf(f, "\n");
-		break;
-	    }
-	    fprintf(f, "%s\n", parseList[i]);
-	    i++;
-	}
-    }
-    
-    if (commentList[i] != NULL) {
-	fprintf(f, "[%s]\n", commentList[i]);
-    }
-
-    /* This isn't really the old style, but it's close enough */
-    if (gameInfo.resultDetails != NULL &&
-	gameInfo.resultDetails[0] != NULLCHAR) {
-	fprintf(f, "%s (%s)\n\n", PGNResult(gameInfo.result),
-		gameInfo.resultDetails);
-    } else {
-	fprintf(f, "%s\n\n", PGNResult(gameInfo.result));
-    }
-
-    fclose(f);
-    return TRUE;
-}
-
-/* Save the current game to open file f and close the file */
-int
-SaveGame(f, dummy, dummy2)
-     FILE *f;
-     int dummy;
-     char *dummy2;
-{
-    if (gameMode == EditPosition) EditPositionDone();
-    if (appData.oldSaveStyle)
-      return SaveGameOldStyle(f);
-    else
-      return SaveGamePGN(f);
-}
-
-/* Save the current position to the given file */
-int
-SavePositionToFile(filename)
-     char *filename;
-{
-    FILE *f;
-    char buf[MSG_SIZ];
-
-    if (strcmp(filename, "-") == 0) {
-	return SavePosition(stdout, 0, NULL);
-    } else {
-	f = fopen(filename, "a");
-	if (f == NULL) {
-	    sprintf(buf, "Can't open \"%s\"", filename);
-	    DisplayError(buf, errno);
-	    return FALSE;
-	} else {
-	    SavePosition(f, 0, NULL);
-	    return TRUE;
-	}
-    }
-}
-
-/* Save the current position to the given open file and close the file */
-int
-SavePosition(f, dummy, dummy2)
-     FILE *f;
-     int dummy;
-     char *dummy2;
-{
-    time_t tm;
-    char *fen;
-    
-    if (appData.oldSaveStyle) {
-	tm = time((time_t *) NULL);
-    
-	fprintf(f, "# %s position file -- %s", programName, ctime(&tm));
-	PrintOpponents(f);
-	fprintf(f, "[--------------\n");
-	PrintPosition(f, currentMove);
-	fprintf(f, "--------------]\n");
-    } else {
-	fen = PositionToFEN(currentMove);
-	fprintf(f, "%s\n", fen);
-	free(fen);
-    }
-    fclose(f);
-    return TRUE;
-}
-
-void
-ReloadCmailMsgEvent(unregister)
-     int unregister;
-{
-#if !WIN32
-    static char *inFilename = NULL;
-    static char *outFilename;
-    int i;
-    struct stat inbuf, outbuf;
-    int status;
-    
-    /* Any registered moves are unregistered if unregister is set, */
-    /* i.e. invoked by the signal handler */
-    if (unregister) {
-	for (i = 0; i < CMAIL_MAX_GAMES; i ++) {
-	    cmailMoveRegistered[i] = FALSE;
-	    if (cmailCommentList[i] != NULL) {
-		free(cmailCommentList[i]);
-		cmailCommentList[i] = NULL;
-	    }
-	}
-	nCmailMovesRegistered = 0;
-    }
-
-    for (i = 0; i < CMAIL_MAX_GAMES; i ++) {
-	cmailResult[i] = CMAIL_NOT_RESULT;
-    }
-    nCmailResults = 0;
-
-    if (inFilename == NULL) {
-	/* Because the filenames are static they only get malloced once  */
-	/* and they never get freed                                      */
-	inFilename = (char *) malloc(strlen(appData.cmailGameName) + 9);
-	sprintf(inFilename, "%s.game.in", appData.cmailGameName);
-
-	outFilename = (char *) malloc(strlen(appData.cmailGameName) + 5);
-	sprintf(outFilename, "%s.out", appData.cmailGameName);
-    }
-    
-    status = stat(outFilename, &outbuf);
-    if (status < 0) {
-	cmailMailedMove = FALSE;
-    } else {
-	status = stat(inFilename, &inbuf);
-	cmailMailedMove = (inbuf.st_mtime < outbuf.st_mtime);
-    }
-    
-    /* LoadGameFromFile(CMAIL_MAX_GAMES) with cmailMsgLoaded == TRUE
-       counts the games, notes how each one terminated, etc.
-       
-       It would be nice to remove this kludge and instead gather all
-       the information while building the game list.  (And to keep it
-       in the game list nodes instead of having a bunch of fixed-size
-       parallel arrays.)  Note this will require getting each game's
-       termination from the PGN tags, as the game list builder does
-       not process the game moves.  --mann
-       */
-    cmailMsgLoaded = TRUE;
-    LoadGameFromFile(inFilename, CMAIL_MAX_GAMES, "", FALSE);
-    
-    /* Load first game in the file or popup game menu */
-    LoadGameFromFile(inFilename, 0, appData.cmailGameName, TRUE);
-
-#endif /* !WIN32 */
-    return;
-}
-
-int
-RegisterMove()
-{
-    FILE *f;
-    char string[MSG_SIZ];
-
-    if (   cmailMailedMove
-	|| (cmailResult[lastLoadGameNumber - 1] == CMAIL_OLD_RESULT)) {
-	return TRUE;		/* Allow free viewing  */
-    }
-
-    /* Unregister move to ensure that we don't leave RegisterMove        */
-    /* with the move registered when the conditions for registering no   */
-    /* longer hold                                                       */
-    if (cmailMoveRegistered[lastLoadGameNumber - 1]) {
-	cmailMoveRegistered[lastLoadGameNumber - 1] = FALSE;
-	nCmailMovesRegistered --;
-
-	if (cmailCommentList[lastLoadGameNumber - 1] != NULL) 
-	  {
-	      free(cmailCommentList[lastLoadGameNumber - 1]);
-	      cmailCommentList[lastLoadGameNumber - 1] = NULL;
-	  }
-    }
-
-    if (cmailOldMove == -1) {
-	DisplayError("You have edited the game history.\nUse Reload Same Game and make your move again.", 0);
-	return FALSE;
-    }
-
-    if (currentMove > cmailOldMove + 1) {
-	DisplayError("You have entered too many moves.\nBack up to the correct position and try again.", 0);
-	return FALSE;
-    }
-
-    if (currentMove < cmailOldMove) {
-	DisplayError("Displayed position is not current.\nStep forward to the correct position and try again.", 0);
-	return FALSE;
-    }
-
-    if (forwardMostMove > currentMove) {
-	/* Silently truncate extra moves */
-	TruncateGame();
-    }
-
-    if (   (currentMove == cmailOldMove + 1)
-	|| (   (currentMove == cmailOldMove)
-	    && (   (cmailMoveType[lastLoadGameNumber - 1] == CMAIL_ACCEPT)
-		|| (cmailMoveType[lastLoadGameNumber - 1] == CMAIL_RESIGN)))) {
-	if (gameInfo.result != GameUnfinished) {
-	    cmailResult[lastLoadGameNumber - 1] = CMAIL_NEW_RESULT;
-	}
-
-	if (commentList[currentMove] != NULL) {
-	    cmailCommentList[lastLoadGameNumber - 1]
-	      = StrSave(commentList[currentMove]);
-	}
-	strcpy(cmailMove[lastLoadGameNumber - 1], moveList[currentMove - 1]);
-
-	if (appData.debugMode)
-	  fprintf(debugFP, "Saving %s for game %d\n",
-		  cmailMove[lastLoadGameNumber - 1], lastLoadGameNumber);
-
-	sprintf(string,
-		"%s.game.out.%d", appData.cmailGameName, lastLoadGameNumber);
-	
-	f = fopen(string, "w");
-	if (appData.oldSaveStyle) {
-	    SaveGameOldStyle(f); /* also closes the file */
-	    
-	    sprintf(string, "%s.pos.out", appData.cmailGameName);
-	    f = fopen(string, "w");
-	    SavePosition(f, 0, NULL); /* also closes the file */
-	} else {
-	    fprintf(f, "{--------------\n");
-	    PrintPosition(f, currentMove);
-	    fprintf(f, "--------------}\n\n");
-	    
-	    SaveGame(f, 0, NULL); /* also closes the file*/
-	}
-	
-	cmailMoveRegistered[lastLoadGameNumber - 1] = TRUE;
-	nCmailMovesRegistered ++;
-    } else if (nCmailGames == 1) {
-	DisplayError("You have not made a move yet", 0);
-	return FALSE;
-    }
-
-    return TRUE;
-}
-
-void
-MailMoveEvent()
-{
-#if !WIN32
-    static char *partCommandString = "cmail -xv%s -remail -game %s 2>&1";
-    FILE *commandOutput;
-    char buffer[MSG_SIZ], msg[MSG_SIZ], string[MSG_SIZ];
-    int nBytes = 0;		/*  Suppress warnings on uninitialized variables    */
-    int nBuffers;
-    int i;
-    int archived;
-    char *arcDir;
-
-    if (! cmailMsgLoaded) {
-	DisplayError("The cmail message is not loaded.\nUse Reload CMail Message and make your move again.", 0);
-	return;
-    }
-
-    if (nCmailGames == nCmailResults) {
-	DisplayError("No unfinished games", 0);
-	return;
-    }
-
-#if CMAIL_PROHIBIT_REMAIL
-    if (cmailMailedMove) {
-	sprintf(msg, "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line.", appData.cmailGameName);
-	DisplayError(msg, 0);
-	return;
-    }
-#endif
-
-    if (! (cmailMailedMove || RegisterMove())) return;
-    
-    if (   cmailMailedMove
-	|| (nCmailMovesRegistered + nCmailResults == nCmailGames)) {
-	sprintf(string, partCommandString,
-		appData.debugMode ? " -v" : "", appData.cmailGameName);
-	commandOutput = popen(string, "rb");
-
-	if (commandOutput == NULL) {
-	    DisplayError("Failed to invoke cmail", 0);
-	} else {
-	    for (nBuffers = 0; (! feof(commandOutput)); nBuffers ++) {
-		nBytes = fread(buffer, 1, MSG_SIZ - 1, commandOutput);
-	    }
-	    if (nBuffers > 1) {
-		(void) memcpy(msg, buffer + nBytes, MSG_SIZ - nBytes - 1);
-		(void) memcpy(msg + MSG_SIZ - nBytes - 1, buffer, nBytes);
-		nBytes = MSG_SIZ - 1;
-	    } else {
-		(void) memcpy(msg, buffer, nBytes);
-	    }
-	    *(msg + nBytes) = '\0'; /* \0 for end-of-string*/
-
-	    if(StrStr(msg, "Mailed cmail message to ") != NULL) {
-		cmailMailedMove = TRUE; /* Prevent >1 moves    */
-
-		archived = TRUE;
-		for (i = 0; i < nCmailGames; i ++) {
-		    if (cmailResult[i] == CMAIL_NOT_RESULT) {
-			archived = FALSE;
-		    }
-		}
-		if (   archived
-		    && (   (arcDir = (char *) getenv("CMAIL_ARCDIR"))
-			!= NULL)) {
-		    sprintf(buffer, "%s/%s.%s.archive",
-			    arcDir,
-			    appData.cmailGameName,
-			    gameInfo.date);
-		    LoadGameFromFile(buffer, 1, buffer, FALSE);
-		    cmailMsgLoaded = FALSE;
-		}
-	    }
-
-	    DisplayInformation(msg);
-	    pclose(commandOutput);
-	}
-    } else {
-	if ((*cmailMsg) != '\0') {
-	    DisplayInformation(cmailMsg);
-	}
-    }
-
-    return;
-#endif /* !WIN32 */
-}
-
-char *
-CmailMsg()
-{
-#if WIN32
-    return NULL;
-#else
-    int  prependComma = 0;
-    char number[5];
-    char string[MSG_SIZ];	/* Space for game-list */
-    int  i;
-    
-    if (!cmailMsgLoaded) return "";
-
-    if (cmailMailedMove) {
-	sprintf(cmailMsg, "Waiting for reply from opponent\n");
-    } else {
-	/* Create a list of games left */
-	sprintf(string, "[");
-	for (i = 0; i < nCmailGames; i ++) {
-	    if (! (   cmailMoveRegistered[i]
-		   || (cmailResult[i] == CMAIL_OLD_RESULT))) {
-		if (prependComma) {
-		    sprintf(number, ",%d", i + 1);
-		} else {
-		    sprintf(number, "%d", i + 1);
-		    prependComma = 1;
-		}
-		
-		strcat(string, number);
-	    }
-	}
-	strcat(string, "]");
-
-	if (nCmailMovesRegistered + nCmailResults == 0) {
-	    switch (nCmailGames) {
-	      case 1:
-		sprintf(cmailMsg,
-			"Still need to make move for game\n");
-		break;
-		
-	      case 2:
-		sprintf(cmailMsg,
-			"Still need to make moves for both games\n");
-		break;
-		
-	      default:
-		sprintf(cmailMsg,
-			"Still need to make moves for all %d games\n",
-			nCmailGames);
-		break;
-	    }
-	} else {
-	    switch (nCmailGames - nCmailMovesRegistered - nCmailResults) {
-	      case 1:
-		sprintf(cmailMsg,
-			"Still need to make a move for game %s\n",
-			string);
-		break;
-		
-	      case 0:
-		if (nCmailResults == nCmailGames) {
-		    sprintf(cmailMsg, "No unfinished games\n");
-		} else {
-		    sprintf(cmailMsg, "Ready to send mail\n");
-		}
-		break;
-		
-	      default:
-		sprintf(cmailMsg,
-			"Still need to make moves for games %s\n",
-			string);
-	    }
-	}
-    }
-    return cmailMsg;
-#endif /* WIN32 */
-}
-
-void
-ResetGameEvent()
-{
-    if (gameMode == Training)
-      SetTrainingModeOff();
-
-    Reset(TRUE, TRUE);
-    cmailMsgLoaded = FALSE;
-    if (appData.icsActive) {
-      SendToICS(ics_prefix);
-      SendToICS("refresh\n");
-    }
-}
-
-static int exiting = 0;
-
-void
-ExitEvent(status)
-     int status;
-{
-    exiting++;
-    if (exiting > 2) {
-      /* Give up on clean exit */
-      exit(status);
-    }
-    if (exiting > 1) {
-      /* Keep trying for clean exit */
-      return;
-    }
-
-    if (appData.icsActive && appData.colorize) Colorize(ColorNone, FALSE);
-
-    if (telnetISR != NULL) {
-      RemoveInputSource(telnetISR);
-    }
-    if (icsPR != NoProc) {
-      DestroyChildProcess(icsPR, TRUE);
-    }
-    /* Save game if resource set and not already saved by GameEnds() */
-    if (gameInfo.resultDetails == NULL && forwardMostMove > 0) {
-      if (*appData.saveGameFile != NULLCHAR) {
-	SaveGameToFile(appData.saveGameFile, TRUE);
-      } else if (appData.autoSaveGames) {
-	AutoSaveGame();
-      }
-      if (*appData.savePositionFile != NULLCHAR) {
-	SavePositionToFile(appData.savePositionFile);
-      }
-    }
-    GameEnds((ChessMove) 0, NULL, GE_PLAYER);
-
-    /* Kill off chess programs */
-    if (first.pr != NoProc) {
-	ExitAnalyzeMode();
-	SendToProgram("quit\n", &first);
-	DestroyChildProcess(first.pr, first.useSigterm);
-    }
-    if (second.pr != NoProc) {
-	SendToProgram("quit\n", &second);
-	DestroyChildProcess(second.pr, second.useSigterm);
-    }
-    if (first.isr != NULL) {
-	RemoveInputSource(first.isr);
-    }
-    if (second.isr != NULL) {
-	RemoveInputSource(second.isr);
-    }
-
-    ShutDownFrontEnd();
-    exit(status);
-}
-
-void
-PauseEvent()
-{
-    if (appData.debugMode)
-	fprintf(debugFP, "PauseEvent(): pausing %d\n", pausing);
-    if (pausing) {
-	pausing = FALSE;
-	ModeHighlight();
-	if (gameMode == MachinePlaysWhite ||
-	    gameMode == MachinePlaysBlack) {
-	    StartClocks();
-	} else {
-	    DisplayBothClocks();
-	}
-	if (gameMode == PlayFromGameFile) {
-	    if (appData.timeDelay >= 0) 
-		AutoPlayGameLoop();
-	} else if (gameMode == IcsExamining && pauseExamInvalid) {
-	    Reset(FALSE, TRUE);
-	    SendToICS(ics_prefix);
-	    SendToICS("refresh\n");
-	} else if (currentMove < forwardMostMove) {
-	    ForwardInner(forwardMostMove);
-	}
-	pauseExamInvalid = FALSE;
-    } else {
-	switch (gameMode) {
-	  default:
-	    return;
-	  case IcsExamining:
-	    pauseExamForwardMostMove = forwardMostMove;
-	    pauseExamInvalid = FALSE;
-	    /* fall through */
-	  case IcsObserving:
-	  case IcsPlayingWhite:
-	  case IcsPlayingBlack:
-	    pausing = TRUE;
-	    ModeHighlight();
-	    return;
-	  case PlayFromGameFile:
-	    (void) StopLoadGameTimer();
-	    pausing = TRUE;
-	    ModeHighlight();
-	    break;
-	  case BeginningOfGame:
-	    if (appData.icsActive) return;
-	    /* else fall through */
-	  case MachinePlaysWhite:
-	  case MachinePlaysBlack:
-	  case TwoMachinesPlay:
-	    if (forwardMostMove == 0)
-	      return;		/* don't pause if no one has moved */
-	    if ((gameMode == MachinePlaysWhite &&
-		 !WhiteOnMove(forwardMostMove)) ||
-		(gameMode == MachinePlaysBlack &&
-		 WhiteOnMove(forwardMostMove))) {
-		StopClocks();
-	    }
-	    pausing = TRUE;
-	    ModeHighlight();
-	    break;
-	}
-    }
-}
-
-void
-EditCommentEvent()
-{
-    char title[MSG_SIZ];
-
-    if (currentMove < 1 || parseList[currentMove - 1][0] == NULLCHAR) {
-	strcpy(title, "Edit comment");
-    } else {
-	sprintf(title, "Edit comment on %d.%s%s", (currentMove - 1) / 2 + 1,
-		WhiteOnMove(currentMove - 1) ? " " : ".. ",
-		parseList[currentMove - 1]);
-    }
-
-    EditCommentPopUp(currentMove, title, commentList[currentMove]);
-}
-
-
-void
-EditTagsEvent()
-{
-    char *tags = PGNTags(&gameInfo);
-    EditTagsPopUp(tags);
-    free(tags);
-}
-
-void
-AnalyzeModeEvent()
-{
-    if (appData.noChessProgram || gameMode == AnalyzeMode)
-      return;
-
-    if (gameMode != AnalyzeFile) {
-	EditGameEvent();
-	if (gameMode != EditGame) return;
-	ResurrectChessProgram();
-	SendToProgram("analyze\n", &first);
-	first.analyzing = TRUE;
-	/*first.maybeThinking = TRUE;*/
-	first.maybeThinking = FALSE; /* avoid killing GNU Chess */
-	AnalysisPopUp("Analysis",
-		      "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis.");
-    }
-    gameMode = AnalyzeMode;
-    pausing = FALSE;
-    ModeHighlight();
-    SetGameInfo();
-
-    StartAnalysisClock();
-    GetTimeMark(&lastNodeCountTime);
-    lastNodeCount = 0;
-}
-
-void
-AnalyzeFileEvent()
-{
-    if (appData.noChessProgram || gameMode == AnalyzeFile)
-      return;
-
-    if (gameMode != AnalyzeMode) {
-	EditGameEvent();
-	if (gameMode != EditGame) return;
-	ResurrectChessProgram();
-	SendToProgram("analyze\n", &first);
-	first.analyzing = TRUE;
-	/*first.maybeThinking = TRUE;*/
-	first.maybeThinking = FALSE; /* avoid killing GNU Chess */
-	AnalysisPopUp("Analysis",
-		      "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis.");
-    }
-    gameMode = AnalyzeFile;
-    pausing = FALSE;
-    ModeHighlight();
-    SetGameInfo();
-
-    StartAnalysisClock();
-    GetTimeMark(&lastNodeCountTime);
-    lastNodeCount = 0;
-}
-
-void
-MachineWhiteEvent()
-{
-    char buf[MSG_SIZ];
-
-    if (appData.noChessProgram || (gameMode == MachinePlaysWhite))
-      return;
-
-
-    if (gameMode == PlayFromGameFile || 
-	gameMode == TwoMachinesPlay  || 
-	gameMode == Training         || 
-	gameMode == AnalyzeMode      || 
-	gameMode == EndOfGame)
-	EditGameEvent();
-
-    if (gameMode == EditPosition) 
-        EditPositionDone();
-
-    if (!WhiteOnMove(currentMove)) {
-	DisplayError("It is not White's turn", 0);
-	return;
-    }
-  
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile)
-      ExitAnalyzeMode();
-
-    if (gameMode == EditGame || gameMode == AnalyzeMode || 
-	gameMode == AnalyzeFile)
-	TruncateGame();
-
-    ResurrectChessProgram();	/* in case it isn't running */
-    gameMode = MachinePlaysWhite;
-    pausing = FALSE;
-    ModeHighlight();
-    SetGameInfo();
-    sprintf(buf, "%s vs. %s", gameInfo.white, gameInfo.black);
-    DisplayTitle(buf);
-    if (first.sendName) {
-      sprintf(buf, "name %s\n", gameInfo.black);
-      SendToProgram(buf, &first);
-    }
-    if (first.sendTime) {
-      if (first.useColors) {
-	SendToProgram("black\n", &first); /*gnu kludge*/
-      }
-      SendTimeRemaining(&first, TRUE);
-    }
-    if (first.useColors) {
-      SendToProgram("white\ngo\n", &first);
-    } else {
-      SendToProgram("go\n", &first);
-    }
-    SetMachineThinkingEnables();
-    first.maybeThinking = TRUE;
-    StartClocks();
-
-    if (appData.autoFlipView && !flipView) {
-      flipView = !flipView;
-      DrawPosition(FALSE, NULL);
-    }
-}
-
-void
-MachineBlackEvent()
-{
-    char buf[MSG_SIZ];
-
-    if (appData.noChessProgram || (gameMode == MachinePlaysBlack))
-	return;
-
-
-    if (gameMode == PlayFromGameFile || 
-	gameMode == TwoMachinesPlay  || 
-	gameMode == Training         || 
-	gameMode == AnalyzeMode      || 
-	gameMode == EndOfGame)
-        EditGameEvent();
-
-    if (gameMode == EditPosition) 
-        EditPositionDone();
-
-    if (WhiteOnMove(currentMove)) {
-	DisplayError("It is not Black's turn", 0);
-	return;
-    }
-    
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile)
-      ExitAnalyzeMode();
-
-    if (gameMode == EditGame || gameMode == AnalyzeMode || 
-	gameMode == AnalyzeFile)
-	TruncateGame();
-
-    ResurrectChessProgram();	/* in case it isn't running */
-    gameMode = MachinePlaysBlack;
-    pausing = FALSE;
-    ModeHighlight();
-    SetGameInfo();
-    sprintf(buf, "%s vs. %s", gameInfo.white, gameInfo.black);
-    DisplayTitle(buf);
-    if (first.sendName) {
-      sprintf(buf, "name %s\n", gameInfo.white);
-      SendToProgram(buf, &first);
-    }
-    if (first.sendTime) {
-      if (first.useColors) {
-	SendToProgram("white\n", &first); /*gnu kludge*/
-      }
-      SendTimeRemaining(&first, FALSE);
-    }
-    if (first.useColors) {
-      SendToProgram("black\ngo\n", &first);
-    } else {
-      SendToProgram("go\n", &first);
-    }
-    SetMachineThinkingEnables();
-    first.maybeThinking = TRUE;
-    StartClocks();
-
-    if (appData.autoFlipView && flipView) {
-      flipView = !flipView;
-      DrawPosition(FALSE, NULL);
-    }
-}
-
-
-void
-DisplayTwoMachinesTitle()
-{
-    char buf[MSG_SIZ];
-    if (appData.matchGames > 0) {
-        if (first.twoMachinesColor[0] == 'w') {
-	    sprintf(buf, "%s vs. %s (%d-%d-%d)",
-		    gameInfo.white, gameInfo.black,
-		    first.matchWins, second.matchWins,
-		    matchGame - 1 - (first.matchWins + second.matchWins));
-	} else {
-	    sprintf(buf, "%s vs. %s (%d-%d-%d)",
-		    gameInfo.white, gameInfo.black,
-		    second.matchWins, first.matchWins,
-		    matchGame - 1 - (first.matchWins + second.matchWins));
-	}
-    } else {
-	sprintf(buf, "%s vs. %s", gameInfo.white, gameInfo.black);
-    }
-    DisplayTitle(buf);
-}
-
-void
-TwoMachinesEvent P((void))
-{
-    int i;
-    char buf[MSG_SIZ];
-    ChessProgramState *onmove;
-    
-    if (appData.noChessProgram) return;
-
-    switch (gameMode) {
-      case TwoMachinesPlay:
-	return;
-      case MachinePlaysWhite:
-      case MachinePlaysBlack:
-	if (WhiteOnMove(forwardMostMove) == (gameMode == MachinePlaysWhite)) {
-	    DisplayError("Wait until your turn,\nor select Move Now", 0);
-	    return;
-	}
-	/* fall through */
-      case BeginningOfGame:
-      case PlayFromGameFile:
-      case EndOfGame:
-	EditGameEvent();
-	if (gameMode != EditGame) return;
-	break;
-      case EditPosition:
-	EditPositionDone();
-	break;
-      case AnalyzeMode:
-      case AnalyzeFile:
-	ExitAnalyzeMode();
-	break;
-      case EditGame:
-      default:
-	break;
-    }
-
-    forwardMostMove = currentMove;
-    ResurrectChessProgram();	/* in case first program isn't running */
-
-    if (second.pr == NULL) {
-	StartChessProgram(&second);
-	if (second.protocolVersion == 1) {
-	  TwoMachinesEventIfReady();
-	} else {
-	  /* kludge: allow timeout for initial "feature" command */
-	  FreezeUI();
-	  DisplayMessage("", "Starting second chess program");
-	  ScheduleDelayedEvent(TwoMachinesEventIfReady, FEATURE_TIMEOUT);
-	}
-	return;
-    }
-    DisplayMessage("", "");
-    InitChessProgram(&second);
-    SendToProgram("force\n", &second);
-    if (startedFromSetupPosition) {
-	SendBoard(&second, backwardMostMove);
-    }
-    for (i = backwardMostMove; i < forwardMostMove; i++) {
-	SendMoveToProgram(i, &second);
-    }
-
-    gameMode = TwoMachinesPlay;
-    pausing = FALSE;
-    ModeHighlight();
-    SetGameInfo();
-    DisplayTwoMachinesTitle();
-    firstMove = TRUE;
-    if ((first.twoMachinesColor[0] == 'w') == WhiteOnMove(forwardMostMove)) {
-	onmove = &first;
-    } else {
-	onmove = &second;
-    }
-
-    SendToProgram(first.computerString, &first);
-    if (first.sendName) {
-      sprintf(buf, "name %s\n", second.tidy);
-      SendToProgram(buf, &first);
-    }
-    SendToProgram(second.computerString, &second);
-    if (second.sendName) {
-      sprintf(buf, "name %s\n", first.tidy);
-      SendToProgram(buf, &second);
-    }
-
-    if (!first.sendTime || !second.sendTime) {
-	ResetClocks();
-	timeRemaining[0][forwardMostMove] = whiteTimeRemaining;
-	timeRemaining[1][forwardMostMove] = blackTimeRemaining;
-    }
-    if (onmove->sendTime) {
-      if (onmove->useColors) {
-	SendToProgram(onmove->other->twoMachinesColor, onmove); /*gnu kludge*/
-      }
-      SendTimeRemaining(onmove, WhiteOnMove(forwardMostMove));
-    }
-    if (onmove->useColors) {
-      SendToProgram(onmove->twoMachinesColor, onmove);
-    }
-    SendToProgram("go\n", onmove);
-    onmove->maybeThinking = TRUE;
-    SetMachineThinkingEnables();
-
-    StartClocks();
-}
-
-void
-TrainingEvent()
-{
-    if (gameMode == Training) {
-      SetTrainingModeOff();
-      gameMode = PlayFromGameFile;
-      DisplayMessage("", "Training mode off");
-    } else {
-      gameMode = Training;
-      animateTraining = appData.animate;
-
-      /* make sure we are not already at the end of the game */
-      if (currentMove < forwardMostMove) {
-	SetTrainingModeOn();
-	DisplayMessage("", "Training mode on");
-      } else {
-	gameMode = PlayFromGameFile;
-	DisplayError("Already at end of game", 0);
-      }
-    }
-    ModeHighlight();
-}
-
-void
-IcsClientEvent()
-{
-    if (!appData.icsActive) return;
-    switch (gameMode) {
-      case IcsPlayingWhite:
-      case IcsPlayingBlack:
-      case IcsObserving:
-      case IcsIdle:
-      case BeginningOfGame:
-      case IcsExamining:
-	return;
-
-      case EditGame:
-	break;
-
-      case EditPosition:
-	EditPositionDone();
-	break;
-
-      case AnalyzeMode:
-      case AnalyzeFile:
-	ExitAnalyzeMode();
-	break;
-	
-      default:
-	EditGameEvent();
-	break;
-    }
-
-    gameMode = IcsIdle;
-    ModeHighlight();
-    return;
-}
-
-
-void
-EditGameEvent()
-{
-    int i;
-
-    switch (gameMode) {
-      case Training:
-	SetTrainingModeOff();
-	break;
-      case MachinePlaysWhite:
-      case MachinePlaysBlack:
-      case BeginningOfGame:
-	SendToProgram("force\n", &first);
-	SetUserThinkingEnables();
-	break;
-      case PlayFromGameFile:
-	(void) StopLoadGameTimer();
-	if (gameFileFP != NULL) {
-	    gameFileFP = NULL;
-	}
-	break;
-      case EditPosition:
-	EditPositionDone();
-	break;
-      case AnalyzeMode:
-      case AnalyzeFile:
-	ExitAnalyzeMode();
-	SendToProgram("force\n", &first);
-	break;
-      case TwoMachinesPlay:
-	GameEnds((ChessMove) 0, NULL, GE_PLAYER);
-	ResurrectChessProgram();
-	SetUserThinkingEnables();
-	break;
-      case EndOfGame:
-	ResurrectChessProgram();
-	break;
-      case IcsPlayingBlack:
-      case IcsPlayingWhite:
-	DisplayError("Warning: You are still playing a game", 0);
-	break;
-      case IcsObserving:
-	DisplayError("Warning: You are still observing a game", 0);
-	break;
-      case IcsExamining:
-	DisplayError("Warning: You are still examining a game", 0);
-	break;
-      case IcsIdle:
-	break;
-      case EditGame:
-      default:
-	return;
-    }
-    
-    pausing = FALSE;
-    StopClocks();
-    first.offeredDraw = second.offeredDraw = 0;
-
-    if (gameMode == PlayFromGameFile) {
-	whiteTimeRemaining = timeRemaining[0][currentMove];
-	blackTimeRemaining = timeRemaining[1][currentMove];
-	DisplayTitle("");
-    }
-
-    if (gameMode == MachinePlaysWhite ||
-	gameMode == MachinePlaysBlack ||
-	gameMode == TwoMachinesPlay ||
-	gameMode == EndOfGame) {
-	i = forwardMostMove;
-	while (i > currentMove) {
-	    SendToProgram("undo\n", &first);
-	    i--;
-	}
-	whiteTimeRemaining = timeRemaining[0][currentMove];
-	blackTimeRemaining = timeRemaining[1][currentMove];
-	DisplayBothClocks();
-	if (whiteFlag || blackFlag) {
-	    whiteFlag = blackFlag = 0;
-	}
-	DisplayTitle("");
-    }		
-    
-    gameMode = EditGame;
-    ModeHighlight();
-    SetGameInfo();
-}
-
-
-void
-EditPositionEvent()
-{
-    if (gameMode == EditPosition) {
-	EditGameEvent();
-	return;
-    }
-    
-    EditGameEvent();
-    if (gameMode != EditGame) return;
-    
-    gameMode = EditPosition;
-    ModeHighlight();
-    SetGameInfo();
-    if (currentMove > 0)
-      CopyBoard(boards[0], boards[currentMove]);
-    
-    blackPlaysFirst = !WhiteOnMove(currentMove);
-    ResetClocks();
-    currentMove = forwardMostMove = backwardMostMove = 0;
-    HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
-    DisplayMove(-1);
-}
-
-void
-ExitAnalyzeMode()
-{
-    if (first.analysisSupport && first.analyzing) {
-      SendToProgram("exit\n", &first);
-      first.analyzing = FALSE;
-    }
-    AnalysisPopDown();
-    thinkOutput[0] = NULLCHAR;
-}
-
-void
-EditPositionDone()
-{
-    startedFromSetupPosition = TRUE;
-    InitChessProgram(&first);
-    SendToProgram("force\n", &first);
-    if (blackPlaysFirst) {
-	strcpy(moveList[0], "");
-	strcpy(parseList[0], "");
-	currentMove = forwardMostMove = backwardMostMove = 1;
-	CopyBoard(boards[1], boards[0]);
-    } else {
-	currentMove = forwardMostMove = backwardMostMove = 0;
-    }
-    SendBoard(&first, forwardMostMove);
-    DisplayTitle("");
-    timeRemaining[0][forwardMostMove] = whiteTimeRemaining;
-    timeRemaining[1][forwardMostMove] = blackTimeRemaining;
-    gameMode = EditGame;
-    ModeHighlight();
-    HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
-}
-
-/* Pause for `ms' milliseconds */
-/* !! Ugh, this is a kludge. Fix it sometime. --tpm */
-void
-TimeDelay(ms)
-     long ms;
-{
-    TimeMark m1, m2;
-
-    GetTimeMark(&m1);
-    do {
-	GetTimeMark(&m2);
-    } while (SubtractTimeMarks(&m2, &m1) < ms);
-}
-
-/* !! Ugh, this is a kludge. Fix it sometime. --tpm */
-void
-SendMultiLineToICS(buf)
-     char *buf;
-{
-    char temp[MSG_SIZ+1], *p;
-    int len;
-
-    len = strlen(buf);
-    if (len > MSG_SIZ)
-      len = MSG_SIZ;
-  
-    strncpy(temp, buf, len);
-    temp[len] = 0;
-
-    p = temp;
-    while (*p) {
-	if (*p == '\n' || *p == '\r')
-	  *p = ' ';
-	++p;
-    }
-
-    strcat(temp, "\n");
-    SendToICS(temp);
-    SendToPlayer(temp, strlen(temp));
-}
-
-void
-SetWhiteToPlayEvent()
-{
-    if (gameMode == EditPosition) {
-	blackPlaysFirst = FALSE;
-	DisplayBothClocks();	/* works because currentMove is 0 */
-    } else if (gameMode == IcsExamining) {
-        SendToICS(ics_prefix);
-	SendToICS("tomove white\n");
-    }
-}
-
-void
-SetBlackToPlayEvent()
-{
-    if (gameMode == EditPosition) {
-	blackPlaysFirst = TRUE;
-	currentMove = 1;	/* kludge */
-	DisplayBothClocks();
-	currentMove = 0;
-    } else if (gameMode == IcsExamining) {
-        SendToICS(ics_prefix);
-	SendToICS("tomove black\n");
-    }
-}
-
-void
-EditPositionMenuEvent(selection, x, y)
-     ChessSquare selection;
-     int x, y;
-{
-    char buf[MSG_SIZ];
-
-    if (gameMode != EditPosition && gameMode != IcsExamining) return;
-
-    switch (selection) {
-      case ClearBoard:
-	if (gameMode == IcsExamining && ics_type == ICS_FICS) {
-	    SendToICS(ics_prefix);
-	    SendToICS("bsetup clear\n");
-	} else if (gameMode == IcsExamining && ics_type == ICS_ICC) {
-	    SendToICS(ics_prefix);
-	    SendToICS("clearboard\n");
-	} else {
-	    for (x = 0; x < BOARD_SIZE; x++) {
-		for (y = 0; y < BOARD_SIZE; y++) {
-		    if (gameMode == IcsExamining) {
-			if (boards[currentMove][y][x] != EmptySquare) {
-			    sprintf(buf, "%sx@%c%c\n", ics_prefix,
-				    'a' + x, '1' + y);
-			    SendToICS(buf);
-			}
-		    } else {
-			boards[0][y][x] = EmptySquare;
-		    }
-		}
-	    }
-	}
-	if (gameMode == EditPosition) {
-	    DrawPosition(FALSE, boards[0]);
-	}
-	break;
-
-      case WhitePlay:
-	SetWhiteToPlayEvent();
-	break;
-
-      case BlackPlay:
-	SetBlackToPlayEvent();
-	break;
-
-      case EmptySquare:
-	if (gameMode == IcsExamining) {
-	    sprintf(buf, "%sx@%c%c\n", ics_prefix, 'a' + x, '1' + y);
-	    SendToICS(buf);
-	} else {
-	    boards[0][y][x] = EmptySquare;
-	    DrawPosition(FALSE, boards[0]);
-	}
-	break;
-
-      default:
-	if (gameMode == IcsExamining) {
-  	    sprintf(buf, "%s%c@%c%c\n", ics_prefix,
-		    PieceToChar(selection), 'a' + x, '1' + y);
-	    SendToICS(buf);
-	} else {
-	    boards[0][y][x] = selection;
-	    DrawPosition(FALSE, boards[0]);
-	}
-	break;
-    }
-}
-
-
-void
-DropMenuEvent(selection, x, y)
-     ChessSquare selection;
-     int x, y;
-{
-    ChessMove moveType;
-
-    switch (gameMode) {
-      case IcsPlayingWhite:
-      case MachinePlaysBlack:
-	if (!WhiteOnMove(currentMove)) {
-	    DisplayMoveError("It is Black's turn");
-	    return;
-	}
-	moveType = WhiteDrop;
-	break;
-      case IcsPlayingBlack:
-      case MachinePlaysWhite:
-	if (WhiteOnMove(currentMove)) {
-	    DisplayMoveError("It is White's turn");
-	    return;
-	}
-	moveType = BlackDrop;
-	break;
-      case EditGame:
-	moveType = WhiteOnMove(currentMove) ? WhiteDrop : BlackDrop;
-	break;
-      default:
-	return;
-    }
-
-    if (moveType == BlackDrop && selection < BlackPawn) {
-      selection = (ChessSquare) ((int) selection
-				 + (int) BlackPawn - (int) WhitePawn);
-    }
-    if (boards[currentMove][y][x] != EmptySquare) {
-	DisplayMoveError("That square is occupied");
-	return;
-    }
-
-    FinishMove(moveType, (int) selection, DROP_RANK, x, y, NULLCHAR);
-}
-
-void
-AcceptEvent()
-{
-    /* Accept a pending offer of any kind from opponent */
-    
-    if (appData.icsActive) {
-        SendToICS(ics_prefix);
-	SendToICS("accept\n");
-    } else if (cmailMsgLoaded) {
-	if (currentMove == cmailOldMove &&
-	    commentList[cmailOldMove] != NULL &&
-	    StrStr(commentList[cmailOldMove], WhiteOnMove(cmailOldMove) ?
-		   "Black offers a draw" : "White offers a draw")) {
-	    TruncateGame();
-	    GameEnds(GameIsDrawn, "Draw agreed", GE_PLAYER);
-	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_ACCEPT;
-	} else {
-	    DisplayError("There is no pending offer on this move", 0);
-	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_MOVE;
-	}
-    } else {
-	/* Not used for offers from chess program */
-    }
-}
-
-void
-DeclineEvent()
-{
-    /* Decline a pending offer of any kind from opponent */
-    
-    if (appData.icsActive) {
-        SendToICS(ics_prefix);
-	SendToICS("decline\n");
-    } else if (cmailMsgLoaded) {
-	if (currentMove == cmailOldMove &&
-	    commentList[cmailOldMove] != NULL &&
-	    StrStr(commentList[cmailOldMove], WhiteOnMove(cmailOldMove) ?
-		   "Black offers a draw" : "White offers a draw")) {
-#ifdef NOTDEF
-	    AppendComment(cmailOldMove, "Draw declined");
-	    DisplayComment(cmailOldMove - 1, "Draw declined");
-#endif /*NOTDEF*/
-	} else {
-	    DisplayError("There is no pending offer on this move", 0);
-	}
-    } else {
-	/* Not used for offers from chess program */
-    }
-}
-
-void
-RematchEvent()
-{
-    /* Issue ICS rematch command */
-    if (appData.icsActive) {
-        SendToICS(ics_prefix);
-	SendToICS("rematch\n");
-    }
-}
-
-void
-CallFlagEvent()
-{
-    /* Call your opponent's flag (claim a win on time) */
-    if (appData.icsActive) {
-        SendToICS(ics_prefix);
-	SendToICS("flag\n");
-    } else {
-	switch (gameMode) {
-	  default:
-	    return;
-	  case MachinePlaysWhite:
-	    if (whiteFlag) {
-		if (blackFlag)
-		  GameEnds(GameIsDrawn, "Both players ran out of time",
-			   GE_PLAYER);
-		else
-		  GameEnds(BlackWins, "Black wins on time", GE_PLAYER);
-	    } else {
-		DisplayError("Your opponent is not out of time", 0);
-	    }
-	    break;
-	  case MachinePlaysBlack:
-	    if (blackFlag) {
-		if (whiteFlag)
-		  GameEnds(GameIsDrawn, "Both players ran out of time",
-			   GE_PLAYER);
-		else
-		  GameEnds(WhiteWins, "White wins on time", GE_PLAYER);
-	    } else {
-		DisplayError("Your opponent is not out of time", 0);
-	    }
-	    break;
-	}
-    }
-}
-
-void
-DrawEvent()
-{
-    /* Offer draw or accept pending draw offer from opponent */
-    
-    if (appData.icsActive) {
-	/* Note: tournament rules require draw offers to be
-	   made after you make your move but before you punch
-	   your clock.  Currently ICS doesn't let you do that;
-	   instead, you immediately punch your clock after making
-	   a move, but you can offer a draw at any time. */
-	
-        SendToICS(ics_prefix);
-	SendToICS("draw\n");
-    } else if (cmailMsgLoaded) {
-	if (currentMove == cmailOldMove &&
-	    commentList[cmailOldMove] != NULL &&
-	    StrStr(commentList[cmailOldMove], WhiteOnMove(cmailOldMove) ?
-		   "Black offers a draw" : "White offers a draw")) {
-	    GameEnds(GameIsDrawn, "Draw agreed", GE_PLAYER);
-	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_ACCEPT;
-	} else if (currentMove == cmailOldMove + 1) {
-	    char *offer = WhiteOnMove(cmailOldMove) ?
-	      "White offers a draw" : "Black offers a draw";
-	    AppendComment(currentMove, offer);
-	    DisplayComment(currentMove - 1, offer);
-	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_DRAW;
-	} else {
-	    DisplayError("You must make your move before offering a draw", 0);
-	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_MOVE;
-	}
-    } else if (first.offeredDraw) {
-	GameEnds(GameIsDrawn, "Draw agreed", GE_XBOARD);
-    } else {
-        if (first.sendDrawOffers) {
-	    SendToProgram("draw\n", &first);
-            userOfferedDraw = TRUE;
-	}
-    }
-}
-
-void
-AdjournEvent()
-{
-    /* Offer Adjourn or accept pending Adjourn offer from opponent */
-    
-    if (appData.icsActive) {
-        SendToICS(ics_prefix);
-	SendToICS("adjourn\n");
-    } else {
-	/* Currently GNU Chess doesn't offer or accept Adjourns */
-    }
-}
-
-
-void
-AbortEvent()
-{
-    /* Offer Abort or accept pending Abort offer from opponent */
-    
-    if (appData.icsActive) {
-        SendToICS(ics_prefix);
-	SendToICS("abort\n");
-    } else {
-	GameEnds(GameUnfinished, "Game aborted", GE_PLAYER);
-    }
-}
-
-void
-ResignEvent()
-{
-    /* Resign.  You can do this even if it's not your turn. */
-    
-    if (appData.icsActive) {
-        SendToICS(ics_prefix);
-	SendToICS("resign\n");
-    } else {
-	switch (gameMode) {
-	  case MachinePlaysWhite:
-	    GameEnds(WhiteWins, "Black resigns", GE_PLAYER);
-	    break;
-	  case MachinePlaysBlack:
-	    GameEnds(BlackWins, "White resigns", GE_PLAYER);
-	    break;
-	  case EditGame:
-	    if (cmailMsgLoaded) {
-		TruncateGame();
-		if (WhiteOnMove(cmailOldMove)) {
-		    GameEnds(BlackWins, "White resigns", GE_PLAYER);
-		} else {
-		    GameEnds(WhiteWins, "Black resigns", GE_PLAYER);
-		}
-		cmailMoveType[lastLoadGameNumber - 1] = CMAIL_RESIGN;
-	    }
-	    break;
-	  default:
-	    break;
-	}
-    }
-}
-
-
-void
-StopObservingEvent()
-{
-    /* Stop observing current games */
-    SendToICS(ics_prefix);
-    SendToICS("unobserve\n");
-}
-
-void
-StopExaminingEvent()
-{
-    /* Stop observing current game */
-    SendToICS(ics_prefix);
-    SendToICS("unexamine\n");
-}
-
-void
-ForwardInner(target)
-     int target;
-{
-    int limit;
-
-    if (appData.debugMode)
-	fprintf(debugFP, "ForwardInner(%d), current %d, forward %d\n",
-		target, currentMove, forwardMostMove);
-
-    if (gameMode == EditPosition)
-      return;
-
-    if (gameMode == PlayFromGameFile && !pausing)
-      PauseEvent();
-    
-    if (gameMode == IcsExamining && pausing)
-      limit = pauseExamForwardMostMove;
-    else
-      limit = forwardMostMove;
-    
-    if (target > limit) target = limit;
-
-    if (target > 0 && moveList[target - 1][0]) {
-	int fromX, fromY, toX, toY;
-	toX = moveList[target - 1][2] - 'a';
-	toY = moveList[target - 1][3] - '1';
-	if (moveList[target - 1][1] == '@') {
-	    if (appData.highlightLastMove) {
-		SetHighlights(-1, -1, toX, toY);
-	    }
-	} else {
-	    fromX = moveList[target - 1][0] - 'a';
-	    fromY = moveList[target - 1][1] - '1';
-	    if (target == currentMove + 1) {
-		AnimateMove(boards[currentMove], fromX, fromY, toX, toY);
-	    }
-	    if (appData.highlightLastMove) {
-		SetHighlights(fromX, fromY, toX, toY);
-	    }
-	}
-    }
-    if (gameMode == EditGame || gameMode == AnalyzeMode || 
-	gameMode == Training || gameMode == PlayFromGameFile || 
-	gameMode == AnalyzeFile) {
-	while (currentMove < target) {
-	    SendMoveToProgram(currentMove++, &first);
-	}
-    } else {
-	currentMove = target;
-    }
-    
-    if (gameMode == EditGame || gameMode == EndOfGame) {
-	whiteTimeRemaining = timeRemaining[0][currentMove];
-	blackTimeRemaining = timeRemaining[1][currentMove];
-    }
-    DisplayBothClocks();
-    DisplayMove(currentMove - 1);
-    DrawPosition(FALSE, boards[currentMove]);
-    HistorySet(parseList,backwardMostMove,forwardMostMove,currentMove-1);
-    if (commentList[currentMove] && !matchMode && gameMode != Training) {
-	DisplayComment(currentMove - 1, commentList[currentMove]);
-    }
-}
-
-
-void
-ForwardEvent()
-{
-    if (gameMode == IcsExamining && !pausing) {
-        SendToICS(ics_prefix);
-	SendToICS("forward\n");
-    } else {
-	ForwardInner(currentMove + 1);
-    }
-}
-
-void
-ToEndEvent()
-{
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
-	/* to optimze, we temporarily turn off analysis mode while we feed
-	 * the remaining moves to the engine. Otherwise we get analysis output
-	 * after each move.
-	 */ 
-        if (first.analysisSupport) {
-	  SendToProgram("exit\nforce\n", &first);
-	  first.analyzing = FALSE;
-	}
-    }
-	
-    if (gameMode == IcsExamining && !pausing) {
-        SendToICS(ics_prefix);
-	SendToICS("forward 999999\n");
-    } else {
-	ForwardInner(forwardMostMove);
-    }
-
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
-	/* we have fed all the moves, so reactivate analysis mode */
-	SendToProgram("analyze\n", &first);
-	first.analyzing = TRUE;
-	/*first.maybeThinking = TRUE;*/
-	first.maybeThinking = FALSE; /* avoid killing GNU Chess */
-    }
-}
-
-void
-BackwardInner(target)
-     int target;
-{
-    if (appData.debugMode)
-	fprintf(debugFP, "BackwardInner(%d), current %d, forward %d\n",
-		target, currentMove, forwardMostMove);
-
-    if (gameMode == EditPosition) return;
-    if (currentMove <= backwardMostMove) {
-	ClearHighlights();
-	DrawPosition(FALSE, boards[currentMove]);
-	return;
-    }
-    if (gameMode == PlayFromGameFile && !pausing)
-      PauseEvent();
-    
-    if (moveList[target][0]) {
-	int fromX, fromY, toX, toY;
-	toX = moveList[target][2] - 'a';
-	toY = moveList[target][3] - '1';
-	if (moveList[target][1] == '@') {
-	    if (appData.highlightLastMove) {
-		SetHighlights(-1, -1, toX, toY);
-	    }
-	} else {
-	    fromX = moveList[target][0] - 'a';
-	    fromY = moveList[target][1] - '1';
-	    if (target == currentMove - 1) {
-		AnimateMove(boards[currentMove], toX, toY, fromX, fromY);
-	    }
-	    if (appData.highlightLastMove) {
-		SetHighlights(fromX, fromY, toX, toY);
-	    }
-	}
-    }
-    if (gameMode == EditGame || gameMode==AnalyzeMode ||
-	gameMode == PlayFromGameFile || gameMode == AnalyzeFile) {
-	while (currentMove > target) {
-	    SendToProgram("undo\n", &first);
-	    currentMove--;
-	}
-    } else {
-	currentMove = target;
-    }
-    
-    if (gameMode == EditGame || gameMode == EndOfGame) {
-	whiteTimeRemaining = timeRemaining[0][currentMove];
-	blackTimeRemaining = timeRemaining[1][currentMove];
-    }
-    DisplayBothClocks();
-    DisplayMove(currentMove - 1);
-    DrawPosition(FALSE, boards[currentMove]);
-    HistorySet(parseList,backwardMostMove,forwardMostMove,currentMove-1);
-    if (commentList[currentMove] != NULL) {
-	DisplayComment(currentMove - 1, commentList[currentMove]);
-    }
-}
-
-void
-BackwardEvent()
-{
-    if (gameMode == IcsExamining && !pausing) {
-        SendToICS(ics_prefix);
-	SendToICS("backward\n");
-    } else {
-	BackwardInner(currentMove - 1);
-    }
-}
-
-void
-ToStartEvent()
-{
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
-	/* to optimze, we temporarily turn off analysis mode while we undo
-	 * all the moves. Otherwise we get analysis output after each undo.
-	 */ 
-        if (first.analysisSupport) {
-	  SendToProgram("exit\nforce\n", &first);
-	  first.analyzing = FALSE;
-	}
-    }
-
-    if (gameMode == IcsExamining && !pausing) {
-        SendToICS(ics_prefix);
-	SendToICS("backward 999999\n");
-    } else {
-	BackwardInner(backwardMostMove);
-    }
-
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
-	/* we have fed all the moves, so reactivate analysis mode */
-	SendToProgram("analyze\n", &first);
-	first.analyzing = TRUE;
-	/*first.maybeThinking = TRUE;*/
-	first.maybeThinking = FALSE; /* avoid killing GNU Chess */
-    }
-}
-
-void
-ToNrEvent(int to)
-{
-  if (gameMode == PlayFromGameFile && !pausing) PauseEvent();
-  if (to >= forwardMostMove) to = forwardMostMove;
-  if (to <= backwardMostMove) to = backwardMostMove;
-  if (to < currentMove) {
-    BackwardInner(to);
-  } else {
-    ForwardInner(to);
-  }
-}
-
-void
-RevertEvent()
-{
-    if (gameMode != IcsExamining) {
-	DisplayError("You are not examining a game", 0);
-	return;
-    }
-    if (pausing) {
-	DisplayError("You can't revert while pausing", 0);
-	return;
-    }
-    SendToICS(ics_prefix);
-    SendToICS("revert\n");
-}
-
-void
-RetractMoveEvent()
-{
-    switch (gameMode) {
-      case MachinePlaysWhite:
-      case MachinePlaysBlack:
-	if (WhiteOnMove(forwardMostMove) == (gameMode == MachinePlaysWhite)) {
-	    DisplayError("Wait until your turn,\nor select Move Now", 0);
-	    return;
-	}
-	if (forwardMostMove < 2) return;
-	currentMove = forwardMostMove = forwardMostMove - 2;
-	whiteTimeRemaining = timeRemaining[0][currentMove];
-	blackTimeRemaining = timeRemaining[1][currentMove];
-	DisplayBothClocks();
-	DisplayMove(currentMove - 1);
-	ClearHighlights();/*!! could figure this out*/
-	DrawPosition(FALSE, boards[currentMove]);
-	SendToProgram("remove\n", &first);
-	/*first.maybeThinking = TRUE;*/ /* GNU Chess does not ponder here */
-	break;
-
-      case BeginningOfGame:
-      default:
-	break;
-
-      case IcsPlayingWhite:
-      case IcsPlayingBlack:
-	if (WhiteOnMove(forwardMostMove) == (gameMode == IcsPlayingWhite)) {
-	    SendToICS(ics_prefix);
-	    SendToICS("takeback 2\n");
-	} else {
-	    SendToICS(ics_prefix);
-	    SendToICS("takeback 1\n");
-	}
-	break;
-    }
-}
-
-void
-MoveNowEvent()
-{
-    ChessProgramState *cps;
-
-    switch (gameMode) {
-      case MachinePlaysWhite:
-	if (!WhiteOnMove(forwardMostMove)) {
-	    DisplayError("It is your turn", 0);
-	    return;
-	}
-	cps = &first;
-	break;
-      case MachinePlaysBlack:
-	if (WhiteOnMove(forwardMostMove)) {
-	    DisplayError("It is your turn", 0);
-	    return;
-	}
-	cps = &first;
-	break;
-      case TwoMachinesPlay:
-	if (WhiteOnMove(forwardMostMove) ==
-	    (first.twoMachinesColor[0] == 'w')) {
-	    cps = &first;
-	} else {
-	    cps = &second;
-	}
-	break;
-      case BeginningOfGame:
-      default:
-	return;
-    }
-    SendToProgram("?\n", cps);
-}
-
-void
-TruncateGameEvent()
-{
-    EditGameEvent();
-    if (gameMode != EditGame) return;
-    TruncateGame();
-}
-
-void
-TruncateGame()
-{
-    if (forwardMostMove > currentMove) {
-	if (gameInfo.resultDetails != NULL) {
-	    free(gameInfo.resultDetails);
-	    gameInfo.resultDetails = NULL;
-	    gameInfo.result = GameUnfinished;
-	}
-	forwardMostMove = currentMove;
-	HistorySet(parseList, backwardMostMove, forwardMostMove,
-		   currentMove-1);
-    }
-}
-
-void
-HintEvent()
-{
-    if (appData.noChessProgram) return;
-    switch (gameMode) {
-      case MachinePlaysWhite:
-	if (WhiteOnMove(forwardMostMove)) {
-	    DisplayError("Wait until your turn", 0);
-	    return;
-	}
-	break;
-      case BeginningOfGame:
-      case MachinePlaysBlack:
-	if (!WhiteOnMove(forwardMostMove)) {
-	    DisplayError("Wait until your turn", 0);
-	    return;
-	}
-	break;
-      default:
-	DisplayError("No hint available", 0);
-	return;
-    }
-    SendToProgram("hint\n", &first);
-    hintRequested = TRUE;
-}
-
-void
-BookEvent()
-{
-    if (appData.noChessProgram) return;
-    switch (gameMode) {
-      case MachinePlaysWhite:
-	if (WhiteOnMove(forwardMostMove)) {
-	    DisplayError("Wait until your turn", 0);
-	    return;
-	}
-	break;
-      case BeginningOfGame:
-      case MachinePlaysBlack:
-	if (!WhiteOnMove(forwardMostMove)) {
-	    DisplayError("Wait until your turn", 0);
-	    return;
-	}
-	break;
-      case EditPosition:
-	EditPositionDone();
-	break;
-      case TwoMachinesPlay:
-	return;
-      default:
-	break;
-    }
-    SendToProgram("bk\n", &first);
-    bookOutput[0] = NULLCHAR;
-    bookRequested = TRUE;
-}
-
-void
-AboutGameEvent()
-{
-    char *tags = PGNTags(&gameInfo);
-    TagsPopUp(tags, CmailMsg());
-    free(tags);
-}
-
-/* end button procedures */
-
-void
-PrintPosition(fp, move)
-     FILE *fp;
-     int move;
-{
-    int i, j;
-    
-    for (i = BOARD_SIZE - 1; i >= 0; i--) {
-	for (j = 0; j < BOARD_SIZE; j++) {
-	    char c = PieceToChar(boards[move][i][j]);
-	    fputc(c == 'x' ? '.' : c, fp);
-	    fputc(j == BOARD_SIZE - 1 ? '\n' : ' ', fp);
-	}
-    }
-    if ((gameMode == EditPosition) ? !blackPlaysFirst : (move % 2 == 0))
-      fprintf(fp, "white to play\n");
-    else
-      fprintf(fp, "black to play\n");
-}
-
-void
-PrintOpponents(fp)
-     FILE *fp;
-{
-    if (gameInfo.white != NULL) {
-	fprintf(fp, "\t%s vs. %s\n", gameInfo.white, gameInfo.black);
-    } else {
-	fprintf(fp, "\n");
-    }
-}
-
-/* Find last component of program's own name, using some heuristics */
-void
-TidyProgramName(prog, host, buf)
-     char *prog, *host, buf[MSG_SIZ];
-{
-    char *p, *q;
-    int local = (strcmp(host, "localhost") == 0);
-    while (!local && (p = strchr(prog, ';')) != NULL) {
-	p++;
-	while (*p == ' ') p++;
-	prog = p;
-    }
-    if (*prog == '"' || *prog == '\'') {
-	q = strchr(prog + 1, *prog);
-    } else {
-	q = strchr(prog, ' ');
-    }
-    if (q == NULL) q = prog + strlen(prog);
-    p = q;
-    while (p >= prog && *p != '/' && *p != '\\') p--;
-    p++;
-    if (q - p >= 4 && StrCaseCmp(q - 4, ".exe") == 0) q -= 4;
-    memcpy(buf, p, q - p);
-    buf[q - p] = NULLCHAR;
-    if (!local) {
-	strcat(buf, "@");
-	strcat(buf, host);
-    }
-}
-
-char *
-TimeControlTagValue()
-{
-    char buf[MSG_SIZ];
-    if (!appData.clockMode) {
-	strcpy(buf, "-");
-    } else if (movesPerSession > 0) {
-	sprintf(buf, "%d/%ld", movesPerSession, timeControl/1000);
-    } else if (timeIncrement == 0) {
-	sprintf(buf, "%ld", timeControl/1000);
-    } else {
-	sprintf(buf, "%ld+%ld", timeControl/1000, timeIncrement/1000);
-    }
-    return StrSave(buf);
-}
-
-void
-SetGameInfo()
-{
-    /* This routine is used only for certain modes */
-    VariantClass v = gameInfo.variant;
-    ClearGameInfo(&gameInfo);
-    gameInfo.variant = v;
-
-    switch (gameMode) {
-      case MachinePlaysWhite:
-	gameInfo.event = StrSave("Computer chess game");
-	gameInfo.site = StrSave(HostName());
-	gameInfo.date = PGNDate();
-	gameInfo.round = StrSave("-");
-	gameInfo.white = StrSave(first.tidy);
-	gameInfo.black = StrSave(UserName());
-	gameInfo.timeControl = TimeControlTagValue();
-	break;
-
-      case MachinePlaysBlack:
-	gameInfo.event = StrSave("Computer chess game");
-	gameInfo.site = StrSave(HostName());
-	gameInfo.date = PGNDate();
-	gameInfo.round = StrSave("-");
-	gameInfo.white = StrSave(UserName());
-	gameInfo.black = StrSave(first.tidy);
-	gameInfo.timeControl = TimeControlTagValue();
-	break;
-
-      case TwoMachinesPlay:
-	gameInfo.event = StrSave("Computer chess game");
-	gameInfo.site = StrSave(HostName());
-	gameInfo.date = PGNDate();
-	if (matchGame > 0) {
-	    char buf[MSG_SIZ];
-	    sprintf(buf, "%d", matchGame);
-	    gameInfo.round = StrSave(buf);
-	} else {
-	    gameInfo.round = StrSave("-");
-	}
-	if (first.twoMachinesColor[0] == 'w') {
-	    gameInfo.white = StrSave(first.tidy);
-	    gameInfo.black = StrSave(second.tidy);
-	} else {
-	    gameInfo.white = StrSave(second.tidy);
-	    gameInfo.black = StrSave(first.tidy);
-	}
-	gameInfo.timeControl = TimeControlTagValue();
-	break;
-
-      case EditGame:
-	gameInfo.event = StrSave("Edited game");
-	gameInfo.site = StrSave(HostName());
-	gameInfo.date = PGNDate();
-	gameInfo.round = StrSave("-");
-	gameInfo.white = StrSave("-");
-	gameInfo.black = StrSave("-");
-	break;
-
-      case EditPosition:
-	gameInfo.event = StrSave("Edited position");
-	gameInfo.site = StrSave(HostName());
-	gameInfo.date = PGNDate();
-	gameInfo.round = StrSave("-");
-	gameInfo.white = StrSave("-");
-	gameInfo.black = StrSave("-");
-	break;
-
-      case IcsPlayingWhite:
-      case IcsPlayingBlack:
-      case IcsObserving:
-      case IcsExamining:
-	break;
-
-      case PlayFromGameFile:
-	gameInfo.event = StrSave("Game from non-PGN file");
-	gameInfo.site = StrSave(HostName());
-	gameInfo.date = PGNDate();
-	gameInfo.round = StrSave("-");
-	gameInfo.white = StrSave("?");
-	gameInfo.black = StrSave("?");
-	break;
-
-      default:
-	break;
-    }
-}
-
-void
-ReplaceComment(index, text)
-     int index;
-     char *text;
-{
-    int len;
-
-    while (*text == '\n') text++;
-    len = strlen(text);
-    while (len > 0 && text[len - 1] == '\n') len--;
-
-    if (commentList[index] != NULL)
-      free(commentList[index]);
-
-    if (len == 0) {
-	commentList[index] = NULL;
-	return;
-    }
-    commentList[index] = (char *) malloc(len + 2);
-    strncpy(commentList[index], text, len);
-    commentList[index][len] = '\n';
-    commentList[index][len + 1] = NULLCHAR;
-}
-
-void
-CrushCRs(text)
-     char *text;
-{
-  char *p = text;
-  char *q = text;
-  char ch;
-
-  do {
-    ch = *p++;
-    if (ch == '\r') continue;
-    *q++ = ch;
-  } while (ch != '\0');
-}
-
-void
-AppendComment(index, text)
-     int index;
-     char *text;
-{
-    int oldlen, len;
-    char *old;
-
-    CrushCRs(text);
-    while (*text == '\n') text++;
-    len = strlen(text);
-    while (len > 0 && text[len - 1] == '\n') len--;
-
-    if (len == 0) return;
-
-    if (commentList[index] != NULL) {
-	old = commentList[index];
-	oldlen = strlen(old);
-	commentList[index] = (char *) malloc(oldlen + len + 2);
-	strcpy(commentList[index], old);
-	free(old);
-	strncpy(&commentList[index][oldlen], text, len);
-	commentList[index][oldlen + len] = '\n';
-	commentList[index][oldlen + len + 1] = NULLCHAR;
-    } else {
-	commentList[index] = (char *) malloc(len + 2);
-	strncpy(commentList[index], text, len);
-	commentList[index][len] = '\n';
-	commentList[index][len + 1] = NULLCHAR;
-    }
-}
-
-void
-SendToProgram(message, cps)
-     char *message;
-     ChessProgramState *cps;
-{
-    int count, outCount, error;
-    char buf[MSG_SIZ];
-
-    if (cps->pr == NULL) return;
-    Attention(cps);
-    
-    if (appData.debugMode) {
-	TimeMark now;
-	GetTimeMark(&now);
-	fprintf(debugFP, "%ld >%-6s: %s", 
-		SubtractTimeMarks(&now, &programStartTime),
-		cps->which, message);
-    }
-    
-    count = strlen(message);
-    outCount = OutputToProcess(cps->pr, message, count, &error);
-    if (outCount < count && !exiting) {
-	sprintf(buf, "Error writing to %s chess program", cps->which);
-	DisplayFatalError(buf, error, 1);
-    }
-}
-
-void
-ReceiveFromProgram(isr, closure, message, count, error)
-     InputSourceRef isr;
-     VOIDSTAR closure;
-     char *message;
-     int count;
-     int error;
-{
-    char *end_str;
-    char buf[MSG_SIZ];
-    ChessProgramState *cps = (ChessProgramState *)closure;
-
-    if (isr != cps->isr) return; /* Killed intentionally */
-    if (count <= 0) {
-	if (count == 0) {
-	    sprintf(buf,
-		    "Error: %s chess program (%s) exited unexpectedly",
-		    cps->which, cps->program);
-	    RemoveInputSource(cps->isr);
-	    DisplayFatalError(buf, 0, 1);
-	} else {
-	    sprintf(buf,
-		    "Error reading from %s chess program (%s)",
-		    cps->which, cps->program);
-	    RemoveInputSource(cps->isr);
-	    DisplayFatalError(buf, error, 1);
-	}
-	GameEnds((ChessMove) 0, NULL, GE_PLAYER);
-	return;
-    }
-    
-    if ((end_str = strchr(message, '\r')) != NULL)
-      *end_str = NULLCHAR;
-    if ((end_str = strchr(message, '\n')) != NULL)
-      *end_str = NULLCHAR;
-    
-    if (appData.debugMode) {
-	TimeMark now;
-	GetTimeMark(&now);
-	fprintf(debugFP, "%ld <%-6s: %s\n", 
-		SubtractTimeMarks(&now, &programStartTime),
-		cps->which, message);
-    }
-    HandleMachineMove(message, cps);
-}
-
-
-void
-SendTimeControl(cps, mps, tc, inc, sd, st)
-     ChessProgramState *cps;
-     int mps, inc, sd, st;
-     long tc;
-{
-    char buf[MSG_SIZ];
-    int seconds = (tc / 1000) % 60;
-
-    if (st > 0) {
-      /* Set exact time per move, normally using st command */
-      if (cps->stKludge) {
-	/* GNU Chess 4 has no st command; uses level in a nonstandard way */
-	seconds = st % 60;
-	if (seconds == 0) {
-	  sprintf(buf, "level 1 %d\n", st/60);
-	} else {
-	  sprintf(buf, "level 1 %d:%02d\n", st/60, seconds);
-	}
-      } else {
-	sprintf(buf, "st %d\n", st);
-      }
-    } else {
-      /* Set conventional or incremental time control, using level command */
-      if (seconds == 0) {
-	/* Note old gnuchess bug -- minutes:seconds used to not work.
-	   Fixed in later versions, but still avoid :seconds
-	   when seconds is 0. */
-	sprintf(buf, "level %d %ld %d\n", mps, tc/60000, inc/1000);
-      } else {
-	sprintf(buf, "level %d %ld:%02d %d\n", mps, tc/60000,
-		seconds, inc/1000);
-      }
-    }
-    SendToProgram(buf, cps);
-
-    /* Orthoganally (except for GNU Chess 4), limit time to st seconds */
-    /* Orthogonally, limit search to given depth */
-    if (sd > 0) {
-      if (cps->sdKludge) {
-	sprintf(buf, "depth\n%d\n", sd);
-      } else {
-	sprintf(buf, "sd %d\n", sd);
-      }
-      SendToProgram(buf, cps);
-    }
-}
-
-void
-SendTimeRemaining(cps, machineWhite)
-     ChessProgramState *cps;
-     int /*boolean*/ machineWhite;
-{
-    char message[MSG_SIZ];
-    long time, otime;
-
-    /* Note: this routine must be called when the clocks are stopped
-       or when they have *just* been set or switched; otherwise
-       it will be off by the time since the current tick started.
-    */
-    if (machineWhite) {
-	time = whiteTimeRemaining / 10;
-	otime = blackTimeRemaining / 10;
-    } else {
-	time = blackTimeRemaining / 10;
-	otime = whiteTimeRemaining / 10;
-    }
-    if (time <= 0) time = 1;
-    if (otime <= 0) otime = 1;
-    
-    sprintf(message, "time %ld\notim %ld\n", time, otime);
-    SendToProgram(message, cps);
-}
-
-int
-BoolFeature(p, name, loc, cps)
-     char **p;
-     char *name;
-     int *loc;
-     ChessProgramState *cps;
-{
-  char buf[MSG_SIZ];
-  int len = strlen(name);
-  int val;
-  if (strncmp((*p), name, len) == 0 && (*p)[len] == '=') {
-    (*p) += len + 1;
-    sscanf(*p, "%d", &val);
-    *loc = (val != 0);
-    while (**p && **p != ' ') (*p)++;
-    sprintf(buf, "accepted %s\n", name);
-    SendToProgram(buf, cps);
-    return TRUE;
-  }
-  return FALSE;
-}
-
-int
-IntFeature(p, name, loc, cps)
-     char **p;
-     char *name;
-     int *loc;
-     ChessProgramState *cps;
-{
-  char buf[MSG_SIZ];
-  int len = strlen(name);
-  if (strncmp((*p), name, len) == 0 && (*p)[len] == '=') {
-    (*p) += len + 1;
-    sscanf(*p, "%d", loc);
-    while (**p && **p != ' ') (*p)++;
-    sprintf(buf, "accepted %s\n", name);
-    SendToProgram(buf, cps);
-    return TRUE;
-  }
-  return FALSE;
-}
-
-int
-StringFeature(p, name, loc, cps)
-     char **p;
-     char *name;
-     char loc[];
-     ChessProgramState *cps;
-{
-  char buf[MSG_SIZ];
-  int len = strlen(name);
-  if (strncmp((*p), name, len) == 0
-      && (*p)[len] == '=' && (*p)[len+1] == '\"') {
-    (*p) += len + 2;
-    sscanf(*p, "%[^\"]", loc);
-    while (**p && **p != '\"') (*p)++;
-    if (**p == '\"') (*p)++;
-    sprintf(buf, "accepted %s\n", name);
-    SendToProgram(buf, cps);
-    return TRUE;
-  }
-  return FALSE;
-}
-
-void
-FeatureDone(cps, val)
-     ChessProgramState* cps;
-     int val;
-{
-  DelayedEventCallback cb = GetDelayedEvent();
-  if ((cb == InitBackEnd3 && cps == &first) ||
-      (cb == TwoMachinesEventIfReady && cps == &second)) {
-    CancelDelayedEvent();
-    ScheduleDelayedEvent(cb, val ? 1 : 3600000);
-  }
-  cps->initDone = val;
-}
-
-/* Parse feature command from engine */
-void
-ParseFeatures(args, cps)
-     char* args;
-     ChessProgramState *cps;  
-{
-  char *p = args;
-  char *q;
-  int val;
-  char buf[MSG_SIZ];
-
-  for (;;) {
-    while (*p == ' ') p++;
-    if (*p == NULLCHAR) return;
-
-    if (BoolFeature(&p, "setboard", &cps->useSetboard, cps)) continue;
-    if (BoolFeature(&p, "time", &cps->sendTime, cps)) continue;    
-    if (BoolFeature(&p, "draw", &cps->sendDrawOffers, cps)) continue;    
-    if (BoolFeature(&p, "sigint", &cps->useSigint, cps)) continue;    
-    if (BoolFeature(&p, "sigterm", &cps->useSigterm, cps)) continue;    
-    if (BoolFeature(&p, "reuse", &val, cps)) {
-      /* Engine can disable reuse, but can't enable it if user said no */
-      if (!val) cps->reuse = FALSE;
-      continue;
-    }
-    if (BoolFeature(&p, "analyze", &cps->analysisSupport, cps)) continue;
-    if (StringFeature(&p, "myname", &cps->tidy, cps)) {
-      if (gameMode == TwoMachinesPlay) {
-	DisplayTwoMachinesTitle();
-      } else {
-	DisplayTitle("");
-      }
-      continue;
-    }
-    if (StringFeature(&p, "variants", &cps->variants, cps)) continue;
-    if (BoolFeature(&p, "san", &cps->useSAN, cps)) continue;
-    if (BoolFeature(&p, "ping", &cps->usePing, cps)) continue;
-    if (BoolFeature(&p, "playother", &cps->usePlayother, cps)) continue;
-    if (BoolFeature(&p, "colors", &cps->useColors, cps)) continue;
-    if (BoolFeature(&p, "usermove", &cps->useUsermove, cps)) continue;
-    if (BoolFeature(&p, "ics", &cps->sendICS, cps)) continue;
-    if (BoolFeature(&p, "name", &cps->sendName, cps)) continue;
-    if (BoolFeature(&p, "pause", &val, cps)) continue; /* unused at present */
-    if (IntFeature(&p, "done", &val, cps)) {
-      FeatureDone(cps, val);
-      continue;
-    }
-
-    /* unknown feature: complain and skip */
-    q = p;
-    while (*q && *q != '=') q++;
-    sprintf(buf, "rejected %.*s\n", q-p, p);
-    SendToProgram(buf, cps);
-    p = q;
-    if (*p == '=') {
-      p++;
-      if (*p == '\"') {
-	p++;
-	while (*p && *p != '\"') p++;
-	if (*p == '\"') p++;
-      } else {
-	while (*p && *p != ' ') p++;
-      }
-    }
-  }
-
-}
-
-void
-PeriodicUpdatesEvent(newState)
-     int newState;
-{
-    if (newState == appData.periodicUpdates)
-      return;
-
-    appData.periodicUpdates=newState;
-
-    /* Display type changes, so update it now */
-    DisplayAnalysis();
-
-    /* Get the ball rolling again... */
-    if (newState) {
-	AnalysisPeriodicEvent(1);
-	StartAnalysisClock();
-    }
-}
-
-void
-PonderNextMoveEvent(newState)
-     int newState;
-{
-    if (newState == appData.ponderNextMove) return;
-    if (gameMode == EditPosition) EditPositionDone();
-    if (newState) {
-	SendToProgram("hard\n", &first);
-	if (gameMode == TwoMachinesPlay) {
-	    SendToProgram("hard\n", &second);
-	}
-    } else {
-	SendToProgram("easy\n", &first);
-	thinkOutput[0] = NULLCHAR;
-	if (gameMode == TwoMachinesPlay) {
-	    SendToProgram("easy\n", &second);
-	}
-    }
-    appData.ponderNextMove = newState;
-}
-
-void
-ShowThinkingEvent(newState)
-     int newState;
-{
-    if (newState == appData.showThinking) return;
-    if (gameMode == EditPosition) EditPositionDone();
-    if (newState) {
-	SendToProgram("post\n", &first);
-	if (gameMode == TwoMachinesPlay) {
-	    SendToProgram("post\n", &second);
-	}
-    } else {
-	SendToProgram("nopost\n", &first);
-	thinkOutput[0] = NULLCHAR;
-	if (gameMode == TwoMachinesPlay) {
-	    SendToProgram("nopost\n", &second);
-	}
-    }
-    appData.showThinking = newState;
-}
-
-void
-AskQuestionEvent(title, question, replyPrefix, which)
-     char *title; char *question; char *replyPrefix; char *which;
-{
-  ProcRef pr = (which[0] == '1') ? first.pr : second.pr;
-  if (pr == NoProc) return;
-  AskQuestion(title, question, replyPrefix, pr);
-}
-
-void
-DisplayMove(moveNumber)
-     int moveNumber;
-{
-    char message[MSG_SIZ];
-    char res[MSG_SIZ];
-    char cpThinkOutput[MSG_SIZ];
-
-    if (moveNumber == forwardMostMove - 1 || 
-	gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
-
-	strcpy(cpThinkOutput, thinkOutput);
-	if (strchr(cpThinkOutput, '\n'))
-	  *strchr(cpThinkOutput, '\n') = NULLCHAR;
-    } else {
-	*cpThinkOutput = NULLCHAR;
-    }
-
-    if (moveNumber == forwardMostMove - 1 &&
-	gameInfo.resultDetails != NULL) {
-	if (gameInfo.resultDetails[0] == NULLCHAR) {
-	    sprintf(res, " %s", PGNResult(gameInfo.result));
-	} else {
-	    sprintf(res, " {%s} %s",
-		    gameInfo.resultDetails, PGNResult(gameInfo.result));
-	}
-    } else {
-	res[0] = NULLCHAR;
-    }
-    
-    if (moveNumber < 0 || parseList[moveNumber][0] == NULLCHAR) {
-	DisplayMessage(res, cpThinkOutput);
-    } else {
-	sprintf(message, "%d.%s%s%s", moveNumber / 2 + 1,
-		WhiteOnMove(moveNumber) ? " " : ".. ",
-		parseList[moveNumber], res);
-	DisplayMessage(message, cpThinkOutput);
-    }
-}
-
-void
-DisplayAnalysisText(text)
-     char *text;
-{
-    char buf[MSG_SIZ];
-
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
-	sprintf(buf, "Analysis (%s)", first.tidy);
-	AnalysisPopUp(buf, text);
-    }
-}
-
-static int
-only_one_move(str)
-     char *str;
-{
-    while (*str && isspace(*str)) ++str;
-    while (*str && !isspace(*str)) ++str;
-    if (!*str) return 1;
-    while (*str && isspace(*str)) ++str;
-    if (!*str) return 1;
-    return 0;
-}
-
-void
-DisplayAnalysis()
-{
-    char buf[MSG_SIZ];
-    double nps;
-    static char *xtra[] = { "", " (--)", " (++)" };
-    int h, m, s, cs;
-  
-    if (programStats.time == 0) {
-	programStats.time = 1;
-    }
-  
-    if (programStats.got_only_move) {
-	strcpy(buf, programStats.movelist);
-    } else {
-	nps = (((double)programStats.nodes) /
-	       (((double)programStats.time)/100.0));
-
-	cs = programStats.time % 100;
-	s = programStats.time / 100;
-	h = (s / (60*60));
-	s = s - h*60*60;
-	m = (s/60);
-	s = s - m*60;
-
-	if (programStats.moves_left > 0 && appData.periodicUpdates) {
-	  if (programStats.move_name[0] != NULLCHAR) {
-	    sprintf(buf, "depth=%d %d/%d(%s) %+.2f %s%s\nNodes: %lu NPS: %d\nTime: %02d:%02d:%02d.%02d",
-		    programStats.depth,
-		    programStats.nr_moves-programStats.moves_left,
-		    programStats.nr_moves, programStats.move_name,
-		    ((float)programStats.score)/100.0, programStats.movelist,
-		    only_one_move(programStats.movelist)?
-		    xtra[programStats.got_fail] : "",
-		    programStats.nodes, (int)nps, h, m, s, cs);
-	  } else {
-	    sprintf(buf, "depth=%d %d/%d %+.2f %s%s\nNodes: %lu NPS: %d\nTime: %02d:%02d:%02d.%02d",
-		    programStats.depth,
-		    programStats.nr_moves-programStats.moves_left,
-		    programStats.nr_moves, ((float)programStats.score)/100.0,
-		    programStats.movelist,
-		    only_one_move(programStats.movelist)?
-		    xtra[programStats.got_fail] : "",
-		    programStats.nodes, (int)nps, h, m, s, cs);
-	  }
-	} else {
-	    sprintf(buf, "depth=%d %+.2f %s%s\nNodes: %lu NPS: %d\nTime: %02d:%02d:%02d.%02d",
-		    programStats.depth,
-		    ((float)programStats.score)/100.0,
-		    programStats.movelist,
-		    only_one_move(programStats.movelist)?
-		    xtra[programStats.got_fail] : "",
-		    programStats.nodes, (int)nps, h, m, s, cs);
-	}
-    }
-    DisplayAnalysisText(buf);
-}
-
-void
-DisplayComment(moveNumber, text)
-     int moveNumber;
-     char *text;
-{
-    char title[MSG_SIZ];
-
-    if (moveNumber < 0 || parseList[moveNumber][0] == NULLCHAR) {
-	strcpy(title, "Comment");
-    } else {
-	sprintf(title, "Comment on %d.%s%s", moveNumber / 2 + 1,
-		WhiteOnMove(moveNumber) ? " " : ".. ",
-		parseList[moveNumber]);
-    }
-
-    CommentPopUp(title, text);
-}
-
-/* This routine sends a ^C interrupt to gnuchess, to awaken it if it
- * might be busy thinking or pondering.  It can be omitted if your
- * gnuchess is configured to stop thinking immediately on any user
- * input.  However, that gnuchess feature depends on the FIONREAD
- * ioctl, which does not work properly on some flavors of Unix.
- */
-void
-Attention(cps)
-     ChessProgramState *cps;
-{
-#if ATTENTION
-    if (!cps->useSigint) return;
-    if (appData.noChessProgram || (cps->pr == NoProc)) return;
-    switch (gameMode) {
-      case MachinePlaysWhite:
-      case MachinePlaysBlack:
-      case TwoMachinesPlay:
-      case IcsPlayingWhite:
-      case IcsPlayingBlack:
-      case AnalyzeMode:
-      case AnalyzeFile:
-	/* Skip if we know it isn't thinking */
-	if (!cps->maybeThinking) return;
-	if (appData.debugMode)
-	  fprintf(debugFP, "Interrupting %s\n", cps->which);
-	InterruptChildProcess(cps->pr);
-	cps->maybeThinking = FALSE;
-	break;
-      default:
-	break;
-    }
-#endif /*ATTENTION*/
-}
-
-int
-CheckFlags()
-{
-    if (whiteTimeRemaining <= 0) {
-	if (!whiteFlag) {
-	    whiteFlag = TRUE;
-	    if (appData.icsActive) {
-		if (appData.autoCallFlag &&
-		    gameMode == IcsPlayingBlack && !blackFlag) {
-		  SendToICS(ics_prefix);
-		  SendToICS("flag\n");
-		}
-	    } else {
-		if (blackFlag) {
-		    DisplayTitle("Both flags fell");
-		} else {
-	 	    DisplayTitle("White's flag fell");
- 		    if (appData.autoCallFlag) {
-			GameEnds(BlackWins, "Black wins on time", GE_XBOARD);
-			return TRUE;
-		    }
-		}
-	    }
-	}
-    }
-    if (blackTimeRemaining <= 0) {
-	if (!blackFlag) {
-	    blackFlag = TRUE;
-	    if (appData.icsActive) {
-		if (appData.autoCallFlag &&
-		    gameMode == IcsPlayingWhite && !whiteFlag) {
-		  SendToICS(ics_prefix);
-		  SendToICS("flag\n");
-		}
-	    } else {
-		if (whiteFlag) {
-		    DisplayTitle("Both flags fell");
-		} else {
-		    DisplayTitle("Black's flag fell");
-		    if (appData.autoCallFlag) {
-			GameEnds(WhiteWins, "White wins on time", GE_XBOARD);
-			return TRUE;
-		    }
-		}
-	    }
-	}
-    }
-    return FALSE;
-}
-
-void
-CheckTimeControl()
-{
-    if (!appData.clockMode || appData.icsActive ||
-	gameMode == PlayFromGameFile || forwardMostMove == 0) return;
-
-    if (timeIncrement >= 0) {
-	if (WhiteOnMove(forwardMostMove)) {
-	    blackTimeRemaining += timeIncrement;
-	} else {
-	    whiteTimeRemaining += timeIncrement;
-	}
-    }
-    /*
-     * add time to clocks when time control is achieved
-     */
-    if (movesPerSession) {
-      switch ((forwardMostMove + 1) % (movesPerSession * 2)) {
-      case 0:
-	/* White made time control */
-	whiteTimeRemaining += timeControl;
-	break;
-      case 1:
-	/* Black made time control */
-	blackTimeRemaining += timeControl;
-	break;
-      default:
-	break;
-      }
-    }
-}
-
-void
-DisplayBothClocks()
-{
-    int wom = gameMode == EditPosition ?
-      !blackPlaysFirst : WhiteOnMove(currentMove);
-    DisplayWhiteClock(whiteTimeRemaining, wom);
-    DisplayBlackClock(blackTimeRemaining, !wom);
-}
-
-
-/* Timekeeping seems to be a portability nightmare.  I think everyone
-   has ftime(), but I'm really not sure, so I'm including some ifdefs
-   to use other calls if you don't.  Clocks will be less accurate if
-   you have neither ftime nor gettimeofday.
-*/
-
-/* Get the current time as a TimeMark */
-void
-GetTimeMark(tm)
-     TimeMark *tm;
-{
-#if HAVE_GETTIMEOFDAY
-
-    struct timeval timeVal;
-    struct timezone timeZone;
-
-    gettimeofday(&timeVal, &timeZone);
-    tm->sec = (long) timeVal.tv_sec; 
-    tm->ms = (int) (timeVal.tv_usec / 1000L);
-
-#else /*!HAVE_GETTIMEOFDAY*/
-#if HAVE_FTIME
-
-#include <sys/timeb.h>
-    struct timeb timeB;
-
-    ftime(&timeB);
-    tm->sec = (long) timeB.time;
-    tm->ms = (int) timeB.millitm;
-
-#else /*!HAVE_FTIME && !HAVE_GETTIMEOFDAY*/
-    tm->sec = (long) time(NULL);
-    tm->ms = 0;
-#endif
-#endif
-}
-
-/* Return the difference in milliseconds between two
-   time marks.  We assume the difference will fit in a long!
-*/
-long
-SubtractTimeMarks(tm2, tm1)
-     TimeMark *tm2, *tm1;
-{
-    return 1000L*(tm2->sec - tm1->sec) +
-           (long) (tm2->ms - tm1->ms);
-}
-
-
-/*
- * Code to manage the game clocks.
- *
- * In tournament play, black starts the clock and then white makes a move.
- * We give the human user a slight advantage if he is playing white---the
- * clocks don't run until he makes his first move, so it takes zero time.
- * Also, we don't account for network lag, so we could get out of sync
- * with GNU Chess's clock -- but then, referees are always right.  
- */
-
-static TimeMark tickStartTM;
-static long intendedTickLength;
-
-long
-NextTickLength(timeRemaining)
-     long timeRemaining;
-{
-    long nominalTickLength, nextTickLength;
-
-    if (timeRemaining > 0L && timeRemaining <= 10000L)
-      nominalTickLength = 100L;
-    else
-      nominalTickLength = 1000L;
-    nextTickLength = timeRemaining % nominalTickLength;
-    if (nextTickLength <= 0) nextTickLength += nominalTickLength;
-
-    return nextTickLength;
-}
-
-/* Stop clocks and reset to a fresh time control */
-void
-ResetClocks() 
-{
-    (void) StopClockTimer();
-    if (appData.icsActive) {
-	whiteTimeRemaining = blackTimeRemaining = 0;
-    } else {
-	whiteTimeRemaining = blackTimeRemaining = timeControl;
-    }
-    if (whiteFlag || blackFlag) {
-	DisplayTitle("");
-	whiteFlag = blackFlag = FALSE;
-    }
-    DisplayBothClocks();
-}
-
-#define FUDGE 25 /* 25ms = 1/40 sec; should be plenty even for 50 Hz clocks */
-
-/* Decrement running clock by amount of time that has passed */
-void
-DecrementClocks()
-{
-    long timeRemaining;
-    long lastTickLength, fudge;
-    TimeMark now;
-
-    if (!appData.clockMode) return;
-    if (gameMode==AnalyzeMode || gameMode == AnalyzeFile) return;
-	
-    GetTimeMark(&now);
-
-    lastTickLength = SubtractTimeMarks(&now, &tickStartTM);
-
-    /* Fudge if we woke up a little too soon */
-    fudge = intendedTickLength - lastTickLength;
-    if (fudge < 0 || fudge > FUDGE) fudge = 0;
-
-    if (WhiteOnMove(forwardMostMove)) {
-	timeRemaining = whiteTimeRemaining -= lastTickLength;
-	DisplayWhiteClock(whiteTimeRemaining - fudge,
-			  WhiteOnMove(currentMove));
-    } else {
-	timeRemaining = blackTimeRemaining -= lastTickLength;
-	DisplayBlackClock(blackTimeRemaining - fudge,
-			  !WhiteOnMove(currentMove));
-    }
-
-    if (CheckFlags()) return;
-	
-    tickStartTM = now;
-    intendedTickLength = NextTickLength(timeRemaining - fudge) + fudge;
-    StartClockTimer(intendedTickLength);
-
-    /* if the time remaining has fallen below the alarm threshold, sound the
-     * alarm. if the alarm has sounded and (due to a takeback or time control
-     * with increment) the time remaining has increased to a level above the
-     * threshold, reset the alarm so it can sound again. 
-     */
-    
-    if (appData.icsActive && appData.icsAlarm) {
-
-	/* make sure we are dealing with the user's clock */
-	if (!( ((gameMode == IcsPlayingWhite) && WhiteOnMove(currentMove)) ||
-	       ((gameMode == IcsPlayingBlack) && !WhiteOnMove(currentMove))
-	   )) return;
-
-	if (alarmSounded && (timeRemaining > appData.icsAlarmTime)) {
-	    alarmSounded = FALSE;
-	} else if (!alarmSounded && (timeRemaining <= appData.icsAlarmTime)) { 
-	    PlayAlarmSound();
-	    alarmSounded = TRUE;
-	}
-    }
-}
-
-
-/* A player has just moved, so stop the previously running
-   clock and (if in clock mode) start the other one.
-   We redisplay both clocks in case we're in ICS mode, because
-   ICS gives us an update to both clocks after every move.
-   Note that this routine is called *after* forwardMostMove
-   is updated, so the last fractional tick must be subtracted
-   from the color that is *not* on move now.
-*/
-void
-SwitchClocks()
-{
-    long lastTickLength;
-    TimeMark now;
-    int flagged = FALSE;
-
-    GetTimeMark(&now);
-
-    if (StopClockTimer() && appData.clockMode) {
-	lastTickLength = SubtractTimeMarks(&now, &tickStartTM);
-	if (WhiteOnMove(forwardMostMove)) {
-	    blackTimeRemaining -= lastTickLength;
-	} else {
-	    whiteTimeRemaining -= lastTickLength;
-	}
-	flagged = CheckFlags();
-    }
-    CheckTimeControl();
-
-    if (flagged || !appData.clockMode) return;
-
-    switch (gameMode) {
-      case MachinePlaysBlack:
-      case MachinePlaysWhite:
-      case BeginningOfGame:
-	if (pausing) return;
-	break;
-
-      case EditGame:
-      case PlayFromGameFile:
-      case IcsExamining:
-	return;
-
-      default:
-	break;
-    }
-
-    tickStartTM = now;
-    intendedTickLength = NextTickLength(WhiteOnMove(forwardMostMove) ?
-      whiteTimeRemaining : blackTimeRemaining);
-    StartClockTimer(intendedTickLength);
-}
-	
-
-/* Stop both clocks */
-void
-StopClocks()
-{	
-    long lastTickLength;
-    TimeMark now;
-
-    if (!StopClockTimer()) return;
-    if (!appData.clockMode) return;
-
-    GetTimeMark(&now);
-
-    lastTickLength = SubtractTimeMarks(&now, &tickStartTM);
-    if (WhiteOnMove(forwardMostMove)) {
-	whiteTimeRemaining -= lastTickLength;
-	DisplayWhiteClock(whiteTimeRemaining, WhiteOnMove(currentMove));
-    } else {
-	blackTimeRemaining -= lastTickLength;
-	DisplayBlackClock(blackTimeRemaining, !WhiteOnMove(currentMove));
-    }
-    CheckFlags();
-}
-	
-/* Start clock of player on move.  Time may have been reset, so
-   if clock is already running, stop and restart it. */
-void
-StartClocks()
-{
-    (void) StopClockTimer(); /* in case it was running already */
-    DisplayBothClocks();
-    if (CheckFlags()) return;
-
-    if (!appData.clockMode) return;
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) return;
-
-    GetTimeMark(&tickStartTM);
-    intendedTickLength = NextTickLength(WhiteOnMove(forwardMostMove) ?
-      whiteTimeRemaining : blackTimeRemaining);
-    StartClockTimer(intendedTickLength);
-}
-
-char *
-TimeString(ms)
-     long ms;
-{
-    long second, minute, hour, day;
-    char *sign = "";
-    static char buf[32];
-    
-    if (ms > 0 && ms <= 9900) {
-      /* convert milliseconds to tenths, rounding up */
-      double tenths = floor( ((double)(ms + 99L)) / 100.00 );
-
-      sprintf(buf, " %03.1f ", tenths/10.0);
-      return buf;
-    }
-
-    /* convert milliseconds to seconds, rounding up */
-    /* use floating point to avoid strangeness of integer division
-       with negative dividends on many machines */
-    second = (long) floor(((double) (ms + 999L)) / 1000.0);
-
-    if (second < 0) {
-	sign = "-";
-	second = -second;
-    }
-    
-    day = second / (60 * 60 * 24);
-    second = second % (60 * 60 * 24);
-    hour = second / (60 * 60);
-    second = second % (60 * 60);
-    minute = second / 60;
-    second = second % 60;
-    
-    if (day > 0)
-      sprintf(buf, " %s%ld:%02ld:%02ld:%02ld ",
-	      sign, day, hour, minute, second);
-    else if (hour > 0)
-      sprintf(buf, " %s%ld:%02ld:%02ld ", sign, hour, minute, second);
-    else
-      sprintf(buf, " %s%2ld:%02ld ", sign, minute, second);
-    
-    return buf;
-}
-
-
-/*
- * This is necessary because some C libraries aren't ANSI C compliant yet.
- */
-char *
-StrStr(string, match)
-     char *string, *match;
-{
-    int i, length;
-    
-    length = strlen(match);
-    
-    for (i = strlen(string) - length; i >= 0; i--, string++)
-      if (!strncmp(match, string, length))
-	return string;
-    
-    return NULL;
-}
-
-char *
-StrCaseStr(string, match)
-     char *string, *match;
-{
-    int i, j, length;
-    
-    length = strlen(match);
-    
-    for (i = strlen(string) - length; i >= 0; i--, string++) {
-	for (j = 0; j < length; j++) {
-	    if (ToLower(match[j]) != ToLower(string[j]))
-	      break;
-	}
-	if (j == length) return string;
-    }
-
-    return NULL;
-}
-
-#ifndef _amigados
-int
-StrCaseCmp(s1, s2)
-     char *s1, *s2;
-{
-    char c1, c2;
-    
-    for (;;) {
-	c1 = ToLower(*s1++);
-	c2 = ToLower(*s2++);
-	if (c1 > c2) return 1;
-	if (c1 < c2) return -1;
-	if (c1 == NULLCHAR) return 0;
-    }
-}
-
-
-int
-ToLower(c)
-     int c;
-{
-    return isupper(c) ? tolower(c) : c;
-}
-
-
-int
-ToUpper(c)
-     int c;
-{
-    return islower(c) ? toupper(c) : c;
-}
-#endif /* !_amigados	*/
-
-char *
-StrSave(s)
-     char *s;
-{
-    char *ret;
-
-    if ((ret = (char *) malloc(strlen(s) + 1))) {
-	strcpy(ret, s);
-    }
-    return ret;
-}
-
-char *
-StrSavePtr(s, savePtr)
-     char *s, **savePtr;
-{
-    if (*savePtr) {
-	free(*savePtr);
-    }
-    if ((*savePtr = (char *) malloc(strlen(s) + 1))) {
-	strcpy(*savePtr, s);
-    }
-    return(*savePtr);
-}
-
-char *
-PGNDate()
-{
-    time_t clock;
-    struct tm *tm;
-    char buf[MSG_SIZ];
-
-    clock = time((time_t *)NULL);
-    tm = localtime(&clock);
-    sprintf(buf, "%04d.%02d.%02d",
-	    tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
-    return StrSave(buf);
-}
-
-
-char *
-PositionToFEN(move)
-     int move;
-{
-    int i, j, fromX, fromY, toX, toY;
-    int whiteToPlay;
-    char buf[128];
-    char *p, *q;
-    int emptycount;
-
-    whiteToPlay = (gameMode == EditPosition) ?
-      !blackPlaysFirst : (move % 2 == 0);
-    p = buf;
-
-    /* Piece placement data */
-    for (i = BOARD_SIZE - 1; i >= 0; i--) {
-	emptycount = 0;
-	for (j = 0; j < BOARD_SIZE; j++) {
-	    if (boards[move][i][j] == EmptySquare) {
-		emptycount++;
-	    } else {
-		if (emptycount > 0) {
-		    *p++ = '0' + emptycount;
-		    emptycount = 0;
-		}
-		*p++ = PieceToChar(boards[move][i][j]);
-	    }
-	}
-	if (emptycount > 0) {
-	    *p++ = '0' + emptycount;
-	    emptycount = 0;
-	}
-	*p++ = '/';
-    }
-    *(p - 1) = ' ';
-
-    /* Active color */
-    *p++ = whiteToPlay ? 'w' : 'b';
-    *p++ = ' ';
-
-    /* !!We don't keep track of castling availability, so fake it */
-    q = p;
-    if (boards[move][0][4] == WhiteKing) {
-	if (boards[move][0][7] == WhiteRook) *p++ = 'K';
-	if (boards[move][0][0] == WhiteRook) *p++ = 'Q';
-    }
-    if (boards[move][7][4] == BlackKing) {
-	if (boards[move][7][7] == BlackRook) *p++ = 'k';
-	if (boards[move][7][0] == BlackRook) *p++ = 'q';
-    }	    
-    if (q == p) *p++ = '-';
-    *p++ = ' ';
-
-    /* En passant target square */
-    if (move > backwardMostMove) {
-	fromX = moveList[move - 1][0] - 'a';
-	fromY = moveList[move - 1][1] - '1';
-	toX = moveList[move - 1][2] - 'a';
-	toY = moveList[move - 1][3] - '1';
-	if (fromY == (whiteToPlay ? 6 : 1) &&
-	    toY == (whiteToPlay ? 4 : 3) &&
-	    boards[move][toY][toX] == (whiteToPlay ? BlackPawn : WhitePawn) &&
-	    fromX == toX) {
-	    /* 2-square pawn move just happened */
-	    *p++ = toX + 'a';
-	    *p++ = whiteToPlay ? '6' : '3';
-	} else {
-	    *p++ = '-';
-	}
-    } else {
-	*p++ = '-';
-    }
-
-    /* !!We don't keep track of halfmove clock for 50-move rule */
-    strcpy(p, " 0 ");
-    p += 3;
-
-    /* Fullmove number */
-    sprintf(p, "%d", (move / 2) + 1);
-    
-    return StrSave(buf);
-}
-
-Boolean
-ParseFEN(board, blackPlaysFirst, fen)
-     Board board;
-     int *blackPlaysFirst;
-     char *fen;
-{
-    int i, j;
-    char *p;
-    int emptycount;
-
-    p = fen;
-
-    /* Piece placement data */
-    for (i = BOARD_SIZE - 1; i >= 0; i--) {
-	j = 0;
-	for (;;) {
-	    if (*p == '/' || *p == ' ') {
-		if (*p == '/') p++;
-		emptycount = BOARD_SIZE - j;
-		while (emptycount--) board[i][j++] = EmptySquare;
-		break;
-	    } else if (isdigit(*p)) {
-		emptycount = *p++ - '0';
-		if (j + emptycount > BOARD_SIZE) return FALSE;
-		while (emptycount--) board[i][j++] = EmptySquare;
-	    } else if (isalpha(*p)) {
-		if (j >= BOARD_SIZE) return FALSE;
-		board[i][j++] = CharToPiece(*p++);
-	    } else {
-		return FALSE;
-	    }
-	}
-    }
-    while (*p == '/' || *p == ' ') p++;
-
-    /* Active color */
-    switch (*p) {
-      case 'w':
-	*blackPlaysFirst = FALSE;
-	break;
-      case 'b': 
-	*blackPlaysFirst = TRUE;
-	break;
-      default:
-	return FALSE;
-    }
-    /* !!We ignore the rest of the FEN notation */
-    return TRUE;
-}
-      
-void
-EditPositionPasteFEN(char *fen)
-{
-  if (fen != NULL) {
-    Board initial_position;
-
-    if (!ParseFEN(initial_position, &blackPlaysFirst, fen)) {
-      DisplayError("Bad FEN position in clipboard", 0);
-      return ;
-    } else {
-      int savedBlackPlaysFirst = blackPlaysFirst;
-      EditPositionEvent();
-      blackPlaysFirst = savedBlackPlaysFirst;
-      CopyBoard(boards[0], initial_position);
-      EditPositionDone();
-      DisplayBothClocks();
-      DrawPosition(FALSE, boards[currentMove]);
-    }
-  }
-}
+/*
+ * backend.c -- Common back end for X and Windows NT versions of
+ * XBoard $Id: backend.c,v 2.6 2003/11/28 09:37:36 mann Exp $
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 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 XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+/* [AS] Also useful here for debugging */
+#ifdef WIN32
+#include <windows.h>
+
+#define DoSleep( n ) if( (n) != 0 ) Sleep( (n) );
+
+#else
+
+#define DoSleep( n ) if( (n) >= 0) sleep(n)
+
+#endif
+
+#include "config.h"
+
+#include <assert.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <math.h>
+#include <ctype.h>
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else /* not STDC_HEADERS */
+# if HAVE_STRING_H
+#  include <string.h>
+# else /* not HAVE_STRING_H */
+#  include <strings.h>
+# endif /* not HAVE_STRING_H */
+#endif /* not STDC_HEADERS */
+
+#if HAVE_SYS_FCNTL_H
+# include <sys/fcntl.h>
+#else /* not HAVE_SYS_FCNTL_H */
+# if HAVE_FCNTL_H
+#  include <fcntl.h>
+# endif /* HAVE_FCNTL_H */
+#endif /* not HAVE_SYS_FCNTL_H */
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+
+#if defined(_amigados) && !defined(__GNUC__)
+struct timezone {
+    int tz_minuteswest;
+    int tz_dsttime;
+};
+extern int gettimeofday(struct timeval *, struct timezone *);
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include "common.h"
+#include "frontend.h"
+#include "backend.h"
+#include "parser.h"
+#include "moves.h"
+#if ZIPPY
+# include "zippy.h"
+#endif
+#include "backendz.h"
+#include "gettext.h" 
+ 
+#ifdef ENABLE_NLS 
+# define _(s) gettext (s) 
+# define N_(s) gettext_noop (s) 
+#else 
+# define _(s) (s) 
+# define N_(s) s 
+#endif 
+
+
+/* A point in time */
+typedef struct {
+    long sec;  /* Assuming this is >= 32 bits */
+    int ms;    /* Assuming this is >= 16 bits */
+} TimeMark;
+
+int establish P((void));
+void read_from_player P((InputSourceRef isr, VOIDSTAR closure,
+			 char *buf, int count, int error));
+void read_from_ics P((InputSourceRef isr, VOIDSTAR closure,
+		      char *buf, int count, int error));
+void SendToICS P((char *s));
+void SendToICSDelayed P((char *s, long msdelay));
+void SendMoveToICS P((ChessMove moveType, int fromX, int fromY,
+		      int toX, int toY));
+void InitPosition P((int redraw));
+void HandleMachineMove P((char *message, ChessProgramState *cps));
+int AutoPlayOneMove P((void));
+int LoadGameOneMove P((ChessMove readAhead));
+int LoadGameFromFile P((char *filename, int n, char *title, int useList));
+int LoadPositionFromFile P((char *filename, int n, char *title));
+int SavePositionToFile P((char *filename));
+void ApplyMove P((int fromX, int fromY, int toX, int toY, int promoChar,
+		  Board board));
+void MakeMove P((int fromX, int fromY, int toX, int toY, int promoChar));
+void ShowMove P((int fromX, int fromY, int toX, int toY));
+int FinishMove P((ChessMove moveType, int fromX, int fromY, int toX, int toY,
+		   /*char*/int promoChar));
+void BackwardInner P((int target));
+void ForwardInner P((int target));
+void GameEnds P((ChessMove result, char *resultDetails, int whosays));
+void EditPositionDone P((void));
+void PrintOpponents P((FILE *fp));
+void PrintPosition P((FILE *fp, int move));
+void StartChessProgram P((ChessProgramState *cps));
+void SendToProgram P((char *message, ChessProgramState *cps));
+void SendMoveToProgram P((int moveNum, ChessProgramState *cps));
+void ReceiveFromProgram P((InputSourceRef isr, VOIDSTAR closure,
+			   char *buf, int count, int error));
+void SendTimeControl P((ChessProgramState *cps,
+			int mps, long tc, int inc, int sd, int st));
+char *TimeControlTagValue P((void));
+void Attention P((ChessProgramState *cps));
+void FeedMovesToProgram P((ChessProgramState *cps, int upto));
+void ResurrectChessProgram P((void));
+void DisplayComment P((int moveNumber, char *text));
+void DisplayMove P((int moveNumber));
+void DisplayAnalysis P((void));
+
+void ParseGameHistory P((char *game));
+void ParseBoard12 P((char *string));
+void StartClocks P((void));
+void SwitchClocks P((void));
+void StopClocks P((void));
+void ResetClocks P((void));
+char *PGNDate P((void));
+void SetGameInfo P((void));
+Boolean ParseFEN P((Board board, int *blackPlaysFirst, char *fen));
+int RegisterMove P((void));
+void MakeRegisteredMove P((void));
+void TruncateGame P((void));
+int looking_at P((char *, int *, char *));
+void CopyPlayerNameIntoFileName P((char **, char *));
+char *SavePart P((char *));
+int SaveGameOldStyle P((FILE *));
+int SaveGamePGN P((FILE *));
+void GetTimeMark P((TimeMark *));
+long SubtractTimeMarks P((TimeMark *, TimeMark *));
+int CheckFlags P((void));
+long NextTickLength P((long));
+void CheckTimeControl P((void));
+void show_bytes P((FILE *, char *, int));
+int string_to_rating P((char *str));
+void ParseFeatures P((char* args, ChessProgramState *cps));
+void InitBackEnd3 P((void));
+void FeatureDone P((ChessProgramState* cps, int val));
+void InitChessProgram P((ChessProgramState *cps, int setup));
+void OutputKibitz(int window, char *text);
+int PerpetualChase(int first, int last);
+int EngineOutputIsUp();
+void InitDrawingSizes(int x, int y);
+
+#ifdef WIN32
+       extern void ConsoleCreate();
+#endif
+
+ChessProgramState *WhitePlayer();
+void InsertIntoMemo P((int which, char *text)); // [HGM] kibitz: in engineo.c
+int VerifyDisplayMode P(());
+
+char *GetInfoFromComment( int, char * ); // [HGM] PV time: returns stripped comment
+void InitEngineUCI( const char * iniDir, ChessProgramState * cps ); // [HGM] moved here from winboard.c
+char *ProbeBook P((int moveNr, char *book)); // [HGM] book: returns a book move
+char *SendMoveToBookUser P((int nr, ChessProgramState *cps, int initial)); // [HGM] book
+extern char installDir[MSG_SIZ];
+
+extern int tinyLayout, smallLayout;
+ChessProgramStats programStats;
+static int exiting = 0; /* [HGM] moved to top */
+static int setboardSpoiledMachineBlack = 0 /*, errorExitFlag = 0*/;
+int startedFromPositionFile = FALSE; Board filePosition;       /* [HGM] loadPos */
+char endingGame = 0;    /* [HGM] crash: flag to prevent recursion of GameEnds() */
+int whiteNPS, blackNPS; /* [HGM] nps: for easily making clocks aware of NPS     */
+VariantClass currentlyInitializedVariant; /* [HGM] variantswitch */
+int lastIndex = 0;      /* [HGM] autoinc: last game/position used in match mode */
+int opponentKibitzes;
+
+/* States for ics_getting_history */
+#define H_FALSE 0
+#define H_REQUESTED 1
+#define H_GOT_REQ_HEADER 2
+#define H_GOT_UNREQ_HEADER 3
+#define H_GETTING_MOVES 4
+#define H_GOT_UNWANTED_HEADER 5
+
+/* whosays values for GameEnds */
+#define GE_ICS 0
+#define GE_ENGINE 1
+#define GE_PLAYER 2
+#define GE_FILE 3
+#define GE_XBOARD 4
+#define GE_ENGINE1 5
+#define GE_ENGINE2 6
+
+/* Maximum number of games in a cmail message */
+#define CMAIL_MAX_GAMES 20
+
+/* Different types of move when calling RegisterMove */
+#define CMAIL_MOVE   0
+#define CMAIL_RESIGN 1
+#define CMAIL_DRAW   2
+#define CMAIL_ACCEPT 3
+
+/* Different types of result to remember for each game */
+#define CMAIL_NOT_RESULT 0
+#define CMAIL_OLD_RESULT 1
+#define CMAIL_NEW_RESULT 2
+
+/* Telnet protocol constants */
+#define TN_WILL 0373
+#define TN_WONT 0374
+#define TN_DO   0375
+#define TN_DONT 0376
+#define TN_IAC  0377
+#define TN_ECHO 0001
+#define TN_SGA  0003
+#define TN_PORT 23
+
+/* [AS] */
+static char * safeStrCpy( char * dst, const char * src, size_t count )
+{
+    assert( dst != NULL );
+    assert( src != NULL );
+    assert( count > 0 );
+
+    strncpy( dst, src, count );
+    dst[ count-1 ] = '\0';
+    return dst;
+}
+
+#if 0
+//[HGM] for future use? Conditioned out for now to suppress warning.
+static char * safeStrCat( char * dst, const char * src, size_t count )
+{
+    size_t  dst_len;
+
+    assert( dst != NULL );
+    assert( src != NULL );
+    assert( count > 0 );
+
+    dst_len = strlen(dst);
+
+    assert( count > dst_len ); /* Buffer size must be greater than current length */
+
+    safeStrCpy( dst + dst_len, src, count - dst_len );
+
+    return dst;
+}
+#endif
+
+/* Some compiler can't cast u64 to double
+ * This function do the job for us:
+
+ * We use the highest bit for cast, this only
+ * works if the highest bit is not
+ * in use (This should not happen)
+ *
+ * We used this for all compiler
+ */
+double
+u64ToDouble(u64 value)
+{
+  double r;
+  u64 tmp = value & u64Const(0x7fffffffffffffff);
+  r = (double)(s64)tmp;
+  if (value & u64Const(0x8000000000000000))
+       r +=  9.2233720368547758080e18; /* 2^63 */
+ return r;
+}
+
+/* Fake up flags for now, as we aren't keeping track of castling
+   availability yet. [HGM] Change of logic: the flag now only
+   indicates the type of castlings allowed by the rule of the game.
+   The actual rights themselves are maintained in the array
+   castlingRights, as part of the game history, and are not probed
+   by this function.
+ */
+int
+PosFlags(index)
+{
+  int flags = F_ALL_CASTLE_OK;
+  if ((index % 2) == 0) flags |= F_WHITE_ON_MOVE;
+  switch (gameInfo.variant) {
+  case VariantSuicide:
+    flags &= ~F_ALL_CASTLE_OK;
+  case VariantGiveaway:		// [HGM] moved this case label one down: seems Giveaway does have castling on ICC!
+    flags |= F_IGNORE_CHECK;
+  case VariantLosers:
+    flags |= F_MANDATORY_CAPTURE; //[HGM] losers: sets flag so TestLegality rejects non-capts if capts exist
+    break;
+  case VariantAtomic:
+    flags |= F_IGNORE_CHECK | F_ATOMIC_CAPTURE;
+    break;
+  case VariantKriegspiel:
+    flags |= F_KRIEGSPIEL_CAPTURE;
+    break;
+  case VariantCapaRandom: 
+  case VariantFischeRandom:
+    flags |= F_FRC_TYPE_CASTLING; /* [HGM] enable this through flag */
+  case VariantNoCastle:
+  case VariantShatranj:
+  case VariantCourier:
+    flags &= ~F_ALL_CASTLE_OK;
+    break;
+  default:
+    break;
+  }
+  return flags;
+}
+
+FILE *gameFileFP, *debugFP;
+
+/* 
+    [AS] Note: sometimes, the sscanf() function is used to parse the input
+    into a fixed-size buffer. Because of this, we must be prepared to
+    receive strings as long as the size of the input buffer, which is currently
+    set to 4K for Windows and 8K for the rest.
+    So, we must either allocate sufficiently large buffers here, or
+    reduce the size of the input buffer in the input reading part.
+*/
+
+char cmailMove[CMAIL_MAX_GAMES][MOVE_LEN], cmailMsg[MSG_SIZ];
+char bookOutput[MSG_SIZ*10], thinkOutput[MSG_SIZ*10], lastHint[MSG_SIZ];
+char thinkOutput1[MSG_SIZ*10];
+
+ChessProgramState first, second;
+
+/* premove variables */
+int premoveToX = 0;
+int premoveToY = 0;
+int premoveFromX = 0;
+int premoveFromY = 0;
+int premovePromoChar = 0;
+int gotPremove = 0;
+Boolean alarmSounded;
+/* end premove variables */
+
+char *ics_prefix = "$";
+int ics_type = ICS_GENERIC;
+
+int currentMove = 0, forwardMostMove = 0, backwardMostMove = 0;
+int pauseExamForwardMostMove = 0;
+int nCmailGames = 0, nCmailResults = 0, nCmailMovesRegistered = 0;
+int cmailMoveRegistered[CMAIL_MAX_GAMES], cmailResult[CMAIL_MAX_GAMES];
+int cmailMsgLoaded = FALSE, cmailMailedMove = FALSE;
+int cmailOldMove = -1, firstMove = TRUE, flipView = FALSE;
+int blackPlaysFirst = FALSE, startedFromSetupPosition = FALSE;
+int searchTime = 0, pausing = FALSE, pauseExamInvalid = FALSE;
+int whiteFlag = FALSE, blackFlag = FALSE;
+int userOfferedDraw = FALSE;
+int ics_user_moved = 0, ics_gamenum = -1, ics_getting_history = H_FALSE;
+int matchMode = FALSE, hintRequested = FALSE, bookRequested = FALSE;
+int cmailMoveType[CMAIL_MAX_GAMES];
+long ics_clock_paused = 0;
+ProcRef icsPR = NoProc, cmailPR = NoProc;
+InputSourceRef telnetISR = NULL, fromUserISR = NULL, cmailISR = NULL;
+GameMode gameMode = BeginningOfGame;
+char moveList[MAX_MOVES][MOVE_LEN], parseList[MAX_MOVES][MOVE_LEN * 2];
+char *commentList[MAX_MOVES], *cmailCommentList[CMAIL_MAX_GAMES];
+ChessProgramStats_Move pvInfoList[MAX_MOVES]; /* [AS] Info about engine thinking */
+int hiddenThinkOutputState = 0; /* [AS] */
+int adjudicateLossThreshold = 0; /* [AS] Automatic adjudication */
+int adjudicateLossPlies = 6;
+char white_holding[64], black_holding[64];
+TimeMark lastNodeCountTime;
+long lastNodeCount=0;
+int have_sent_ICS_logon = 0;
+int movesPerSession;
+long whiteTimeRemaining, blackTimeRemaining, timeControl, timeIncrement;
+long timeControl_2; /* [AS] Allow separate time controls */
+char *fullTimeControlString = NULL; /* [HGM] secondary TC: merge of MPS, TC and inc */
+long timeRemaining[2][MAX_MOVES];
+int matchGame = 0;
+TimeMark programStartTime;
+char ics_handle[MSG_SIZ];
+int have_set_title = 0;
+
+/* animateTraining preserves the state of appData.animate
+ * when Training mode is activated. This allows the
+ * response to be animated when appData.animate == TRUE and
+ * appData.animateDragging == TRUE.
+ */
+Boolean animateTraining;
+
+GameInfo gameInfo;
+
+AppData appData;
+
+Board boards[MAX_MOVES];
+/* [HGM] Following 7 needed for accurate legality tests: */
+char  epStatus[MAX_MOVES];
+char  castlingRights[MAX_MOVES][BOARD_SIZE]; // stores files for pieces with castling rights or -1
+char  castlingRank[BOARD_SIZE]; // and corresponding ranks
+char  initialRights[BOARD_SIZE], FENcastlingRights[BOARD_SIZE], fileRights[BOARD_SIZE];
+int   nrCastlingRights; // For TwoKings, or to implement castling-unknown status
+int   initialRulePlies, FENrulePlies;
+char  FENepStatus;
+FILE  *serverMoves = NULL; // next two for broadcasting (/serverMoves option)
+int loadFlag = 0; 
+int shuffleOpenings;
+
+ChessSquare  FIDEArray[2][BOARD_SIZE] = {
+    { WhiteRook, WhiteKnight, WhiteBishop, WhiteQueen,
+	WhiteKing, WhiteBishop, WhiteKnight, WhiteRook },
+    { BlackRook, BlackKnight, BlackBishop, BlackQueen,
+	BlackKing, BlackBishop, BlackKnight, BlackRook }
+};
+
+ChessSquare twoKingsArray[2][BOARD_SIZE] = {
+    { WhiteRook, WhiteKnight, WhiteBishop, WhiteQueen,
+	WhiteKing, WhiteKing, WhiteKnight, WhiteRook },
+    { BlackRook, BlackKnight, BlackBishop, BlackQueen,
+        BlackKing, BlackKing, BlackKnight, BlackRook }
+};
+
+ChessSquare  KnightmateArray[2][BOARD_SIZE] = {
+    { WhiteRook, WhiteMan, WhiteBishop, WhiteQueen,
+        WhiteUnicorn, WhiteBishop, WhiteMan, WhiteRook },
+    { BlackRook, BlackMan, BlackBishop, BlackQueen,
+        BlackUnicorn, BlackBishop, BlackMan, BlackRook }
+};
+
+ChessSquare fairyArray[2][BOARD_SIZE] = { /* [HGM] Queen side differs from King side */
+    { WhiteCannon, WhiteNightrider, WhiteAlfil, WhiteQueen,
+        WhiteKing, WhiteBishop, WhiteKnight, WhiteRook },
+    { BlackCannon, BlackNightrider, BlackAlfil, BlackQueen,
+	BlackKing, BlackBishop, BlackKnight, BlackRook }
+};
+
+ChessSquare ShatranjArray[2][BOARD_SIZE] = { /* [HGM] (movGen knows about Shatranj Q and P) */
+    { WhiteRook, WhiteKnight, WhiteAlfil, WhiteKing,
+        WhiteFerz, WhiteAlfil, WhiteKnight, WhiteRook },
+    { BlackRook, BlackKnight, BlackAlfil, BlackKing,
+        BlackFerz, BlackAlfil, BlackKnight, BlackRook }
+};
+
+
+#if (BOARD_SIZE>=10)
+ChessSquare ShogiArray[2][BOARD_SIZE] = {
+    { WhiteQueen, WhiteKnight, WhiteFerz, WhiteWazir,
+        WhiteKing, WhiteWazir, WhiteFerz, WhiteKnight, WhiteQueen },
+    { BlackQueen, BlackKnight, BlackFerz, BlackWazir,
+        BlackKing, BlackWazir, BlackFerz, BlackKnight, BlackQueen }
+};
+
+ChessSquare XiangqiArray[2][BOARD_SIZE] = {
+    { WhiteRook, WhiteKnight, WhiteAlfil, WhiteFerz,
+        WhiteWazir, WhiteFerz, WhiteAlfil, WhiteKnight, WhiteRook },
+    { BlackRook, BlackKnight, BlackAlfil, BlackFerz,
+        BlackWazir, BlackFerz, BlackAlfil, BlackKnight, BlackRook }
+};
+
+ChessSquare CapablancaArray[2][BOARD_SIZE] = {
+    { WhiteRook, WhiteKnight, WhiteAngel, WhiteBishop, WhiteQueen, 
+        WhiteKing, WhiteBishop, WhiteMarshall, WhiteKnight, WhiteRook },
+    { BlackRook, BlackKnight, BlackAngel, BlackBishop, BlackQueen, 
+        BlackKing, BlackBishop, BlackMarshall, BlackKnight, BlackRook }
+};
+
+ChessSquare GreatArray[2][BOARD_SIZE] = {
+    { WhiteDragon, WhiteKnight, WhiteAlfil, WhiteGrasshopper, WhiteKing, 
+        WhiteSilver, WhiteCardinal, WhiteAlfil, WhiteKnight, WhiteDragon },
+    { BlackDragon, BlackKnight, BlackAlfil, BlackGrasshopper, BlackKing, 
+        BlackSilver, BlackCardinal, BlackAlfil, BlackKnight, BlackDragon },
+};
+
+ChessSquare JanusArray[2][BOARD_SIZE] = {
+    { WhiteRook, WhiteAngel, WhiteKnight, WhiteBishop, WhiteKing, 
+        WhiteQueen, WhiteBishop, WhiteKnight, WhiteAngel, WhiteRook },
+    { BlackRook, BlackAngel, BlackKnight, BlackBishop, BlackKing, 
+        BlackQueen, BlackBishop, BlackKnight, BlackAngel, BlackRook }
+};
+
+#ifdef GOTHIC
+ChessSquare GothicArray[2][BOARD_SIZE] = {
+    { WhiteRook, WhiteKnight, WhiteBishop, WhiteQueen, WhiteMarshall, 
+        WhiteKing, WhiteAngel, WhiteBishop, WhiteKnight, WhiteRook },
+    { BlackRook, BlackKnight, BlackBishop, BlackQueen, BlackMarshall, 
+        BlackKing, BlackAngel, BlackBishop, BlackKnight, BlackRook }
+};
+#else // !GOTHIC
+#define GothicArray CapablancaArray
+#endif // !GOTHIC
+
+#ifdef FALCON
+ChessSquare FalconArray[2][BOARD_SIZE] = {
+    { WhiteRook, WhiteKnight, WhiteBishop, WhiteLance, WhiteQueen, 
+        WhiteKing, WhiteLance, WhiteBishop, WhiteKnight, WhiteRook },
+    { BlackRook, BlackKnight, BlackBishop, BlackLance, BlackQueen, 
+        BlackKing, BlackLance, BlackBishop, BlackKnight, BlackRook }
+};
+#else // !FALCON
+#define FalconArray CapablancaArray
+#endif // !FALCON
+
+#else // !(BOARD_SIZE>=10)
+#define XiangqiPosition FIDEArray
+#define CapablancaArray FIDEArray
+#define GothicArray FIDEArray
+#define GreatArray FIDEArray
+#endif // !(BOARD_SIZE>=10)
+
+#if (BOARD_SIZE>=12)
+ChessSquare CourierArray[2][BOARD_SIZE] = {
+    { WhiteRook, WhiteKnight, WhiteAlfil, WhiteBishop, WhiteMan, WhiteKing,
+        WhiteFerz, WhiteWazir, WhiteBishop, WhiteAlfil, WhiteKnight, WhiteRook },
+    { BlackRook, BlackKnight, BlackAlfil, BlackBishop, BlackMan, BlackKing,
+        BlackFerz, BlackWazir, BlackBishop, BlackAlfil, BlackKnight, BlackRook }
+};
+#else // !(BOARD_SIZE>=12)
+#define CourierArray CapablancaArray
+#endif // !(BOARD_SIZE>=12)
+
+
+Board initialPosition;
+
+
+/* Convert str to a rating. Checks for special cases of "----",
+
+   "++++", etc. Also strips ()'s */
+int
+string_to_rating(str)
+  char *str;
+{
+  while(*str && !isdigit(*str)) ++str;
+  if (!*str)
+    return 0;	/* One of the special "no rating" cases */
+  else
+    return atoi(str);
+}
+
+void
+ClearProgramStats()
+{
+    /* Init programStats */
+    programStats.movelist[0] = 0;
+    programStats.depth = 0;
+    programStats.nr_moves = 0;
+    programStats.moves_left = 0;
+    programStats.nodes = 0;
+    programStats.time = -1;        // [HGM] PGNtime: make invalid to recognize engine output
+    programStats.score = 0;
+    programStats.got_only_move = 0;
+    programStats.got_fail = 0;
+    programStats.line_is_book = 0;
+}
+
+void
+InitBackEnd1()
+{
+    int matched, min, sec;
+
+    ShowThinkingEvent(); // [HGM] thinking: make sure post/nopost state is set according to options
+
+    GetTimeMark(&programStartTime);
+    srand(programStartTime.ms); // [HGM] book: makes sure random is unpredictabe to msec level
+
+    ClearProgramStats();
+    programStats.ok_to_send = 1;
+    programStats.seen_stat = 0;
+
+    /*
+     * Initialize game list
+     */
+    ListNew(&gameList);
+
+
+    /*
+     * Internet chess server status
+     */
+    if (appData.icsActive) {
+	appData.matchMode = FALSE;
+	appData.matchGames = 0;
+#if ZIPPY	
+	appData.noChessProgram = !appData.zippyPlay;
+#else
+	appData.zippyPlay = FALSE;
+	appData.zippyTalk = FALSE;
+	appData.noChessProgram = TRUE;
+#endif
+	if (*appData.icsHelper != NULLCHAR) {
+	    appData.useTelnet = TRUE;
+	    appData.telnetProgram = appData.icsHelper;
+	}
+    } else {
+	appData.zippyTalk = appData.zippyPlay = FALSE;
+    }
+
+    /* [AS] Initialize pv info list [HGM] and game state */
+    {
+        int i, j;
+
+        for( i=0; i<MAX_MOVES; i++ ) {
+            pvInfoList[i].depth = -1;
+            epStatus[i]=EP_NONE;
+            for( j=0; j<BOARD_SIZE; j++ ) castlingRights[i][j] = -1;
+        }
+    }
+
+    /*
+     * Parse timeControl resource
+     */
+    if (!ParseTimeControl(appData.timeControl, appData.timeIncrement,
+			  appData.movesPerSession)) {
+	char buf[MSG_SIZ];
+	sprintf(buf, _("bad timeControl option %s"), appData.timeControl);
+	DisplayFatalError(buf, 0, 2);
+    }
+
+    /*
+     * Parse searchTime resource
+     */
+    if (*appData.searchTime != NULLCHAR) {
+	matched = sscanf(appData.searchTime, "%d:%d", &min, &sec);
+	if (matched == 1) {
+	    searchTime = min * 60;
+	} else if (matched == 2) {
+	    searchTime = min * 60 + sec;
+	} else {
+	    char buf[MSG_SIZ];
+	    sprintf(buf, _("bad searchTime option %s"), appData.searchTime);
+	    DisplayFatalError(buf, 0, 2);
+	}
+    }
+
+    /* [AS] Adjudication threshold */
+    adjudicateLossThreshold = appData.adjudicateLossThreshold;
+    
+    first.which = "first";
+    second.which = "second";
+    first.maybeThinking = second.maybeThinking = FALSE;
+    first.pr = second.pr = NoProc;
+    first.isr = second.isr = NULL;
+    first.sendTime = second.sendTime = 2;
+    first.sendDrawOffers = 1;
+    if (appData.firstPlaysBlack) {
+	first.twoMachinesColor = "black\n";
+	second.twoMachinesColor = "white\n";
+    } else {
+	first.twoMachinesColor = "white\n";
+	second.twoMachinesColor = "black\n";
+    }
+    first.program = appData.firstChessProgram;
+    second.program = appData.secondChessProgram;
+    first.host = appData.firstHost;
+    second.host = appData.secondHost;
+    first.dir = appData.firstDirectory;
+    second.dir = appData.secondDirectory;
+    first.other = &second;
+    second.other = &first;
+    first.initString = appData.initString;
+    second.initString = appData.secondInitString;
+    first.computerString = appData.firstComputerString;
+    second.computerString = appData.secondComputerString;
+    first.useSigint = second.useSigint = TRUE;
+    first.useSigterm = second.useSigterm = TRUE;
+    first.reuse = appData.reuseFirst;
+    second.reuse = appData.reuseSecond;
+    first.nps = appData.firstNPS;   // [HGM] nps: copy nodes per second
+    second.nps = appData.secondNPS;
+    first.useSetboard = second.useSetboard = FALSE;
+    first.useSAN = second.useSAN = FALSE;
+    first.usePing = second.usePing = FALSE;
+    first.lastPing = second.lastPing = 0;
+    first.lastPong = second.lastPong = 0;
+    first.usePlayother = second.usePlayother = FALSE;
+    first.useColors = second.useColors = TRUE;
+    first.useUsermove = second.useUsermove = FALSE;
+    first.sendICS = second.sendICS = FALSE;
+    first.sendName = second.sendName = appData.icsActive;
+    first.sdKludge = second.sdKludge = FALSE;
+    first.stKludge = second.stKludge = FALSE;
+    TidyProgramName(first.program, first.host, first.tidy);
+    TidyProgramName(second.program, second.host, second.tidy);
+    first.matchWins = second.matchWins = 0;
+    strcpy(first.variants, appData.variant);
+    strcpy(second.variants, appData.variant);
+    first.analysisSupport = second.analysisSupport = 2; /* detect */
+    first.analyzing = second.analyzing = FALSE;
+    first.initDone = second.initDone = FALSE;
+
+    /* New features added by Tord: */
+    first.useFEN960 = FALSE; second.useFEN960 = FALSE;
+    first.useOOCastle = TRUE; second.useOOCastle = TRUE;
+    /* End of new features added by Tord. */
+    first.fenOverride  = appData.fenOverride1;
+    second.fenOverride = appData.fenOverride2;
+
+    /* [HGM] time odds: set factor for each machine */
+    first.timeOdds  = appData.firstTimeOdds;
+    second.timeOdds = appData.secondTimeOdds;
+    { int norm = 1;
+        if(appData.timeOddsMode) {
+            norm = first.timeOdds;
+            if(norm > second.timeOdds) norm = second.timeOdds;
+        }
+        first.timeOdds /= norm;
+        second.timeOdds /= norm;
+    }
+
+    /* [HGM] secondary TC: how to handle sessions that do not fit in 'level'*/
+    first.accumulateTC = appData.firstAccumulateTC;
+    second.accumulateTC = appData.secondAccumulateTC;
+    first.maxNrOfSessions = second.maxNrOfSessions = 1;
+
+    /* [HGM] debug */
+    first.debug = second.debug = FALSE;
+    first.supportsNPS = second.supportsNPS = UNKNOWN;
+
+    /* [HGM] options */
+    first.optionSettings  = appData.firstOptions;
+    second.optionSettings = appData.secondOptions;
+
+    first.scoreIsAbsolute = appData.firstScoreIsAbsolute; /* [AS] */
+    second.scoreIsAbsolute = appData.secondScoreIsAbsolute; /* [AS] */
+    first.isUCI = appData.firstIsUCI; /* [AS] */
+    second.isUCI = appData.secondIsUCI; /* [AS] */
+    first.hasOwnBookUCI = appData.firstHasOwnBookUCI; /* [AS] */
+    second.hasOwnBookUCI = appData.secondHasOwnBookUCI; /* [AS] */
+
+    if (appData.firstProtocolVersion > PROTOVER ||
+	appData.firstProtocolVersion < 1) {
+      char buf[MSG_SIZ];
+      sprintf(buf, _("protocol version %d not supported"),
+	      appData.firstProtocolVersion);
+      DisplayFatalError(buf, 0, 2);
+    } else {
+      first.protocolVersion = appData.firstProtocolVersion;
+    }
+
+    if (appData.secondProtocolVersion > PROTOVER ||
+	appData.secondProtocolVersion < 1) {
+      char buf[MSG_SIZ];
+      sprintf(buf, _("protocol version %d not supported"),
+	      appData.secondProtocolVersion);
+      DisplayFatalError(buf, 0, 2);
+    } else {
+      second.protocolVersion = appData.secondProtocolVersion;
+    }
+
+    if (appData.icsActive) {
+        appData.clockMode = TRUE;  /* changes dynamically in ICS mode */
+    } else if (*appData.searchTime != NULLCHAR || appData.noChessProgram) {
+	appData.clockMode = FALSE;
+	first.sendTime = second.sendTime = 0;
+    }
+    
+#if ZIPPY
+    /* Override some settings from environment variables, for backward
+       compatibility.  Unfortunately it's not feasible to have the env
+       vars just set defaults, at least in xboard.  Ugh.
+    */
+    if (appData.icsActive && (appData.zippyPlay || appData.zippyTalk)) {
+      ZippyInit();
+    }
+#endif
+    
+    if (appData.noChessProgram) {
+	programVersion = (char*) malloc(5 + strlen(PRODUCT) + strlen(VERSION)
+					+ strlen(PATCHLEVEL));
+	sprintf(programVersion, "%s %s.%s", PRODUCT, VERSION, PATCHLEVEL);
+    } else {
+#if 0
+	char *p, *q;
+	q = first.program;
+	while (*q != ' ' && *q != NULLCHAR) q++;
+	p = q;
+	while (p > first.program && *(p-1) != '/' && *(p-1) != '\\') p--; /* [HGM] bckslash added */
+	programVersion = (char*) malloc(8 + strlen(PRODUCT) + strlen(VERSION)
+					+ strlen(PATCHLEVEL) + (q - p));
+	sprintf(programVersion, "%s %s.%s + ", PRODUCT, VERSION, PATCHLEVEL);
+	strncat(programVersion, p, q - p);
+#else
+	/* [HGM] tidy: use tidy name, in stead of full pathname (which was probably a bug due to / vs \ ) */
+	programVersion = (char*) malloc(8 + strlen(PRODUCT) + strlen(VERSION)
+					+ strlen(PATCHLEVEL) + strlen(first.tidy));
+	sprintf(programVersion, "%s %s.%s + %s", PRODUCT, VERSION, PATCHLEVEL, first.tidy);
+#endif
+    }
+
+    if (!appData.icsActive) {
+      char buf[MSG_SIZ];
+      /* Check for variants that are supported only in ICS mode,
+         or not at all.  Some that are accepted here nevertheless
+         have bugs; see comments below.
+      */
+      VariantClass variant = StringToVariant(appData.variant);
+      switch (variant) {
+      case VariantBughouse:     /* need four players and two boards */
+      case VariantKriegspiel:   /* need to hide pieces and move details */
+      /* case VariantFischeRandom: (Fabien: moved below) */
+	sprintf(buf, _("Variant %s supported only in ICS mode"), appData.variant);
+	DisplayFatalError(buf, 0, 2);
+	return;
+
+      case VariantUnknown:
+      case VariantLoadable:
+      case Variant29:
+      case Variant30:
+      case Variant31:
+      case Variant32:
+      case Variant33:
+      case Variant34:
+      case Variant35:
+      case Variant36:
+      default:
+	sprintf(buf, _("Unknown variant name %s"), appData.variant);
+	DisplayFatalError(buf, 0, 2);
+	return;
+
+      case VariantXiangqi:    /* [HGM] repetition rules not implemented */
+      case VariantFairy:      /* [HGM] TestLegality definitely off! */
+      case VariantGothic:     /* [HGM] should work */
+      case VariantCapablanca: /* [HGM] should work */
+      case VariantCourier:    /* [HGM] initial forced moves not implemented */
+      case VariantShogi:      /* [HGM] drops not tested for legality */
+      case VariantKnightmate: /* [HGM] should work */
+      case VariantCylinder:   /* [HGM] untested */
+      case VariantFalcon:     /* [HGM] untested */
+      case VariantCrazyhouse: /* holdings not shown, ([HGM] fixed that!)
+			         offboard interposition not understood */
+      case VariantNormal:     /* definitely works! */
+      case VariantWildCastle: /* pieces not automatically shuffled */
+      case VariantNoCastle:   /* pieces not automatically shuffled */
+      case VariantFischeRandom: /* [HGM] works and shuffles pieces */
+      case VariantLosers:     /* should work except for win condition,
+			         and doesn't know captures are mandatory */
+      case VariantSuicide:    /* should work except for win condition,
+			         and doesn't know captures are mandatory */
+      case VariantGiveaway:   /* should work except for win condition,
+			         and doesn't know captures are mandatory */
+      case VariantTwoKings:   /* should work */
+      case VariantAtomic:     /* should work except for win condition */
+      case Variant3Check:     /* should work except for win condition */
+      case VariantShatranj:   /* should work except for all win conditions */
+      case VariantBerolina:   /* might work if TestLegality is off */
+      case VariantCapaRandom: /* should work */
+      case VariantJanus:      /* should work */
+      case VariantSuper:      /* experimental */
+      case VariantGreat:      /* experimental, requires legality testing to be off */
+	break;
+      }
+    }
+
+    InitEngineUCI( installDir, &first );  // [HGM] moved here from winboard.c, to make available in xboard
+    InitEngineUCI( installDir, &second );
+}
+
+int NextIntegerFromString( char ** str, long * value )
+{
+    int result = -1;
+    char * s = *str;
+
+    while( *s == ' ' || *s == '\t' ) {
+        s++;
+    }
+
+    *value = 0;
+
+    if( *s >= '0' && *s <= '9' ) {
+        while( *s >= '0' && *s <= '9' ) {
+            *value = *value * 10 + (*s - '0');
+            s++;
+        }
+
+        result = 0;
+    }
+
+    *str = s;
+
+    return result;
+}
+
+int NextTimeControlFromString( char ** str, long * value )
+{
+    long temp;
+    int result = NextIntegerFromString( str, &temp );
+
+    if( result == 0 ) {
+        *value = temp * 60; /* Minutes */
+        if( **str == ':' ) {
+            (*str)++;
+            result = NextIntegerFromString( str, &temp );
+            *value += temp; /* Seconds */
+        }
+    }
+
+    return result;
+}
+
+int NextSessionFromString( char ** str, int *moves, long * tc, long *inc)
+{   /* [HGM] routine added to read '+moves/time' for secondary time control */
+    int result = -1; long temp, temp2;
+
+    if(**str != '+') return -1; // old params remain in force!
+    (*str)++;
+    if( NextTimeControlFromString( str, &temp ) ) return -1;
+
+    if(**str != '/') {
+        /* time only: incremental or sudden-death time control */
+        if(**str == '+') { /* increment follows; read it */
+            (*str)++;
+            if(result = NextIntegerFromString( str, &temp2)) return -1;
+            *inc = temp2 * 1000;
+        } else *inc = 0;
+        *moves = 0; *tc = temp * 1000; 
+        return 0;
+    } else if(temp % 60 != 0) return -1;     /* moves was given as min:sec */
+
+    (*str)++; /* classical time control */
+    result = NextTimeControlFromString( str, &temp2);
+    if(result == 0) {
+        *moves = temp/60;
+        *tc    = temp2 * 1000;
+        *inc   = 0;
+    }
+    return result;
+}
+
+int GetTimeQuota(int movenr)
+{   /* [HGM] get time to add from the multi-session time-control string */
+    int moves=1; /* kludge to force reading of first session */
+    long time, increment;
+    char *s = fullTimeControlString;
+
+    if(appData.debugMode) fprintf(debugFP, "TC string = '%s'\n", fullTimeControlString);
+    do {
+        if(moves) NextSessionFromString(&s, &moves, &time, &increment);
+        if(appData.debugMode) fprintf(debugFP, "mps=%d tc=%d inc=%d\n", moves, (int) time, (int) increment);
+        if(movenr == -1) return time;    /* last move before new session     */
+        if(!moves) return increment;     /* current session is incremental   */
+        if(movenr >= 0) movenr -= moves; /* we already finished this session */
+    } while(movenr >= -1);               /* try again for next session       */
+
+    return 0; // no new time quota on this move
+}
+
+int
+ParseTimeControl(tc, ti, mps)
+     char *tc;
+     int ti;
+     int mps;
+{
+#if 0
+    int matched, min, sec;
+
+    matched = sscanf(tc, "%d:%d", &min, &sec);
+    if (matched == 1) {
+	timeControl = min * 60 * 1000;
+    } else if (matched == 2) {
+	timeControl = (min * 60 + sec) * 1000;
+    } else {
+	return FALSE;
+    }
+#else
+    long tc1;
+    long tc2;
+    char buf[MSG_SIZ];
+
+    if(ti >= 0 && !strchr(tc, '+') && !strchr(tc, '/') ) mps = 0;
+    if(ti > 0) {
+        if(mps)
+             sprintf(buf, "+%d/%s+%d", mps, tc, ti);
+        else sprintf(buf, "+%s+%d", tc, ti);
+    } else {
+        if(mps)
+             sprintf(buf, "+%d/%s", mps, tc);
+        else sprintf(buf, "+%s", tc);
+    }
+    fullTimeControlString = StrSave(buf);
+
+    if( NextTimeControlFromString( &tc, &tc1 ) != 0 ) {
+        return FALSE;
+    }
+
+    if( *tc == '/' ) {
+        /* Parse second time control */
+        tc++;
+
+        if( NextTimeControlFromString( &tc, &tc2 ) != 0 ) {
+            return FALSE;
+        }
+
+        if( tc2 == 0 ) {
+            return FALSE;
+        }
+
+        timeControl_2 = tc2 * 1000;
+    }
+    else {
+        timeControl_2 = 0;
+    }
+
+    if( tc1 == 0 ) {
+        return FALSE;
+    }
+
+    timeControl = tc1 * 1000;
+#endif
+
+    if (ti >= 0) {
+	timeIncrement = ti * 1000;  /* convert to ms */
+	movesPerSession = 0;
+    } else {
+	timeIncrement = 0;
+	movesPerSession = mps;
+    }
+    return TRUE;
+}
+
+void
+InitBackEnd2()
+{
+    if (appData.debugMode) {
+	fprintf(debugFP, "%s\n", programVersion);
+    }
+
+    if (appData.matchGames > 0) {
+	appData.matchMode = TRUE;
+    } else if (appData.matchMode) {
+	appData.matchGames = 1;
+    }
+    if(appData.matchMode && appData.sameColorGames > 0) /* [HGM] alternate: overrule matchGames */
+	appData.matchGames = appData.sameColorGames;
+    if(appData.rewindIndex > 1) { /* [HGM] autoinc: rewind implies auto-increment and overrules given index */
+	if(appData.loadPositionIndex >= 0) appData.loadPositionIndex = -1;
+	if(appData.loadGameIndex >= 0) appData.loadGameIndex = -1;
+    }
+    Reset(TRUE, FALSE);
+    if (appData.noChessProgram || first.protocolVersion == 1) {
+      InitBackEnd3();
+    } else {
+      /* kludge: allow timeout for initial "feature" commands */
+      FreezeUI();
+      DisplayMessage("", _("Starting chess program"));
+      ScheduleDelayedEvent(InitBackEnd3, FEATURE_TIMEOUT);
+    }
+}
+
+void
+InitBackEnd3 P((void))
+{
+    GameMode initialMode;
+    char buf[MSG_SIZ];
+    int err;
+
+    InitChessProgram(&first, startedFromSetupPosition);
+
+
+    if (appData.icsActive) {
+#ifdef WIN32
+        /* [DM] Make a console window if needed [HGM] merged ifs */
+        ConsoleCreate(); 
+#endif
+	err = establish();
+	if (err != 0) {
+	    if (*appData.icsCommPort != NULLCHAR) {
+		sprintf(buf, _("Could not open comm port %s"),  
+			appData.icsCommPort);
+	    } else {
+		sprintf(buf, _("Could not connect to host %s, port %s"),  
+			appData.icsHost, appData.icsPort);
+	    }
+	    DisplayFatalError(buf, err, 1);
+	    return;
+	}
+	SetICSMode();
+	telnetISR =
+	  AddInputSource(icsPR, FALSE, read_from_ics, &telnetISR);
+	fromUserISR =
+	  AddInputSource(NoProc, FALSE, read_from_player, &fromUserISR);
+    } else if (appData.noChessProgram) {
+	SetNCPMode();
+    } else {
+	SetGNUMode();
+    }
+
+    if (*appData.cmailGameName != NULLCHAR) {
+	SetCmailMode();
+	OpenLoopback(&cmailPR);
+	cmailISR =
+	  AddInputSource(cmailPR, FALSE, CmailSigHandlerCallBack, &cmailISR);
+    }
+    
+    ThawUI();
+    DisplayMessage("", "");
+    if (StrCaseCmp(appData.initialMode, "") == 0) {
+      initialMode = BeginningOfGame;
+    } else if (StrCaseCmp(appData.initialMode, "TwoMachines") == 0) {
+      initialMode = TwoMachinesPlay;
+    } else if (StrCaseCmp(appData.initialMode, "AnalyzeFile") == 0) {
+      initialMode = AnalyzeFile; 
+    } else if (StrCaseCmp(appData.initialMode, "Analysis") == 0) {
+      initialMode = AnalyzeMode;
+    } else if (StrCaseCmp(appData.initialMode, "MachineWhite") == 0) {
+      initialMode = MachinePlaysWhite;
+    } else if (StrCaseCmp(appData.initialMode, "MachineBlack") == 0) {
+      initialMode = MachinePlaysBlack;
+    } else if (StrCaseCmp(appData.initialMode, "EditGame") == 0) {
+      initialMode = EditGame;
+    } else if (StrCaseCmp(appData.initialMode, "EditPosition") == 0) {
+      initialMode = EditPosition;
+    } else if (StrCaseCmp(appData.initialMode, "Training") == 0) {
+      initialMode = Training;
+    } else {
+      sprintf(buf, _("Unknown initialMode %s"), appData.initialMode);
+      DisplayFatalError(buf, 0, 2);
+      return;
+    }
+
+    if (appData.matchMode) {
+	/* Set up machine vs. machine match */
+	if (appData.noChessProgram) {
+	    DisplayFatalError(_("Can't have a match with no chess programs"),
+			      0, 2);
+	    return;
+	}
+	matchMode = TRUE;
+	matchGame = 1;
+	if (*appData.loadGameFile != NULLCHAR) {
+	    int index = appData.loadGameIndex; // [HGM] autoinc
+	    if(index<0) lastIndex = index = 1;
+	    if (!LoadGameFromFile(appData.loadGameFile,
+				  index,
+				  appData.loadGameFile, FALSE)) {
+		DisplayFatalError(_("Bad game file"), 0, 1);
+		return;
+	    }
+	} else if (*appData.loadPositionFile != NULLCHAR) {
+	    int index = appData.loadPositionIndex; // [HGM] autoinc
+	    if(index<0) lastIndex = index = 1;
+	    if (!LoadPositionFromFile(appData.loadPositionFile,
+				      index,
+				      appData.loadPositionFile)) {
+		DisplayFatalError(_("Bad position file"), 0, 1);
+		return;
+	    }
+	}
+	TwoMachinesEvent();
+    } else if (*appData.cmailGameName != NULLCHAR) {
+	/* Set up cmail mode */
+	ReloadCmailMsgEvent(TRUE);
+    } else {
+	/* Set up other modes */
+	if (initialMode == AnalyzeFile) {
+	  if (*appData.loadGameFile == NULLCHAR) {
+	    DisplayFatalError(_("AnalyzeFile mode requires a game file"), 0, 1);
+	    return;
+	  }
+	}
+	if (*appData.loadGameFile != NULLCHAR) {
+	    (void) LoadGameFromFile(appData.loadGameFile,
+				    appData.loadGameIndex,
+				    appData.loadGameFile, TRUE);
+	} else if (*appData.loadPositionFile != NULLCHAR) {
+	    (void) LoadPositionFromFile(appData.loadPositionFile,
+					appData.loadPositionIndex,
+					appData.loadPositionFile);
+            /* [HGM] try to make self-starting even after FEN load */
+            /* to allow automatic setup of fairy variants with wtm */
+            if(initialMode == BeginningOfGame && !blackPlaysFirst) {
+                gameMode = BeginningOfGame;
+                setboardSpoiledMachineBlack = 1;
+            }
+            /* [HGM] loadPos: make that every new game uses the setup */
+            /* from file as long as we do not switch variant          */
+            if(!blackPlaysFirst) { int i;
+                startedFromPositionFile = TRUE;
+                CopyBoard(filePosition, boards[0]);
+                for(i=0; i<BOARD_SIZE; i++) fileRights[i] = castlingRights[0][i];
+            }
+	}
+	if (initialMode == AnalyzeMode) {
+	  if (appData.noChessProgram) {
+	    DisplayFatalError(_("Analysis mode requires a chess engine"), 0, 2);
+	    return;
+	  }
+	  if (appData.icsActive) {
+	    DisplayFatalError(_("Analysis mode does not work with ICS mode"),0,2);
+	    return;
+	  }
+	  AnalyzeModeEvent();
+	} else if (initialMode == AnalyzeFile) {
+	  appData.showThinking = TRUE; // [HGM] thinking: moved out of ShowThinkingEvent
+	  ShowThinkingEvent();
+	  AnalyzeFileEvent();
+	  AnalysisPeriodicEvent(1);
+	} else if (initialMode == MachinePlaysWhite) {
+	  if (appData.noChessProgram) {
+	    DisplayFatalError(_("MachineWhite mode requires a chess engine"),
+			      0, 2);
+	    return;
+	  }
+	  if (appData.icsActive) {
+	    DisplayFatalError(_("MachineWhite mode does not work with ICS mode"),
+			      0, 2);
+	    return;
+	  }
+	  MachineWhiteEvent();
+	} else if (initialMode == MachinePlaysBlack) {
+	  if (appData.noChessProgram) {
+	    DisplayFatalError(_("MachineBlack mode requires a chess engine"),
+			      0, 2);
+	    return;
+	  }
+	  if (appData.icsActive) {
+	    DisplayFatalError(_("MachineBlack mode does not work with ICS mode"),
+			      0, 2);
+	    return;
+	  }
+	  MachineBlackEvent();
+	} else if (initialMode == TwoMachinesPlay) {
+	  if (appData.noChessProgram) {
+	    DisplayFatalError(_("TwoMachines mode requires a chess engine"),
+			      0, 2);
+	    return;
+	  }
+	  if (appData.icsActive) {
+	    DisplayFatalError(_("TwoMachines mode does not work with ICS mode"),
+			      0, 2);
+	    return;
+	  }
+	  TwoMachinesEvent();
+	} else if (initialMode == EditGame) {
+	  EditGameEvent();
+	} else if (initialMode == EditPosition) {
+	  EditPositionEvent();
+	} else if (initialMode == Training) {
+	  if (*appData.loadGameFile == NULLCHAR) {
+	    DisplayFatalError(_("Training mode requires a game file"), 0, 2);
+	    return;
+	  }
+	  TrainingEvent();
+	}
+    }
+}
+
+/*
+ * Establish will establish a contact to a remote host.port.
+ * Sets icsPR to a ProcRef for a process (or pseudo-process)
+ *  used to talk to the host.
+ * Returns 0 if okay, error code if not.
+ */
+int
+establish()
+{
+    char buf[MSG_SIZ];
+
+    if (*appData.icsCommPort != NULLCHAR) {
+	/* Talk to the host through a serial comm port */
+	return OpenCommPort(appData.icsCommPort, &icsPR);
+
+    } else if (*appData.gateway != NULLCHAR) {
+	if (*appData.remoteShell == NULLCHAR) {
+	    /* Use the rcmd protocol to run telnet program on a gateway host */
+	    sprintf(buf, "%s %s %s",
+		    appData.telnetProgram, appData.icsHost, appData.icsPort);
+	    return OpenRcmd(appData.gateway, appData.remoteUser, buf, &icsPR);
+
+	} else {
+	    /* Use the rsh program to run telnet program on a gateway host */
+	    if (*appData.remoteUser == NULLCHAR) {
+		sprintf(buf, "%s %s %s %s %s", appData.remoteShell,
+			appData.gateway, appData.telnetProgram,
+			appData.icsHost, appData.icsPort);
+	    } else {
+		sprintf(buf, "%s %s -l %s %s %s %s",
+			appData.remoteShell, appData.gateway, 
+			appData.remoteUser, appData.telnetProgram,
+			appData.icsHost, appData.icsPort);
+	    }
+	    return StartChildProcess(buf, "", &icsPR);
+
+	}
+    } else if (appData.useTelnet) {
+	return OpenTelnet(appData.icsHost, appData.icsPort, &icsPR);
+
+    } else {
+	/* TCP socket interface differs somewhat between
+	   Unix and NT; handle details in the front end.
+	   */
+	return OpenTCP(appData.icsHost, appData.icsPort, &icsPR);
+    }
+}
+
+void
+show_bytes(fp, buf, count)
+     FILE *fp;
+     char *buf;
+     int count;
+{
+    while (count--) {
+	if (*buf < 040 || *(unsigned char *) buf > 0177) {
+	    fprintf(fp, "\\%03o", *buf & 0xff);
+	} else {
+	    putc(*buf, fp);
+	}
+	buf++;
+    }
+    fflush(fp);
+}
+
+/* Returns an errno value */
+int
+OutputMaybeTelnet(pr, message, count, outError)
+     ProcRef pr;
+     char *message;
+     int count;
+     int *outError;
+{
+    char buf[8192], *p, *q, *buflim;
+    int left, newcount, outcount;
+
+    if (*appData.icsCommPort != NULLCHAR || appData.useTelnet ||
+	*appData.gateway != NULLCHAR) {
+	if (appData.debugMode) {
+	    fprintf(debugFP, ">ICS: ");
+	    show_bytes(debugFP, message, count);
+	    fprintf(debugFP, "\n");
+	}
+	return OutputToProcess(pr, message, count, outError);
+    }
+
+    buflim = &buf[sizeof(buf)-1]; /* allow 1 byte for expanding last char */
+    p = message;
+    q = buf;
+    left = count;
+    newcount = 0;
+    while (left) {
+	if (q >= buflim) {
+	    if (appData.debugMode) {
+		fprintf(debugFP, ">ICS: ");
+		show_bytes(debugFP, buf, newcount);
+		fprintf(debugFP, "\n");
+	    }
+	    outcount = OutputToProcess(pr, buf, newcount, outError);
+	    if (outcount < newcount) return -1; /* to be sure */
+	    q = buf;
+	    newcount = 0;
+	}
+	if (*p == '\n') {
+	    *q++ = '\r';
+	    newcount++;
+	} else if (((unsigned char) *p) == TN_IAC) {
+	    *q++ = (char) TN_IAC;
+	    newcount ++;
+	}
+	*q++ = *p++;
+	newcount++;
+	left--;
+    }
+    if (appData.debugMode) {
+	fprintf(debugFP, ">ICS: ");
+	show_bytes(debugFP, buf, newcount);
+	fprintf(debugFP, "\n");
+    }
+    outcount = OutputToProcess(pr, buf, newcount, outError);
+    if (outcount < newcount) return -1; /* to be sure */
+    return count;
+}
+
+void
+read_from_player(isr, closure, message, count, error)
+     InputSourceRef isr;
+     VOIDSTAR closure;
+     char *message;
+     int count;
+     int error;
+{
+    int outError, outCount;
+    static int gotEof = 0;
+
+    /* Pass data read from player on to ICS */
+    if (count > 0) {
+	gotEof = 0;
+	outCount = OutputMaybeTelnet(icsPR, message, count, &outError);
+	if (outCount < count) {
+            DisplayFatalError(_("Error writing to ICS"), outError, 1);
+	}
+    } else if (count < 0) {
+	RemoveInputSource(isr);
+	DisplayFatalError(_("Error reading from keyboard"), error, 1);
+    } else if (gotEof++ > 0) {
+	RemoveInputSource(isr);
+	DisplayFatalError(_("Got end of file from keyboard"), 0, 0);
+    }
+}
+
+void
+SendToICS(s)
+     char *s;
+{
+    int count, outCount, outError;
+
+    if (icsPR == NULL) return;
+
+    count = strlen(s);
+    outCount = OutputMaybeTelnet(icsPR, s, count, &outError);
+    if (outCount < count) {
+	DisplayFatalError(_("Error writing to ICS"), outError, 1);
+    }
+}
+
+/* This is used for sending logon scripts to the ICS. Sending
+   without a delay causes problems when using timestamp on ICC
+   (at least on my machine). */
+void
+SendToICSDelayed(s,msdelay)
+     char *s;
+     long msdelay;
+{
+    int count, outCount, outError;
+
+    if (icsPR == NULL) return;
+
+    count = strlen(s);
+    if (appData.debugMode) {
+	fprintf(debugFP, ">ICS: ");
+	show_bytes(debugFP, s, count);
+	fprintf(debugFP, "\n");
+    }
+    outCount = OutputToProcessDelayed(icsPR, s, count, &outError,
+				      msdelay);
+    if (outCount < count) {
+	DisplayFatalError(_("Error writing to ICS"), outError, 1);
+    }
+}
+
+
+/* Remove all highlighting escape sequences in s
+   Also deletes any suffix starting with '(' 
+   */
+char *
+StripHighlightAndTitle(s)
+     char *s;
+{
+    static char retbuf[MSG_SIZ];
+    char *p = retbuf;
+
+    while (*s != NULLCHAR) {
+	while (*s == '\033') {
+	    while (*s != NULLCHAR && !isalpha(*s)) s++;
+	    if (*s != NULLCHAR) s++;
+	}
+	while (*s != NULLCHAR && *s != '\033') {
+	    if (*s == '(' || *s == '[') {
+		*p = NULLCHAR;
+		return retbuf;
+	    }
+	    *p++ = *s++;
+	}
+    }
+    *p = NULLCHAR;
+    return retbuf;
+}
+
+/* Remove all highlighting escape sequences in s */
+char *
+StripHighlight(s)
+     char *s;
+{
+    static char retbuf[MSG_SIZ];
+    char *p = retbuf;
+
+    while (*s != NULLCHAR) {
+	while (*s == '\033') {
+	    while (*s != NULLCHAR && !isalpha(*s)) s++;
+	    if (*s != NULLCHAR) s++;
+	}
+	while (*s != NULLCHAR && *s != '\033') {
+	    *p++ = *s++;
+	}
+    }
+    *p = NULLCHAR;
+    return retbuf;
+}
+
+char *variantNames[] = VARIANT_NAMES;
+char *
+VariantName(v)
+     VariantClass v;
+{
+    return variantNames[v];
+}
+
+
+/* Identify a variant from the strings the chess servers use or the
+   PGN Variant tag names we use. */
+VariantClass
+StringToVariant(e)
+     char *e;
+{
+    char *p;
+    int wnum = -1;
+    VariantClass v = VariantNormal;
+    int i, found = FALSE;
+    char buf[MSG_SIZ];
+
+    if (!e) return v;
+
+    /* [HGM] skip over optional board-size prefixes */
+    if( sscanf(e, "%dx%d_", &i, &i) == 2 ||
+        sscanf(e, "%dx%d+%d_", &i, &i, &i) == 3 ) {
+        while( *e++ != '_');
+    }
+
+    for (i=0; i<sizeof(variantNames)/sizeof(char*); i++) {
+      if (StrCaseStr(e, variantNames[i])) {
+	v = (VariantClass) i;
+	found = TRUE;
+	break;
+      }
+    }
+
+    if (!found) {
+      if ((StrCaseStr(e, "fischer") && StrCaseStr(e, "random"))
+	  || StrCaseStr(e, "wild/fr") 
+	  || StrCaseStr(e, "frc") || StrCaseStr(e, "960")) {
+        v = VariantFischeRandom;
+      } else if ((i = 4, p = StrCaseStr(e, "wild")) ||
+		 (i = 1, p = StrCaseStr(e, "w"))) {
+	p += i;
+	while (*p && (isspace(*p) || *p == '(' || *p == '/')) p++;
+	if (isdigit(*p)) {
+	  wnum = atoi(p);
+	} else {
+	  wnum = -1;
+	}
+	switch (wnum) {
+	case 0: /* FICS only, actually */
+	case 1:
+	  /* Castling legal even if K starts on d-file */
+	  v = VariantWildCastle;
+	  break;
+	case 2:
+	case 3:
+	case 4:
+	  /* Castling illegal even if K & R happen to start in
+	     normal positions. */
+	  v = VariantNoCastle;
+	  break;
+	case 5:
+	case 7:
+	case 8:
+	case 10:
+	case 11:
+	case 12:
+	case 13:
+	case 14:
+	case 15:
+	case 18:
+	case 19:
+	  /* Castling legal iff K & R start in normal positions */
+	  v = VariantNormal;
+	  break;
+	case 6:
+	case 20:
+	case 21:
+	  /* Special wilds for position setup; unclear what to do here */
+	  v = VariantLoadable;
+	  break;
+	case 9:
+	  /* Bizarre ICC game */
+	  v = VariantTwoKings;
+	  break;
+	case 16:
+	  v = VariantKriegspiel;
+	  break;
+	case 17:
+	  v = VariantLosers;
+	  break;
+	case 22:
+	  v = VariantFischeRandom;
+	  break;
+	case 23:
+	  v = VariantCrazyhouse;
+	  break;
+	case 24:
+	  v = VariantBughouse;
+	  break;
+	case 25:
+	  v = Variant3Check;
+	  break;
+	case 26:
+	  /* Not quite the same as FICS suicide! */
+	  v = VariantGiveaway;
+	  break;
+	case 27:
+	  v = VariantAtomic;
+	  break;
+	case 28:
+	  v = VariantShatranj;
+	  break;
+
+	/* Temporary names for future ICC types.  The name *will* change in 
+	   the next xboard/WinBoard release after ICC defines it. */
+	case 29:
+	  v = Variant29;
+	  break;
+	case 30:
+	  v = Variant30;
+	  break;
+	case 31:
+	  v = Variant31;
+	  break;
+	case 32:
+	  v = Variant32;
+	  break;
+	case 33:
+	  v = Variant33;
+	  break;
+	case 34:
+	  v = Variant34;
+	  break;
+	case 35:
+	  v = Variant35;
+	  break;
+	case 36:
+	  v = Variant36;
+	  break;
+        case 37:
+          v = VariantShogi;
+	  break;
+        case 38:
+          v = VariantXiangqi;
+	  break;
+        case 39:
+          v = VariantCourier;
+	  break;
+        case 40:
+          v = VariantGothic;
+	  break;
+        case 41:
+          v = VariantCapablanca;
+	  break;
+        case 42:
+          v = VariantKnightmate;
+	  break;
+        case 43:
+          v = VariantFairy;
+          break;
+        case 44:
+          v = VariantCylinder;
+	  break;
+        case 45:
+          v = VariantFalcon;
+	  break;
+        case 46:
+          v = VariantCapaRandom;
+	  break;
+        case 47:
+          v = VariantBerolina;
+	  break;
+        case 48:
+          v = VariantJanus;
+	  break;
+        case 49:
+          v = VariantSuper;
+	  break;
+        case 50:
+          v = VariantGreat;
+	  break;
+	case -1:
+	  /* Found "wild" or "w" in the string but no number;
+	     must assume it's normal chess. */
+	  v = VariantNormal;
+	  break;
+	default:
+	  sprintf(buf, _("Unknown wild type %d"), wnum);
+	  DisplayError(buf, 0);
+	  v = VariantUnknown;
+	  break;
+	}
+      }
+    }
+    if (appData.debugMode) {
+      fprintf(debugFP, _("recognized '%s' (%d) as variant %s\n"),
+	      e, wnum, VariantName(v));
+    }
+    return v;
+}
+
+static int leftover_start = 0, leftover_len = 0;
+char star_match[STAR_MATCH_N][MSG_SIZ];
+
+/* Test whether pattern is present at &buf[*index]; if so, return TRUE,
+   advance *index beyond it, and set leftover_start to the new value of
+   *index; else return FALSE.  If pattern contains the character '*', it
+   matches any sequence of characters not containing '\r', '\n', or the
+   character following the '*' (if any), and the matched sequence(s) are
+   copied into star_match.
+   */
+int
+looking_at(buf, index, pattern)
+     char *buf;
+     int *index;
+     char *pattern;
+{
+    char *bufp = &buf[*index], *patternp = pattern;
+    int star_count = 0;
+    char *matchp = star_match[0];
+    
+    for (;;) {
+	if (*patternp == NULLCHAR) {
+	    *index = leftover_start = bufp - buf;
+	    *matchp = NULLCHAR;
+	    return TRUE;
+	}
+	if (*bufp == NULLCHAR) return FALSE;
+	if (*patternp == '*') {
+	    if (*bufp == *(patternp + 1)) {
+		*matchp = NULLCHAR;
+		matchp = star_match[++star_count];
+		patternp += 2;
+		bufp++;
+		continue;
+	    } else if (*bufp == '\n' || *bufp == '\r') {
+		patternp++;
+		if (*patternp == NULLCHAR)
+		  continue;
+		else
+		  return FALSE;
+	    } else {
+		*matchp++ = *bufp++;
+		continue;
+	    }
+	}
+	if (*patternp != *bufp) return FALSE;
+	patternp++;
+	bufp++;
+    }
+}
+
+void
+SendToPlayer(data, length)
+     char *data;
+     int length;
+{
+    int error, outCount;
+    outCount = OutputToProcess(NoProc, data, length, &error);
+    if (outCount < length) {
+	DisplayFatalError(_("Error writing to display"), error, 1);
+    }
+}
+
+void
+PackHolding(packed, holding)
+     char packed[];
+     char *holding;
+{
+    char *p = holding;
+    char *q = packed;
+    int runlength = 0;
+    int curr = 9999;
+    do {
+	if (*p == curr) {
+	    runlength++;
+	} else {
+	    switch (runlength) {
+	      case 0:
+		break;
+	      case 1:
+		*q++ = curr;
+		break;
+	      case 2:
+		*q++ = curr;
+		*q++ = curr;
+		break;
+	      default:
+		sprintf(q, "%d", runlength);
+		while (*q) q++;
+		*q++ = curr;
+		break;
+	    }
+	    runlength = 1;
+	    curr = *p;
+	}
+    } while (*p++);
+    *q = NULLCHAR;
+}
+
+/* Telnet protocol requests from the front end */
+void
+TelnetRequest(ddww, option)
+     unsigned char ddww, option;
+{
+    unsigned char msg[3];
+    int outCount, outError;
+
+    if (*appData.icsCommPort != NULLCHAR || appData.useTelnet) return;
+
+    if (appData.debugMode) {
+	char buf1[8], buf2[8], *ddwwStr, *optionStr;
+	switch (ddww) {
+	  case TN_DO:
+	    ddwwStr = "DO";
+	    break;
+	  case TN_DONT:
+	    ddwwStr = "DONT";
+	    break;
+	  case TN_WILL:
+	    ddwwStr = "WILL";
+	    break;
+	  case TN_WONT:
+	    ddwwStr = "WONT";
+	    break;
+	  default:
+	    ddwwStr = buf1;
+	    sprintf(buf1, "%d", ddww);
+	    break;
+	}
+	switch (option) {
+	  case TN_ECHO:
+	    optionStr = "ECHO";
+	    break;
+	  default:
+	    optionStr = buf2;
+	    sprintf(buf2, "%d", option);
+	    break;
+	}
+	fprintf(debugFP, ">%s %s ", ddwwStr, optionStr);
+    }
+    msg[0] = TN_IAC;
+    msg[1] = ddww;
+    msg[2] = option;
+    outCount = OutputToProcess(icsPR, (char *)msg, 3, &outError);
+    if (outCount < 3) {
+	DisplayFatalError(_("Error writing to ICS"), outError, 1);
+    }
+}
+
+void
+DoEcho()
+{
+    if (!appData.icsActive) return;
+    TelnetRequest(TN_DO, TN_ECHO);
+}
+
+void
+DontEcho()
+{
+    if (!appData.icsActive) return;
+    TelnetRequest(TN_DONT, TN_ECHO);
+}
+
+void
+CopyHoldings(Board board, char *holdings, ChessSquare lowestPiece)
+{
+    /* put the holdings sent to us by the server on the board holdings area */
+    int i, j, holdingsColumn, holdingsStartRow, direction, countsColumn;
+    char p;
+    ChessSquare piece;
+
+    if(gameInfo.holdingsWidth < 2)  return;
+
+    if( (int)lowestPiece >= BlackPawn ) {
+        holdingsColumn = 0;
+        countsColumn = 1;
+        holdingsStartRow = BOARD_HEIGHT-1;
+        direction = -1;
+    } else {
+        holdingsColumn = BOARD_WIDTH-1;
+        countsColumn = BOARD_WIDTH-2;
+        holdingsStartRow = 0;
+        direction = 1;
+    }
+
+    for(i=0; i<BOARD_HEIGHT; i++) { /* clear holdings */
+        board[i][holdingsColumn] = EmptySquare;
+        board[i][countsColumn]   = (ChessSquare) 0;
+    }
+    while( (p=*holdings++) != NULLCHAR ) {
+        piece = CharToPiece( ToUpper(p) );
+        if(piece == EmptySquare) continue;
+        /*j = (int) piece - (int) WhitePawn;*/
+        j = PieceToNumber(piece);
+        if(j >= gameInfo.holdingsSize) continue; /* ignore pieces that do not fit */
+        if(j < 0) continue;               /* should not happen */
+        piece = (ChessSquare) ( (int)piece + (int)lowestPiece );
+        board[holdingsStartRow+j*direction][holdingsColumn] = piece;
+        board[holdingsStartRow+j*direction][countsColumn]++;
+    }
+
+}
+
+
+void
+VariantSwitch(Board board, VariantClass newVariant)
+{
+   int newHoldingsWidth, newWidth = 8, newHeight = 8, i, j;
+   int oldCurrentMove = currentMove, oldForwardMostMove = forwardMostMove, oldBackwardMostMove = backwardMostMove;
+//   Board tempBoard; int saveCastling[BOARD_SIZE], saveEP;
+
+   startedFromPositionFile = FALSE;
+   if(gameInfo.variant == newVariant) return;
+
+   /* [HGM] This routine is called each time an assignment is made to
+    * gameInfo.variant during a game, to make sure the board sizes
+    * are set to match the new variant. If that means adding or deleting
+    * holdings, we shift the playing board accordingly
+    * This kludge is needed because in ICS observe mode, we get boards
+    * of an ongoing game without knowing the variant, and learn about the
+    * latter only later. This can be because of the move list we requested,
+    * in which case the game history is refilled from the beginning anyway,
+    * but also when receiving holdings of a crazyhouse game. In the latter
+    * case we want to add those holdings to the already received position.
+    */
+
+
+  if (appData.debugMode) {
+    fprintf(debugFP, "Switch board from %s to %s\n",
+               VariantName(gameInfo.variant), VariantName(newVariant));
+    setbuf(debugFP, NULL);
+  }
+    shuffleOpenings = 0;       /* [HGM] shuffle */
+    gameInfo.holdingsSize = 5; /* [HGM] prepare holdings */
+    switch(newVariant) {
+            case VariantShogi:
+              newWidth = 9;  newHeight = 9;
+              gameInfo.holdingsSize = 7;
+            case VariantBughouse:
+            case VariantCrazyhouse:
+              newHoldingsWidth = 2; break;
+            default:
+              newHoldingsWidth = gameInfo.holdingsSize = 0;
+    }
+
+    if(newWidth  != gameInfo.boardWidth  ||
+       newHeight != gameInfo.boardHeight ||
+       newHoldingsWidth != gameInfo.holdingsWidth ) {
+
+        /* shift position to new playing area, if needed */
+        if(newHoldingsWidth > gameInfo.holdingsWidth) {
+           for(i=0; i<BOARD_HEIGHT; i++) 
+               for(j=BOARD_RGHT-1; j>=BOARD_LEFT; j--)
+                   board[i][j+newHoldingsWidth-gameInfo.holdingsWidth] =
+                                                     board[i][j];
+           for(i=0; i<newHeight; i++) {
+               board[i][0] = board[i][newWidth+2*newHoldingsWidth-1] = EmptySquare;
+               board[i][1] = board[i][newWidth+2*newHoldingsWidth-2] = (ChessSquare) 0;
+           }
+        } else if(newHoldingsWidth < gameInfo.holdingsWidth) {
+           for(i=0; i<BOARD_HEIGHT; i++)
+               for(j=BOARD_LEFT; j<BOARD_RGHT; j++)
+                   board[i][j+newHoldingsWidth-gameInfo.holdingsWidth] =
+                                                 board[i][j];
+        }
+
+        gameInfo.boardWidth  = newWidth;
+        gameInfo.boardHeight = newHeight;
+        gameInfo.holdingsWidth = newHoldingsWidth;
+        gameInfo.variant = newVariant;
+        InitDrawingSizes(-2, 0);
+
+        /* [HGM] The following should definitely be solved in a better way */
+#if 0
+        CopyBoard(board, tempBoard); /* save position in case it is board[0] */
+        for(i=0; i<BOARD_SIZE; i++) saveCastling[i] = castlingRights[0][i];
+        saveEP = epStatus[0];
+#endif
+        InitPosition(FALSE);          /* this sets up board[0], but also other stuff        */
+#if 0
+        epStatus[0] = saveEP;
+        for(i=0; i<BOARD_SIZE; i++) castlingRights[0][i] = saveCastling[i];
+        CopyBoard(tempBoard, board); /* restore position received from ICS   */
+#endif
+    } else { gameInfo.variant = newVariant; InitPosition(FALSE); }
+
+    forwardMostMove = oldForwardMostMove;
+    backwardMostMove = oldBackwardMostMove;
+    currentMove = oldCurrentMove; /* InitPos reset these, but we need still to redraw the position */
+}
+
+static int loggedOn = FALSE;
+
+/*-- Game start info cache: --*/
+int gs_gamenum;
+char gs_kind[MSG_SIZ];
+static char player1Name[128] = "";
+static char player2Name[128] = "";
+static int player1Rating = -1;
+static int player2Rating = -1;
+/*----------------------------*/
+
+ColorClass curColor = ColorNormal;
+int suppressKibitz = 0;
+
+void
+read_from_ics(isr, closure, data, count, error)
+     InputSourceRef isr;
+     VOIDSTAR closure;
+     char *data;
+     int count;
+     int error;
+{
+#define BUF_SIZE 8192
+#define STARTED_NONE 0
+#define STARTED_MOVES 1
+#define STARTED_BOARD 2
+#define STARTED_OBSERVE 3
+#define STARTED_HOLDINGS 4
+#define STARTED_CHATTER 5
+#define STARTED_COMMENT 6
+#define STARTED_MOVES_NOHIDE 7
+    
+    static int started = STARTED_NONE;
+    static char parse[20000];
+    static int parse_pos = 0;
+    static char buf[BUF_SIZE + 1];
+    static int firstTime = TRUE, intfSet = FALSE;
+    static ColorClass prevColor = ColorNormal;
+    static int savingComment = FALSE;
+    char str[500];
+    int i, oldi;
+    int buf_len;
+    int next_out;
+    int tkind;
+    int backup;    /* [DM] For zippy color lines */
+    char *p;
+
+    if (appData.debugMode) {
+      if (!error) {
+	fprintf(debugFP, "<ICS: ");
+	show_bytes(debugFP, data, count);
+	fprintf(debugFP, "\n");
+      }
+    }
+
+    if (appData.debugMode) { int f = forwardMostMove;
+        fprintf(debugFP, "ics input %d, castling = %d %d %d %d %d %d\n", f,
+                castlingRights[f][0],castlingRights[f][1],castlingRights[f][2],castlingRights[f][3],castlingRights[f][4],castlingRights[f][5]);
+    }
+    if (count > 0) {
+	/* If last read ended with a partial line that we couldn't parse,
+	   prepend it to the new read and try again. */
+	if (leftover_len > 0) {
+	    for (i=0; i<leftover_len; i++)
+	      buf[i] = buf[leftover_start + i];
+	}
+
+	/* Copy in new characters, removing nulls and \r's */
+	buf_len = leftover_len;
+	for (i = 0; i < count; i++) {
+	    if (data[i] != NULLCHAR && data[i] != '\r')
+	      buf[buf_len++] = data[i];
+	    if(buf_len >= 5 && buf[buf_len-5]=='\n' && buf[buf_len-4]=='\\' && 
+                               buf[buf_len-3]==' '  && buf[buf_len-2]==' '  && buf[buf_len-1]==' ') 
+		buf_len -= 5; // [HGM] ICS: join continuation line of Lasker 2.2.3 server with previous
+	}
+
+	buf[buf_len] = NULLCHAR;
+	next_out = leftover_len;
+	leftover_start = 0;
+	
+	i = 0;
+	while (i < buf_len) {
+	    /* Deal with part of the TELNET option negotiation
+	       protocol.  We refuse to do anything beyond the
+	       defaults, except that we allow the WILL ECHO option,
+	       which ICS uses to turn off password echoing when we are
+	       directly connected to it.  We reject this option
+	       if localLineEditing mode is on (always on in xboard)
+               and we are talking to port 23, which might be a real
+	       telnet server that will try to keep WILL ECHO on permanently.
+             */
+	    if (buf_len - i >= 3 && (unsigned char) buf[i] == TN_IAC) {
+		static int remoteEchoOption = FALSE; /* telnet ECHO option */
+		unsigned char option;
+		oldi = i;
+		switch ((unsigned char) buf[++i]) {
+		  case TN_WILL:
+		    if (appData.debugMode)
+		      fprintf(debugFP, "\n<WILL ");
+		    switch (option = (unsigned char) buf[++i]) {
+		      case TN_ECHO:
+			if (appData.debugMode)
+			  fprintf(debugFP, "ECHO ");
+			/* Reply only if this is a change, according
+			   to the protocol rules. */
+			if (remoteEchoOption) break;
+			if (appData.localLineEditing &&
+			    atoi(appData.icsPort) == TN_PORT) {
+			    TelnetRequest(TN_DONT, TN_ECHO);
+			} else {
+			    EchoOff();
+			    TelnetRequest(TN_DO, TN_ECHO);
+			    remoteEchoOption = TRUE;
+			}
+			break;
+		      default:
+			if (appData.debugMode)
+			  fprintf(debugFP, "%d ", option);
+			/* Whatever this is, we don't want it. */
+			TelnetRequest(TN_DONT, option);
+			break;
+		    }
+		    break;
+		  case TN_WONT:
+		    if (appData.debugMode)
+		      fprintf(debugFP, "\n<WONT ");
+		    switch (option = (unsigned char) buf[++i]) {
+		      case TN_ECHO:
+			if (appData.debugMode)
+			  fprintf(debugFP, "ECHO ");
+			/* Reply only if this is a change, according
+			   to the protocol rules. */
+			if (!remoteEchoOption) break;
+			EchoOn();
+			TelnetRequest(TN_DONT, TN_ECHO);
+			remoteEchoOption = FALSE;
+			break;
+		      default:
+			if (appData.debugMode)
+			  fprintf(debugFP, "%d ", (unsigned char) option);
+			/* Whatever this is, it must already be turned
+			   off, because we never agree to turn on
+			   anything non-default, so according to the
+			   protocol rules, we don't reply. */
+			break;
+		    }
+		    break;
+		  case TN_DO:
+		    if (appData.debugMode)
+		      fprintf(debugFP, "\n<DO ");
+		    switch (option = (unsigned char) buf[++i]) {
+		      default:
+			/* Whatever this is, we refuse to do it. */
+			if (appData.debugMode)
+			  fprintf(debugFP, "%d ", option);
+			TelnetRequest(TN_WONT, option);
+			break;
+		    }
+		    break;
+		  case TN_DONT:
+		    if (appData.debugMode)
+		      fprintf(debugFP, "\n<DONT ");
+		    switch (option = (unsigned char) buf[++i]) {
+		      default:
+			if (appData.debugMode)
+			  fprintf(debugFP, "%d ", option);
+			/* Whatever this is, we are already not doing
+			   it, because we never agree to do anything
+			   non-default, so according to the protocol
+			   rules, we don't reply. */
+			break;
+		    }
+		    break;
+		  case TN_IAC:
+		    if (appData.debugMode)
+		      fprintf(debugFP, "\n<IAC ");
+		    /* Doubled IAC; pass it through */
+		    i--;
+		    break;
+		  default:
+		    if (appData.debugMode)
+		      fprintf(debugFP, "\n<%d ", (unsigned char) buf[i]);
+		    /* Drop all other telnet commands on the floor */
+		    break;
+		}
+		if (oldi > next_out)
+		  SendToPlayer(&buf[next_out], oldi - next_out);
+		if (++i > next_out)
+		  next_out = i;
+		continue;
+	    }
+		
+	    /* OK, this at least will *usually* work */
+	    if (!loggedOn && looking_at(buf, &i, "ics%")) {
+		loggedOn = TRUE;
+	    }
+	    
+	    if (loggedOn && !intfSet) {
+		if (ics_type == ICS_ICC) {
+		  sprintf(str,
+			  "/set-quietly interface %s\n/set-quietly style 12\n",
+			  programVersion);
+
+		} else if (ics_type == ICS_CHESSNET) {
+		  sprintf(str, "/style 12\n");
+		} else {
+		  strcpy(str, "alias $ @\n$set interface ");
+		  strcat(str, programVersion);
+		  strcat(str, "\n$iset startpos 1\n$iset ms 1\n");
+#ifdef WIN32
+		  strcat(str, "$iset nohighlight 1\n");
+#endif
+		  strcat(str, "$iset lock 1\n$style 12\n");
+		}
+		SendToICS(str);
+		intfSet = TRUE;
+	    }
+
+	    if (started == STARTED_COMMENT) {
+		/* Accumulate characters in comment */
+		parse[parse_pos++] = buf[i];
+		if (buf[i] == '\n') {
+		    parse[parse_pos] = NULLCHAR;
+		    if(!suppressKibitz) // [HGM] kibitz
+			AppendComment(forwardMostMove, StripHighlight(parse));
+		    else { // [HGM kibitz: divert memorized engine kibitz to engine-output window
+			int nrDigit = 0, nrAlph = 0, i;
+			if(parse_pos > MSG_SIZ - 30) // defuse unreasonably long input
+			{ parse_pos = MSG_SIZ-30; parse[parse_pos - 1] = '\n'; }
+			parse[parse_pos] = NULLCHAR;
+			// try to be smart: if it does not look like search info, it should go to
+			// ICS interaction window after all, not to engine-output window.
+			for(i=0; i<parse_pos; i++) { // count letters and digits
+			    nrDigit += (parse[i] >= '0' && parse[i] <= '9');
+			    nrAlph  += (parse[i] >= 'a' && parse[i] <= 'z');
+			    nrAlph  += (parse[i] >= 'A' && parse[i] <= 'Z');
+			}
+			if(nrAlph < 9*nrDigit) { // if more than 10% digit we assume search info
+			    OutputKibitz(suppressKibitz, parse);
+			} else {
+			    char tmp[MSG_SIZ];
+			    sprintf(tmp, _("your opponent kibitzes: %s"), parse);
+			    SendToPlayer(tmp, strlen(tmp));
+			}
+		    }
+		    started = STARTED_NONE;
+		} else {
+		    /* Don't match patterns against characters in chatter */
+		    i++;
+		    continue;
+		}
+	    }
+	    if (started == STARTED_CHATTER) {
+		if (buf[i] != '\n') {
+		    /* Don't match patterns against characters in chatter */
+		    i++;
+		    continue;
+		}
+		started = STARTED_NONE;
+	    }
+
+            /* Kludge to deal with rcmd protocol */
+	    if (firstTime && looking_at(buf, &i, "\001*")) {
+		DisplayFatalError(&buf[1], 0, 1);
+		continue;
+	    } else {
+	        firstTime = FALSE;
+	    }
+
+	    if (!loggedOn && looking_at(buf, &i, "chessclub.com")) {
+		ics_type = ICS_ICC;
+		ics_prefix = "/";
+		if (appData.debugMode)
+		  fprintf(debugFP, "ics_type %d\n", ics_type);
+		continue;
+	    }
+	    if (!loggedOn && looking_at(buf, &i, "freechess.org")) {
+		ics_type = ICS_FICS;
+		ics_prefix = "$";
+		if (appData.debugMode)
+		  fprintf(debugFP, "ics_type %d\n", ics_type);
+		continue;
+	    }
+	    if (!loggedOn && looking_at(buf, &i, "chess.net")) {
+		ics_type = ICS_CHESSNET;
+		ics_prefix = "/";
+		if (appData.debugMode)
+		  fprintf(debugFP, "ics_type %d\n", ics_type);
+		continue;
+	    }
+
+	    if (!loggedOn &&
+		(looking_at(buf, &i, "\"*\" is *a registered name") ||
+		 looking_at(buf, &i, "Logging you in as \"*\"") ||
+		 looking_at(buf, &i, "will be \"*\""))) {
+	      strcpy(ics_handle, star_match[0]);
+	      continue;
+	    }
+
+	    if (loggedOn && !have_set_title && ics_handle[0] != NULLCHAR) {
+	      char buf[MSG_SIZ];
+	      sprintf(buf, "%s@%s", ics_handle, appData.icsHost);
+	      DisplayIcsInteractionTitle(buf);
+	      have_set_title = TRUE;
+	    }
+
+	    /* skip finger notes */
+	    if (started == STARTED_NONE &&
+		((buf[i] == ' ' && isdigit(buf[i+1])) ||
+		 (buf[i] == '1' && buf[i+1] == '0')) &&
+		buf[i+2] == ':' && buf[i+3] == ' ') {
+	      started = STARTED_CHATTER;
+	      i += 3;
+	      continue;
+	    }
+
+	    /* skip formula vars */
+	    if (started == STARTED_NONE &&
+		buf[i] == 'f' && isdigit(buf[i+1]) && buf[i+2] == ':') {
+	      started = STARTED_CHATTER;
+	      i += 3;
+	      continue;
+	    }
+
+	    oldi = i;
+	    // [HGM] kibitz: try to recognize opponent engine-score kibitzes, to divert them to engine-output window
+	    if (appData.autoKibitz && started == STARTED_NONE && 
+                !appData.icsEngineAnalyze &&                     // [HGM] [DM] ICS analyze
+		(gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack || gameMode == IcsObserving)) {
+		if(looking_at(buf, &i, "* kibitzes: ") &&
+		   (StrStr(star_match[0], gameInfo.white) == star_match[0] || 
+		    StrStr(star_match[0], gameInfo.black) == star_match[0]   )) { // kibitz of self or opponent
+		    	suppressKibitz = TRUE;
+			if((StrStr(star_match[0], gameInfo.white) == star_match[0]
+				&& (gameMode == IcsPlayingWhite)) ||
+			   (StrStr(star_match[0], gameInfo.black) == star_match[0]
+				&& (gameMode == IcsPlayingBlack))   ) // opponent kibitz
+			    started = STARTED_CHATTER; // own kibitz we simply discard
+			else {
+			    started = STARTED_COMMENT; // make sure it will be collected in parse[]
+			    parse_pos = 0; parse[0] = NULLCHAR;
+			    savingComment = TRUE;
+			    suppressKibitz = gameMode != IcsObserving ? 2 :
+				(StrStr(star_match[0], gameInfo.white) == NULL) + 1;
+			} 
+			continue;
+		} else
+		if(looking_at(buf, &i, "kibitzed to")) { // suppress the acknowledgements of our own autoKibitz
+		    started = STARTED_CHATTER;
+		    suppressKibitz = TRUE;
+		}
+	    } // [HGM] kibitz: end of patch
+
+	    if (appData.zippyTalk || appData.zippyPlay) {
+                /* [DM] Backup address for color zippy lines */
+                backup = i;
+#if ZIPPY
+       #ifdef WIN32
+               if (loggedOn == TRUE)
+                       if (ZippyControl(buf, &backup) || ZippyConverse(buf, &backup) ||
+                          (appData.zippyPlay && ZippyMatch(buf, &backup)));
+       #else
+                if (ZippyControl(buf, &i) ||
+                    ZippyConverse(buf, &i) ||
+                    (appData.zippyPlay && ZippyMatch(buf, &i))) {
+		      loggedOn = TRUE;
+                      if (!appData.colorize) continue;
+		}
+       #endif
+#endif
+	    } // [DM] 'else { ' deleted
+	 	if (/* Don't color "message" or "messages" output */
+		    (tkind = 5, looking_at(buf, &i, "*. * (*:*): ")) ||
+		    looking_at(buf, &i, "*. * at *:*: ") ||
+		    looking_at(buf, &i, "--* (*:*): ") ||
+		    /* Regular tells and says */
+		    (tkind = 1, looking_at(buf, &i, "* tells you: ")) ||
+		    looking_at(buf, &i, "* (your partner) tells you: ") ||
+		    looking_at(buf, &i, "* says: ") ||
+		    /* Message notifications (same color as tells) */
+		    looking_at(buf, &i, "* has left a message ") ||
+		    looking_at(buf, &i, "* just sent you a message:\n") ||
+		    /* Whispers and kibitzes */
+		    (tkind = 2, looking_at(buf, &i, "* whispers: ")) ||
+ 		    looking_at(buf, &i, "* kibitzes: ") ||
+ 		    /* Channel tells */
+ 		    (tkind = 3, looking_at(buf, &i, "*(*: "))) {
+
+		  if (tkind == 1 && strchr(star_match[0], ':')) {
+		      /* Avoid "tells you:" spoofs in channels */
+		     tkind = 3;
+		  }
+		  if (star_match[0][0] == NULLCHAR ||
+		      strchr(star_match[0], ' ') ||
+		      (tkind == 3 && strchr(star_match[1], ' '))) {
+		    /* Reject bogus matches */
+		    i = oldi;
+		  } else {
+		    if (appData.colorize) {
+		      if (oldi > next_out) {
+			SendToPlayer(&buf[next_out], oldi - next_out);
+			next_out = oldi;
+		      }
+		      switch (tkind) {
+		      case 1:
+			Colorize(ColorTell, FALSE);
+			curColor = ColorTell;
+			break;
+		      case 2:
+			Colorize(ColorKibitz, FALSE);
+			curColor = ColorKibitz;
+			break;
+		      case 3:
+			p = strrchr(star_match[1], '(');
+			if (p == NULL) {
+			  p = star_match[1];
+			} else {
+			  p++;
+			}
+			if (atoi(p) == 1) {
+			  Colorize(ColorChannel1, FALSE);
+			  curColor = ColorChannel1;
+			} else {
+			  Colorize(ColorChannel, FALSE);
+			  curColor = ColorChannel;
+			}
+			break;
+		      case 5:
+			curColor = ColorNormal;
+			break;
+		      }
+		    }
+		    if (started == STARTED_NONE && appData.autoComment &&
+			(gameMode == IcsObserving ||
+			 gameMode == IcsPlayingWhite ||
+			 gameMode == IcsPlayingBlack)) {
+		      parse_pos = i - oldi;
+		      memcpy(parse, &buf[oldi], parse_pos);
+		      parse[parse_pos] = NULLCHAR;
+		      started = STARTED_COMMENT;
+		      savingComment = TRUE;
+		    } else {
+		      started = STARTED_CHATTER;
+		      savingComment = FALSE;
+		    }
+		    loggedOn = TRUE;
+		    continue;
+		  }
+		}
+
+		if (looking_at(buf, &i, "* s-shouts: ") ||
+		    looking_at(buf, &i, "* c-shouts: ")) {
+		    if (appData.colorize) {
+			if (oldi > next_out) {
+			    SendToPlayer(&buf[next_out], oldi - next_out);
+			    next_out = oldi;
+			}
+			Colorize(ColorSShout, FALSE);
+			curColor = ColorSShout;
+		    }
+		    loggedOn = TRUE;
+		    started = STARTED_CHATTER;
+		    continue;
+		}
+
+		if (looking_at(buf, &i, "--->")) {
+		    loggedOn = TRUE;
+		    continue;
+		}
+
+		if (looking_at(buf, &i, "* shouts: ") ||
+		    looking_at(buf, &i, "--> ")) {
+		    if (appData.colorize) {
+			if (oldi > next_out) {
+			    SendToPlayer(&buf[next_out], oldi - next_out);
+			    next_out = oldi;
+			}
+			Colorize(ColorShout, FALSE);
+			curColor = ColorShout;
+		    }
+		    loggedOn = TRUE;
+		    started = STARTED_CHATTER;
+		    continue;
+		}
+
+		if (looking_at( buf, &i, "Challenge:")) {
+		    if (appData.colorize) {
+			if (oldi > next_out) {
+			    SendToPlayer(&buf[next_out], oldi - next_out);
+			    next_out = oldi;
+			}
+			Colorize(ColorChallenge, FALSE);
+			curColor = ColorChallenge;
+		    }
+		    loggedOn = TRUE;
+		    continue;
+		}
+
+		if (looking_at(buf, &i, "* offers you") ||
+		    looking_at(buf, &i, "* offers to be") ||
+		    looking_at(buf, &i, "* would like to") ||
+		    looking_at(buf, &i, "* requests to") ||
+		    looking_at(buf, &i, "Your opponent offers") ||
+		    looking_at(buf, &i, "Your opponent requests")) {
+
+		    if (appData.colorize) {
+			if (oldi > next_out) {
+			    SendToPlayer(&buf[next_out], oldi - next_out);
+			    next_out = oldi;
+			}
+			Colorize(ColorRequest, FALSE);
+			curColor = ColorRequest;
+		    }
+		    continue;
+		}
+
+		if (looking_at(buf, &i, "* (*) seeking")) {
+		    if (appData.colorize) {
+			if (oldi > next_out) {
+			    SendToPlayer(&buf[next_out], oldi - next_out);
+			    next_out = oldi;
+			}
+			Colorize(ColorSeek, FALSE);
+			curColor = ColorSeek;
+		    }
+		    continue;
+	    }
+
+	    if (looking_at(buf, &i, "\\   ")) {
+		if (prevColor != ColorNormal) {
+		    if (oldi > next_out) {
+			SendToPlayer(&buf[next_out], oldi - next_out);
+			next_out = oldi;
+		    }
+		    Colorize(prevColor, TRUE);
+		    curColor = prevColor;
+		}
+		if (savingComment) {
+		    parse_pos = i - oldi;
+		    memcpy(parse, &buf[oldi], parse_pos);
+		    parse[parse_pos] = NULLCHAR;
+		    started = STARTED_COMMENT;
+		} else {
+		    started = STARTED_CHATTER;
+		}
+		continue;
+	    }
+
+	    if (looking_at(buf, &i, "Black Strength :") ||
+		looking_at(buf, &i, "<<< style 10 board >>>") ||
+		looking_at(buf, &i, "<10>") ||
+		looking_at(buf, &i, "#@#")) {
+		/* Wrong board style */
+		loggedOn = TRUE;
+		SendToICS(ics_prefix);
+		SendToICS("set style 12\n");
+		SendToICS(ics_prefix);
+    	        SendToICS("refresh\n");
+		continue;
+	    }
+	    
+	    if (!have_sent_ICS_logon && looking_at(buf, &i, "login:")) {
+		ICSInitScript();
+		have_sent_ICS_logon = 1;
+		continue;
+	    }
+	      
+	    if (ics_getting_history != H_GETTING_MOVES /*smpos kludge*/ && 
+		(looking_at(buf, &i, "\n<12> ") ||
+		 looking_at(buf, &i, "<12> "))) {
+		loggedOn = TRUE;
+		if (oldi > next_out) {
+		    SendToPlayer(&buf[next_out], oldi - next_out);
+		}
+		next_out = i;
+		started = STARTED_BOARD;
+		parse_pos = 0;
+		continue;
+	    }
+
+	    if ((started == STARTED_NONE && looking_at(buf, &i, "\n<b1> ")) ||
+		looking_at(buf, &i, "<b1> ")) {
+		if (oldi > next_out) {
+		    SendToPlayer(&buf[next_out], oldi - next_out);
+		}
+		next_out = i;
+		started = STARTED_HOLDINGS;
+		parse_pos = 0;
+		continue;
+	    }
+
+	    if (looking_at(buf, &i, "* *vs. * *--- *")) {
+		loggedOn = TRUE;
+		/* Header for a move list -- first line */
+
+		switch (ics_getting_history) {
+		  case H_FALSE:
+		    switch (gameMode) {
+		      case IcsIdle:
+		      case BeginningOfGame:
+			/* User typed "moves" or "oldmoves" while we
+			   were idle.  Pretend we asked for these
+			   moves and soak them up so user can step
+			   through them and/or save them.
+			   */
+			Reset(FALSE, TRUE);
+			gameMode = IcsObserving;
+			ModeHighlight();
+			ics_gamenum = -1;
+			ics_getting_history = H_GOT_UNREQ_HEADER;
+			break;
+		      case EditGame: /*?*/
+		      case EditPosition: /*?*/
+			/* Should above feature work in these modes too? */
+			/* For now it doesn't */
+			ics_getting_history = H_GOT_UNWANTED_HEADER;
+			break;
+		      default:
+			ics_getting_history = H_GOT_UNWANTED_HEADER;
+			break;
+		    }
+		    break;
+		  case H_REQUESTED:
+		    /* Is this the right one? */
+		    if (gameInfo.white && gameInfo.black &&
+			strcmp(gameInfo.white, star_match[0]) == 0 &&
+			strcmp(gameInfo.black, star_match[2]) == 0) {
+			/* All is well */
+			ics_getting_history = H_GOT_REQ_HEADER;
+		    }
+		    break;
+		  case H_GOT_REQ_HEADER:
+		  case H_GOT_UNREQ_HEADER:
+		  case H_GOT_UNWANTED_HEADER:
+		  case H_GETTING_MOVES:
+		    /* Should not happen */
+		    DisplayError(_("Error gathering move list: two headers"), 0);
+		    ics_getting_history = H_FALSE;
+		    break;
+		}
+
+		/* Save player ratings into gameInfo if needed */
+		if ((ics_getting_history == H_GOT_REQ_HEADER ||
+		     ics_getting_history == H_GOT_UNREQ_HEADER) &&
+		    (gameInfo.whiteRating == -1 ||
+		     gameInfo.blackRating == -1)) {
+
+		    gameInfo.whiteRating = string_to_rating(star_match[1]);
+		    gameInfo.blackRating = string_to_rating(star_match[3]);
+		    if (appData.debugMode)
+		      fprintf(debugFP, _("Ratings from header: W %d, B %d\n"), 
+			      gameInfo.whiteRating, gameInfo.blackRating);
+		}
+		continue;
+	    }
+
+	    if (looking_at(buf, &i,
+	      "* * match, initial time: * minute*, increment: * second")) {
+		/* Header for a move list -- second line */
+		/* Initial board will follow if this is a wild game */
+		if (gameInfo.event != NULL) free(gameInfo.event);
+		sprintf(str, "ICS %s %s match", star_match[0], star_match[1]);
+		gameInfo.event = StrSave(str);
+                /* [HGM] we switched variant. Translate boards if needed. */
+                VariantSwitch(boards[currentMove], StringToVariant(gameInfo.event));
+		continue;
+	    }
+
+	    if (looking_at(buf, &i, "Move  ")) {
+		/* Beginning of a move list */
+		switch (ics_getting_history) {
+		  case H_FALSE:
+		    /* Normally should not happen */
+		    /* Maybe user hit reset while we were parsing */
+		    break;
+		  case H_REQUESTED:
+		    /* Happens if we are ignoring a move list that is not
+		     * the one we just requested.  Common if the user
+		     * tries to observe two games without turning off
+		     * getMoveList */
+		    break;
+		  case H_GETTING_MOVES:
+		    /* Should not happen */
+		    DisplayError(_("Error gathering move list: nested"), 0);
+		    ics_getting_history = H_FALSE;
+		    break;
+		  case H_GOT_REQ_HEADER:
+		    ics_getting_history = H_GETTING_MOVES;
+		    started = STARTED_MOVES;
+		    parse_pos = 0;
+		    if (oldi > next_out) {
+			SendToPlayer(&buf[next_out], oldi - next_out);
+		    }
+		    break;
+		  case H_GOT_UNREQ_HEADER:
+		    ics_getting_history = H_GETTING_MOVES;
+		    started = STARTED_MOVES_NOHIDE;
+		    parse_pos = 0;
+		    break;
+		  case H_GOT_UNWANTED_HEADER:
+		    ics_getting_history = H_FALSE;
+		    break;
+		}
+		continue;
+	    }				
+	    
+	    if (looking_at(buf, &i, "% ") ||
+		((started == STARTED_MOVES || started == STARTED_MOVES_NOHIDE)
+		 && looking_at(buf, &i, "}*"))) { char *bookHit = NULL; // [HGM] book
+		savingComment = FALSE;
+		switch (started) {
+		  case STARTED_MOVES:
+		  case STARTED_MOVES_NOHIDE:
+		    memcpy(&parse[parse_pos], &buf[oldi], i - oldi);
+		    parse[parse_pos + i - oldi] = NULLCHAR;
+		    ParseGameHistory(parse);
+#if ZIPPY
+		    if (appData.zippyPlay && first.initDone) {
+		        FeedMovesToProgram(&first, forwardMostMove);
+			if (gameMode == IcsPlayingWhite) {
+			    if (WhiteOnMove(forwardMostMove)) {
+				if (first.sendTime) {
+				  if (first.useColors) {
+				    SendToProgram("black\n", &first); 
+				  }
+				  SendTimeRemaining(&first, TRUE);
+				}
+#if 0
+				if (first.useColors) {
+				  SendToProgram("white\ngo\n", &first);
+				} else {
+				  SendToProgram("go\n", &first);
+				}
+#else
+				if (first.useColors) {
+				  SendToProgram("white\n", &first); // [HGM] book: made sending of "go\n" book dependent
+				}
+				bookHit = SendMoveToBookUser(forwardMostMove-1, &first, TRUE); // [HGM] book: probe book for initial pos
+#endif
+				first.maybeThinking = TRUE;
+			    } else {
+			        if (first.usePlayother) {
+				  if (first.sendTime) {
+				    SendTimeRemaining(&first, TRUE);
+				  }
+				  SendToProgram("playother\n", &first);
+				  firstMove = FALSE;
+			        } else {
+				  firstMove = TRUE;
+				}
+			    }
+			} else if (gameMode == IcsPlayingBlack) {
+			    if (!WhiteOnMove(forwardMostMove)) {
+				if (first.sendTime) {
+				  if (first.useColors) {
+				    SendToProgram("white\n", &first);
+				  }
+				  SendTimeRemaining(&first, FALSE);
+				}
+#if 0
+				if (first.useColors) {
+				  SendToProgram("black\ngo\n", &first);
+				} else {
+				  SendToProgram("go\n", &first);
+				}
+#else
+				if (first.useColors) {
+				  SendToProgram("black\n", &first);
+				}
+				bookHit = SendMoveToBookUser(forwardMostMove-1, &first, TRUE);
+#endif
+				first.maybeThinking = TRUE;
+			    } else {
+			        if (first.usePlayother) {
+				  if (first.sendTime) {
+				    SendTimeRemaining(&first, FALSE);
+				  }
+				  SendToProgram("playother\n", &first);
+				  firstMove = FALSE;
+			        } else {
+				  firstMove = TRUE;
+				}
+			    }
+			}			
+		    }
+#endif
+		    if (gameMode == IcsObserving && ics_gamenum == -1) {
+			/* Moves came from oldmoves or moves command
+			   while we weren't doing anything else.
+			   */
+			currentMove = forwardMostMove;
+			ClearHighlights();/*!!could figure this out*/
+			flipView = appData.flipView;
+			DrawPosition(FALSE, boards[currentMove]);
+			DisplayBothClocks();
+			sprintf(str, "%s vs. %s",
+				gameInfo.white, gameInfo.black);
+			DisplayTitle(str);
+			gameMode = IcsIdle;
+		    } else {
+			/* Moves were history of an active game */
+			if (gameInfo.resultDetails != NULL) {
+			    free(gameInfo.resultDetails);
+			    gameInfo.resultDetails = NULL;
+			}
+		    }
+		    HistorySet(parseList, backwardMostMove,
+			       forwardMostMove, currentMove-1);
+		    DisplayMove(currentMove - 1);
+		    if (started == STARTED_MOVES) next_out = i;
+		    started = STARTED_NONE;
+		    ics_getting_history = H_FALSE;
+		    break;
+
+		  case STARTED_OBSERVE:
+		    started = STARTED_NONE;
+		    SendToICS(ics_prefix);
+		    SendToICS("refresh\n");
+		    break;
+
+		  default:
+		    break;
+		}
+		if(bookHit) { // [HGM] book: simulate book reply
+		    static char bookMove[MSG_SIZ]; // a bit generous?
+
+		    programStats.nodes = programStats.depth = programStats.time = 
+		    programStats.score = programStats.got_only_move = 0;
+		    sprintf(programStats.movelist, "%s (xbook)", bookHit);
+
+		    strcpy(bookMove, "move ");
+		    strcat(bookMove, bookHit);
+		    HandleMachineMove(bookMove, &first);
+		}
+		continue;
+	    }
+	    
+	    if ((started == STARTED_MOVES || started == STARTED_BOARD ||
+		 started == STARTED_HOLDINGS ||
+		 started == STARTED_MOVES_NOHIDE) && i >= leftover_len) {
+		/* Accumulate characters in move list or board */
+		parse[parse_pos++] = buf[i];
+	    }
+	    
+	    /* Start of game messages.  Mostly we detect start of game
+	       when the first board image arrives.  On some versions
+	       of the ICS, though, we need to do a "refresh" after starting
+	       to observe in order to get the current board right away. */
+	    if (looking_at(buf, &i, "Adding game * to observation list")) {
+		started = STARTED_OBSERVE;
+		continue;
+	    }
+
+	    /* Handle auto-observe */
+	    if (appData.autoObserve &&
+		(gameMode == IcsIdle || gameMode == BeginningOfGame) &&
+		looking_at(buf, &i, "Game notification: * (*) vs. * (*)")) {
+		char *player;
+		/* Choose the player that was highlighted, if any. */
+		if (star_match[0][0] == '\033' ||
+		    star_match[1][0] != '\033') {
+		    player = star_match[0];
+		} else {
+		    player = star_match[2];
+		}
+		sprintf(str, "%sobserve %s\n",
+			ics_prefix, StripHighlightAndTitle(player));
+		SendToICS(str);
+
+		/* Save ratings from notify string */
+		strcpy(player1Name, star_match[0]);
+		player1Rating = string_to_rating(star_match[1]);
+		strcpy(player2Name, star_match[2]);
+		player2Rating = string_to_rating(star_match[3]);
+
+		if (appData.debugMode)
+		  fprintf(debugFP, 
+			  "Ratings from 'Game notification:' %s %d, %s %d\n",
+			  player1Name, player1Rating,
+			  player2Name, player2Rating);
+
+		continue;
+	    }
+
+	    /* Deal with automatic examine mode after a game,
+	       and with IcsObserving -> IcsExamining transition */
+	    if (looking_at(buf, &i, "Entering examine mode for game *") ||
+		looking_at(buf, &i, "has made you an examiner of game *")) {
+
+		int gamenum = atoi(star_match[0]);
+		if ((gameMode == IcsIdle || gameMode == IcsObserving) &&
+		    gamenum == ics_gamenum) {
+		    /* We were already playing or observing this game;
+		       no need to refetch history */
+		    gameMode = IcsExamining;
+		    if (pausing) {
+			pauseExamForwardMostMove = forwardMostMove;
+		    } else if (currentMove < forwardMostMove) {
+			ForwardInner(forwardMostMove);
+		    }
+		} else {
+		    /* I don't think this case really can happen */
+		    SendToICS(ics_prefix);
+		    SendToICS("refresh\n");
+		}
+		continue;
+	    }    
+	    
+	    /* Error messages */
+	    if (ics_user_moved) {
+		if (looking_at(buf, &i, "Illegal move") ||
+		    looking_at(buf, &i, "Not a legal move") ||
+		    looking_at(buf, &i, "Your king is in check") ||
+		    looking_at(buf, &i, "It isn't your turn") ||
+		    looking_at(buf, &i, "It is not your move")) {
+		    /* Illegal move */
+		    ics_user_moved = 0;
+		    if (forwardMostMove > backwardMostMove) {
+			currentMove = --forwardMostMove;
+			DisplayMove(currentMove - 1); /* before DMError */
+			DisplayMoveError(_("Illegal move (rejected by ICS)"));
+			DrawPosition(FALSE, boards[currentMove]);
+			SwitchClocks();
+			DisplayBothClocks();
+		    }
+		    continue;
+		}
+	    }
+
+	    if (looking_at(buf, &i, "still have time") ||
+		looking_at(buf, &i, "not out of time") ||
+		looking_at(buf, &i, "either player is out of time") ||
+		looking_at(buf, &i, "has timeseal; checking")) {
+		/* We must have called his flag a little too soon */
+		whiteFlag = blackFlag = FALSE;
+		continue;
+	    }
+
+	    if (looking_at(buf, &i, "added * seconds to") ||
+		looking_at(buf, &i, "seconds were added to")) {
+		/* Update the clocks */
+		SendToICS(ics_prefix);
+		SendToICS("refresh\n");
+		continue;
+	    }
+
+	    if (!ics_clock_paused && looking_at(buf, &i, "clock paused")) {
+		ics_clock_paused = TRUE;
+		StopClocks();
+		continue;
+	    }
+
+	    if (ics_clock_paused && looking_at(buf, &i, "clock resumed")) {
+		ics_clock_paused = FALSE;
+		StartClocks();
+		continue;
+	    }
+
+	    /* Grab player ratings from the Creating: message.
+	       Note we have to check for the special case when
+	       the ICS inserts things like [white] or [black]. */
+	    if (looking_at(buf, &i, "Creating: * (*)* * (*)") ||
+		looking_at(buf, &i, "Creating: * (*) [*] * (*)")) {
+		/* star_matches:
+		   0    player 1 name (not necessarily white)
+		   1	player 1 rating
+		   2	empty, white, or black (IGNORED)
+		   3	player 2 name (not necessarily black)
+		   4    player 2 rating
+		   
+		   The names/ratings are sorted out when the game
+		   actually starts (below).
+		*/
+		strcpy(player1Name, StripHighlightAndTitle(star_match[0]));
+		player1Rating = string_to_rating(star_match[1]);
+		strcpy(player2Name, StripHighlightAndTitle(star_match[3]));
+		player2Rating = string_to_rating(star_match[4]);
+
+		if (appData.debugMode)
+		  fprintf(debugFP, 
+			  "Ratings from 'Creating:' %s %d, %s %d\n",
+			  player1Name, player1Rating,
+			  player2Name, player2Rating);
+
+		continue;
+	    }
+	    
+	    /* Improved generic start/end-of-game messages */
+	    if ((tkind=0, looking_at(buf, &i, "{Game * (* vs. *) *}*")) ||
+		(tkind=1, looking_at(buf, &i, "{Game * (*(*) vs. *(*)) *}*"))){
+	        /* If tkind == 0: */
+		/* star_match[0] is the game number */
+		/*           [1] is the white player's name */
+		/*           [2] is the black player's name */
+		/* For end-of-game: */
+		/*           [3] is the reason for the game end */
+		/*           [4] is a PGN end game-token, preceded by " " */
+		/* For start-of-game: */
+		/*           [3] begins with "Creating" or "Continuing" */
+		/*           [4] is " *" or empty (don't care). */
+		int gamenum = atoi(star_match[0]);
+		char *whitename, *blackname, *why, *endtoken;
+		ChessMove endtype = (ChessMove) 0;
+
+		if (tkind == 0) {
+		  whitename = star_match[1];
+		  blackname = star_match[2];
+		  why = star_match[3];
+		  endtoken = star_match[4];
+		} else {
+		  whitename = star_match[1];
+		  blackname = star_match[3];
+		  why = star_match[5];
+		  endtoken = star_match[6];
+		}
+
+                /* Game start messages */
+		if (strncmp(why, "Creating ", 9) == 0 ||
+		    strncmp(why, "Continuing ", 11) == 0) {
+		    gs_gamenum = gamenum;
+		    strcpy(gs_kind, strchr(why, ' ') + 1);
+#if ZIPPY
+		    if (appData.zippyPlay) {
+			ZippyGameStart(whitename, blackname);
+		    }
+#endif /*ZIPPY*/
+		    continue;
+		}
+
+		/* Game end messages */
+		if (gameMode == IcsIdle || gameMode == BeginningOfGame ||
+		    ics_gamenum != gamenum) {
+		    continue;
+		}
+		while (endtoken[0] == ' ') endtoken++;
+		switch (endtoken[0]) {
+		  case '*':
+		  default:
+		    endtype = GameUnfinished;
+		    break;
+		  case '0':
+		    endtype = BlackWins;
+		    break;
+		  case '1':
+		    if (endtoken[1] == '/')
+		      endtype = GameIsDrawn;
+		    else
+		      endtype = WhiteWins;
+		    break;
+		}
+		GameEnds(endtype, why, GE_ICS);
+#if ZIPPY
+		if (appData.zippyPlay && first.initDone) {
+		    ZippyGameEnd(endtype, why);
+		    if (first.pr == NULL) {
+		      /* Start the next process early so that we'll
+			 be ready for the next challenge */
+		      StartChessProgram(&first);
+		    }
+		    /* Send "new" early, in case this command takes
+		       a long time to finish, so that we'll be ready
+		       for the next challenge. */
+		    gameInfo.variant = VariantNormal; // [HGM] variantswitch: suppress sending of 'variant'
+		    Reset(TRUE, TRUE);
+		}
+#endif /*ZIPPY*/
+		continue;
+	    }
+
+	    if (looking_at(buf, &i, "Removing game * from observation") ||
+		looking_at(buf, &i, "no longer observing game *") ||
+		looking_at(buf, &i, "Game * (*) has no examiners")) {
+		if (gameMode == IcsObserving &&
+		    atoi(star_match[0]) == ics_gamenum)
+		  {
+                      /* icsEngineAnalyze */
+                      if (appData.icsEngineAnalyze) {
+                            ExitAnalyzeMode();
+                            ModeHighlight();
+                      }
+		      StopClocks();
+		      gameMode = IcsIdle;
+		      ics_gamenum = -1;
+		      ics_user_moved = FALSE;
+		  }
+		continue;
+	    }
+
+	    if (looking_at(buf, &i, "no longer examining game *")) {
+		if (gameMode == IcsExamining &&
+		    atoi(star_match[0]) == ics_gamenum)
+		  {
+		      gameMode = IcsIdle;
+		      ics_gamenum = -1;
+		      ics_user_moved = FALSE;
+		  }
+		continue;
+	    }
+
+	    /* Advance leftover_start past any newlines we find,
+	       so only partial lines can get reparsed */
+	    if (looking_at(buf, &i, "\n")) {
+		prevColor = curColor;
+		if (curColor != ColorNormal) {
+		    if (oldi > next_out) {
+			SendToPlayer(&buf[next_out], oldi - next_out);
+			next_out = oldi;
+		    }
+		    Colorize(ColorNormal, FALSE);
+		    curColor = ColorNormal;
+		}
+		if (started == STARTED_BOARD) {
+		    started = STARTED_NONE;
+		    parse[parse_pos] = NULLCHAR;
+		    ParseBoard12(parse);
+		    ics_user_moved = 0;
+
+		    /* Send premove here */
+		    if (appData.premove) {
+		      char str[MSG_SIZ];
+		      if (currentMove == 0 &&
+			  gameMode == IcsPlayingWhite &&
+			  appData.premoveWhite) {
+			sprintf(str, "%s%s\n", ics_prefix,
+				appData.premoveWhiteText);
+			if (appData.debugMode)
+			  fprintf(debugFP, "Sending premove:\n");
+			SendToICS(str);
+		      } else if (currentMove == 1 &&
+				 gameMode == IcsPlayingBlack &&
+				 appData.premoveBlack) {
+			sprintf(str, "%s%s\n", ics_prefix,
+				appData.premoveBlackText);
+			if (appData.debugMode)
+			  fprintf(debugFP, "Sending premove:\n");
+			SendToICS(str);
+		      } else if (gotPremove) {
+			gotPremove = 0;
+			ClearPremoveHighlights();
+			if (appData.debugMode)
+			  fprintf(debugFP, "Sending premove:\n");
+                          UserMoveEvent(premoveFromX, premoveFromY, 
+				        premoveToX, premoveToY, 
+                                        premovePromoChar);
+		      }
+		    }
+
+		    /* Usually suppress following prompt */
+		    if (!(forwardMostMove == 0 && gameMode == IcsExamining)) {
+			if (looking_at(buf, &i, "*% ")) {
+			    savingComment = FALSE;
+			}
+		    }
+		    next_out = i;
+		} else if (started == STARTED_HOLDINGS) {
+		    int gamenum;
+		    char new_piece[MSG_SIZ];
+		    started = STARTED_NONE;
+		    parse[parse_pos] = NULLCHAR;
+		    if (appData.debugMode)
+                      fprintf(debugFP, "Parsing holdings: %s, currentMove = %d\n",
+                                                        parse, currentMove);
+		    if (sscanf(parse, " game %d", &gamenum) == 1 &&
+			gamenum == ics_gamenum) {
+		        if (gameInfo.variant == VariantNormal) {
+                          /* [HGM] We seem to switch variant during a game!
+                           * Presumably no holdings were displayed, so we have
+                           * to move the position two files to the right to
+                           * create room for them!
+                           */
+                          VariantSwitch(boards[currentMove], VariantCrazyhouse); /* temp guess */
+			  /* Get a move list just to see the header, which
+			     will tell us whether this is really bug or zh */
+			  if (ics_getting_history == H_FALSE) {
+			    ics_getting_history = H_REQUESTED;
+			    sprintf(str, "%smoves %d\n", ics_prefix, gamenum);
+			    SendToICS(str);
+			  }
+			}
+			new_piece[0] = NULLCHAR;
+			sscanf(parse, "game %d white [%s black [%s <- %s",
+			       &gamenum, white_holding, black_holding,
+			       new_piece);
+                        white_holding[strlen(white_holding)-1] = NULLCHAR;
+                        black_holding[strlen(black_holding)-1] = NULLCHAR;
+                        /* [HGM] copy holdings to board holdings area */
+                        CopyHoldings(boards[currentMove], white_holding, WhitePawn);
+                        CopyHoldings(boards[currentMove], black_holding, BlackPawn);
+#if ZIPPY
+			if (appData.zippyPlay && first.initDone) {
+			    ZippyHoldings(white_holding, black_holding,
+					  new_piece);
+			}
+#endif /*ZIPPY*/
+			if (tinyLayout || smallLayout) {
+			    char wh[16], bh[16];
+			    PackHolding(wh, white_holding);
+			    PackHolding(bh, black_holding);
+			    sprintf(str, "[%s-%s] %s-%s", wh, bh,
+				    gameInfo.white, gameInfo.black);
+			} else {
+			    sprintf(str, "%s [%s] vs. %s [%s]",
+				    gameInfo.white, white_holding,
+				    gameInfo.black, black_holding);
+			}
+
+                        DrawPosition(FALSE, boards[currentMove]);
+			DisplayTitle(str);
+		    }
+		    /* Suppress following prompt */
+		    if (looking_at(buf, &i, "*% ")) {
+			savingComment = FALSE;
+		    }
+		    next_out = i;
+		}
+		continue;
+	    }
+
+	    i++;		/* skip unparsed character and loop back */
+	}
+	
+	if (started != STARTED_MOVES && started != STARTED_BOARD && !suppressKibitz && // [HGM] kibitz suppress printing in ICS interaction window
+	    started != STARTED_HOLDINGS && i > next_out) {
+	    SendToPlayer(&buf[next_out], i - next_out);
+	    next_out = i;
+	}
+	suppressKibitz = FALSE; // [HGM] kibitz: has done its duty in if-statement above
+	
+	leftover_len = buf_len - leftover_start;
+	/* if buffer ends with something we couldn't parse,
+	   reparse it after appending the next read */
+	
+    } else if (count == 0) {
+	RemoveInputSource(isr);
+        DisplayFatalError(_("Connection closed by ICS"), 0, 0);
+    } else {
+	DisplayFatalError(_("Error reading from ICS"), error, 1);
+    }
+}
+
+
+/* Board style 12 looks like this:
+   
+   <12> r-b---k- pp----pp ---bP--- ---p---- q------- ------P- P--Q--BP -----R-K W -1 0 0 0 0 0 0 paf MaxII 0 2 12 21 25 234 174 24 Q/d7-a4 (0:06) Qxa4 0 0
+   
+ * The "<12> " is stripped before it gets to this routine.  The two
+ * trailing 0's (flip state and clock ticking) are later addition, and
+ * some chess servers may not have them, or may have only the first.
+ * Additional trailing fields may be added in the future.  
+ */
+
+#define PATTERN "%c%d%d%d%d%d%d%d%s%s%d%d%d%d%d%d%d%d%s%s%s%d%d"
+
+#define RELATION_OBSERVING_PLAYED    0
+#define RELATION_OBSERVING_STATIC   -2   /* examined, oldmoves, or smoves */
+#define RELATION_PLAYING_MYMOVE      1
+#define RELATION_PLAYING_NOTMYMOVE  -1
+#define RELATION_EXAMINING           2
+#define RELATION_ISOLATED_BOARD     -3
+#define RELATION_STARTING_POSITION  -4   /* FICS only */
+
+void
+ParseBoard12(string)
+     char *string;
+{ 
+    GameMode newGameMode;
+    int gamenum, newGame, newMove, relation, basetime, increment, ics_flip = 0, i;
+    int j, k, n, moveNum, white_stren, black_stren, white_time, black_time, takeback;
+    int double_push, castle_ws, castle_wl, castle_bs, castle_bl, irrev_count;
+    char to_play, board_chars[200];
+    char move_str[500], str[500], elapsed_time[500];
+    char black[32], white[32];
+    Board board;
+    int prevMove = currentMove;
+    int ticking = 2;
+    ChessMove moveType;
+    int fromX, fromY, toX, toY;
+    char promoChar;
+    int ranks=1, files=0; /* [HGM] ICS80: allow variable board size */
+    char *bookHit = NULL; // [HGM] book
+
+    fromX = fromY = toX = toY = -1;
+    
+    newGame = FALSE;
+
+    if (appData.debugMode)
+      fprintf(debugFP, _("Parsing board: %s\n"), string);
+
+    move_str[0] = NULLCHAR;
+    elapsed_time[0] = NULLCHAR;
+    {   /* [HGM] figure out how many ranks and files the board has, for ICS extension used by Capablanca server */
+        int  i = 0, j;
+        while(i < 199 && (string[i] != ' ' || string[i+2] != ' ')) {
+	    if(string[i] == ' ') { ranks++; files = 0; }
+            else files++;
+	    i++;
+	}
+	for(j = 0; j <i; j++) board_chars[j] = string[j];
+        board_chars[i] = '\0';
+	string += i + 1;
+    }
+    n = sscanf(string, PATTERN, &to_play, &double_push,
+	       &castle_ws, &castle_wl, &castle_bs, &castle_bl, &irrev_count,
+	       &gamenum, white, black, &relation, &basetime, &increment,
+	       &white_stren, &black_stren, &white_time, &black_time,
+	       &moveNum, str, elapsed_time, move_str, &ics_flip,
+	       &ticking);
+
+    if (n < 21) {
+	sprintf(str, _("Failed to parse board string:\n\"%s\""), string);
+	DisplayError(str, 0);
+	return;
+    }
+
+    /* Convert the move number to internal form */
+    moveNum = (moveNum - 1) * 2;
+    if (to_play == 'B') moveNum++;
+    if (moveNum >= MAX_MOVES) {
+      DisplayFatalError(_("Game too long; increase MAX_MOVES and recompile"),
+			0, 1);
+      return;
+    }
+    
+    switch (relation) {
+      case RELATION_OBSERVING_PLAYED:
+      case RELATION_OBSERVING_STATIC:
+	if (gamenum == -1) {
+	    /* Old ICC buglet */
+	    relation = RELATION_OBSERVING_STATIC;
+	}
+	newGameMode = IcsObserving;
+	break;
+      case RELATION_PLAYING_MYMOVE:
+      case RELATION_PLAYING_NOTMYMOVE:
+	newGameMode =
+	  ((relation == RELATION_PLAYING_MYMOVE) == (to_play == 'W')) ?
+	    IcsPlayingWhite : IcsPlayingBlack;
+	break;
+      case RELATION_EXAMINING:
+	newGameMode = IcsExamining;
+	break;
+      case RELATION_ISOLATED_BOARD:
+      default:
+	/* Just display this board.  If user was doing something else,
+	   we will forget about it until the next board comes. */ 
+	newGameMode = IcsIdle;
+	break;
+      case RELATION_STARTING_POSITION:
+	newGameMode = gameMode;
+	break;
+    }
+    
+    /* Modify behavior for initial board display on move listing
+       of wild games.
+       */
+    switch (ics_getting_history) {
+      case H_FALSE:
+      case H_REQUESTED:
+	break;
+      case H_GOT_REQ_HEADER:
+      case H_GOT_UNREQ_HEADER:
+	/* This is the initial position of the current game */
+	gamenum = ics_gamenum;
+	moveNum = 0;		/* old ICS bug workaround */
+ 	if (to_play == 'B') {
+	  startedFromSetupPosition = TRUE;
+	  blackPlaysFirst = TRUE;
+	  moveNum = 1;
+	  if (forwardMostMove == 0) forwardMostMove = 1;
+	  if (backwardMostMove == 0) backwardMostMove = 1;
+	  if (currentMove == 0) currentMove = 1;
+	}
+	newGameMode = gameMode;
+	relation = RELATION_STARTING_POSITION; /* ICC needs this */
+	break;
+      case H_GOT_UNWANTED_HEADER:
+	/* This is an initial board that we don't want */
+	return;
+      case H_GETTING_MOVES:
+	/* Should not happen */
+	DisplayError(_("Error gathering move list: extra board"), 0);
+	ics_getting_history = H_FALSE;
+	return;
+    }
+    
+    /* Take action if this is the first board of a new game, or of a
+       different game than is currently being displayed.  */
+    if (gamenum != ics_gamenum || newGameMode != gameMode ||
+	relation == RELATION_ISOLATED_BOARD) {
+	
+	/* Forget the old game and get the history (if any) of the new one */
+	if (gameMode != BeginningOfGame) {
+	  Reset(FALSE, TRUE);
+	}
+	newGame = TRUE;
+	if (appData.autoRaiseBoard) BoardToTop();
+	prevMove = -3;
+	if (gamenum == -1) {
+	    newGameMode = IcsIdle;
+	} else if (moveNum > 0 && newGameMode != IcsIdle &&
+		   appData.getMoveList) {
+	    /* Need to get game history */
+	    ics_getting_history = H_REQUESTED;
+	    sprintf(str, "%smoves %d\n", ics_prefix, gamenum);
+	    SendToICS(str);
+	}
+	
+	/* Initially flip the board to have black on the bottom if playing
+	   black or if the ICS flip flag is set, but let the user change
+	   it with the Flip View button. */
+	flipView = appData.autoFlipView ? 
+	  (newGameMode == IcsPlayingBlack) || ics_flip :
+	  appData.flipView;
+	
+	/* Done with values from previous mode; copy in new ones */
+	gameMode = newGameMode;
+	ModeHighlight();
+	ics_gamenum = gamenum;
+	if (gamenum == gs_gamenum) {
+	    int klen = strlen(gs_kind);
+	    if (gs_kind[klen - 1] == '.') gs_kind[klen - 1] = NULLCHAR;
+	    sprintf(str, "ICS %s", gs_kind);
+	    gameInfo.event = StrSave(str);
+	} else {
+	    gameInfo.event = StrSave("ICS game");
+	}
+	gameInfo.site = StrSave(appData.icsHost);
+	gameInfo.date = PGNDate();
+	gameInfo.round = StrSave("-");
+	gameInfo.white = StrSave(white);
+	gameInfo.black = StrSave(black);
+	timeControl = basetime * 60 * 1000;
+        timeControl_2 = 0;
+	timeIncrement = increment * 1000;
+	movesPerSession = 0;
+	gameInfo.timeControl = TimeControlTagValue();
+        VariantSwitch(board, StringToVariant(gameInfo.event) );
+  if (appData.debugMode) {
+    fprintf(debugFP, "ParseBoard says variant = '%s'\n", gameInfo.event);
+    fprintf(debugFP, "recognized as %s\n", VariantName(gameInfo.variant));
+    setbuf(debugFP, NULL);
+  }
+
+        gameInfo.outOfBook = NULL;
+	
+	/* Do we have the ratings? */
+	if (strcmp(player1Name, white) == 0 &&
+	    strcmp(player2Name, black) == 0) {
+	    if (appData.debugMode)
+	      fprintf(debugFP, "Remembered ratings: W %d, B %d\n",
+		      player1Rating, player2Rating);
+	    gameInfo.whiteRating = player1Rating;
+	    gameInfo.blackRating = player2Rating;
+	} else if (strcmp(player2Name, white) == 0 &&
+		   strcmp(player1Name, black) == 0) {
+	    if (appData.debugMode)
+	      fprintf(debugFP, "Remembered ratings: W %d, B %d\n",
+		      player2Rating, player1Rating);
+	    gameInfo.whiteRating = player2Rating;
+	    gameInfo.blackRating = player1Rating;
+	}
+	player1Name[0] = player2Name[0] = NULLCHAR;
+
+	/* Silence shouts if requested */
+	if (appData.quietPlay &&
+	    (gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack)) {
+	    SendToICS(ics_prefix);
+	    SendToICS("set shout 0\n");
+	}
+    }
+    
+    /* Deal with midgame name changes */
+    if (!newGame) {
+	if (!gameInfo.white || strcmp(gameInfo.white, white) != 0) {
+	    if (gameInfo.white) free(gameInfo.white);
+	    gameInfo.white = StrSave(white);
+	}
+	if (!gameInfo.black || strcmp(gameInfo.black, black) != 0) {
+	    if (gameInfo.black) free(gameInfo.black);
+	    gameInfo.black = StrSave(black);
+	}
+    }
+    
+    /* Throw away game result if anything actually changes in examine mode */
+    if (gameMode == IcsExamining && !newGame) {
+	gameInfo.result = GameUnfinished;
+	if (gameInfo.resultDetails != NULL) {
+	    free(gameInfo.resultDetails);
+	    gameInfo.resultDetails = NULL;
+	}
+    }
+    
+    /* In pausing && IcsExamining mode, we ignore boards coming
+       in if they are in a different variation than we are. */
+    if (pauseExamInvalid) return;
+    if (pausing && gameMode == IcsExamining) {
+	if (moveNum <= pauseExamForwardMostMove) {
+	    pauseExamInvalid = TRUE;
+	    forwardMostMove = pauseExamForwardMostMove;
+	    return;
+	}
+    }
+    
+  if (appData.debugMode) {
+    fprintf(debugFP, "load %dx%d board\n", files, ranks);
+  }
+    /* Parse the board */
+    for (k = 0; k < ranks; k++) {
+      for (j = 0; j < files; j++)
+        board[k][j+gameInfo.holdingsWidth] = CharToPiece(board_chars[(ranks-1-k)*(files+1) + j]);
+      if(gameInfo.holdingsWidth > 1) {
+           board[k][0] = board[k][BOARD_WIDTH-1] = EmptySquare;
+           board[k][1] = board[k][BOARD_WIDTH-2] = (ChessSquare) 0;;
+      }
+    }
+    CopyBoard(boards[moveNum], board);
+    if (moveNum == 0) {
+	startedFromSetupPosition =
+	  !CompareBoards(board, initialPosition);
+        if(startedFromSetupPosition)
+            initialRulePlies = irrev_count; /* [HGM] 50-move counter offset */
+    }
+
+    /* [HGM] Set castling rights. Take the outermost Rooks,
+       to make it also work for FRC opening positions. Note that board12
+       is really defective for later FRC positions, as it has no way to
+       indicate which Rook can castle if they are on the same side of King.
+       For the initial position we grant rights to the outermost Rooks,
+       and remember thos rights, and we then copy them on positions
+       later in an FRC game. This means WB might not recognize castlings with
+       Rooks that have moved back to their original position as illegal,
+       but in ICS mode that is not its job anyway.
+    */
+    if(moveNum == 0 || gameInfo.variant != VariantFischeRandom)
+    { int i, j; ChessSquare wKing = WhiteKing, bKing = BlackKing;
+
+        for(i=BOARD_LEFT, j= -1; i<BOARD_RGHT; i++)
+            if(board[0][i] == WhiteRook) j = i;
+        initialRights[0] = castlingRights[moveNum][0] = (castle_ws == 0 && gameInfo.variant != VariantFischeRandom ? -1 : j);
+        for(i=BOARD_RGHT-1, j= -1; i>=BOARD_LEFT; i--)
+            if(board[0][i] == WhiteRook) j = i;
+        initialRights[1] = castlingRights[moveNum][1] = (castle_wl == 0 && gameInfo.variant != VariantFischeRandom ? -1 : j);
+        for(i=BOARD_LEFT, j= -1; i<BOARD_RGHT; i++)
+            if(board[BOARD_HEIGHT-1][i] == BlackRook) j = i;
+        initialRights[3] = castlingRights[moveNum][3] = (castle_bs == 0 && gameInfo.variant != VariantFischeRandom ? -1 : j);
+        for(i=BOARD_RGHT-1, j= -1; i>=BOARD_LEFT; i--)
+            if(board[BOARD_HEIGHT-1][i] == BlackRook) j = i;
+        initialRights[4] = castlingRights[moveNum][4] = (castle_bl == 0 && gameInfo.variant != VariantFischeRandom ? -1 : j);
+
+	if(gameInfo.variant == VariantKnightmate) { wKing = WhiteUnicorn; bKing = BlackUnicorn; }
+        for(k=BOARD_LEFT; k<BOARD_RGHT; k++)
+            if(board[0][k] == wKing) initialRights[2] = castlingRights[moveNum][2] = k;
+        for(k=BOARD_LEFT; k<BOARD_RGHT; k++)
+            if(board[BOARD_HEIGHT-1][k] == bKing)
+                initialRights[5] = castlingRights[moveNum][5] = k;
+    } else { int r;
+        r = castlingRights[moveNum][0] = initialRights[0];
+        if(board[0][r] != WhiteRook) castlingRights[moveNum][0] = -1;
+        r = castlingRights[moveNum][1] = initialRights[1];
+        if(board[0][r] != WhiteRook) castlingRights[moveNum][1] = -1;
+        r = castlingRights[moveNum][3] = initialRights[3];
+        if(board[BOARD_HEIGHT-1][r] != BlackRook) castlingRights[moveNum][3] = -1;
+        r = castlingRights[moveNum][4] = initialRights[4];
+        if(board[BOARD_HEIGHT-1][r] != BlackRook) castlingRights[moveNum][4] = -1;
+        /* wildcastle kludge: always assume King has rights */
+        r = castlingRights[moveNum][2] = initialRights[2];
+        r = castlingRights[moveNum][5] = initialRights[5];
+    }
+    /* [HGM] e.p. rights. Assume that ICS sends file number here? */
+    epStatus[moveNum] = double_push == -1 ? EP_NONE : double_push + BOARD_LEFT;
+
+    
+    if (ics_getting_history == H_GOT_REQ_HEADER ||
+	ics_getting_history == H_GOT_UNREQ_HEADER) {
+	/* This was an initial position from a move list, not
+	   the current position */
+	return;
+    }
+    
+    /* Update currentMove and known move number limits */
+    newMove = newGame || moveNum > forwardMostMove;
+
+    /* [DM] If we found takebacks during icsEngineAnalyze try send to engine */
+    if (!newGame && appData.icsEngineAnalyze && moveNum < forwardMostMove) {
+        takeback = forwardMostMove - moveNum;
+        for (i = 0; i < takeback; i++) {
+             if (appData.debugMode) fprintf(debugFP, "take back move\n");
+             SendToProgram("undo\n", &first);
+        }
+    }
+
+    if (newGame) {
+	forwardMostMove = backwardMostMove = currentMove = moveNum;
+	if (gameMode == IcsExamining && moveNum == 0) {
+	  /* Workaround for ICS limitation: we are not told the wild
+	     type when starting to examine a game.  But if we ask for
+	     the move list, the move list header will tell us */
+	    ics_getting_history = H_REQUESTED;
+	    sprintf(str, "%smoves %d\n", ics_prefix, gamenum);
+	    SendToICS(str);
+	}
+    } else if (moveNum == forwardMostMove + 1 || moveNum == forwardMostMove
+	       || (moveNum < forwardMostMove && moveNum >= backwardMostMove)) {
+	forwardMostMove = moveNum;
+	if (!pausing || currentMove > forwardMostMove)
+	  currentMove = forwardMostMove;
+    } else {
+	/* New part of history that is not contiguous with old part */ 
+	if (pausing && gameMode == IcsExamining) {
+	    pauseExamInvalid = TRUE;
+	    forwardMostMove = pauseExamForwardMostMove;
+	    return;
+	}
+	forwardMostMove = backwardMostMove = currentMove = moveNum;
+	if (gameMode == IcsExamining && moveNum > 0 && appData.getMoveList) {
+	    ics_getting_history = H_REQUESTED;
+	    sprintf(str, "%smoves %d\n", ics_prefix, gamenum);
+	    SendToICS(str);
+	}
+    }
+    
+    /* Update the clocks */
+    if (strchr(elapsed_time, '.')) {
+      /* Time is in ms */
+      timeRemaining[0][moveNum] = whiteTimeRemaining = white_time;
+      timeRemaining[1][moveNum] = blackTimeRemaining = black_time;
+    } else {
+      /* Time is in seconds */
+      timeRemaining[0][moveNum] = whiteTimeRemaining = white_time * 1000;
+      timeRemaining[1][moveNum] = blackTimeRemaining = black_time * 1000;
+    }
+      
+
+#if ZIPPY
+    if (appData.zippyPlay && newGame &&
+	gameMode != IcsObserving && gameMode != IcsIdle &&
+	gameMode != IcsExamining)
+      ZippyFirstBoard(moveNum, basetime, increment);
+#endif
+    
+    /* Put the move on the move list, first converting
+       to canonical algebraic form. */
+    if (moveNum > 0) {
+  if (appData.debugMode) {
+    if (appData.debugMode) { int f = forwardMostMove;
+        fprintf(debugFP, "parseboard %d, castling = %d %d %d %d %d %d\n", f,
+                castlingRights[f][0],castlingRights[f][1],castlingRights[f][2],castlingRights[f][3],castlingRights[f][4],castlingRights[f][5]);
+    }
+    fprintf(debugFP, "accepted move %s from ICS, parse it.\n", move_str);
+    fprintf(debugFP, "moveNum = %d\n", moveNum);
+    fprintf(debugFP, "board = %d-%d x %d\n", BOARD_LEFT, BOARD_RGHT, BOARD_HEIGHT);
+    setbuf(debugFP, NULL);
+  }
+	if (moveNum <= backwardMostMove) {
+	    /* We don't know what the board looked like before
+	       this move.  Punt. */
+	    strcpy(parseList[moveNum - 1], move_str);
+	    strcat(parseList[moveNum - 1], " ");
+	    strcat(parseList[moveNum - 1], elapsed_time);
+	    moveList[moveNum - 1][0] = NULLCHAR;
+	} else if (strcmp(move_str, "none") == 0) {
+	    // [HGM] long SAN: swapped order; test for 'none' before parsing move
+	    /* Again, we don't know what the board looked like;
+	       this is really the start of the game. */
+	    parseList[moveNum - 1][0] = NULLCHAR;
+	    moveList[moveNum - 1][0] = NULLCHAR;
+	    backwardMostMove = moveNum;
+	    startedFromSetupPosition = TRUE;
+ 	    fromX = fromY = toX = toY = -1;
+	} else {
+	  // [HGM] long SAN: if legality-testing is off, disambiguation might not work or give wrong move. 
+	  //                 So we parse the long-algebraic move string in stead of the SAN move
+	  int valid; char buf[MSG_SIZ], *prom;
+
+	  // str looks something like "Q/a1-a2"; kill the slash
+	  if(str[1] == '/') 
+		sprintf(buf, "%c%s", str[0], str+2);
+	  else  strcpy(buf, str); // might be castling
+	  if((prom = strstr(move_str, "=")) && !strstr(buf, "=")) 
+		strcat(buf, prom); // long move lacks promo specification!
+	  if(!appData.testLegality) {
+		if(appData.debugMode) 
+			fprintf(debugFP, "replaced ICS move '%s' by '%s'\n", move_str, buf);
+		strcpy(move_str, buf);
+          }
+	  valid = ParseOneMove(move_str, moveNum - 1, &moveType,
+				&fromX, &fromY, &toX, &toY, &promoChar)
+	       || ParseOneMove(buf, moveNum - 1, &moveType,
+				&fromX, &fromY, &toX, &toY, &promoChar);
+	  // end of long SAN patch
+	  if (valid) {
+	    (void) CoordsToAlgebraic(boards[moveNum - 1],
+				     PosFlags(moveNum - 1), EP_UNKNOWN,
+				     fromY, fromX, toY, toX, promoChar,
+				     parseList[moveNum-1]);
+            switch (MateTest(boards[moveNum], PosFlags(moveNum), EP_UNKNOWN,
+                             castlingRights[moveNum]) ) {
+	      case MT_NONE:
+	      case MT_STALEMATE:
+	      default:
+		break;
+	      case MT_CHECK:
+                if(gameInfo.variant != VariantShogi)
+                    strcat(parseList[moveNum - 1], "+");
+		break;
+	      case MT_CHECKMATE:
+		strcat(parseList[moveNum - 1], "#");
+		break;
+	    }
+	    strcat(parseList[moveNum - 1], " ");
+	    strcat(parseList[moveNum - 1], elapsed_time);
+	    /* currentMoveString is set as a side-effect of ParseOneMove */
+	    strcpy(moveList[moveNum - 1], currentMoveString);
+	    strcat(moveList[moveNum - 1], "\n");
+	  } else {
+	    /* Move from ICS was illegal!?  Punt. */
+  if (appData.debugMode) {
+    fprintf(debugFP, "Illegal move from ICS '%s'\n", move_str);
+    fprintf(debugFP, "board L=%d, R=%d, H=%d, holdings=%d\n", BOARD_LEFT, BOARD_RGHT, BOARD_HEIGHT, gameInfo.holdingsWidth);
+  }
+#if 0
+	    if (appData.testLegality && appData.debugMode) {
+		sprintf(str, "Illegal move \"%s\" from ICS", move_str);
+		DisplayError(str, 0);
+	    }
+#endif
+	    strcpy(parseList[moveNum - 1], move_str);
+	    strcat(parseList[moveNum - 1], " ");
+	    strcat(parseList[moveNum - 1], elapsed_time);
+	    moveList[moveNum - 1][0] = NULLCHAR;
+ 	    fromX = fromY = toX = toY = -1;
+	  }
+	}
+  if (appData.debugMode) {
+    fprintf(debugFP, "Move parsed to '%s'\n", parseList[moveNum - 1]);
+    setbuf(debugFP, NULL);
+  }
+
+#if ZIPPY
+	/* Send move to chess program (BEFORE animating it). */
+	if (appData.zippyPlay && !newGame && newMove && 
+	   (!appData.getMoveList || backwardMostMove == 0) && first.initDone) {
+
+	    if ((gameMode == IcsPlayingWhite && WhiteOnMove(moveNum)) ||
+		(gameMode == IcsPlayingBlack && !WhiteOnMove(moveNum))) {
+		if (moveList[moveNum - 1][0] == NULLCHAR) {
+		    sprintf(str, _("Couldn't parse move \"%s\" from ICS"),
+			    move_str);
+		    DisplayError(str, 0);
+		} else {
+		    if (first.sendTime) {
+			SendTimeRemaining(&first, gameMode == IcsPlayingWhite);
+		    }
+		    bookHit = SendMoveToBookUser(moveNum - 1, &first, FALSE); // [HGM] book
+		    if (firstMove && !bookHit) {
+			firstMove = FALSE;
+			if (first.useColors) {
+			  SendToProgram(gameMode == IcsPlayingWhite ?
+					"white\ngo\n" :
+					"black\ngo\n", &first);
+			} else {
+			  SendToProgram("go\n", &first);
+			}
+			first.maybeThinking = TRUE;
+		    }
+		}
+	    } else if (gameMode == IcsObserving || gameMode == IcsExamining) {
+	      if (moveList[moveNum - 1][0] == NULLCHAR) {
+		sprintf(str, _("Couldn't parse move \"%s\" from ICS"), move_str);
+		DisplayError(str, 0);
+	      } else {
+		if(gameInfo.variant == currentlyInitializedVariant) // [HGM] refrain sending moves engine can't understand!
+		SendMoveToProgram(moveNum - 1, &first);
+	      }
+	    }
+	}
+#endif
+    }
+
+    if (moveNum > 0 && !gotPremove) {
+	/* If move comes from a remote source, animate it.  If it
+	   isn't remote, it will have already been animated. */
+	if (!pausing && !ics_user_moved && prevMove == moveNum - 1) {
+	    AnimateMove(boards[moveNum - 1], fromX, fromY, toX, toY);
+	}
+	if (!pausing && appData.highlightLastMove) {
+	    SetHighlights(fromX, fromY, toX, toY);
+	}
+    }
+    
+    /* Start the clocks */
+    whiteFlag = blackFlag = FALSE;
+    appData.clockMode = !(basetime == 0 && increment == 0);
+    if (ticking == 0) {
+      ics_clock_paused = TRUE;
+      StopClocks();
+    } else if (ticking == 1) {
+      ics_clock_paused = FALSE;
+    }
+    if (gameMode == IcsIdle ||
+	relation == RELATION_OBSERVING_STATIC ||
+	relation == RELATION_EXAMINING ||
+	ics_clock_paused)
+      DisplayBothClocks();
+    else
+      StartClocks();
+    
+    /* Display opponents and material strengths */
+    if (gameInfo.variant != VariantBughouse &&
+	gameInfo.variant != VariantCrazyhouse) {
+	if (tinyLayout || smallLayout) {
+	    if(gameInfo.variant == VariantNormal)
+		sprintf(str, "%s(%d) %s(%d) {%d %d}", 
+		    gameInfo.white, white_stren, gameInfo.black, black_stren,
+		    basetime, increment);
+	    else
+		sprintf(str, "%s(%d) %s(%d) {%d %d w%d}", 
+		    gameInfo.white, white_stren, gameInfo.black, black_stren,
+		    basetime, increment, (int) gameInfo.variant);
+	} else {
+	    if(gameInfo.variant == VariantNormal)
+		sprintf(str, "%s (%d) vs. %s (%d) {%d %d}", 
+		    gameInfo.white, white_stren, gameInfo.black, black_stren,
+		    basetime, increment);
+	    else
+		sprintf(str, "%s (%d) vs. %s (%d) {%d %d %s}", 
+		    gameInfo.white, white_stren, gameInfo.black, black_stren,
+		    basetime, increment, VariantName(gameInfo.variant));
+	}
+	DisplayTitle(str);
+  if (appData.debugMode) {
+    fprintf(debugFP, "Display title '%s, gameInfo.variant = %d'\n", str, gameInfo.variant);
+  }
+    }
+
+   
+    /* Display the board */
+    if (!pausing) {
+      
+      if (appData.premove)
+	  if (!gotPremove || 
+	     ((gameMode == IcsPlayingWhite) && (WhiteOnMove(currentMove))) ||
+	     ((gameMode == IcsPlayingBlack) && (!WhiteOnMove(currentMove))))
+	      ClearPremoveHighlights();
+
+      DrawPosition(FALSE, boards[currentMove]);
+      DisplayMove(moveNum - 1);
+      if (appData.ringBellAfterMoves && !ics_user_moved)
+	RingBell();
+    }
+
+    HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
+#if ZIPPY
+    if(bookHit) { // [HGM] book: simulate book reply
+	static char bookMove[MSG_SIZ]; // a bit generous?
+
+	programStats.nodes = programStats.depth = programStats.time = 
+	programStats.score = programStats.got_only_move = 0;
+	sprintf(programStats.movelist, "%s (xbook)", bookHit);
+
+	strcpy(bookMove, "move ");
+	strcat(bookMove, bookHit);
+	HandleMachineMove(bookMove, &first);
+    }
+#endif
+}
+
+void
+GetMoveListEvent()
+{
+    char buf[MSG_SIZ];
+    if (appData.icsActive && gameMode != IcsIdle && ics_gamenum > 0) {
+	ics_getting_history = H_REQUESTED;
+	sprintf(buf, "%smoves %d\n", ics_prefix, ics_gamenum);
+	SendToICS(buf);
+    }
+}
+
+void
+AnalysisPeriodicEvent(force)
+     int force;
+{
+    if (((programStats.ok_to_send == 0 || programStats.line_is_book)
+	 && !force) || !appData.periodicUpdates)
+      return;
+
+    /* Send . command to Crafty to collect stats */
+    SendToProgram(".\n", &first);
+
+    /* Don't send another until we get a response (this makes
+       us stop sending to old Crafty's which don't understand
+       the "." command (sending illegal cmds resets node count & time,
+       which looks bad)) */
+    programStats.ok_to_send = 0;
+}
+
+void
+SendMoveToProgram(moveNum, cps)
+     int moveNum;
+     ChessProgramState *cps;
+{
+    char buf[MSG_SIZ];
+
+    if (cps->useUsermove) {
+      SendToProgram("usermove ", cps);
+    }
+    if (cps->useSAN) {
+      char *space;
+      if ((space = strchr(parseList[moveNum], ' ')) != NULL) {
+	int len = space - parseList[moveNum];
+	memcpy(buf, parseList[moveNum], len);
+	buf[len++] = '\n';
+	buf[len] = NULLCHAR;
+      } else {
+	sprintf(buf, "%s\n", parseList[moveNum]);
+      }
+      SendToProgram(buf, cps);
+    } else {
+      if(cps->alphaRank) { /* [HGM] shogi: temporarily convert to shogi coordinates before sending */
+	AlphaRank(moveList[moveNum], 4);
+	SendToProgram(moveList[moveNum], cps);
+	AlphaRank(moveList[moveNum], 4); // and back
+      } else
+      /* Added by Tord: Send castle moves in "O-O" in FRC games if required by
+       * the engine. It would be nice to have a better way to identify castle 
+       * moves here. */
+      if((gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom)
+									 && cps->useOOCastle) {
+        int fromX = moveList[moveNum][0] - AAA; 
+        int fromY = moveList[moveNum][1] - ONE;
+        int toX = moveList[moveNum][2] - AAA; 
+        int toY = moveList[moveNum][3] - ONE;
+        if((boards[moveNum][fromY][fromX] == WhiteKing 
+            && boards[moveNum][toY][toX] == WhiteRook)
+           || (boards[moveNum][fromY][fromX] == BlackKing 
+               && boards[moveNum][toY][toX] == BlackRook)) {
+	  if(toX > fromX) SendToProgram("O-O\n", cps);
+	  else SendToProgram("O-O-O\n", cps);
+	}
+	else SendToProgram(moveList[moveNum], cps);
+      }
+      else SendToProgram(moveList[moveNum], cps);
+      /* End of additions by Tord */
+    }
+
+    /* [HGM] setting up the opening has brought engine in force mode! */
+    /*       Send 'go' if we are in a mode where machine should play. */
+    if( (moveNum == 0 && setboardSpoiledMachineBlack && cps == &first) &&
+        (gameMode == TwoMachinesPlay   ||
+#ifdef ZIPPY
+         gameMode == IcsPlayingBlack     || gameMode == IcsPlayingWhite ||
+#endif
+         gameMode == MachinePlaysBlack || gameMode == MachinePlaysWhite) ) {
+        SendToProgram("go\n", cps);
+  if (appData.debugMode) {
+    fprintf(debugFP, "(extra)\n");
+  }
+    }
+    setboardSpoiledMachineBlack = 0;
+}
+
+void
+SendMoveToICS(moveType, fromX, fromY, toX, toY)
+     ChessMove moveType;
+     int fromX, fromY, toX, toY;
+{
+    char user_move[MSG_SIZ];
+
+    switch (moveType) {
+      default:
+	sprintf(user_move, _("say Internal error; bad moveType %d (%d,%d-%d,%d)"),
+		(int)moveType, fromX, fromY, toX, toY);
+	DisplayError(user_move + strlen("say "), 0);
+	break;
+      case WhiteKingSideCastle:
+      case BlackKingSideCastle:
+      case WhiteQueenSideCastleWild:
+      case BlackQueenSideCastleWild:
+      /* PUSH Fabien */
+      case WhiteHSideCastleFR:
+      case BlackHSideCastleFR:
+      /* POP Fabien */
+	sprintf(user_move, "o-o\n");
+	break;
+      case WhiteQueenSideCastle:
+      case BlackQueenSideCastle:
+      case WhiteKingSideCastleWild:
+      case BlackKingSideCastleWild:
+      /* PUSH Fabien */
+      case WhiteASideCastleFR:
+      case BlackASideCastleFR:
+      /* POP Fabien */
+	sprintf(user_move, "o-o-o\n");
+	break;
+      case WhitePromotionQueen:
+      case BlackPromotionQueen:
+      case WhitePromotionRook:
+      case BlackPromotionRook:
+      case WhitePromotionBishop:
+      case BlackPromotionBishop:
+      case WhitePromotionKnight:
+      case BlackPromotionKnight:
+      case WhitePromotionKing:
+      case BlackPromotionKing:
+      case WhitePromotionChancellor:
+      case BlackPromotionChancellor:
+      case WhitePromotionArchbishop:
+      case BlackPromotionArchbishop:
+        if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
+            sprintf(user_move, "%c%c%c%c=%c\n",
+                AAA + fromX, ONE + fromY, AAA + toX, ONE + toY,
+		PieceToChar(WhiteFerz));
+        else if(gameInfo.variant == VariantGreat)
+            sprintf(user_move, "%c%c%c%c=%c\n",
+                AAA + fromX, ONE + fromY, AAA + toX, ONE + toY,
+		PieceToChar(WhiteMan));
+        else
+            sprintf(user_move, "%c%c%c%c=%c\n",
+                AAA + fromX, ONE + fromY, AAA + toX, ONE + toY,
+		PieceToChar(PromoPiece(moveType)));
+	break;
+      case WhiteDrop:
+      case BlackDrop:
+	sprintf(user_move, "%c@%c%c\n",
+		ToUpper(PieceToChar((ChessSquare) fromX)),
+                AAA + toX, ONE + toY);
+	break;
+      case NormalMove:
+      case WhiteCapturesEnPassant:
+      case BlackCapturesEnPassant:
+      case IllegalMove:  /* could be a variant we don't quite understand */
+	sprintf(user_move, "%c%c%c%c\n",
+                AAA + fromX, ONE + fromY, AAA + toX, ONE + toY);
+	break;
+    }
+    SendToICS(user_move);
+}
+
+void
+CoordsToComputerAlgebraic(rf, ff, rt, ft, promoChar, move)
+     int rf, ff, rt, ft;
+     char promoChar;
+     char move[7];
+{
+    if (rf == DROP_RANK) {
+	sprintf(move, "%c@%c%c\n",
+                ToUpper(PieceToChar((ChessSquare) ff)), AAA + ft, ONE + rt);
+    } else {
+	if (promoChar == 'x' || promoChar == NULLCHAR) {
+	    sprintf(move, "%c%c%c%c\n",
+                    AAA + ff, ONE + rf, AAA + ft, ONE + rt);
+	} else {
+	    sprintf(move, "%c%c%c%c%c\n",
+                    AAA + ff, ONE + rf, AAA + ft, ONE + rt, promoChar);
+	}
+    }
+}
+
+void
+ProcessICSInitScript(f)
+     FILE *f;
+{
+    char buf[MSG_SIZ];
+
+    while (fgets(buf, MSG_SIZ, f)) {
+	SendToICSDelayed(buf,(long)appData.msLoginDelay);
+    }
+
+    fclose(f);
+}
+
+
+/* [HGM] Shogi move preprocessor: swap digits for letters, vice versa */
+void
+AlphaRank(char *move, int n)
+{
+//    char *p = move, c; int x, y;
+
+    if (appData.debugMode) {
+        fprintf(debugFP, "alphaRank(%s,%d)\n", move, n);
+    }
+
+    if(move[1]=='*' && 
+       move[2]>='0' && move[2]<='9' &&
+       move[3]>='a' && move[3]<='x'    ) {
+        move[1] = '@';
+        move[2] = BOARD_RGHT  -1 - (move[2]-'1') + AAA;
+        move[3] = BOARD_HEIGHT-1 - (move[3]-'a') + ONE;
+    } else
+    if(move[0]>='0' && move[0]<='9' &&
+       move[1]>='a' && move[1]<='x' &&
+       move[2]>='0' && move[2]<='9' &&
+       move[3]>='a' && move[3]<='x'    ) {
+        /* input move, Shogi -> normal */
+        move[0] = BOARD_RGHT  -1 - (move[0]-'1') + AAA;
+        move[1] = BOARD_HEIGHT-1 - (move[1]-'a') + ONE;
+        move[2] = BOARD_RGHT  -1 - (move[2]-'1') + AAA;
+        move[3] = BOARD_HEIGHT-1 - (move[3]-'a') + ONE;
+    } else
+    if(move[1]=='@' &&
+       move[3]>='0' && move[3]<='9' &&
+       move[2]>='a' && move[2]<='x'    ) {
+        move[1] = '*';
+        move[2] = BOARD_RGHT - 1 - (move[2]-AAA) + '1';
+        move[3] = BOARD_HEIGHT-1 - (move[3]-ONE) + 'a';
+    } else
+    if(
+       move[0]>='a' && move[0]<='x' &&
+       move[3]>='0' && move[3]<='9' &&
+       move[2]>='a' && move[2]<='x'    ) {
+         /* output move, normal -> Shogi */
+        move[0] = BOARD_RGHT - 1 - (move[0]-AAA) + '1';
+        move[1] = BOARD_HEIGHT-1 - (move[1]-ONE) + 'a';
+        move[2] = BOARD_RGHT - 1 - (move[2]-AAA) + '1';
+        move[3] = BOARD_HEIGHT-1 - (move[3]-ONE) + 'a';
+        if(move[4] == PieceToChar(BlackQueen)) move[4] = '+';
+    }
+    if (appData.debugMode) {
+        fprintf(debugFP, "   out = '%s'\n", move);
+    }
+}
+
+/* Parser for moves from gnuchess, ICS, or user typein box */
+Boolean
+ParseOneMove(move, moveNum, moveType, fromX, fromY, toX, toY, promoChar)
+     char *move;
+     int moveNum;
+     ChessMove *moveType;
+     int *fromX, *fromY, *toX, *toY;
+     char *promoChar;
+{       
+    if (appData.debugMode) {
+        fprintf(debugFP, "move to parse: %s\n", move);
+    }
+    *moveType = yylexstr(moveNum, move);
+
+    switch (*moveType) {
+      case WhitePromotionChancellor:
+      case BlackPromotionChancellor:
+      case WhitePromotionArchbishop:
+      case BlackPromotionArchbishop:
+      case WhitePromotionQueen:
+      case BlackPromotionQueen:
+      case WhitePromotionRook:
+      case BlackPromotionRook:
+      case WhitePromotionBishop:
+      case BlackPromotionBishop:
+      case WhitePromotionKnight:
+      case BlackPromotionKnight:
+      case WhitePromotionKing:
+      case BlackPromotionKing:
+      case NormalMove:
+      case WhiteCapturesEnPassant:
+      case BlackCapturesEnPassant:
+      case WhiteKingSideCastle:
+      case WhiteQueenSideCastle:
+      case BlackKingSideCastle:
+      case BlackQueenSideCastle:
+      case WhiteKingSideCastleWild:
+      case WhiteQueenSideCastleWild:
+      case BlackKingSideCastleWild:
+      case BlackQueenSideCastleWild:
+      /* Code added by Tord: */
+      case WhiteHSideCastleFR:
+      case WhiteASideCastleFR:
+      case BlackHSideCastleFR:
+      case BlackASideCastleFR:
+      /* End of code added by Tord */
+      case IllegalMove:		/* bug or odd chess variant */
+        *fromX = currentMoveString[0] - AAA;
+        *fromY = currentMoveString[1] - ONE;
+        *toX = currentMoveString[2] - AAA;
+        *toY = currentMoveString[3] - ONE;
+	*promoChar = currentMoveString[4];
+        if (*fromX < BOARD_LEFT || *fromX >= BOARD_RGHT || *fromY < 0 || *fromY >= BOARD_HEIGHT ||
+            *toX < BOARD_LEFT || *toX >= BOARD_RGHT || *toY < 0 || *toY >= BOARD_HEIGHT) {
+    if (appData.debugMode) {
+        fprintf(debugFP, "Off-board move (%d,%d)-(%d,%d)%c, type = %d\n", *fromX, *fromY, *toX, *toY, *promoChar, *moveType);
+    }
+	    *fromX = *fromY = *toX = *toY = 0;
+	    return FALSE;
+	}
+	if (appData.testLegality) {
+	  return (*moveType != IllegalMove);
+	} else {
+	  return !(fromX == fromY && toX == toY);
+	}
+
+      case WhiteDrop:
+      case BlackDrop:
+	*fromX = *moveType == WhiteDrop ?
+	  (int) CharToPiece(ToUpper(currentMoveString[0])) :
+	  (int) CharToPiece(ToLower(currentMoveString[0]));
+	*fromY = DROP_RANK;
+        *toX = currentMoveString[2] - AAA;
+        *toY = currentMoveString[3] - ONE;
+	*promoChar = NULLCHAR;
+	return TRUE;
+
+      case AmbiguousMove:
+      case ImpossibleMove:
+      case (ChessMove) 0:	/* end of file */
+      case ElapsedTime:
+      case Comment:
+      case PGNTag:
+      case NAG:
+      case WhiteWins:
+      case BlackWins:
+      case GameIsDrawn:
+      default:
+    if (appData.debugMode) {
+        fprintf(debugFP, "Impossible move %s, type = %d\n", currentMoveString, *moveType);
+    }
+	/* bug? */
+	*fromX = *fromY = *toX = *toY = 0;
+	*promoChar = NULLCHAR;
+	return FALSE;
+    }
+}
+
+// [HGM] shuffle: a general way to suffle opening setups, applicable to arbitrary variants.
+// All positions will have equal probability, but the current method will not provide a unique
+// numbering scheme for arrays that contain 3 or more pieces of the same kind.
+#define DARK 1
+#define LITE 2
+#define ANY 3
+
+int squaresLeft[4];
+int piecesLeft[(int)BlackPawn];
+int seed, nrOfShuffles;
+
+void GetPositionNumber()
+{	// sets global variable seed
+	int i;
+
+	seed = appData.defaultFrcPosition;
+	if(seed < 0) { // randomize based on time for negative FRC position numbers
+		for(i=0; i<50; i++) seed += random();
+		seed = random() ^ random() >> 8 ^ random() << 8;
+		if(seed<0) seed = -seed;
+	}
+}
+
+int put(Board board, int pieceType, int rank, int n, int shade)
+// put the piece on the (n-1)-th empty squares of the given shade
+{
+	int i;
+
+	for(i=BOARD_LEFT; i<BOARD_RGHT; i++) {
+		if( (((i-BOARD_LEFT)&1)+1) & shade && board[rank][i] == EmptySquare && n-- == 0) {
+			board[rank][i] = (ChessSquare) pieceType;
+			squaresLeft[((i-BOARD_LEFT)&1) + 1]--;
+			squaresLeft[ANY]--;
+			piecesLeft[pieceType]--; 
+			return i;
+		}
+	}
+        return -1;
+}
+
+
+void AddOnePiece(Board board, int pieceType, int rank, int shade)
+// calculate where the next piece goes, (any empty square), and put it there
+{
+	int i;
+
+        i = seed % squaresLeft[shade];
+	nrOfShuffles *= squaresLeft[shade];
+	seed /= squaresLeft[shade];
+        put(board, pieceType, rank, i, shade);
+}
+
+void AddTwoPieces(Board board, int pieceType, int rank)
+// calculate where the next 2 identical pieces go, (any empty square), and put it there
+{
+	int i, n=squaresLeft[ANY], j=n-1, k;
+
+	k = n*(n-1)/2; // nr of possibilities, not counting permutations
+        i = seed % k;  // pick one
+	nrOfShuffles *= k;
+	seed /= k;
+	while(i >= j) i -= j--;
+        j = n - 1 - j; i += j;
+        put(board, pieceType, rank, j, ANY);
+        put(board, pieceType, rank, i, ANY);
+}
+
+void SetUpShuffle(Board board, int number)
+{
+	int i, p, first=1;
+
+	GetPositionNumber(); nrOfShuffles = 1;
+
+	squaresLeft[DARK] = (BOARD_RGHT - BOARD_LEFT + 1)/2;
+	squaresLeft[ANY]  = BOARD_RGHT - BOARD_LEFT;
+	squaresLeft[LITE] = squaresLeft[ANY] - squaresLeft[DARK];
+
+	for(p = 0; p<=(int)WhiteKing; p++) piecesLeft[p] = 0;
+
+	for(i=BOARD_LEFT; i<BOARD_RGHT; i++) { // count pieces and clear board
+	    p = (int) board[0][i];
+	    if(p < (int) BlackPawn) piecesLeft[p] ++;
+	    board[0][i] = EmptySquare;
+	}
+
+	if(PosFlags(0) & F_ALL_CASTLE_OK) {
+	    // shuffles restricted to allow normal castling put KRR first
+	    if(piecesLeft[(int)WhiteKing]) // King goes rightish of middle
+		put(board, WhiteKing, 0, (gameInfo.boardWidth+1)/2, ANY);
+	    else if(piecesLeft[(int)WhiteUnicorn]) // in Knightmate Unicorn castles
+		put(board, WhiteUnicorn, 0, (gameInfo.boardWidth+1)/2, ANY);
+	    if(piecesLeft[(int)WhiteRook]) // First supply a Rook for K-side castling
+		put(board, WhiteRook, 0, gameInfo.boardWidth-2, ANY);
+	    if(piecesLeft[(int)WhiteRook]) // Then supply a Rook for Q-side castling
+		put(board, WhiteRook, 0, 0, ANY);
+	    // in variants with super-numerary Kings and Rooks, we leave these for the shuffle
+	}
+
+	if(((BOARD_RGHT-BOARD_LEFT) & 1) == 0)
+	    // only for even boards make effort to put pairs of colorbound pieces on opposite colors
+	    for(p = (int) WhiteKing; p > (int) WhitePawn; p--) {
+		if(p != (int) WhiteBishop && p != (int) WhiteFerz && p != (int) WhiteAlfil) continue;
+		while(piecesLeft[p] >= 2) {
+		    AddOnePiece(board, p, 0, LITE);
+		    AddOnePiece(board, p, 0, DARK);
+		}
+		// Odd color-bound pieces are shuffled with the rest (to not run out of paired squares)
+	    }
+
+	for(p = (int) WhiteKing - 2; p > (int) WhitePawn; p--) {
+	    // Remaining pieces (non-colorbound, or odd color bound) can be put anywhere
+	    // but we leave King and Rooks for last, to possibly obey FRC restriction
+	    if(p == (int)WhiteRook) continue;
+	    while(piecesLeft[p] >= 2) AddTwoPieces(board, p, 0); // add in pairs, for not counting permutations
+	    if(piecesLeft[p]) AddOnePiece(board, p, 0, ANY);     // add the odd piece
+	}
+
+	// now everything is placed, except perhaps King (Unicorn) and Rooks
+
+	if(PosFlags(0) & F_FRC_TYPE_CASTLING) {
+	    // Last King gets castling rights
+	    while(piecesLeft[(int)WhiteUnicorn]) {
+		i = put(board, WhiteUnicorn, 0, piecesLeft[(int)WhiteRook]/2, ANY);
+		initialRights[2]  = initialRights[5]  = castlingRights[0][2] = castlingRights[0][5] = i;
+	    }
+
+	    while(piecesLeft[(int)WhiteKing]) {
+		i = put(board, WhiteKing, 0, piecesLeft[(int)WhiteRook]/2, ANY);
+		initialRights[2]  = initialRights[5]  = castlingRights[0][2] = castlingRights[0][5] = i;
+	    }
+
+
+	} else {
+	    while(piecesLeft[(int)WhiteKing])    AddOnePiece(board, WhiteKing, 0, ANY);
+	    while(piecesLeft[(int)WhiteUnicorn]) AddOnePiece(board, WhiteUnicorn, 0, ANY);
+	}
+
+	// Only Rooks can be left; simply place them all
+	while(piecesLeft[(int)WhiteRook]) {
+		i = put(board, WhiteRook, 0, 0, ANY);
+		if(PosFlags(0) & F_FRC_TYPE_CASTLING) { // first and last Rook get FRC castling rights
+			if(first) {
+				first=0;
+				initialRights[1]  = initialRights[4]  = castlingRights[0][1] = castlingRights[0][4] = i;
+			}
+			initialRights[0]  = initialRights[3]  = castlingRights[0][0] = castlingRights[0][3] = i;
+		}
+	}
+	for(i=BOARD_LEFT; i<BOARD_RGHT; i++) { // copy black from white
+	    board[BOARD_HEIGHT-1][i] =  (int) board[0][i] < BlackPawn ? WHITE_TO_BLACK board[0][i] : EmptySquare;
+	}
+
+	if(number >= 0) appData.defaultFrcPosition %= nrOfShuffles; // normalize
+}
+
+int SetCharTable( char *table, const char * map )
+/* [HGM] moved here from winboard.c because of its general usefulness */
+/*       Basically a safe strcpy that uses the last character as King */
+{
+    int result = FALSE; int NrPieces;
+
+    if( map != NULL && (NrPieces=strlen(map)) <= (int) EmptySquare 
+                    && NrPieces >= 12 && !(NrPieces&1)) {
+        int i; /* [HGM] Accept even length from 12 to 34 */
+
+        for( i=0; i<(int) EmptySquare; i++ ) table[i] = '.';
+        for( i=0; i<NrPieces/2-1; i++ ) {
+            table[i] = map[i];
+            table[i + (int)BlackPawn - (int) WhitePawn] = map[i+NrPieces/2];
+        }
+        table[(int) WhiteKing]  = map[NrPieces/2-1];
+        table[(int) BlackKing]  = map[NrPieces-1];
+
+        result = TRUE;
+    }
+
+    return result;
+}
+
+void Prelude(Board board)
+{	// [HGM] superchess: random selection of exo-pieces
+	int i, j, k; ChessSquare p; 
+	static ChessSquare exoPieces[4] = { WhiteAngel, WhiteMarshall, WhiteSilver, WhiteLance };
+
+	GetPositionNumber(); // use FRC position number
+
+	if(appData.pieceToCharTable != NULL) { // select pieces to participate from given char table
+	    SetCharTable(pieceToChar, appData.pieceToCharTable);
+	    for(i=(int)WhiteQueen+1, j=0; i<(int)WhiteKing && j<4; i++) 
+		if(PieceToChar((ChessSquare)i) != '.') exoPieces[j++] = (ChessSquare) i;
+	}
+
+	j = seed%4;		    seed /= 4; 
+	p = board[0][BOARD_LEFT+j];   board[0][BOARD_LEFT+j] = EmptySquare; k = PieceToNumber(p);
+	board[k][BOARD_WIDTH-1] = p;  board[k][BOARD_WIDTH-2]++;
+	board[BOARD_HEIGHT-1-k][0] = WHITE_TO_BLACK p;  board[BOARD_HEIGHT-1-k][1]++;
+	j = seed%3 + (seed%3 >= j); seed /= 3; 
+	p = board[0][BOARD_LEFT+j];   board[0][BOARD_LEFT+j] = EmptySquare; k = PieceToNumber(p);
+	board[k][BOARD_WIDTH-1] = p;  board[k][BOARD_WIDTH-2]++;
+	board[BOARD_HEIGHT-1-k][0] = WHITE_TO_BLACK p;  board[BOARD_HEIGHT-1-k][1]++;
+	j = seed%3;		    seed /= 3; 
+	p = board[0][BOARD_LEFT+j+5]; board[0][BOARD_LEFT+j+5] = EmptySquare; k = PieceToNumber(p);
+	board[k][BOARD_WIDTH-1] = p;  board[k][BOARD_WIDTH-2]++;
+	board[BOARD_HEIGHT-1-k][0] = WHITE_TO_BLACK p;  board[BOARD_HEIGHT-1-k][1]++;
+	j = seed%2 + (seed%2 >= j); seed /= 2; 
+	p = board[0][BOARD_LEFT+j+5]; board[0][BOARD_LEFT+j+5] = EmptySquare; k = PieceToNumber(p);
+	board[k][BOARD_WIDTH-1] = p;  board[k][BOARD_WIDTH-2]++;
+	board[BOARD_HEIGHT-1-k][0] = WHITE_TO_BLACK p;  board[BOARD_HEIGHT-1-k][1]++;
+	j = seed%4; seed /= 4; put(board, exoPieces[3],    0, j, ANY);
+	j = seed%3; seed /= 3; put(board, exoPieces[2],   0, j, ANY);
+	j = seed%2; seed /= 2; put(board, exoPieces[1], 0, j, ANY);
+	put(board, exoPieces[0],    0, 0, ANY);
+	for(i=BOARD_LEFT; i<BOARD_RGHT; i++) board[BOARD_HEIGHT-1][i] = WHITE_TO_BLACK board[0][i];
+}
+
+void
+InitPosition(redraw)
+     int redraw;
+{
+    ChessSquare (* pieces)[BOARD_SIZE];
+    int i, j, pawnRow, overrule,
+    oldx = gameInfo.boardWidth,
+    oldy = gameInfo.boardHeight,
+    oldh = gameInfo.holdingsWidth,
+    oldv = gameInfo.variant;
+
+    currentMove = forwardMostMove = backwardMostMove = 0;
+    if(appData.icsActive) shuffleOpenings = FALSE; // [HGM] shuffle: in ICS mode, only shuffle on ICS request
+
+    /* [AS] Initialize pv info list [HGM] and game status */
+    {
+        for( i=0; i<MAX_MOVES; i++ ) {
+            pvInfoList[i].depth = 0;
+            epStatus[i]=EP_NONE;
+            for( j=0; j<BOARD_SIZE; j++ ) castlingRights[i][j] = -1;
+        }
+
+        initialRulePlies = 0; /* 50-move counter start */
+
+        castlingRank[0] = castlingRank[1] = castlingRank[2] = 0;
+        castlingRank[3] = castlingRank[4] = castlingRank[5] = BOARD_HEIGHT-1;
+    }
+
+    
+    /* [HGM] logic here is completely changed. In stead of full positions */
+    /* the initialized data only consist of the two backranks. The switch */
+    /* selects which one we will use, which is than copied to the Board   */
+    /* initialPosition, which for the rest is initialized by Pawns and    */
+    /* empty squares. This initial position is then copied to boards[0],  */
+    /* possibly after shuffling, so that it remains available.            */
+
+    gameInfo.holdingsWidth = 0; /* default board sizes */
+    gameInfo.boardWidth    = 8;
+    gameInfo.boardHeight   = 8;
+    gameInfo.holdingsSize  = 0;
+    nrCastlingRights = -1; /* [HGM] Kludge to indicate default should be used */
+    for(i=0; i<BOARD_SIZE; i++) initialRights[i] = -1; /* but no rights yet */
+    SetCharTable(pieceToChar, "PNBRQ...........Kpnbrq...........k"); 
+
+    switch (gameInfo.variant) {
+    case VariantFischeRandom:
+      shuffleOpenings = TRUE;
+    default:
+      pieces = FIDEArray;
+      break;
+    case VariantShatranj:
+      pieces = ShatranjArray;
+      nrCastlingRights = 0;
+      SetCharTable(pieceToChar, "PN.R.QB...Kpn.r.qb...k"); 
+      break;
+    case VariantTwoKings:
+      pieces = twoKingsArray;
+      break;
+    case VariantCapaRandom:
+      shuffleOpenings = TRUE;
+    case VariantCapablanca:
+      pieces = CapablancaArray;
+      gameInfo.boardWidth = 10;
+      SetCharTable(pieceToChar, "PNBRQ..ACKpnbrq..ack"); 
+      break;
+    case VariantGothic:
+      pieces = GothicArray;
+      gameInfo.boardWidth = 10;
+      SetCharTable(pieceToChar, "PNBRQ..ACKpnbrq..ack"); 
+      break;
+    case VariantJanus:
+      pieces = JanusArray;
+      gameInfo.boardWidth = 10;
+      SetCharTable(pieceToChar, "PNBRQ..JKpnbrq..jk"); 
+      nrCastlingRights = 6;
+        castlingRights[0][0] = initialRights[0] = BOARD_RGHT-1;
+        castlingRights[0][1] = initialRights[1] = BOARD_LEFT;
+        castlingRights[0][2] = initialRights[2] =(BOARD_WIDTH-1)>>1;
+        castlingRights[0][3] = initialRights[3] = BOARD_RGHT-1;
+        castlingRights[0][4] = initialRights[4] = BOARD_LEFT;
+        castlingRights[0][5] = initialRights[5] =(BOARD_WIDTH-1)>>1;
+      break;
+    case VariantFalcon:
+      pieces = FalconArray;
+      gameInfo.boardWidth = 10;
+      SetCharTable(pieceToChar, "PNBRQ.............FKpnbrq.............fk"); 
+      break;
+    case VariantXiangqi:
+      pieces = XiangqiArray;
+      gameInfo.boardWidth  = 9;
+      gameInfo.boardHeight = 10;
+      nrCastlingRights = 0;
+      SetCharTable(pieceToChar, "PH.R.AE..K.C.ph.r.ae..k.c."); 
+      break;
+    case VariantShogi:
+      pieces = ShogiArray;
+      gameInfo.boardWidth  = 9;
+      gameInfo.boardHeight = 9;
+      gameInfo.holdingsSize = 7;
+      nrCastlingRights = 0;
+      SetCharTable(pieceToChar, "PNBRLS...G.++++++Kpnbrls...g.++++++k"); 
+      break;
+    case VariantCourier:
+      pieces = CourierArray;
+      gameInfo.boardWidth  = 12;
+      nrCastlingRights = 0;
+      SetCharTable(pieceToChar, "PNBR.FE..WMKpnbr.fe..wmk"); 
+      for(i=0; i<BOARD_SIZE; i++) initialRights[i] = -1;
+      break;
+    case VariantKnightmate:
+      pieces = KnightmateArray;
+      SetCharTable(pieceToChar, "P.BRQ.....M.........K.p.brq.....m.........k."); 
+      break;
+    case VariantFairy:
+      pieces = fairyArray;
+      SetCharTable(pieceToChar, "PNBRQFEACWMOHIJGDVSLUKpnbrqfeacwmohijgdvsluk"); 
+      break;
+    case VariantGreat:
+      pieces = GreatArray;
+      gameInfo.boardWidth = 10;
+      SetCharTable(pieceToChar, "PN....E...S..HWGMKpn....e...s..hwgmk");
+      gameInfo.holdingsSize = 8;
+      break;
+    case VariantSuper:
+      pieces = FIDEArray;
+      SetCharTable(pieceToChar, "PNBRQ..SE.......V.AKpnbrq..se.......v.ak");
+      gameInfo.holdingsSize = 8;
+      startedFromSetupPosition = TRUE;
+      break;
+    case VariantCrazyhouse:
+    case VariantBughouse:
+      pieces = FIDEArray;
+      SetCharTable(pieceToChar, "PNBRQ.......~~~~Kpnbrq.......~~~~k"); 
+      gameInfo.holdingsSize = 5;
+      break;
+    case VariantWildCastle:
+      pieces = FIDEArray;
+      /* !!?shuffle with kings guaranteed to be on d or e file */
+      shuffleOpenings = 1;
+      break;
+    case VariantNoCastle:
+      pieces = FIDEArray;
+      nrCastlingRights = 0;
+      for(i=0; i<BOARD_SIZE; i++) initialRights[i] = -1;
+      /* !!?unconstrained back-rank shuffle */
+      shuffleOpenings = 1;
+      break;
+    }
+
+    overrule = 0;
+    if(appData.NrFiles >= 0) {
+        if(gameInfo.boardWidth != appData.NrFiles) overrule++;
+        gameInfo.boardWidth = appData.NrFiles;
+    }
+    if(appData.NrRanks >= 0) {
+        gameInfo.boardHeight = appData.NrRanks;
+    }
+    if(appData.holdingsSize >= 0) {
+        i = appData.holdingsSize;
+        if(i > gameInfo.boardHeight) i = gameInfo.boardHeight;
+        gameInfo.holdingsSize = i;
+    }
+    if(gameInfo.holdingsSize) gameInfo.holdingsWidth = 2;
+    if(BOARD_HEIGHT > BOARD_SIZE || BOARD_WIDTH > BOARD_SIZE)
+        DisplayFatalError(_("Recompile to support this BOARD_SIZE!"), 0, 2);
+
+    pawnRow = gameInfo.boardHeight - 7; /* seems to work in all common variants */
+    if(pawnRow < 1) pawnRow = 1;
+
+    /* User pieceToChar list overrules defaults */
+    if(appData.pieceToCharTable != NULL)
+        SetCharTable(pieceToChar, appData.pieceToCharTable);
+
+    for( j=0; j<BOARD_WIDTH; j++ ) { ChessSquare s = EmptySquare;
+
+        if(j==BOARD_LEFT-1 || j==BOARD_RGHT)
+            s = (ChessSquare) 0; /* account holding counts in guard band */
+        for( i=0; i<BOARD_HEIGHT; i++ )
+            initialPosition[i][j] = s;
+
+        if(j < BOARD_LEFT || j >= BOARD_RGHT || overrule) continue;
+        initialPosition[0][j] = pieces[0][j-gameInfo.holdingsWidth];
+        initialPosition[pawnRow][j] = WhitePawn;
+        initialPosition[BOARD_HEIGHT-pawnRow-1][j] = BlackPawn;
+        if(gameInfo.variant == VariantXiangqi) {
+            if(j&1) {
+                initialPosition[pawnRow][j] = 
+                initialPosition[BOARD_HEIGHT-pawnRow-1][j] = EmptySquare;
+                if(j==BOARD_LEFT+1 || j>=BOARD_RGHT-2) {
+                   initialPosition[2][j] = WhiteCannon;
+                   initialPosition[BOARD_HEIGHT-3][j] = BlackCannon;
+                }
+            }
+        }
+        initialPosition[BOARD_HEIGHT-1][j] =  pieces[1][j-gameInfo.holdingsWidth];
+    }
+    if( (gameInfo.variant == VariantShogi) && !overrule ) {
+
+            j=BOARD_LEFT+1;
+            initialPosition[1][j] = WhiteBishop;
+            initialPosition[BOARD_HEIGHT-2][j] = BlackRook;
+            j=BOARD_RGHT-2;
+            initialPosition[1][j] = WhiteRook;
+            initialPosition[BOARD_HEIGHT-2][j] = BlackBishop;
+    }
+
+    if( nrCastlingRights == -1) {
+        /* [HGM] Build normal castling rights (must be done after board sizing!) */
+        /*       This sets default castling rights from none to normal corners   */
+        /* Variants with other castling rights must set them themselves above    */
+        nrCastlingRights = 6;
+       
+        castlingRights[0][0] = initialRights[0] = BOARD_RGHT-1;
+        castlingRights[0][1] = initialRights[1] = BOARD_LEFT;
+        castlingRights[0][2] = initialRights[2] = BOARD_WIDTH>>1;
+        castlingRights[0][3] = initialRights[3] = BOARD_RGHT-1;
+        castlingRights[0][4] = initialRights[4] = BOARD_LEFT;
+        castlingRights[0][5] = initialRights[5] = BOARD_WIDTH>>1;
+     }
+
+     if(gameInfo.variant == VariantSuper) Prelude(initialPosition);
+     if(gameInfo.variant == VariantGreat) { // promotion commoners
+	initialPosition[PieceToNumber(WhiteMan)][BOARD_WIDTH-1] = WhiteMan;
+	initialPosition[PieceToNumber(WhiteMan)][BOARD_WIDTH-2] = 9;
+	initialPosition[BOARD_HEIGHT-1-PieceToNumber(WhiteMan)][0] = BlackMan;
+	initialPosition[BOARD_HEIGHT-1-PieceToNumber(WhiteMan)][1] = 9;
+     }
+#if 0
+    if(gameInfo.variant == VariantFischeRandom) {
+      if( appData.defaultFrcPosition < 0 ) {
+        ShuffleFRC( initialPosition );
+      }
+      else {
+        SetupFRC( initialPosition, appData.defaultFrcPosition );
+      }
+      startedFromSetupPosition = TRUE;
+    } else 
+#else
+  if (appData.debugMode) {
+    fprintf(debugFP, "shuffleOpenings = %d\n", shuffleOpenings);
+  }
+    if(shuffleOpenings) {
+	SetUpShuffle(initialPosition, appData.defaultFrcPosition);
+	startedFromSetupPosition = TRUE;
+    }
+#endif
+    if(startedFromPositionFile) {
+      /* [HGM] loadPos: use PositionFile for every new game */
+      CopyBoard(initialPosition, filePosition);
+      for(i=0; i<nrCastlingRights; i++)
+          castlingRights[0][i] = initialRights[i] = fileRights[i];
+      startedFromSetupPosition = TRUE;
+    }
+
+    CopyBoard(boards[0], initialPosition);
+
+    if(oldx != gameInfo.boardWidth ||
+       oldy != gameInfo.boardHeight ||
+       oldh != gameInfo.holdingsWidth
+#ifdef GOTHIC
+       || oldv == VariantGothic ||        // For licensing popups
+       gameInfo.variant == VariantGothic
+#endif
+#ifdef FALCON
+       || oldv == VariantFalcon ||
+       gameInfo.variant == VariantFalcon
+#endif
+                                         )
+            InitDrawingSizes(-2 ,0);
+
+    if (redraw)
+      DrawPosition(TRUE, boards[currentMove]);
+}
+
+void
+SendBoard(cps, moveNum)
+     ChessProgramState *cps;
+     int moveNum;
+{
+    char message[MSG_SIZ];
+    
+    if (cps->useSetboard) {
+      char* fen = PositionToFEN(moveNum, cps->fenOverride);
+      sprintf(message, "setboard %s\n", fen);
+      SendToProgram(message, cps);
+      free(fen);
+
+    } else {
+      ChessSquare *bp;
+      int i, j;
+      /* Kludge to set black to move, avoiding the troublesome and now
+       * deprecated "black" command.
+       */
+      if (!WhiteOnMove(moveNum)) SendToProgram("a2a3\n", cps);
+
+      SendToProgram("edit\n", cps);
+      SendToProgram("#\n", cps);
+      for (i = BOARD_HEIGHT - 1; i >= 0; i--) {
+	bp = &boards[moveNum][i][BOARD_LEFT];
+        for (j = BOARD_LEFT; j < BOARD_RGHT; j++, bp++) {
+	  if ((int) *bp < (int) BlackPawn) {
+	    sprintf(message, "%c%c%c\n", PieceToChar(*bp), 
+                    AAA + j, ONE + i);
+            if(message[0] == '+' || message[0] == '~') {
+                sprintf(message, "%c%c%c+\n",
+                        PieceToChar((ChessSquare)(DEMOTED *bp)),
+                        AAA + j, ONE + i);
+            }
+            if(cps->alphaRank) { /* [HGM] shogi: translate coords */
+                message[1] = BOARD_RGHT   - 1 - j + '1';
+                message[2] = BOARD_HEIGHT - 1 - i + 'a';
+            }
+	    SendToProgram(message, cps);
+	  }
+	}
+      }
+    
+      SendToProgram("c\n", cps);
+      for (i = BOARD_HEIGHT - 1; i >= 0; i--) {
+	bp = &boards[moveNum][i][BOARD_LEFT];
+        for (j = BOARD_LEFT; j < BOARD_RGHT; j++, bp++) {
+	  if (((int) *bp != (int) EmptySquare)
+	      && ((int) *bp >= (int) BlackPawn)) {
+	    sprintf(message, "%c%c%c\n", ToUpper(PieceToChar(*bp)),
+                    AAA + j, ONE + i);
+            if(message[0] == '+' || message[0] == '~') {
+                sprintf(message, "%c%c%c+\n",
+                        PieceToChar((ChessSquare)(DEMOTED *bp)),
+                        AAA + j, ONE + i);
+            }
+            if(cps->alphaRank) { /* [HGM] shogi: translate coords */
+                message[1] = BOARD_RGHT   - 1 - j + '1';
+                message[2] = BOARD_HEIGHT - 1 - i + 'a';
+            }
+	    SendToProgram(message, cps);
+	  }
+	}
+      }
+    
+      SendToProgram(".\n", cps);
+    }
+    setboardSpoiledMachineBlack = 0; /* [HGM] assume WB 4.2.7 already solves this after sending setboard */
+}
+
+int
+IsPromotion(fromX, fromY, toX, toY)
+     int fromX, fromY, toX, toY;
+{
+    /* [HGM] add Shogi promotions */
+    int promotionZoneSize=1, highestPromotingPiece = (int)WhitePawn;
+    ChessSquare piece;
+
+    if(gameMode == EditPosition || gameInfo.variant == VariantXiangqi ||
+      !(fromX >=0 && fromY >= 0 && toX >= 0 && toY >= 0) ) return FALSE;
+   /* [HGM] Note to self: line above also weeds out drops */
+    piece = boards[currentMove][fromY][fromX];
+    if(gameInfo.variant == VariantShogi) {
+        promotionZoneSize = 3;
+        highestPromotingPiece = (int)WhiteKing;
+        /* [HGM] Should be Silver = Ferz, really, but legality testing is off,
+           and if in normal chess we then allow promotion to King, why not
+           allow promotion of other piece in Shogi?                         */
+    }
+    if((int)piece >= BlackPawn) {
+        if(toY >= promotionZoneSize && fromY >= promotionZoneSize)
+             return FALSE;
+        highestPromotingPiece = WHITE_TO_BLACK highestPromotingPiece;
+    } else {
+        if(  toY < BOARD_HEIGHT - promotionZoneSize &&
+           fromY < BOARD_HEIGHT - promotionZoneSize) return FALSE;
+    }
+    return ( (int)piece <= highestPromotingPiece );
+}
+
+int
+InPalace(row, column)
+     int row, column;
+{   /* [HGM] for Xiangqi */
+    if( (row < 3 || row > BOARD_HEIGHT-4) &&
+         column < (BOARD_WIDTH + 4)/2 &&
+         column > (BOARD_WIDTH - 5)/2 ) return TRUE;
+    return FALSE;
+}
+
+int
+PieceForSquare (x, y)
+     int x;
+     int y;
+{
+  if (x < 0 || x >= BOARD_WIDTH || y < 0 || y >= BOARD_HEIGHT)
+     return -1;
+  else
+     return boards[currentMove][y][x];
+}
+
+int
+OKToStartUserMove(x, y)
+     int x, y;
+{
+    ChessSquare from_piece;
+    int white_piece;
+
+    if (matchMode) return FALSE;
+    if (gameMode == EditPosition) return TRUE;
+
+    if (x >= 0 && y >= 0)
+      from_piece = boards[currentMove][y][x];
+    else
+      from_piece = EmptySquare;
+
+    if (from_piece == EmptySquare) return FALSE;
+
+    white_piece = (int)from_piece >= (int)WhitePawn &&
+      (int)from_piece < (int)BlackPawn; /* [HGM] can be > King! */
+
+    switch (gameMode) {
+      case PlayFromGameFile:
+      case AnalyzeFile:
+      case TwoMachinesPlay:
+      case EndOfGame:
+	return FALSE;
+
+      case IcsObserving:
+      case IcsIdle:
+	return FALSE;
+
+      case MachinePlaysWhite:
+      case IcsPlayingBlack:
+	if (appData.zippyPlay) return FALSE;
+	if (white_piece) {
+	    DisplayMoveError(_("You are playing Black"));
+	    return FALSE;
+	}
+	break;
+
+      case MachinePlaysBlack:
+      case IcsPlayingWhite:
+	if (appData.zippyPlay) return FALSE;
+	if (!white_piece) {
+	    DisplayMoveError(_("You are playing White"));
+	    return FALSE;
+	}
+	break;
+
+      case EditGame:
+	if (!white_piece && WhiteOnMove(currentMove)) {
+	    DisplayMoveError(_("It is White's turn"));
+	    return FALSE;
+	}	    
+	if (white_piece && !WhiteOnMove(currentMove)) {
+	    DisplayMoveError(_("It is Black's turn"));
+	    return FALSE;
+	}	    
+	if (cmailMsgLoaded && (currentMove < cmailOldMove)) {
+	    /* Editing correspondence game history */
+	    /* Could disallow this or prompt for confirmation */
+	    cmailOldMove = -1;
+	}
+	if (currentMove < forwardMostMove) {
+	    /* Discarding moves */
+	    /* Could prompt for confirmation here,
+	       but I don't think that's such a good idea */
+	    forwardMostMove = currentMove;
+	}
+	break;
+
+      case BeginningOfGame:
+	if (appData.icsActive) return FALSE;
+	if (!appData.noChessProgram) {
+	    if (!white_piece) {
+		DisplayMoveError(_("You are playing White"));
+		return FALSE;
+	    }
+	}
+	break;
+	
+      case Training:
+	if (!white_piece && WhiteOnMove(currentMove)) {
+	    DisplayMoveError(_("It is White's turn"));
+	    return FALSE;
+	}	    
+	if (white_piece && !WhiteOnMove(currentMove)) {
+	    DisplayMoveError(_("It is Black's turn"));
+	    return FALSE;
+	}	    
+	break;
+
+      default:
+      case IcsExamining:
+	break;
+    }
+    if (currentMove != forwardMostMove && gameMode != AnalyzeMode
+	&& gameMode != AnalyzeFile && gameMode != Training) {
+	DisplayMoveError(_("Displayed position is not current"));
+	return FALSE;
+    }
+    return TRUE;
+}
+
+FILE *lastLoadGameFP = NULL, *lastLoadPositionFP = NULL;
+int lastLoadGameNumber = 0, lastLoadPositionNumber = 0;
+int lastLoadGameUseList = FALSE;
+char lastLoadGameTitle[MSG_SIZ], lastLoadPositionTitle[MSG_SIZ];
+ChessMove lastLoadGameStart = (ChessMove) 0;
+
+
+ChessMove
+UserMoveTest(fromX, fromY, toX, toY, promoChar)
+     int fromX, fromY, toX, toY;
+     int promoChar;
+{
+    ChessMove moveType;
+    ChessSquare pdown, pup;
+
+    if (fromX < 0 || fromY < 0) return ImpossibleMove;
+    if ((fromX == toX) && (fromY == toY)) {
+        return ImpossibleMove;
+    }
+
+    /* [HGM] suppress all moves into holdings area and guard band */
+    if( toX < BOARD_LEFT || toX >= BOARD_RGHT || toY < 0 )
+            return ImpossibleMove;
+
+    /* [HGM] <sameColor> moved to here from winboard.c */
+    /* note: this code seems to exist for filtering out some obviously illegal premoves */
+    pdown = boards[currentMove][fromY][fromX];
+    pup = boards[currentMove][toY][toX];
+    if (    gameMode != EditPosition &&
+            (WhitePawn <= pdown && pdown < BlackPawn &&
+             WhitePawn <= pup && pup < BlackPawn  ||
+             BlackPawn <= pdown && pdown < EmptySquare &&
+             BlackPawn <= pup && pup < EmptySquare 
+            ) && !((gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom) &&
+                    (pup == WhiteRook && pdown == WhiteKing && fromY == 0 && toY == 0||
+                     pup == BlackRook && pdown == BlackKing && fromY == BOARD_HEIGHT-1 && toY == BOARD_HEIGHT-1  ) 
+        )           )
+         return ImpossibleMove;
+
+    /* Check if the user is playing in turn.  This is complicated because we
+       let the user "pick up" a piece before it is his turn.  So the piece he
+       tried to pick up may have been captured by the time he puts it down!
+       Therefore we use the color the user is supposed to be playing in this
+       test, not the color of the piece that is currently on the starting
+       square---except in EditGame mode, where the user is playing both
+       sides; fortunately there the capture race can't happen.  (It can
+       now happen in IcsExamining mode, but that's just too bad.  The user
+       will get a somewhat confusing message in that case.)
+       */
+
+    switch (gameMode) {
+      case PlayFromGameFile:
+      case AnalyzeFile:
+      case TwoMachinesPlay:
+      case EndOfGame:
+      case IcsObserving:
+      case IcsIdle:
+	/* We switched into a game mode where moves are not accepted,
+           perhaps while the mouse button was down. */
+        return ImpossibleMove;
+
+      case MachinePlaysWhite:
+	/* User is moving for Black */
+	if (WhiteOnMove(currentMove)) {
+	    DisplayMoveError(_("It is White's turn"));
+            return ImpossibleMove;
+	}
+	break;
+
+      case MachinePlaysBlack:
+	/* User is moving for White */
+	if (!WhiteOnMove(currentMove)) {
+	    DisplayMoveError(_("It is Black's turn"));
+            return ImpossibleMove;
+	}
+	break;
+
+      case EditGame:
+      case IcsExamining:
+      case BeginningOfGame:
+      case AnalyzeMode:
+      case Training:
+	if ((int) boards[currentMove][fromY][fromX] >= (int) BlackPawn &&
+            (int) boards[currentMove][fromY][fromX] < (int) EmptySquare) {
+	    /* User is moving for Black */
+	    if (WhiteOnMove(currentMove)) {
+		DisplayMoveError(_("It is White's turn"));
+                return ImpossibleMove;
+	    }
+	} else {
+	    /* User is moving for White */
+	    if (!WhiteOnMove(currentMove)) {
+		DisplayMoveError(_("It is Black's turn"));
+                return ImpossibleMove;
+	    }
+	}
+	break;
+
+      case IcsPlayingBlack:
+	/* User is moving for Black */
+	if (WhiteOnMove(currentMove)) {
+	    if (!appData.premove) {
+		DisplayMoveError(_("It is White's turn"));
+	    } else if (toX >= 0 && toY >= 0) {
+		premoveToX = toX;
+		premoveToY = toY;
+		premoveFromX = fromX;
+		premoveFromY = fromY;
+		premovePromoChar = promoChar;
+		gotPremove = 1;
+		if (appData.debugMode) 
+		    fprintf(debugFP, "Got premove: fromX %d,"
+			    "fromY %d, toX %d, toY %d\n",
+			    fromX, fromY, toX, toY);
+	    }
+            return ImpossibleMove;
+	}
+	break;
+
+      case IcsPlayingWhite:
+	/* User is moving for White */
+	if (!WhiteOnMove(currentMove)) {
+	    if (!appData.premove) {
+		DisplayMoveError(_("It is Black's turn"));
+	    } else if (toX >= 0 && toY >= 0) {
+		premoveToX = toX;
+		premoveToY = toY;
+		premoveFromX = fromX;
+		premoveFromY = fromY;
+		premovePromoChar = promoChar;
+		gotPremove = 1;
+		if (appData.debugMode) 
+		    fprintf(debugFP, "Got premove: fromX %d,"
+			    "fromY %d, toX %d, toY %d\n",
+			    fromX, fromY, toX, toY);
+	    }
+            return ImpossibleMove;
+	}
+	break;
+
+      default:
+	break;
+
+      case EditPosition:
+	/* EditPosition, empty square, or different color piece;
+	   click-click move is possible */
+	if (toX == -2 || toY == -2) {
+	    boards[0][fromY][fromX] = EmptySquare;
+	    return AmbiguousMove;
+	} else if (toX >= 0 && toY >= 0) {
+	    boards[0][toY][toX] = boards[0][fromY][fromX];
+	    boards[0][fromY][fromX] = EmptySquare;
+	    return AmbiguousMove;
+	}
+        return ImpossibleMove;
+    }
+
+    /* [HGM] If move started in holdings, it means a drop */
+    if( fromX == BOARD_LEFT-2 || fromX == BOARD_RGHT+1) { 
+         if( pup != EmptySquare ) return ImpossibleMove;
+         if(appData.testLegality) {
+             /* it would be more logical if LegalityTest() also figured out
+              * which drops are legal. For now we forbid pawns on back rank.
+              * Shogi is on its own here...
+              */
+             if( (pdown == WhitePawn || pdown == BlackPawn) &&
+                 (toY == 0 || toY == BOARD_HEIGHT -1 ) )
+                 return(ImpossibleMove); /* no pawn drops on 1st/8th */
+         }
+         return WhiteDrop; /* Not needed to specify white or black yet */
+    }
+
+    userOfferedDraw = FALSE;
+	
+    /* [HGM] always test for legality, to get promotion info */
+    moveType = LegalityTest(boards[currentMove], PosFlags(currentMove),
+                          epStatus[currentMove], castlingRights[currentMove],
+                                         fromY, fromX, toY, toX, promoChar);
+
+    /* [HGM] but possibly ignore an IllegalMove result */
+    if (appData.testLegality) {
+	if (moveType == IllegalMove || moveType == ImpossibleMove) {
+	    DisplayMoveError(_("Illegal move"));
+            return ImpossibleMove;
+	}
+    }
+if(appData.debugMode) fprintf(debugFP, "moveType 3 = %d, promochar = %x\n", moveType, promoChar);
+    return moveType;
+    /* [HGM] <popupFix> in stead of calling FinishMove directly, this
+       function is made into one that returns an OK move type if FinishMove
+       should be called. This to give the calling driver routine the
+       opportunity to finish the userMove input with a promotion popup,
+       without bothering the user with this for invalid or illegal moves */
+
+/*    FinishMove(moveType, fromX, fromY, toX, toY, promoChar); */
+}
+
+/* Common tail of UserMoveEvent and DropMenuEvent */
+int
+FinishMove(moveType, fromX, fromY, toX, toY, promoChar)
+     ChessMove moveType;
+     int fromX, fromY, toX, toY;
+     /*char*/int promoChar;
+{
+    char *bookHit = 0;
+if(appData.debugMode) fprintf(debugFP, "moveType 5 = %d, promochar = %x\n", moveType, promoChar);
+    if((gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat) && promoChar != NULLCHAR) { 
+	// [HGM] superchess: suppress promotions to non-available piece
+	int k = PieceToNumber(CharToPiece(ToUpper(promoChar)));
+	if(WhiteOnMove(currentMove)) {
+	    if(!boards[currentMove][k][BOARD_WIDTH-2]) return 0;
+	} else {
+	    if(!boards[currentMove][BOARD_HEIGHT-1-k][1]) return 0;
+	}
+    }
+
+    /* [HGM] <popupFix> kludge to avoid having to know the exact promotion
+       move type in caller when we know the move is a legal promotion */
+    if(moveType == NormalMove && promoChar)
+        moveType = PromoCharToMoveType(WhiteOnMove(currentMove), promoChar);
+if(appData.debugMode) fprintf(debugFP, "moveType 1 = %d, promochar = %x\n", moveType, promoChar);
+    /* [HGM] convert drag-and-drop piece drops to standard form */
+    if( fromX == BOARD_LEFT-2 || fromX == BOARD_RGHT+1) {
+         moveType = WhiteOnMove(currentMove) ? WhiteDrop : BlackDrop;
+         fromX = boards[currentMove][fromY][fromX];
+         fromY = DROP_RANK;
+    }
+
+    /* [HGM] <popupFix> The following if has been moved here from
+       UserMoveEvent(). Because it seemed to belon here (why not allow
+       piece drops in training games?), and because it can only be
+       performed after it is known to what we promote. */
+    if (gameMode == Training) {
+      /* compare the move played on the board to the next move in the
+       * game. If they match, display the move and the opponent's response. 
+       * If they don't match, display an error message.
+       */
+      int saveAnimate;
+      Board testBoard;
+      CopyBoard(testBoard, boards[currentMove]);
+      ApplyMove(fromX, fromY, toX, toY, promoChar, testBoard);
+
+      if (CompareBoards(testBoard, boards[currentMove+1])) {
+	ForwardInner(currentMove+1);
+
+	/* Autoplay the opponent's response.
+	 * if appData.animate was TRUE when Training mode was entered,
+	 * the response will be animated.
+	 */
+	saveAnimate = appData.animate;
+	appData.animate = animateTraining;
+	ForwardInner(currentMove+1);
+	appData.animate = saveAnimate;
+
+	/* check for the end of the game */
+	if (currentMove >= forwardMostMove) {
+	  gameMode = PlayFromGameFile;
+	  ModeHighlight();
+	  SetTrainingModeOff();
+	  DisplayInformation(_("End of game"));
+	}
+      } else {
+	DisplayError(_("Incorrect move"), 0);
+      }
+      return 1;
+    }
+
+  /* Ok, now we know that the move is good, so we can kill
+     the previous line in Analysis Mode */
+  if (gameMode == AnalyzeMode && currentMove < forwardMostMove) {
+    forwardMostMove = currentMove;
+  }
+
+  /* If we need the chess program but it's dead, restart it */
+  ResurrectChessProgram();
+
+  /* A user move restarts a paused game*/
+  if (pausing)
+    PauseEvent();
+
+  thinkOutput[0] = NULLCHAR;
+
+  MakeMove(fromX, fromY, toX, toY, promoChar); /*updates forwardMostMove*/
+
+    if((gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat) 
+		&& promoChar != NULLCHAR && gameInfo.holdingsSize) { 
+	// [HGM] superchess: take promotion piece out of holdings
+	int k = PieceToNumber(CharToPiece(ToUpper(promoChar)));
+	if(WhiteOnMove(forwardMostMove-1)) {
+	    if(!--boards[forwardMostMove][k][BOARD_WIDTH-2])
+		boards[forwardMostMove][k][BOARD_WIDTH-1] = EmptySquare;
+	} else {
+	    if(!--boards[forwardMostMove][BOARD_HEIGHT-1-k][1])
+		boards[forwardMostMove][BOARD_HEIGHT-1-k][0] = EmptySquare;
+	}
+    }
+
+  if (gameMode == BeginningOfGame) {
+    if (appData.noChessProgram) {
+      gameMode = EditGame;
+      SetGameInfo();
+    } else {
+      char buf[MSG_SIZ];
+      gameMode = MachinePlaysBlack;
+      StartClocks();
+      SetGameInfo();
+      sprintf(buf, "%s vs. %s", gameInfo.white, gameInfo.black);
+      DisplayTitle(buf);
+      if (first.sendName) {
+	sprintf(buf, "name %s\n", gameInfo.white);
+	SendToProgram(buf, &first);
+      }
+      StartClocks();
+    }
+    ModeHighlight();
+  }
+if(appData.debugMode) fprintf(debugFP, "moveType 2 = %d, promochar = %x\n", moveType, promoChar);
+  /* Relay move to ICS or chess engine */
+  if (appData.icsActive) {
+    if (gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack ||
+	gameMode == IcsExamining) {
+      SendMoveToICS(moveType, fromX, fromY, toX, toY);
+      ics_user_moved = 1;
+    }
+  } else {
+    if (first.sendTime && (gameMode == BeginningOfGame ||
+			   gameMode == MachinePlaysWhite ||
+			   gameMode == MachinePlaysBlack)) {
+      SendTimeRemaining(&first, gameMode != MachinePlaysBlack);
+    }
+    if (gameMode != EditGame && gameMode != PlayFromGameFile) {
+	 // [HGM] book: if program might be playing, let it use book
+	bookHit = SendMoveToBookUser(forwardMostMove-1, &first, FALSE);
+	first.maybeThinking = TRUE;
+    } else SendMoveToProgram(forwardMostMove-1, &first);
+    if (currentMove == cmailOldMove + 1) {
+      cmailMoveType[lastLoadGameNumber - 1] = CMAIL_MOVE;
+    }
+  }
+
+  ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+
+  switch (gameMode) {
+  case EditGame:
+    switch (MateTest(boards[currentMove], PosFlags(currentMove),
+                     EP_UNKNOWN, castlingRights[currentMove]) ) {
+    case MT_NONE:
+    case MT_CHECK:
+      break;
+    case MT_CHECKMATE:
+      if (WhiteOnMove(currentMove)) {
+	GameEnds(BlackWins, "Black mates", GE_PLAYER);
+      } else {
+	GameEnds(WhiteWins, "White mates", GE_PLAYER);
+      }
+      break;
+    case MT_STALEMATE:
+      GameEnds(GameIsDrawn, "Stalemate", GE_PLAYER);
+      break;
+    }
+    break;
+    
+  case MachinePlaysBlack:
+  case MachinePlaysWhite:
+    /* disable certain menu options while machine is thinking */
+    SetMachineThinkingEnables();
+    break;
+
+  default:
+    break;
+  }
+
+  if(bookHit) { // [HGM] book: simulate book reply
+	static char bookMove[MSG_SIZ]; // a bit generous?
+
+	programStats.nodes = programStats.depth = programStats.time = 
+	programStats.score = programStats.got_only_move = 0;
+	sprintf(programStats.movelist, "%s (xbook)", bookHit);
+
+	strcpy(bookMove, "move ");
+	strcat(bookMove, bookHit);
+	HandleMachineMove(bookMove, &first);
+  }
+  return 1;
+}
+
+void
+UserMoveEvent(fromX, fromY, toX, toY, promoChar)
+     int fromX, fromY, toX, toY;
+     int promoChar;
+{
+    /* [HGM] This routine was added to allow calling of its two logical
+       parts from other modules in the old way. Before, UserMoveEvent()
+       automatically called FinishMove() if the move was OK, and returned
+       otherwise. I separated the two, in order to make it possible to
+       slip a promotion popup in between. But that it always needs two
+       calls, to the first part, (now called UserMoveTest() ), and to
+       FinishMove if the first part succeeded. Calls that do not need
+       to do anything in between, can call this routine the old way. 
+    */
+    ChessMove moveType = UserMoveTest(fromX, fromY, toX, toY, promoChar);
+if(appData.debugMode) fprintf(debugFP, "moveType 4 = %d, promochar = %x\n", moveType, promoChar);
+    if(moveType != ImpossibleMove)
+        FinishMove(moveType, fromX, fromY, toX, toY, promoChar);
+}
+
+void SendProgramStatsToFrontend( ChessProgramState * cps, ChessProgramStats * cpstats )
+{
+//    char * hint = lastHint;
+    FrontEndProgramStats stats;
+
+    stats.which = cps == &first ? 0 : 1;
+    stats.depth = cpstats->depth;
+    stats.nodes = cpstats->nodes;
+    stats.score = cpstats->score;
+    stats.time = cpstats->time;
+    stats.pv = cpstats->movelist;
+    stats.hint = lastHint;
+    stats.an_move_index = 0;
+    stats.an_move_count = 0;
+
+    if( gameMode == AnalyzeMode || gameMode == AnalyzeFile ) {
+        stats.hint = cpstats->move_name;
+        stats.an_move_index = cpstats->nr_moves - cpstats->moves_left;
+        stats.an_move_count = cpstats->nr_moves;
+    }
+
+    SetProgramStats( &stats );
+}
+
+char *SendMoveToBookUser(int moveNr, ChessProgramState *cps, int initial)
+{   // [HGM] book: this routine intercepts moves to simulate book replies
+    char *bookHit = NULL;
+
+    //first determine if the incoming move brings opponent into his book
+    if(appData.usePolyglotBook && (cps == &first ? !appData.firstHasOwnBookUCI : !appData.secondHasOwnBookUCI))
+	bookHit = ProbeBook(moveNr+1, appData.polyglotBook); // returns move
+    if(appData.debugMode) fprintf(debugFP, "book hit = %s\n", bookHit ? bookHit : "(NULL)");
+    if(bookHit != NULL && !cps->bookSuspend) {
+	// make sure opponent is not going to reply after receiving move to book position
+	SendToProgram("force\n", cps);
+	cps->bookSuspend = TRUE; // flag indicating it has to be restarted
+    }
+    if(!initial) SendMoveToProgram(moveNr, cps); // with hit on initial position there is no move
+    // now arrange restart after book miss
+    if(bookHit) {
+	// after a book hit we never send 'go', and the code after the call to this routine
+	// has '&& !bookHit' added to suppress potential sending there (based on 'firstMove').
+	char buf[MSG_SIZ];
+	if (cps->useUsermove) sprintf(buf, "usermove "); // sorry, no SAN yet :(
+	sprintf(buf, "%s\n", bookHit); // force book move into program supposed to play it
+	SendToProgram(buf, cps);
+	if(!initial) firstMove = FALSE; // normally we would clear the firstMove condition after return & sending 'go'
+    } else if(initial) { // 'go' was needed irrespective of firstMove, and it has to be done in this routine
+	SendToProgram("go\n", cps);
+	cps->bookSuspend = FALSE; // after a 'go' we are never suspended
+    } else { // 'go' might be sent based on 'firstMove' after this routine returns
+	if(cps->bookSuspend && !firstMove) // 'go' needed, and it will not be done after we return
+	    SendToProgram("go\n", cps); 
+	cps->bookSuspend = FALSE; // anyhow, we will not be suspended after a miss
+    }
+    return bookHit; // notify caller of hit, so it can take action to send move to opponent
+}
+
+char *savedMessage;
+ChessProgramState *savedState;
+void DeferredBookMove(void)
+{
+	if(savedState->lastPing != savedState->lastPong)
+		    ScheduleDelayedEvent(DeferredBookMove, 10);
+	else
+	HandleMachineMove(savedMessage, savedState);
+}
+
+void
+HandleMachineMove(message, cps)
+     char *message;
+     ChessProgramState *cps;
+{
+    char machineMove[MSG_SIZ], buf1[MSG_SIZ*10], buf2[MSG_SIZ];
+    char realname[MSG_SIZ];
+    int fromX, fromY, toX, toY;
+    ChessMove moveType;
+    char promoChar;
+    char *p;
+    int machineWhite;
+    char *bookHit;
+
+FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book hit
+    /*
+     * Kludge to ignore BEL characters
+     */
+    while (*message == '\007') message++;
+
+    /*
+     * [HGM] engine debug message: ignore lines starting with '#' character
+     */
+    if(cps->debug && *message == '#') return;
+
+    /*
+     * Look for book output
+     */
+    if (cps == &first && bookRequested) {
+	if (message[0] == '\t' || message[0] == ' ') {
+	    /* Part of the book output is here; append it */
+	    strcat(bookOutput, message);
+	    strcat(bookOutput, "  \n");
+	    return;
+	} else if (bookOutput[0] != NULLCHAR) {
+	    /* All of book output has arrived; display it */
+	    char *p = bookOutput;
+	    while (*p != NULLCHAR) {
+		if (*p == '\t') *p = ' ';
+		p++;
+	    }
+	    DisplayInformation(bookOutput);
+	    bookRequested = FALSE;
+	    /* Fall through to parse the current output */
+	}
+    }
+
+    /*
+     * Look for machine move.
+     */
+    if ((sscanf(message, "%s %s %s", buf1, buf2, machineMove) == 3 && strcmp(buf2, "...") == 0) ||
+	(sscanf(message, "%s %s", buf1, machineMove) == 2 && strcmp(buf1, "move") == 0)) 
+    {
+        /* This method is only useful on engines that support ping */
+        if (cps->lastPing != cps->lastPong) {
+	  if (gameMode == BeginningOfGame) {
+	    /* Extra move from before last new; ignore */
+	    if (appData.debugMode) {
+		fprintf(debugFP, "Ignoring extra move from %s\n", cps->which);
+	    }
+	  } else {
+	    if (appData.debugMode) {
+		fprintf(debugFP, "Undoing extra move from %s, gameMode %d\n",
+			cps->which, gameMode);
+	    }
+
+            SendToProgram("undo\n", cps);
+	  }
+	  return;
+	}
+
+	switch (gameMode) {
+	  case BeginningOfGame:
+	    /* Extra move from before last reset; ignore */
+	    if (appData.debugMode) {
+		fprintf(debugFP, "Ignoring extra move from %s\n", cps->which);
+	    }
+	    return;
+
+	  case EndOfGame:
+	  case IcsIdle:
+	  default:
+	    /* Extra move after we tried to stop.  The mode test is
+	       not a reliable way of detecting this problem, but it's
+	       the best we can do on engines that don't support ping.
+	    */
+	    if (appData.debugMode) {
+		fprintf(debugFP, "Undoing extra move from %s, gameMode %d\n",
+			cps->which, gameMode);
+	    }
+	    SendToProgram("undo\n", cps);
+	    return;
+
+	  case MachinePlaysWhite:
+	  case IcsPlayingWhite:
+	    machineWhite = TRUE;
+	    break;
+
+	  case MachinePlaysBlack:
+	  case IcsPlayingBlack:
+	    machineWhite = FALSE;
+	    break;
+
+	  case TwoMachinesPlay:
+	    machineWhite = (cps->twoMachinesColor[0] == 'w');
+	    break;
+	}
+	if (WhiteOnMove(forwardMostMove) != machineWhite) {
+	    if (appData.debugMode) {
+		fprintf(debugFP,
+			"Ignoring move out of turn by %s, gameMode %d"
+			", forwardMost %d\n",
+			cps->which, gameMode, forwardMostMove);
+	    }
+	    return;
+	}
+
+    if (appData.debugMode) { int f = forwardMostMove;
+        fprintf(debugFP, "machine move %d, castling = %d %d %d %d %d %d\n", f,
+                castlingRights[f][0],castlingRights[f][1],castlingRights[f][2],castlingRights[f][3],castlingRights[f][4],castlingRights[f][5]);
+    }
+        if(cps->alphaRank) AlphaRank(machineMove, 4);
+        if (!ParseOneMove(machineMove, forwardMostMove, &moveType,
+                              &fromX, &fromY, &toX, &toY, &promoChar)) {
+	    /* Machine move could not be parsed; ignore it. */
+            sprintf(buf1, _("Illegal move \"%s\" from %s machine"),
+		    machineMove, cps->which);
+	    DisplayError(buf1, 0);
+            sprintf(buf1, "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d",
+                    machineMove, fromX+AAA, fromY+ONE, toX+AAA, toY+ONE, moveType);
+	    if (gameMode == TwoMachinesPlay) {
+	      GameEnds(machineWhite ? BlackWins : WhiteWins,
+                       buf1, GE_XBOARD);
+	    }
+	    return;
+	}
+
+        /* [HGM] Apparently legal, but so far only tested with EP_UNKOWN */
+        /* So we have to redo legality test with true e.p. status here,  */
+        /* to make sure an illegal e.p. capture does not slip through,   */
+        /* to cause a forfeit on a justified illegal-move complaint      */
+        /* of the opponent.                                              */
+        if( gameMode==TwoMachinesPlay && appData.testLegality
+            && fromY != DROP_RANK /* [HGM] temporary; should still add legality test for drops */
+                                                              ) {
+           ChessMove moveType;
+           moveType = LegalityTest(boards[forwardMostMove], PosFlags(forwardMostMove),
+                        epStatus[forwardMostMove], castlingRights[forwardMostMove],
+                             fromY, fromX, toY, toX, promoChar);
+	    if (appData.debugMode) {
+                int i;
+                for(i=0; i< nrCastlingRights; i++) fprintf(debugFP, "(%d,%d) ",
+                    castlingRights[forwardMostMove][i], castlingRank[i]);
+                fprintf(debugFP, "castling rights\n");
+	    }
+            if(moveType == IllegalMove) {
+                sprintf(buf1, "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c",
+                        machineMove, fromX+AAA, fromY+ONE, toX+AAA, toY+ONE, 0);
+                GameEnds(machineWhite ? BlackWins : WhiteWins,
+                           buf1, GE_XBOARD);
+           } else if(gameInfo.variant != VariantFischeRandom && gameInfo.variant != VariantCapaRandom)
+           /* [HGM] Kludge to handle engines that send FRC-style castling
+              when they shouldn't (like TSCP-Gothic) */
+           switch(moveType) {
+             case WhiteASideCastleFR:
+             case BlackASideCastleFR:
+               toX+=2;
+               currentMoveString[2]++;
+               break;
+             case WhiteHSideCastleFR:
+             case BlackHSideCastleFR:
+               toX--;
+               currentMoveString[2]--;
+               break;
+	     default: ; // nothing to do, but suppresses warning of pedantic compilers
+           }
+        }
+	hintRequested = FALSE;
+	lastHint[0] = NULLCHAR;
+	bookRequested = FALSE;
+	/* Program may be pondering now */
+	cps->maybeThinking = TRUE;
+	if (cps->sendTime == 2) cps->sendTime = 1;
+	if (cps->offeredDraw) cps->offeredDraw--;
+
+#if ZIPPY
+	if ((gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack) &&
+	    first.initDone) {
+	  SendMoveToICS(moveType, fromX, fromY, toX, toY);
+	  ics_user_moved = 1;
+	  if(appData.autoKibitz && !appData.icsEngineAnalyze ) { /* [HGM] kibitz: send most-recent PV info to ICS */
+		char buf[3*MSG_SIZ];
+
+		sprintf(buf, "kibitz %d/%+.2f (%.2f sec, %.0f nodes, %1.0f knps) PV = %s\n",
+			programStats.depth,
+			programStats.score / 100.,
+			programStats.time / 100.,
+			u64ToDouble(programStats.nodes),
+			u64ToDouble(programStats.nodes) / (10*abs(programStats.time) + 1.),
+			programStats.movelist);
+		SendToICS(buf);
+	  }
+	}
+#endif
+	/* currentMoveString is set as a side-effect of ParseOneMove */
+	strcpy(machineMove, currentMoveString);
+	strcat(machineMove, "\n");
+	strcpy(moveList[forwardMostMove], machineMove);
+
+        /* [AS] Save move info and clear stats for next move */
+        pvInfoList[ forwardMostMove ].score = programStats.score;
+        pvInfoList[ forwardMostMove ].depth = programStats.depth;
+        pvInfoList[ forwardMostMove ].time =  programStats.time; // [HGM] PGNtime: take time from engine stats
+        ClearProgramStats();
+        thinkOutput[0] = NULLCHAR;
+        hiddenThinkOutputState = 0;
+
+	MakeMove(fromX, fromY, toX, toY, promoChar);/*updates forwardMostMove*/
+
+        /* [AS] Adjudicate game if needed (note: remember that forwardMostMove now points past the last move) */
+        if( gameMode == TwoMachinesPlay && adjudicateLossThreshold != 0 && forwardMostMove >= adjudicateLossPlies ) {
+            int count = 0;
+
+            while( count < adjudicateLossPlies ) {
+                int score = pvInfoList[ forwardMostMove - count - 1 ].score;
+
+                if( count & 1 ) {
+                    score = -score; /* Flip score for winning side */
+                }
+
+                if( score > adjudicateLossThreshold ) {
+                    break;
+                }
+
+                count++;
+            }
+
+            if( count >= adjudicateLossPlies ) {
+	        ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+
+                GameEnds( WhiteOnMove(forwardMostMove) ? WhiteWins : BlackWins, 
+                    "Xboard adjudication", 
+                    GE_XBOARD );
+
+                return;
+            }
+        }
+
+	if( gameMode == TwoMachinesPlay ) {
+	  // [HGM] some adjudications useful with buggy engines
+            int k, count = 0, epFile = epStatus[forwardMostMove]; static int bare = 1;
+	  if(gameInfo.holdingsSize == 0 || gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat) {
+
+            if(appData.testLegality)
+            // don't wait for engine to announce game end if we can judge ourselves
+            switch (MateTest(boards[forwardMostMove],
+                                 PosFlags(forwardMostMove), epFile,
+                                       castlingRights[forwardMostMove]) ) {
+	      case MT_NONE:
+	      case MT_CHECK:
+	      default:
+		break;
+	      case MT_STALEMATE:
+		epStatus[forwardMostMove] = EP_STALEMATE;
+                if(appData.checkMates) {
+		    SendMoveToProgram(forwardMostMove-1, cps->other); /* make sure opponent gets to see move */
+		    ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+		    if(gameInfo.variant == VariantLosers || gameInfo.variant == VariantSuicide
+							 || gameInfo.variant == VariantGiveaway) // [HGM] losers:
+			GameEnds( WhiteOnMove(forwardMostMove) ? WhiteWins : BlackWins, // stalemated side wins!
+				"Xboard adjudication: Stalemate", GE_XBOARD );
+		    else
+			GameEnds( GameIsDrawn, "Xboard adjudication: Stalemate", GE_XBOARD );
+		    return;
+		}
+		break;
+	      case MT_CHECKMATE:
+		epStatus[forwardMostMove] = EP_CHECKMATE;
+                if(appData.checkMates) {
+		    SendMoveToProgram(forwardMostMove-1, cps->other); /* make sure opponent gets to see move */
+		    ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+		    GameEnds( WhiteOnMove(forwardMostMove) != (gameInfo.variant == VariantLosers) // [HGM] losers:
+			     ? BlackWins : WhiteWins,            // reverse the result ( A!=1 is !A for a boolean)
+			     "Xboard adjudication: Checkmate", GE_XBOARD );
+		    return;
+		}
+		break;
+	    }
+
+	    if( appData.testLegality )
+	    {   /* [HGM] Some more adjudications for obstinate engines */
+		int NrWN=0, NrBN=0, NrWB=0, NrBB=0, NrWR=0, NrBR=0,
+                    NrWQ=0, NrBQ=0, NrW=0, NrK=0, bishopsColor = 0,
+                    NrPieces=0, NrPawns=0, PawnAdvance=0, i, j;
+		static int moveCount = 6;
+
+                /* First absolutely insufficient mating material. Count what is on board. */
+		for(i=0; i<BOARD_HEIGHT; i++) for(j=BOARD_LEFT; j<BOARD_RGHT; j++)
+		{   ChessSquare p = boards[forwardMostMove][i][j];
+		    int m=i;
+
+		    switch((int) p)
+		    {   /* count B,N,R and other of each side */
+                        case WhiteKing:
+                        case BlackKing:
+			     NrK++; break; // [HGM] atomic: count Kings
+                        case WhiteKnight:
+                             NrWN++; break;
+                        case WhiteBishop:
+                        case WhiteFerz:    // [HGM] shatranj: kludge to mke it work in shatranj
+                             bishopsColor |= 1 << ((i^j)&1);
+                             NrWB++; break;
+                        case BlackKnight:
+                             NrBN++; break;
+                        case BlackBishop:
+                        case BlackFerz:    // [HGM] shatranj: kludge to mke it work in shatranj
+                             bishopsColor |= 1 << ((i^j)&1);
+                             NrBB++; break;
+                        case WhiteRook:
+                             NrWR++; break;
+                        case BlackRook:
+                             NrBR++; break;
+                        case WhiteQueen:
+                             NrWQ++; break;
+                        case BlackQueen:
+                             NrBQ++; break;
+                        case EmptySquare: 
+                             break;
+                        case BlackPawn:
+                             m = 7-i;
+                        case WhitePawn:
+                             PawnAdvance += m; NrPawns++;
+                    }
+                    NrPieces += (p != EmptySquare);
+                    NrW += ((int)p < (int)BlackPawn);
+		    if(gameInfo.variant == VariantXiangqi && 
+		      (p == WhiteFerz || p == WhiteAlfil || p == BlackFerz || p == BlackAlfil)) {
+			NrPieces--; // [HGM] XQ: do not count purely defensive pieces
+                        NrW -= ((int)p < (int)BlackPawn);
+		    }
+                }
+
+		if(gameInfo.variant == VariantAtomic && NrK < 2) {
+		    // [HGM] atomic: stm must have lost his King on previous move, as destroying own K is illegal
+		     epStatus[forwardMostMove] = EP_CHECKMATE; // make claimable as if stm is checkmated
+		     if(appData.checkMates) {
+			 SendMoveToProgram(forwardMostMove-1, cps->other); // make sure opponent gets move
+                         ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+                         GameEnds( WhiteOnMove(forwardMostMove) ? BlackWins : WhiteWins, 
+							"Xboard adjudication: King destroyed", GE_XBOARD );
+                         return;
+		     }
+		}
+
+		/* Bare King in Shatranj (loses) or Losers (wins) */
+                if( NrW == 1 || NrPieces - NrW == 1) {
+                  if( gameInfo.variant == VariantLosers) { // [HGM] losers: bare King wins (stm must have it first)
+		     epStatus[forwardMostMove] = EP_STALEMATE; // kludge to make position claimable as win
+		     if(appData.checkMates) {
+			 SendMoveToProgram(forwardMostMove-1, cps->other); /* make sure opponent gets to see move */
+                         ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+                         GameEnds( WhiteOnMove(forwardMostMove) ? WhiteWins : BlackWins, 
+							"Xboard adjudication: Bare king", GE_XBOARD );
+                         return;
+		     }
+		  } else
+                  if( gameInfo.variant == VariantShatranj && --bare < 0)
+                  {    /* bare King */
+			epStatus[forwardMostMove] = EP_CHECKMATE; // make claimable as win for stm
+			if(appData.checkMates) {
+			    /* but only adjudicate if adjudication enabled */
+			    SendMoveToProgram(forwardMostMove-1, cps->other); // make sure opponent gets move
+			    ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+			    GameEnds( NrW > 1 ? WhiteWins : NrPieces - NrW > 1 ? BlackWins : GameIsDrawn, 
+							"Xboard adjudication: Bare king", GE_XBOARD );
+			    return;
+			}
+		  }
+                } else bare = 1;
+
+
+                if( NrPieces == 2 || gameInfo.variant != VariantXiangqi && 
+				     gameInfo.variant != VariantShatranj && // [HGM] baring will remain possible
+			(NrPieces == 3 && NrWN+NrBN+NrWB+NrBB == 1 ||
+			 NrPieces == NrBB+NrWB+2 && bishopsColor != 3)) // [HGM] all Bishops (Ferz!) same color
+                {    /* KBK, KNK, KK of KBKB with like Bishops */
+
+                     /* always flag draws, for judging claims */
+                     epStatus[forwardMostMove] = EP_INSUF_DRAW;
+
+                     if(appData.materialDraws) {
+                         /* but only adjudicate them if adjudication enabled */
+			 SendToProgram("force\n", cps->other); // suppress reply
+			 SendMoveToProgram(forwardMostMove-1, cps->other); /* make sure opponent gets to see last move */
+                         ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+                         GameEnds( GameIsDrawn, "Xboard adjudication: Insufficient mating material", GE_XBOARD );
+                         return;
+                     }
+                }
+
+                /* Then some trivial draws (only adjudicate, cannot be claimed) */
+                if(NrPieces == 4 && 
+                   (   NrWR == 1 && NrBR == 1 /* KRKR */
+                   || NrWQ==1 && NrBQ==1     /* KQKQ */
+                   || NrWN==2 || NrBN==2     /* KNNK */
+                   || NrWN+NrWB == 1 && NrBN+NrBB == 1 /* KBKN, KBKB, KNKN */
+                  ) ) {
+                     if(--moveCount < 0 && appData.trivialDraws)
+                     {    /* if the first 3 moves do not show a tactical win, declare draw */
+			  SendToProgram("force\n", cps->other); // suppress reply
+			  SendMoveToProgram(forwardMostMove-1, cps->other); /* make sure opponent gets to see move */
+                          ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+                          GameEnds( GameIsDrawn, "Xboard adjudication: Trivial draw", GE_XBOARD );
+                          return;
+                     }
+                } else moveCount = 6;
+	    }
+	  }
+#if 1
+    if (appData.debugMode) { int i;
+      fprintf(debugFP, "repeat test fmm=%d bmm=%d ep=%d, reps=%d\n",
+              forwardMostMove, backwardMostMove, epStatus[backwardMostMove],
+              appData.drawRepeats);
+      for( i=forwardMostMove; i>=backwardMostMove; i-- )
+           fprintf(debugFP, "%d ep=%d\n", i, epStatus[i]);
+
+    }
+#endif
+                /* Check for rep-draws */
+                count = 0;
+                for(k = forwardMostMove-2;
+                    k>=backwardMostMove && k>=forwardMostMove-100 &&
+                        epStatus[k] < EP_UNKNOWN &&
+                        epStatus[k+2] <= EP_NONE && epStatus[k+1] <= EP_NONE;
+                    k-=2)
+                {   int rights=0;
+#if 0
+    if (appData.debugMode) {
+      fprintf(debugFP, " loop\n");
+    }
+#endif
+                    if(CompareBoards(boards[k], boards[forwardMostMove])) {
+#if 0
+    if (appData.debugMode) {
+      fprintf(debugFP, "match\n");
+    }
+#endif
+                        /* compare castling rights */
+                        if( castlingRights[forwardMostMove][2] != castlingRights[k][2] &&
+                             (castlingRights[k][0] >= 0 || castlingRights[k][1] >= 0) )
+                                rights++; /* King lost rights, while rook still had them */
+                        if( castlingRights[forwardMostMove][2] >= 0 ) { /* king has rights */
+                            if( castlingRights[forwardMostMove][0] != castlingRights[k][0] ||
+                                castlingRights[forwardMostMove][1] != castlingRights[k][1] )
+                                   rights++; /* but at least one rook lost them */
+                        }
+                        if( castlingRights[forwardMostMove][5] != castlingRights[k][5] &&
+                             (castlingRights[k][3] >= 0 || castlingRights[k][4] >= 0) )
+                                rights++; 
+                        if( castlingRights[forwardMostMove][5] >= 0 ) {
+                            if( castlingRights[forwardMostMove][3] != castlingRights[k][3] ||
+                                castlingRights[forwardMostMove][4] != castlingRights[k][4] )
+                                   rights++;
+                        }
+#if 0
+    if (appData.debugMode) {
+      for(i=0; i<nrCastlingRights; i++)
+      fprintf(debugFP, " (%d,%d)", castlingRights[forwardMostMove][i], castlingRights[k][i]);
+    }
+
+    if (appData.debugMode) {
+      fprintf(debugFP, " %d %d\n", rights, k);
+    }
+#endif
+                        if( rights == 0 && ++count > appData.drawRepeats-2
+                            && appData.drawRepeats > 1) {
+                             /* adjudicate after user-specified nr of repeats */
+			     SendToProgram("force\n", cps->other); // suppress reply
+			     SendMoveToProgram(forwardMostMove-1, cps->other); /* make sure opponent gets to see move */
+                             ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+			     if(gameInfo.variant == VariantXiangqi && appData.testLegality) { 
+				// [HGM] xiangqi: check for forbidden perpetuals
+				int m, ourPerpetual = 1, hisPerpetual = 1;
+				for(m=forwardMostMove; m>k; m-=2) {
+				    if(MateTest(boards[m], PosFlags(m), 
+							EP_NONE, castlingRights[m]) != MT_CHECK)
+					ourPerpetual = 0; // the current mover did not always check
+				    if(MateTest(boards[m-1], PosFlags(m-1), 
+							EP_NONE, castlingRights[m-1]) != MT_CHECK)
+					hisPerpetual = 0; // the opponent did not always check
+				}
+				if(appData.debugMode) fprintf(debugFP, "XQ perpetual test, our=%d, his=%d\n",
+									ourPerpetual, hisPerpetual);
+				if(ourPerpetual && !hisPerpetual) { // we are actively checking him: forfeit
+				    GameEnds( WhiteOnMove(forwardMostMove) ? WhiteWins : BlackWins, 
+		 			   "Xboard adjudication: perpetual checking", GE_XBOARD );
+				    return;
+				}
+				if(hisPerpetual && !ourPerpetual)   // he is checking us, but did not repeat yet
+				    break; // (or we would have caught him before). Abort repetition-checking loop.
+				// Now check for perpetual chases
+				if(!ourPerpetual && !hisPerpetual) { // no perpetual check, test for chase
+				    hisPerpetual = PerpetualChase(k, forwardMostMove);
+				    ourPerpetual = PerpetualChase(k+1, forwardMostMove);
+				    if(ourPerpetual && !hisPerpetual) { // we are actively checking him: forfeit
+					GameEnds( WhiteOnMove(forwardMostMove) ? WhiteWins : BlackWins, 
+		 				      "Xboard adjudication: perpetual chasing", GE_XBOARD );
+					return;
+				    }
+				    if(hisPerpetual && !ourPerpetual)   // he is chasing us, but did not repeat yet
+					break; // Abort repetition-checking loop.
+				}
+				// if neither of us is checking or chasing all the time, or both are, it is draw
+			     }
+                             GameEnds( GameIsDrawn, "Xboard adjudication: repetition draw", GE_XBOARD );
+                             return;
+                        }
+                        if( rights == 0 && count > 1 ) /* occurred 2 or more times before */
+                             epStatus[forwardMostMove] = EP_REP_DRAW;
+                    }
+                }
+
+                /* Now we test for 50-move draws. Determine ply count */
+                count = forwardMostMove;
+                /* look for last irreversble move */
+                while( epStatus[count] <= EP_NONE && count > backwardMostMove )
+                    count--;
+                /* if we hit starting position, add initial plies */
+                if( count == backwardMostMove )
+                    count -= initialRulePlies;
+                count = forwardMostMove - count; 
+                if( count >= 100)
+                         epStatus[forwardMostMove] = EP_RULE_DRAW;
+                         /* this is used to judge if draw claims are legal */
+                if(appData.ruleMoves > 0 && count >= 2*appData.ruleMoves) {
+			 SendToProgram("force\n", cps->other); // suppress reply
+			 SendMoveToProgram(forwardMostMove-1, cps->other); /* make sure opponent gets to see move */
+                         ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+                         GameEnds( GameIsDrawn, "Xboard adjudication: 50-move rule", GE_XBOARD );
+                         return;
+                }
+
+                /* if draw offer is pending, treat it as a draw claim
+                 * when draw condition present, to allow engines a way to
+                 * claim draws before making their move to avoid a race
+                 * condition occurring after their move
+                 */
+                if( cps->other->offeredDraw || cps->offeredDraw ) {
+                         char *p = NULL;
+                         if(epStatus[forwardMostMove] == EP_RULE_DRAW)
+                             p = "Draw claim: 50-move rule";
+                         if(epStatus[forwardMostMove] == EP_REP_DRAW)
+                             p = "Draw claim: 3-fold repetition";
+                         if(epStatus[forwardMostMove] == EP_INSUF_DRAW)
+                             p = "Draw claim: insufficient mating material";
+                         if( p != NULL ) {
+			     SendToProgram("force\n", cps->other); // suppress reply
+			     SendMoveToProgram(forwardMostMove-1, cps->other); /* make sure opponent gets to see move */
+                             GameEnds( GameIsDrawn, p, GE_XBOARD );
+                             ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+                             return;
+                         }
+                }
+
+
+	        if( appData.adjudicateDrawMoves > 0 && forwardMostMove > (2*appData.adjudicateDrawMoves) ) {
+		    SendToProgram("force\n", cps->other); // suppress reply
+		    SendMoveToProgram(forwardMostMove-1, cps->other); /* make sure opponent gets to see move */
+		    ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+
+	            GameEnds( GameIsDrawn, "Xboard adjudication: long game", GE_XBOARD );
+
+	            return;
+        	}
+        }
+
+	bookHit = NULL;
+	if (gameMode == TwoMachinesPlay) {
+            /* [HGM] relaying draw offers moved to after reception of move */
+            /* and interpreting offer as claim if it brings draw condition */
+            if (cps->offeredDraw == 1 && cps->other->sendDrawOffers) {
+                SendToProgram("draw\n", cps->other);
+            }
+	    if (cps->other->sendTime) {
+		SendTimeRemaining(cps->other,
+				  cps->other->twoMachinesColor[0] == 'w');
+	    }
+	    bookHit = SendMoveToBookUser(forwardMostMove-1, cps->other, FALSE);
+	    if (firstMove && !bookHit) {
+		firstMove = FALSE;
+		if (cps->other->useColors) {
+		  SendToProgram(cps->other->twoMachinesColor, cps->other);
+		}
+		SendToProgram("go\n", cps->other);
+	    }
+	    cps->other->maybeThinking = TRUE;
+	}
+
+	ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
+	
+        if (!pausing && appData.ringBellAfterMoves) {
+	    RingBell();
+	}
+
+	/* 
+	 * Reenable menu items that were disabled while
+	 * machine was thinking
+	 */
+	if (gameMode != TwoMachinesPlay)
+	    SetUserThinkingEnables();
+
+	// [HGM] book: after book hit opponent has received move and is now in force mode
+	// force the book reply into it, and then fake that it outputted this move by jumping
+	// back to the beginning of HandleMachineMove, with cps toggled and message set to this move
+	if(bookHit) {
+		static char bookMove[MSG_SIZ]; // a bit generous?
+
+		strcpy(bookMove, "move ");
+		strcat(bookMove, bookHit);
+		message = bookMove;
+		cps = cps->other;
+		programStats.nodes = programStats.depth = programStats.time = 
+		programStats.score = programStats.got_only_move = 0;
+		sprintf(programStats.movelist, "%s (xbook)", bookHit);
+
+		if(cps->lastPing != cps->lastPong) {
+		    savedMessage = message; // args for deferred call
+		    savedState = cps;
+		    ScheduleDelayedEvent(DeferredBookMove, 10);
+		    return;
+		}
+		goto FakeBookMove;
+	}
+
+	return;
+    }
+
+    /* Set special modes for chess engines.  Later something general
+     *  could be added here; for now there is just one kludge feature,
+     *  needed because Crafty 15.10 and earlier don't ignore SIGINT
+     *  when "xboard" is given as an interactive command.
+     */
+    if (strncmp(message, "kibitz Hello from Crafty", 24) == 0) {
+	cps->useSigint = FALSE;
+	cps->useSigterm = FALSE;
+    }
+
+    /* [HGM] Allow engine to set up a position. Don't ask me why one would
+     * want this, I was asked to put it in, and obliged.
+     */
+    if (!strncmp(message, "setboard ", 9)) {
+        Board initial_position; int i;
+
+        GameEnds(GameUnfinished, "Engine aborts game", GE_XBOARD);
+
+        if (!ParseFEN(initial_position, &blackPlaysFirst, message + 9)) {
+            DisplayError(_("Bad FEN received from engine"), 0);
+            return ;
+        } else {
+           Reset(FALSE, FALSE);
+           CopyBoard(boards[0], initial_position);
+           initialRulePlies = FENrulePlies;
+           epStatus[0] = FENepStatus;
+           for( i=0; i<nrCastlingRights; i++ )
+                castlingRights[0][i] = FENcastlingRights[i];
+           if(blackPlaysFirst) gameMode = MachinePlaysWhite;
+           else gameMode = MachinePlaysBlack;                 
+           DrawPosition(FALSE, boards[currentMove]);
+        }
+	return;
+    }
+
+    /*
+     * Look for communication commands
+     */
+    if (!strncmp(message, "telluser ", 9)) {
+	DisplayNote(message + 9);
+	return;
+    }
+    if (!strncmp(message, "tellusererror ", 14)) {
+	DisplayError(message + 14, 0);
+	return;
+    }
+    if (!strncmp(message, "tellopponent ", 13)) {
+      if (appData.icsActive) {
+	if (loggedOn) {
+	  sprintf(buf1, "%ssay %s\n", ics_prefix, message + 13);
+	  SendToICS(buf1);
+	}
+      } else {
+	DisplayNote(message + 13);
+      }
+      return;
+    }
+    if (!strncmp(message, "tellothers ", 11)) {
+      if (appData.icsActive) {
+	if (loggedOn) {
+	  sprintf(buf1, "%swhisper %s\n", ics_prefix, message + 11);
+	  SendToICS(buf1);
+	}
+      }
+      return;
+    }
+    if (!strncmp(message, "tellall ", 8)) {
+      if (appData.icsActive) {
+	if (loggedOn) {
+	  sprintf(buf1, "%skibitz %s\n", ics_prefix, message + 8);
+	  SendToICS(buf1);
+	}
+      } else {
+	DisplayNote(message + 8);
+      }
+      return;
+    }
+    if (strncmp(message, "warning", 7) == 0) {
+	/* Undocumented feature, use tellusererror in new code */
+	DisplayError(message, 0);
+	return;
+    }
+    if (sscanf(message, "askuser %s %[^\n]", buf1, buf2) == 2) {
+	strcpy(realname, cps->tidy);
+	strcat(realname, " query");
+	AskQuestion(realname, buf2, buf1, cps->pr);
+	return;
+    }
+    /* Commands from the engine directly to ICS.  We don't allow these to be 
+     *  sent until we are logged on. Crafty kibitzes have been known to 
+     *  interfere with the login process.
+     */
+    if (loggedOn) {
+	if (!strncmp(message, "tellics ", 8)) {
+	    SendToICS(message + 8);
+	    SendToICS("\n");
+	    return;
+	}
+	if (!strncmp(message, "tellicsnoalias ", 15)) {
+	    SendToICS(ics_prefix);
+	    SendToICS(message + 15);
+	    SendToICS("\n");
+	    return;
+	}
+	/* The following are for backward compatibility only */
+	if (!strncmp(message,"whisper",7) || !strncmp(message,"kibitz",6) ||
+	    !strncmp(message,"draw",4) || !strncmp(message,"tell",3)) {
+	    SendToICS(ics_prefix);
+	    SendToICS(message);
+	    SendToICS("\n");
+	    return;
+	}
+    }
+    if (strncmp(message, "feature ", 8) == 0) {
+      ParseFeatures(message+8, cps);
+    }
+    if (sscanf(message, "pong %d", &cps->lastPong) == 1) {
+	return;
+    }
+    /*
+     * If the move is illegal, cancel it and redraw the board.
+     * Also deal with other error cases.  Matching is rather loose
+     * here to accommodate engines written before the spec.
+     */
+    if (strncmp(message + 1, "llegal move", 11) == 0 ||
+	strncmp(message, "Error", 5) == 0) {
+	if (StrStr(message, "name") || 
+	    StrStr(message, "rating") || StrStr(message, "?") ||
+	    StrStr(message, "result") || StrStr(message, "board") ||
+	    StrStr(message, "bk") || StrStr(message, "computer") ||
+	    StrStr(message, "variant") || StrStr(message, "hint") ||
+	    StrStr(message, "random") || StrStr(message, "depth") ||
+	    StrStr(message, "accepted")) {
+	    return;
+	}
+	if (StrStr(message, "protover")) {
+	  /* Program is responding to input, so it's apparently done
+             initializing, and this error message indicates it is
+             protocol version 1.  So we don't need to wait any longer
+             for it to initialize and send feature commands. */
+	  FeatureDone(cps, 1);
+	  cps->protocolVersion = 1;
+	  return;
+	}
+	cps->maybeThinking = FALSE;
+
+	if (StrStr(message, "draw")) {
+	    /* Program doesn't have "draw" command */
+	    cps->sendDrawOffers = 0;
+	    return;
+	}
+	if (cps->sendTime != 1 &&
+	    (StrStr(message, "time") || StrStr(message, "otim"))) {
+	  /* Program apparently doesn't have "time" or "otim" command */
+	  cps->sendTime = 0;
+	  return;
+	}
+	if (StrStr(message, "analyze")) {
+	    cps->analysisSupport = FALSE;
+	    cps->analyzing = FALSE;
+	    Reset(FALSE, TRUE);
+	    sprintf(buf2, _("%s does not support analysis"), cps->tidy);
+	    DisplayError(buf2, 0);
+	    return;
+	}
+	if (StrStr(message, "(no matching move)st")) {
+	  /* Special kludge for GNU Chess 4 only */
+	  cps->stKludge = TRUE;
+	  SendTimeControl(cps, movesPerSession, timeControl,
+			  timeIncrement, appData.searchDepth,
+			  searchTime);
+	  return;
+	}
+	if (StrStr(message, "(no matching move)sd")) {
+	  /* Special kludge for GNU Chess 4 only */
+	  cps->sdKludge = TRUE;
+	  SendTimeControl(cps, movesPerSession, timeControl,
+			  timeIncrement, appData.searchDepth,
+			  searchTime);
+	  return;
+	}
+        if (!StrStr(message, "llegal")) {
+            return;
+        }
+	if (gameMode == BeginningOfGame || gameMode == EndOfGame ||
+	    gameMode == IcsIdle) return;
+	if (forwardMostMove <= backwardMostMove) return;
+#if 0
+	/* Following removed: it caused a bug where a real illegal move
+	   message in analyze mored would be ignored. */
+	if (cps == &first && programStats.ok_to_send == 0) {
+	    /* Bogus message from Crafty responding to "."  This filtering
+	       can miss some of the bad messages, but fortunately the bug 
+	       is fixed in current Crafty versions, so it doesn't matter. */
+	    return;
+	}
+#endif
+	if (pausing) PauseEvent();
+	if (gameMode == PlayFromGameFile) {
+	    /* Stop reading this game file */
+	    gameMode = EditGame;
+	    ModeHighlight();
+	}
+	currentMove = --forwardMostMove;
+	DisplayMove(currentMove-1); /* before DisplayMoveError */
+	SwitchClocks();
+	DisplayBothClocks();
+	sprintf(buf1, _("Illegal move \"%s\" (rejected by %s chess program)"),
+		parseList[currentMove], cps->which);
+	DisplayMoveError(buf1);
+	DrawPosition(FALSE, boards[currentMove]);
+
+        /* [HGM] illegal-move claim should forfeit game when Xboard */
+        /* only passes fully legal moves                            */
+        if( appData.testLegality && gameMode == TwoMachinesPlay ) {
+            GameEnds( cps->twoMachinesColor[0] == 'w' ? BlackWins : WhiteWins,
+                                "False illegal-move claim", GE_XBOARD );
+        }
+	return;
+    }
+    if (strncmp(message, "time", 4) == 0 && StrStr(message, "Illegal")) {
+	/* Program has a broken "time" command that
+	   outputs a string not ending in newline.
+	   Don't use it. */
+	cps->sendTime = 0;
+    }
+    
+    /*
+     * If chess program startup fails, exit with an error message.
+     * Attempts to recover here are futile.
+     */
+    if ((StrStr(message, "unknown host") != NULL)
+	|| (StrStr(message, "No remote directory") != NULL)
+	|| (StrStr(message, "not found") != NULL)
+	|| (StrStr(message, "No such file") != NULL)
+	|| (StrStr(message, "can't alloc") != NULL)
+	|| (StrStr(message, "Permission denied") != NULL)) {
+
+	cps->maybeThinking = FALSE;
+	sprintf(buf1, _("Failed to start %s chess program %s on %s: %s\n"),
+		cps->which, cps->program, cps->host, message);
+	RemoveInputSource(cps->isr);
+	DisplayFatalError(buf1, 0, 1);
+	return;
+    }
+    
+    /* 
+     * Look for hint output
+     */
+    if (sscanf(message, "Hint: %s", buf1) == 1) {
+	if (cps == &first && hintRequested) {
+	    hintRequested = FALSE;
+	    if (ParseOneMove(buf1, forwardMostMove, &moveType,
+				 &fromX, &fromY, &toX, &toY, &promoChar)) {
+		(void) CoordsToAlgebraic(boards[forwardMostMove],
+				    PosFlags(forwardMostMove), EP_UNKNOWN,
+				    fromY, fromX, toY, toX, promoChar, buf1);
+		sprintf(buf2, _("Hint: %s"), buf1);
+		DisplayInformation(buf2);
+	    } else {
+		/* Hint move could not be parsed!? */
+		sprintf(buf2,
+			_("Illegal hint move \"%s\"\nfrom %s chess program"),
+			buf1, cps->which);
+		DisplayError(buf2, 0);
+	    }
+	} else {
+	    strcpy(lastHint, buf1);
+	}
+	return;
+    }
+
+    /*
+     * Ignore other messages if game is not in progress
+     */
+    if (gameMode == BeginningOfGame || gameMode == EndOfGame ||
+	gameMode == IcsIdle || cps->lastPing != cps->lastPong) return;
+
+    /*
+     * look for win, lose, draw, or draw offer
+     */
+    if (strncmp(message, "1-0", 3) == 0) {
+	char *p, *q, *r = "";
+        p = strchr(message, '{');
+	if (p) {
+	    q = strchr(p, '}');
+	    if (q) {
+		*q = NULLCHAR;
+		r = p + 1;
+	    }
+	}
+        GameEnds(WhiteWins, r, GE_ENGINE1 + (cps != &first)); /* [HGM] pass claimer indication for claim test */
+	return;
+    } else if (strncmp(message, "0-1", 3) == 0) {
+	char *p, *q, *r = "";
+        p = strchr(message, '{');
+	if (p) {
+	    q = strchr(p, '}');
+	    if (q) {
+		*q = NULLCHAR;
+		r = p + 1;
+	    }
+	}
+	/* Kludge for Arasan 4.1 bug */
+	if (strcmp(r, "Black resigns") == 0) {
+            GameEnds(WhiteWins, r, GE_ENGINE1 + (cps != &first));
+	    return;
+	}
+        GameEnds(BlackWins, r, GE_ENGINE1 + (cps != &first));
+	return;
+    } else if (strncmp(message, "1/2", 3) == 0) {
+	char *p, *q, *r = "";
+        p = strchr(message, '{');
+	if (p) {
+	    q = strchr(p, '}');
+	    if (q) {
+		*q = NULLCHAR;
+		r = p + 1;
+	    }
+	}
+            
+        GameEnds(GameIsDrawn, r, GE_ENGINE1 + (cps != &first));
+	return;
+
+    } else if (strncmp(message, "White resign", 12) == 0) {
+        GameEnds(BlackWins, "White resigns", GE_ENGINE1 + (cps != &first));
+	return;
+    } else if (strncmp(message, "Black resign", 12) == 0) {
+        GameEnds(WhiteWins, "Black resigns", GE_ENGINE1 + (cps != &first));
+	return;
+    } else if (strncmp(message, "White matches", 13) == 0 ||
+               strncmp(message, "Black matches", 13) == 0   ) {
+        /* [HGM] ignore GNUShogi noises */
+        return;
+    } else if (strncmp(message, "White", 5) == 0 &&
+	       message[5] != '(' &&
+	       StrStr(message, "Black") == NULL) {
+        GameEnds(WhiteWins, "White mates", GE_ENGINE1 + (cps != &first));
+	return;
+    } else if (strncmp(message, "Black", 5) == 0 &&
+	       message[5] != '(') {
+        GameEnds(BlackWins, "Black mates", GE_ENGINE1 + (cps != &first));
+	return;
+    } else if (strcmp(message, "resign") == 0 ||
+	       strcmp(message, "computer resigns") == 0) {
+	switch (gameMode) {
+	  case MachinePlaysBlack:
+	  case IcsPlayingBlack:
+            GameEnds(WhiteWins, "Black resigns", GE_ENGINE);
+	    break;
+	  case MachinePlaysWhite:
+	  case IcsPlayingWhite:
+            GameEnds(BlackWins, "White resigns", GE_ENGINE);
+	    break;
+	  case TwoMachinesPlay:
+	    if (cps->twoMachinesColor[0] == 'w')
+              GameEnds(BlackWins, "White resigns", GE_ENGINE1 + (cps != &first));
+	    else
+              GameEnds(WhiteWins, "Black resigns", GE_ENGINE1 + (cps != &first));
+	    break;
+	  default:
+	    /* can't happen */
+	    break;
+	}
+	return;
+    } else if (strncmp(message, "opponent mates", 14) == 0) {
+	switch (gameMode) {
+	  case MachinePlaysBlack:
+	  case IcsPlayingBlack:
+            GameEnds(WhiteWins, "White mates", GE_ENGINE);
+	    break;
+	  case MachinePlaysWhite:
+	  case IcsPlayingWhite:
+            GameEnds(BlackWins, "Black mates", GE_ENGINE);
+	    break;
+	  case TwoMachinesPlay:
+	    if (cps->twoMachinesColor[0] == 'w')
+              GameEnds(BlackWins, "Black mates", GE_ENGINE1 + (cps != &first));
+	    else
+              GameEnds(WhiteWins, "White mates", GE_ENGINE1 + (cps != &first));
+	    break;
+	  default:
+	    /* can't happen */
+	    break;
+	}
+	return;
+    } else if (strncmp(message, "computer mates", 14) == 0) {
+	switch (gameMode) {
+	  case MachinePlaysBlack:
+	  case IcsPlayingBlack:
+            GameEnds(BlackWins, "Black mates", GE_ENGINE1);
+	    break;
+	  case MachinePlaysWhite:
+	  case IcsPlayingWhite:
+            GameEnds(WhiteWins, "White mates", GE_ENGINE);
+	    break;
+	  case TwoMachinesPlay:
+	    if (cps->twoMachinesColor[0] == 'w')
+              GameEnds(WhiteWins, "White mates", GE_ENGINE1 + (cps != &first));
+	    else
+              GameEnds(BlackWins, "Black mates", GE_ENGINE1 + (cps != &first));
+	    break;
+	  default:
+	    /* can't happen */
+	    break;
+	}
+	return;
+    } else if (strncmp(message, "checkmate", 9) == 0) {
+	if (WhiteOnMove(forwardMostMove)) {
+            GameEnds(BlackWins, "Black mates", GE_ENGINE1 + (cps != &first));
+	} else {
+            GameEnds(WhiteWins, "White mates", GE_ENGINE1 + (cps != &first));
+	}
+	return;
+    } else if (strstr(message, "Draw") != NULL ||
+	       strstr(message, "game is a draw") != NULL) {
+        GameEnds(GameIsDrawn, "Draw", GE_ENGINE1 + (cps != &first));
+	return;
+    } else if (strstr(message, "offer") != NULL &&
+	       strstr(message, "draw") != NULL) {
+#if ZIPPY
+	if (appData.zippyPlay && first.initDone) {
+	    /* Relay offer to ICS */
+	    SendToICS(ics_prefix);
+	    SendToICS("draw\n");
+	}
+#endif
+	cps->offeredDraw = 2; /* valid until this engine moves twice */
+	if (gameMode == TwoMachinesPlay) {
+	    if (cps->other->offeredDraw) {
+		GameEnds(GameIsDrawn, "Draw agreed", GE_XBOARD);
+            /* [HGM] in two-machine mode we delay relaying draw offer      */
+            /* until after we also have move, to see if it is really claim */
+	    }
+#if 0
+              else {
+	        if (cps->other->sendDrawOffers) {
+		    SendToProgram("draw\n", cps->other);
+		}
+	    }
+#endif
+	} else if (gameMode == MachinePlaysWhite ||
+		   gameMode == MachinePlaysBlack) {
+	  if (userOfferedDraw) {
+	    DisplayInformation(_("Machine accepts your draw offer"));
+	    GameEnds(GameIsDrawn, "Draw agreed", GE_XBOARD);
+	  } else {
+            DisplayInformation(_("Machine offers a draw\nSelect Action / Draw to agree"));
+	  }
+	}
+    }
+
+    
+    /*
+     * Look for thinking output
+     */
+    if ( appData.showThinking // [HGM] thinking: test all options that cause this output
+	  || !appData.hideThinkingFromHuman || appData.adjudicateLossThreshold != 0 || EngineOutputIsUp()
+				) {
+	int plylev, mvleft, mvtot, curscore, time;
+	char mvname[MOVE_LEN];
+	u64 nodes; // [DM]
+	char plyext;
+	int ignore = FALSE;
+	int prefixHint = FALSE;
+	mvname[0] = NULLCHAR;
+
+	switch (gameMode) {
+	  case MachinePlaysBlack:
+	  case IcsPlayingBlack:
+	    if (WhiteOnMove(forwardMostMove)) prefixHint = TRUE;
+	    break;
+	  case MachinePlaysWhite:
+	  case IcsPlayingWhite:
+	    if (!WhiteOnMove(forwardMostMove)) prefixHint = TRUE;
+	    break;
+	  case AnalyzeMode:
+	  case AnalyzeFile:
+            break;
+          case IcsObserving: /* [DM] icsEngineAnalyze */
+            if (!appData.icsEngineAnalyze) ignore = TRUE;
+	    break;
+	  case TwoMachinesPlay:
+	    if ((cps->twoMachinesColor[0] == 'w') != WhiteOnMove(forwardMostMove)) {
+		ignore = TRUE;
+	    }
+	    break;
+	  default:
+	    ignore = TRUE;
+	    break;
+	}
+
+	if (!ignore) {
+	    buf1[0] = NULLCHAR;
+	    if (sscanf(message, "%d%c %d %d " u64Display " %[^\n]\n",
+		       &plylev, &plyext, &curscore, &time, &nodes, buf1) >= 5) {
+
+		if (plyext != ' ' && plyext != '\t') {
+		    time *= 100;
+		}
+
+                /* [AS] Negate score if machine is playing black and reporting absolute scores */
+                if( cps->scoreIsAbsolute && 
+                    ((gameMode == MachinePlaysBlack) || (gameMode == TwoMachinesPlay && cps->twoMachinesColor[0] == 'b')) )
+                {
+                    curscore = -curscore;
+                }
+
+
+		programStats.depth = plylev;
+		programStats.nodes = nodes;
+		programStats.time = time;
+		programStats.score = curscore;
+		programStats.got_only_move = 0;
+
+		if(cps->nps >= 0) { /* [HGM] nps: use engine nodes or time to decrement clock */
+			int ticklen;
+
+			if(cps->nps == 0) ticklen = 10*time;                    // use engine reported time
+			else ticklen = (1000. * u64ToDouble(nodes)) / cps->nps; // convert node count to time
+			if(WhiteOnMove(forwardMostMove)) 
+			     whiteTimeRemaining = timeRemaining[0][forwardMostMove] - ticklen;
+			else blackTimeRemaining = timeRemaining[1][forwardMostMove] - ticklen;
+		}
+
+		/* Buffer overflow protection */
+		if (buf1[0] != NULLCHAR) {
+		    if (strlen(buf1) >= sizeof(programStats.movelist)
+			&& appData.debugMode) {
+			fprintf(debugFP,
+				"PV is too long; using the first %d bytes.\n",
+				sizeof(programStats.movelist) - 1);
+		    }
+
+                    safeStrCpy( programStats.movelist, buf1, sizeof(programStats.movelist) );
+		} else {
+		    sprintf(programStats.movelist, " no PV\n");
+		}
+
+		if (programStats.seen_stat) {
+		    programStats.ok_to_send = 1;
+		}
+
+		if (strchr(programStats.movelist, '(') != NULL) {
+		    programStats.line_is_book = 1;
+		    programStats.nr_moves = 0;
+		    programStats.moves_left = 0;
+		} else {
+		    programStats.line_is_book = 0;
+		}
+
+                SendProgramStatsToFrontend( cps, &programStats );
+
+                /* 
+                    [AS] Protect the thinkOutput buffer from overflow... this
+                    is only useful if buf1 hasn't overflowed first!
+                */
+		sprintf(thinkOutput, "[%d]%c%+.2f %s%s",
+			plylev, 
+			(gameMode == TwoMachinesPlay ?
+			 ToUpper(cps->twoMachinesColor[0]) : ' '),
+			((double) curscore) / 100.0,
+			prefixHint ? lastHint : "",
+			prefixHint ? " " : "" );
+
+                if( buf1[0] != NULLCHAR ) {
+                    unsigned max_len = sizeof(thinkOutput) - strlen(thinkOutput) - 1;
+
+                    if( strlen(buf1) > max_len ) {
+			if( appData.debugMode) {
+			    fprintf(debugFP,"PV is too long for thinkOutput, truncating.\n");
+                        }
+                        buf1[max_len+1] = '\0';
+                    }
+
+                    strcat( thinkOutput, buf1 );
+                }
+
+                if (currentMove == forwardMostMove || gameMode == AnalyzeMode
+                        || gameMode == AnalyzeFile || appData.icsEngineAnalyze) {
+		    DisplayMove(currentMove - 1);
+		    DisplayAnalysis();
+		}
+		return;
+
+	    } else if ((p=StrStr(message, "(only move)")) != NULL) {
+		/* crafty (9.25+) says "(only move) <move>"
+		 * if there is only 1 legal move
+                 */
+		sscanf(p, "(only move) %s", buf1);
+		sprintf(thinkOutput, "%s (only move)", buf1);
+		sprintf(programStats.movelist, "%s (only move)", buf1);
+		programStats.depth = 1;
+		programStats.nr_moves = 1;
+		programStats.moves_left = 1;
+		programStats.nodes = 1;
+		programStats.time = 1;
+		programStats.got_only_move = 1;
+
+		/* Not really, but we also use this member to
+		   mean "line isn't going to change" (Crafty
+		   isn't searching, so stats won't change) */
+		programStats.line_is_book = 1;
+
+                SendProgramStatsToFrontend( cps, &programStats );
+                
+		if (currentMove == forwardMostMove || gameMode==AnalyzeMode || 
+                           gameMode == AnalyzeFile || appData.icsEngineAnalyze) {
+		    DisplayMove(currentMove - 1);
+		    DisplayAnalysis();
+		}
+		return;
+	    } else if (sscanf(message,"stat01: %d " u64Display " %d %d %d %s",
+			      &time, &nodes, &plylev, &mvleft,
+			      &mvtot, mvname) >= 5) {
+		/* The stat01: line is from Crafty (9.29+) in response
+		   to the "." command */
+		programStats.seen_stat = 1;
+		cps->maybeThinking = TRUE;
+
+		if (programStats.got_only_move || !appData.periodicUpdates)
+		  return;
+
+		programStats.depth = plylev;
+		programStats.time = time;
+		programStats.nodes = nodes;
+		programStats.moves_left = mvleft;
+		programStats.nr_moves = mvtot;
+		strcpy(programStats.move_name, mvname);
+		programStats.ok_to_send = 1;
+                programStats.movelist[0] = '\0';
+
+                SendProgramStatsToFrontend( cps, &programStats );
+
+		DisplayAnalysis();
+		return;
+
+	    } else if (strncmp(message,"++",2) == 0) {
+		/* Crafty 9.29+ outputs this */
+		programStats.got_fail = 2;
+		return;
+
+	    } else if (strncmp(message,"--",2) == 0) {
+		/* Crafty 9.29+ outputs this */
+		programStats.got_fail = 1;
+		return;
+
+	    } else if (thinkOutput[0] != NULLCHAR &&
+		       strncmp(message, "    ", 4) == 0) {
+                unsigned message_len;
+
+	        p = message;
+		while (*p && *p == ' ') p++;
+
+                message_len = strlen( p );
+
+                /* [AS] Avoid buffer overflow */
+                if( sizeof(thinkOutput) - strlen(thinkOutput) - 1 > message_len ) {
+		    strcat(thinkOutput, " ");
+		    strcat(thinkOutput, p);
+                }
+
+                if( sizeof(programStats.movelist) - strlen(programStats.movelist) - 1 > message_len ) {
+		    strcat(programStats.movelist, " ");
+		    strcat(programStats.movelist, p);
+                }
+
+		if (currentMove == forwardMostMove || gameMode==AnalyzeMode ||
+                           gameMode == AnalyzeFile || appData.icsEngineAnalyze) {
+		    DisplayMove(currentMove - 1);
+		    DisplayAnalysis();
+		}
+		return;
+	    }
+	}
+        else {
+	    buf1[0] = NULLCHAR;
+
+	    if (sscanf(message, "%d%c %d %d " u64Display " %[^\n]\n",
+		       &plylev, &plyext, &curscore, &time, &nodes, buf1) >= 5) 
+            {
+                ChessProgramStats cpstats;
+
+		if (plyext != ' ' && plyext != '\t') {
+		    time *= 100;
+		}
+
+                /* [AS] Negate score if machine is playing black and reporting absolute scores */
+                if( cps->scoreIsAbsolute && ((gameMode == MachinePlaysBlack) || (gameMode == TwoMachinesPlay && cps->twoMachinesColor[0] == 'b')) ) {
+                    curscore = -curscore;
+                }
+
+		cpstats.depth = plylev;
+		cpstats.nodes = nodes;
+		cpstats.time = time;
+		cpstats.score = curscore;
+		cpstats.got_only_move = 0;
+                cpstats.movelist[0] = '\0';
+
+		if (buf1[0] != NULLCHAR) {
+                    safeStrCpy( cpstats.movelist, buf1, sizeof(cpstats.movelist) );
+		}
+
+		cpstats.ok_to_send = 0;
+		cpstats.line_is_book = 0;
+		cpstats.nr_moves = 0;
+		cpstats.moves_left = 0;
+
+                SendProgramStatsToFrontend( cps, &cpstats );
+            }
+        }
+    }
+}
+
+
+/* Parse a game score from the character string "game", and
+   record it as the history of the current game.  The game
+   score is NOT assumed to start from the standard position. 
+   The display is not updated in any way.
+   */
+void
+ParseGameHistory(game)
+     char *game;
+{
+    ChessMove moveType;
+    int fromX, fromY, toX, toY, boardIndex;
+    char promoChar;
+    char *p, *q;
+    char buf[MSG_SIZ];
+
+    if (appData.debugMode)
+      fprintf(debugFP, "Parsing game history: %s\n", game);
+
+    if (gameInfo.event == NULL) gameInfo.event = StrSave("ICS game");
+    gameInfo.site = StrSave(appData.icsHost);
+    gameInfo.date = PGNDate();
+    gameInfo.round = StrSave("-");
+
+    /* Parse out names of players */
+    while (*game == ' ') game++;
+    p = buf;
+    while (*game != ' ') *p++ = *game++;
+    *p = NULLCHAR;
+    gameInfo.white = StrSave(buf);
+    while (*game == ' ') game++;
+    p = buf;
+    while (*game != ' ' && *game != '\n') *p++ = *game++;
+    *p = NULLCHAR;
+    gameInfo.black = StrSave(buf);
+
+    /* Parse moves */
+    boardIndex = blackPlaysFirst ? 1 : 0;
+    yynewstr(game);
+    for (;;) {
+	yyboardindex = boardIndex;
+	moveType = (ChessMove) yylex();
+	switch (moveType) {
+	  case IllegalMove:		/* maybe suicide chess, etc. */
+  if (appData.debugMode) {
+    fprintf(debugFP, "Illegal move from ICS: '%s'\n", yy_text);
+    fprintf(debugFP, "board L=%d, R=%d, H=%d, holdings=%d\n", BOARD_LEFT, BOARD_RGHT, BOARD_HEIGHT, gameInfo.holdingsWidth);
+    setbuf(debugFP, NULL);
+  }
+          case WhitePromotionChancellor:
+          case BlackPromotionChancellor:
+          case WhitePromotionArchbishop:
+          case BlackPromotionArchbishop:
+	  case WhitePromotionQueen:
+	  case BlackPromotionQueen:
+	  case WhitePromotionRook:
+	  case BlackPromotionRook:
+	  case WhitePromotionBishop:
+	  case BlackPromotionBishop:
+	  case WhitePromotionKnight:
+	  case BlackPromotionKnight:
+	  case WhitePromotionKing:
+	  case BlackPromotionKing:
+	  case NormalMove:
+	  case WhiteCapturesEnPassant:
+	  case BlackCapturesEnPassant:
+	  case WhiteKingSideCastle:
+	  case WhiteQueenSideCastle:
+	  case BlackKingSideCastle:
+	  case BlackQueenSideCastle:
+	  case WhiteKingSideCastleWild:
+	  case WhiteQueenSideCastleWild:
+	  case BlackKingSideCastleWild:
+	  case BlackQueenSideCastleWild:
+          /* PUSH Fabien */
+          case WhiteHSideCastleFR:
+          case WhiteASideCastleFR:
+          case BlackHSideCastleFR:
+          case BlackASideCastleFR:
+          /* POP Fabien */
+            fromX = currentMoveString[0] - AAA;
+            fromY = currentMoveString[1] - ONE;
+            toX = currentMoveString[2] - AAA;
+            toY = currentMoveString[3] - ONE;
+	    promoChar = currentMoveString[4];
+	    break;
+	  case WhiteDrop:
+	  case BlackDrop:
+	    fromX = moveType == WhiteDrop ?
+	      (int) CharToPiece(ToUpper(currentMoveString[0])) :
+	    (int) CharToPiece(ToLower(currentMoveString[0]));
+	    fromY = DROP_RANK;
+            toX = currentMoveString[2] - AAA;
+            toY = currentMoveString[3] - ONE;
+	    promoChar = NULLCHAR;
+	    break;
+	  case AmbiguousMove:
+	    /* bug? */
+	    sprintf(buf, _("Ambiguous move in ICS output: \"%s\""), yy_text);
+  if (appData.debugMode) {
+    fprintf(debugFP, "Ambiguous move from ICS: '%s'\n", yy_text);
+    fprintf(debugFP, "board L=%d, R=%d, H=%d, holdings=%d\n", BOARD_LEFT, BOARD_RGHT, BOARD_HEIGHT, gameInfo.holdingsWidth);
+    setbuf(debugFP, NULL);
+  }
+	    DisplayError(buf, 0);
+	    return;
+	  case ImpossibleMove:
+	    /* bug? */
+	    sprintf(buf, _("Illegal move in ICS output: \"%s\""), yy_text);
+  if (appData.debugMode) {
+    fprintf(debugFP, "Impossible move from ICS: '%s'\n", yy_text);
+    fprintf(debugFP, "board L=%d, R=%d, H=%d, holdings=%d\n", BOARD_LEFT, BOARD_RGHT, BOARD_HEIGHT, gameInfo.holdingsWidth);
+    setbuf(debugFP, NULL);
+  }
+	    DisplayError(buf, 0);
+	    return;
+	  case (ChessMove) 0:	/* end of file */
+	    if (boardIndex < backwardMostMove) {
+		/* Oops, gap.  How did that happen? */
+		DisplayError(_("Gap in move list"), 0);
+		return;
+	    }
+	    backwardMostMove =  blackPlaysFirst ? 1 : 0;
+	    if (boardIndex > forwardMostMove) {
+		forwardMostMove = boardIndex;
+	    }
+	    return;
+	  case ElapsedTime:
+	    if (boardIndex > (blackPlaysFirst ? 1 : 0)) {
+		strcat(parseList[boardIndex-1], " ");
+		strcat(parseList[boardIndex-1], yy_text);
+	    }
+	    continue;
+	  case Comment:
+	  case PGNTag:
+	  case NAG:
+	  default:
+	    /* ignore */
+	    continue;
+	  case WhiteWins:
+	  case BlackWins:
+	  case GameIsDrawn:
+	  case GameUnfinished:
+	    if (gameMode == IcsExamining) {
+		if (boardIndex < backwardMostMove) {
+		    /* Oops, gap.  How did that happen? */
+		    return;
+		}
+		backwardMostMove = blackPlaysFirst ? 1 : 0;
+		return;
+	    }
+	    gameInfo.result = moveType;
+	    p = strchr(yy_text, '{');
+	    if (p == NULL) p = strchr(yy_text, '(');
+	    if (p == NULL) {
+		p = yy_text;
+		if (p[0] == '0' || p[0] == '1' || p[0] == '*') p = "";
+	    } else {
+		q = strchr(p, *p == '{' ? '}' : ')');
+		if (q != NULL) *q = NULLCHAR;
+		p++;
+	    }
+	    gameInfo.resultDetails = StrSave(p);
+	    continue;
+	}
+	if (boardIndex >= forwardMostMove &&
+	    !(gameMode == IcsObserving && ics_gamenum == -1)) {
+	    backwardMostMove = blackPlaysFirst ? 1 : 0;
+	    return;
+	}
+	(void) CoordsToAlgebraic(boards[boardIndex], PosFlags(boardIndex),
+				 EP_UNKNOWN, fromY, fromX, toY, toX, promoChar,
+				 parseList[boardIndex]);
+	CopyBoard(boards[boardIndex + 1], boards[boardIndex]);
+	/* currentMoveString is set as a side-effect of yylex */
+	strcpy(moveList[boardIndex], currentMoveString);
+	strcat(moveList[boardIndex], "\n");
+	boardIndex++;
+	ApplyMove(fromX, fromY, toX, toY, promoChar, boards[boardIndex]);
+        switch (MateTest(boards[boardIndex], PosFlags(boardIndex),
+                                 EP_UNKNOWN, castlingRights[boardIndex]) ) {
+	  case MT_NONE:
+	  case MT_STALEMATE:
+	  default:
+	    break;
+	  case MT_CHECK:
+            if(gameInfo.variant != VariantShogi)
+                strcat(parseList[boardIndex - 1], "+");
+	    break;
+	  case MT_CHECKMATE:
+	    strcat(parseList[boardIndex - 1], "#");
+	    break;
+	}
+    }
+}
+
+
+/* Apply a move to the given board  */
+void
+ApplyMove(fromX, fromY, toX, toY, promoChar, board)
+     int fromX, fromY, toX, toY;
+     int promoChar;
+     Board board;
+{
+  ChessSquare captured = board[toY][toX], piece, king; int p, oldEP = EP_NONE, berolina = 0;
+
+    /* [HGM] compute & store e.p. status and castling rights for new position */
+    /* if we are updating a board for which those exist (i.e. in boards[])    */
+    if((p = ((int)board - (int)boards[0])/((int)boards[1]-(int)boards[0])) < MAX_MOVES && p > 0)
+    { int i;
+
+      if(gameInfo.variant == VariantBerolina) berolina = EP_BEROLIN_A;
+      oldEP = epStatus[p-1];
+      epStatus[p] = EP_NONE;
+
+      if( board[toY][toX] != EmptySquare ) 
+           epStatus[p] = EP_CAPTURE;  
+
+      if( board[fromY][fromX] == WhitePawn ) {
+           if(fromY != toY) // [HGM] Xiangqi sideway Pawn moves should not count as 50-move breakers
+	       epStatus[p] = EP_PAWN_MOVE;
+           if( toY-fromY==2) {
+               if(toX>BOARD_LEFT   && board[toY][toX-1] == BlackPawn &&
+			gameInfo.variant != VariantBerolina || toX < fromX)
+	              epStatus[p] = toX | berolina;
+               if(toX<BOARD_RGHT-1 && board[toY][toX+1] == BlackPawn &&
+			gameInfo.variant != VariantBerolina || toX > fromX) 
+	              epStatus[p] = toX;
+	   }
+      } else 
+      if( board[fromY][fromX] == BlackPawn ) {
+           if(fromY != toY) // [HGM] Xiangqi sideway Pawn moves should not count as 50-move breakers
+	       epStatus[p] = EP_PAWN_MOVE; 
+           if( toY-fromY== -2) {
+               if(toX>BOARD_LEFT   && board[toY][toX-1] == WhitePawn &&
+			gameInfo.variant != VariantBerolina || toX < fromX)
+	              epStatus[p] = toX | berolina;
+               if(toX<BOARD_RGHT-1 && board[toY][toX+1] == WhitePawn &&
+			gameInfo.variant != VariantBerolina || toX > fromX) 
+	              epStatus[p] = toX;
+	   }
+       }
+
+       for(i=0; i<nrCastlingRights; i++) {
+           castlingRights[p][i] = castlingRights[p-1][i];
+           if(castlingRights[p][i] == fromX && castlingRank[i] == fromY ||
+              castlingRights[p][i] == toX   && castlingRank[i] == toY   
+             ) castlingRights[p][i] = -1; // revoke for moved or captured piece
+       }
+
+    }
+
+  /* [HGM] In Shatranj and Courier all promotions are to Ferz */
+  if((gameInfo.variant==VariantShatranj || gameInfo.variant==VariantCourier)
+       && promoChar != 0) promoChar = PieceToChar(WhiteFerz);
+         
+  if (fromX == toX && fromY == toY) return;
+
+  if (fromY == DROP_RANK) {
+	/* must be first */
+        piece = board[toY][toX] = (ChessSquare) fromX;
+  } else {
+     piece = board[fromY][fromX]; /* [HGM] remember, for Shogi promotion */
+     king = piece < (int) BlackPawn ? WhiteKing : BlackKing; /* [HGM] Knightmate simplify testing for castling */
+     if(gameInfo.variant == VariantKnightmate)
+         king += (int) WhiteUnicorn - (int) WhiteKing;
+
+    /* Code added by Tord: */
+    /* FRC castling assumed when king captures friendly rook. */
+    if (board[fromY][fromX] == WhiteKing &&
+	     board[toY][toX] == WhiteRook) {
+      board[fromY][fromX] = EmptySquare;
+      board[toY][toX] = EmptySquare;
+      if(toX > fromX) {
+        board[0][BOARD_RGHT-2] = WhiteKing; board[0][BOARD_RGHT-3] = WhiteRook;
+      } else {
+        board[0][BOARD_LEFT+2] = WhiteKing; board[0][BOARD_LEFT+3] = WhiteRook;
+      }
+    } else if (board[fromY][fromX] == BlackKing &&
+	       board[toY][toX] == BlackRook) {
+      board[fromY][fromX] = EmptySquare;
+      board[toY][toX] = EmptySquare;
+      if(toX > fromX) {
+        board[BOARD_HEIGHT-1][BOARD_RGHT-2] = BlackKing; board[BOARD_HEIGHT-1][BOARD_RGHT-3] = BlackRook;
+      } else {
+        board[BOARD_HEIGHT-1][BOARD_LEFT+2] = BlackKing; board[BOARD_HEIGHT-1][BOARD_LEFT+3] = BlackRook;
+      }
+    /* End of code added by Tord */
+
+    } else if (board[fromY][fromX] == king
+        && fromX != BOARD_LEFT && fromX != BOARD_RGHT-1 // [HGM] cylinder */
+        && toY == fromY && toX > fromX+1) {
+	board[fromY][fromX] = EmptySquare;
+        board[toY][toX] = king;
+        board[toY][toX-1] = board[fromY][BOARD_RGHT-1];
+        board[fromY][BOARD_RGHT-1] = EmptySquare;
+    } else if (board[fromY][fromX] == king
+        && fromX != BOARD_LEFT && fromX != BOARD_RGHT-1 // [HGM] cylinder */
+               && toY == fromY && toX < fromX-1) {
+	board[fromY][fromX] = EmptySquare;
+        board[toY][toX] = king;
+        board[toY][toX+1] = board[fromY][BOARD_LEFT];
+        board[fromY][BOARD_LEFT] = EmptySquare;
+    } else if (board[fromY][fromX] == WhitePawn
+               && toY == BOARD_HEIGHT-1
+               && gameInfo.variant != VariantXiangqi
+               ) {
+	/* white pawn promotion */
+        board[toY][toX] = CharToPiece(ToUpper(promoChar));
+        if (board[toY][toX] == EmptySquare) {
+            board[toY][toX] = WhiteQueen;
+	}
+        if(gameInfo.variant==VariantBughouse ||
+           gameInfo.variant==VariantCrazyhouse) /* [HGM] use shadow piece */
+            board[toY][toX] = (ChessSquare) (PROMOTED board[toY][toX]);
+	board[fromY][fromX] = EmptySquare;
+    } else if ((fromY == BOARD_HEIGHT-4)
+	       && (toX != fromX)
+               && gameInfo.variant != VariantXiangqi
+               && gameInfo.variant != VariantBerolina
+	       && (board[fromY][fromX] == WhitePawn)
+	       && (board[toY][toX] == EmptySquare)) {
+	board[fromY][fromX] = EmptySquare;
+	board[toY][toX] = WhitePawn;
+	captured = board[toY - 1][toX];
+	board[toY - 1][toX] = EmptySquare;
+    } else if ((fromY == BOARD_HEIGHT-4)
+	       && (toX == fromX)
+               && gameInfo.variant == VariantBerolina
+	       && (board[fromY][fromX] == WhitePawn)
+	       && (board[toY][toX] == EmptySquare)) {
+	board[fromY][fromX] = EmptySquare;
+	board[toY][toX] = WhitePawn;
+	if(oldEP & EP_BEROLIN_A) {
+		captured = board[fromY][fromX-1];
+		board[fromY][fromX-1] = EmptySquare;
+	}else{	captured = board[fromY][fromX+1];
+		board[fromY][fromX+1] = EmptySquare;
+	}
+    } else if (board[fromY][fromX] == king
+        && fromX != BOARD_LEFT && fromX != BOARD_RGHT-1 // [HGM] cylinder */
+               && toY == fromY && toX > fromX+1) {
+	board[fromY][fromX] = EmptySquare;
+        board[toY][toX] = king;
+        board[toY][toX-1] = board[fromY][BOARD_RGHT-1];
+        board[fromY][BOARD_RGHT-1] = EmptySquare;
+    } else if (board[fromY][fromX] == king
+        && fromX != BOARD_LEFT && fromX != BOARD_RGHT-1 // [HGM] cylinder */
+               && toY == fromY && toX < fromX-1) {
+	board[fromY][fromX] = EmptySquare;
+        board[toY][toX] = king;
+        board[toY][toX+1] = board[fromY][BOARD_LEFT];
+        board[fromY][BOARD_LEFT] = EmptySquare;
+    } else if (fromY == 7 && fromX == 3
+	       && board[fromY][fromX] == BlackKing
+	       && toY == 7 && toX == 5) {
+	board[fromY][fromX] = EmptySquare;
+	board[toY][toX] = BlackKing;
+	board[fromY][7] = EmptySquare;
+	board[toY][4] = BlackRook;
+    } else if (fromY == 7 && fromX == 3
+	       && board[fromY][fromX] == BlackKing
+	       && toY == 7 && toX == 1) {
+	board[fromY][fromX] = EmptySquare;
+	board[toY][toX] = BlackKing;
+	board[fromY][0] = EmptySquare;
+	board[toY][2] = BlackRook;
+    } else if (board[fromY][fromX] == BlackPawn
+	       && toY == 0
+               && gameInfo.variant != VariantXiangqi
+               ) {
+	/* black pawn promotion */
+	board[0][toX] = CharToPiece(ToLower(promoChar));
+	if (board[0][toX] == EmptySquare) {
+	    board[0][toX] = BlackQueen;
+	}
+        if(gameInfo.variant==VariantBughouse ||
+           gameInfo.variant==VariantCrazyhouse) /* [HGM] use shadow piece */
+            board[toY][toX] = (ChessSquare) (PROMOTED board[toY][toX]);
+	board[fromY][fromX] = EmptySquare;
+    } else if ((fromY == 3)
+	       && (toX != fromX)
+               && gameInfo.variant != VariantXiangqi
+               && gameInfo.variant != VariantBerolina
+	       && (board[fromY][fromX] == BlackPawn)
+	       && (board[toY][toX] == EmptySquare)) {
+	board[fromY][fromX] = EmptySquare;
+	board[toY][toX] = BlackPawn;
+	captured = board[toY + 1][toX];
+	board[toY + 1][toX] = EmptySquare;
+    } else if ((fromY == 3)
+	       && (toX == fromX)
+               && gameInfo.variant == VariantBerolina
+	       && (board[fromY][fromX] == BlackPawn)
+	       && (board[toY][toX] == EmptySquare)) {
+	board[fromY][fromX] = EmptySquare;
+	board[toY][toX] = BlackPawn;
+	if(oldEP & EP_BEROLIN_A) {
+		captured = board[fromY][fromX-1];
+		board[fromY][fromX-1] = EmptySquare;
+	}else{	captured = board[fromY][fromX+1];
+		board[fromY][fromX+1] = EmptySquare;
+	}
+    } else {
+	board[toY][toX] = board[fromY][fromX];
+	board[fromY][fromX] = EmptySquare;
+    }
+
+    /* [HGM] now we promote for Shogi, if needed */
+    if(gameInfo.variant == VariantShogi && promoChar == 'q')
+        board[toY][toX] = (ChessSquare) (PROMOTED piece);
+  }
+
+    if (gameInfo.holdingsWidth != 0) {
+
+      /* !!A lot more code needs to be written to support holdings  */
+      /* [HGM] OK, so I have written it. Holdings are stored in the */
+      /* penultimate board files, so they are automaticlly stored   */
+      /* in the game history.                                       */
+      if (fromY == DROP_RANK) {
+        /* Delete from holdings, by decreasing count */
+        /* and erasing image if necessary            */
+        p = (int) fromX;
+        if(p < (int) BlackPawn) { /* white drop */
+             p -= (int)WhitePawn;
+             if(p >= gameInfo.holdingsSize) p = 0;
+             if(--board[p][BOARD_WIDTH-2] == 0)
+                  board[p][BOARD_WIDTH-1] = EmptySquare;
+        } else {                  /* black drop */
+             p -= (int)BlackPawn;
+             if(p >= gameInfo.holdingsSize) p = 0;
+             if(--board[BOARD_HEIGHT-1-p][1] == 0)
+                  board[BOARD_HEIGHT-1-p][0] = EmptySquare;
+        }
+      }
+      if (captured != EmptySquare && gameInfo.holdingsSize > 0
+          && gameInfo.variant != VariantBughouse        ) {
+        /* [HGM] holdings: Add to holdings, if holdings exist */
+	if(gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat) { 
+		// [HGM] superchess: suppress flipping color of captured pieces by reverse pre-flip
+		captured = (int) captured >= (int) BlackPawn ? BLACK_TO_WHITE captured : WHITE_TO_BLACK captured;
+	}
+        p = (int) captured;
+        if (p >= (int) BlackPawn) {
+          p -= (int)BlackPawn;
+          if(gameInfo.variant == VariantShogi && DEMOTED p >= 0) {
+                  /* in Shogi restore piece to its original  first */
+                  captured = (ChessSquare) (DEMOTED captured);
+                  p = DEMOTED p;
+          }
+          p = PieceToNumber((ChessSquare)p);
+          if(p >= gameInfo.holdingsSize) { p = 0; captured = BlackPawn; }
+          board[p][BOARD_WIDTH-2]++;
+          board[p][BOARD_WIDTH-1] = BLACK_TO_WHITE captured;
+	} else {
+          p -= (int)WhitePawn;
+          if(gameInfo.variant == VariantShogi && DEMOTED p >= 0) {
+                  captured = (ChessSquare) (DEMOTED captured);
+                  p = DEMOTED p;
+          }
+          p = PieceToNumber((ChessSquare)p);
+          if(p >= gameInfo.holdingsSize) { p = 0; captured = WhitePawn; }
+          board[BOARD_HEIGHT-1-p][1]++;
+          board[BOARD_HEIGHT-1-p][0] = WHITE_TO_BLACK captured;
+	}
+      }
+
+    } else if (gameInfo.variant == VariantAtomic) {
+      if (captured != EmptySquare) {
+	int y, x;
+	for (y = toY-1; y <= toY+1; y++) {
+	  for (x = toX-1; x <= toX+1; x++) {
+            if (y >= 0 && y < BOARD_HEIGHT && x >= BOARD_LEFT && x < BOARD_RGHT &&
+		board[y][x] != WhitePawn && board[y][x] != BlackPawn) {
+	      board[y][x] = EmptySquare;
+	    }
+	  }
+	}
+	board[toY][toX] = EmptySquare;
+      }
+    }
+    if(gameInfo.variant == VariantShogi && promoChar != NULLCHAR && promoChar != '=') {
+        /* [HGM] Shogi promotions */
+        board[toY][toX] = (ChessSquare) (PROMOTED piece);
+    }
+
+}
+
+/* Updates forwardMostMove */
+void
+MakeMove(fromX, fromY, toX, toY, promoChar)
+     int fromX, fromY, toX, toY;
+     int promoChar;
+{
+//    forwardMostMove++; // [HGM] bare: moved downstream
+
+    if(serverMoves != NULL) { /* [HGM] write moves on file for broadcasting (should be separate routine, really) */
+        int timeLeft; static int lastLoadFlag=0; int king, piece;
+        piece = boards[forwardMostMove][fromY][fromX];
+        king = piece < (int) BlackPawn ? WhiteKing : BlackKing;
+        if(gameInfo.variant == VariantKnightmate)
+            king += (int) WhiteUnicorn - (int) WhiteKing;
+        if(forwardMostMove == 0) {
+            if(blackPlaysFirst) 
+                fprintf(serverMoves, "%s;", second.tidy);
+            fprintf(serverMoves, "%s;", first.tidy);
+            if(!blackPlaysFirst) 
+                fprintf(serverMoves, "%s;", second.tidy);
+        } else fprintf(serverMoves, loadFlag|lastLoadFlag ? ":" : ";");
+        lastLoadFlag = loadFlag;
+        // print base move
+        fprintf(serverMoves, "%c%c:%c%c", AAA+fromX, ONE+fromY, AAA+toX, ONE+toY);
+        // print castling suffix
+        if( toY == fromY && piece == king ) {
+            if(toX-fromX > 1)
+                fprintf(serverMoves, ":%c%c:%c%c", AAA+BOARD_RGHT-1, ONE+fromY, AAA+toX-1,ONE+toY);
+            if(fromX-toX >1)
+                fprintf(serverMoves, ":%c%c:%c%c", AAA+BOARD_LEFT, ONE+fromY, AAA+toX+1,ONE+toY);
+        }
+        // e.p. suffix
+        if( (boards[forwardMostMove][fromY][fromX] == WhitePawn ||
+             boards[forwardMostMove][fromY][fromX] == BlackPawn   ) &&
+             boards[forwardMostMove][toY][toX] == EmptySquare
+             && fromX != toX )
+                fprintf(serverMoves, ":%c%c:%c%c", AAA+fromX, ONE+fromY, AAA+toX, ONE+fromY);
+        // promotion suffix
+        if(promoChar != NULLCHAR)
+                fprintf(serverMoves, ":%c:%c%c", promoChar, AAA+toX, ONE+toY);
+        if(!loadFlag) {
+            fprintf(serverMoves, "/%d/%d",
+               pvInfoList[forwardMostMove].depth, pvInfoList[forwardMostMove].score);
+            if(forwardMostMove+1 & 1) timeLeft = whiteTimeRemaining/1000;
+            else                      timeLeft = blackTimeRemaining/1000;
+            fprintf(serverMoves, "/%d", timeLeft);
+        }
+        fflush(serverMoves);
+    }
+
+    if (forwardMostMove+1 >= MAX_MOVES) {
+      DisplayFatalError(_("Game too long; increase MAX_MOVES and recompile"),
+			0, 1);
+      return;
+    }
+    SwitchClocks();
+    timeRemaining[0][forwardMostMove+1] = whiteTimeRemaining;
+    timeRemaining[1][forwardMostMove+1] = blackTimeRemaining;
+    if (commentList[forwardMostMove+1] != NULL) {
+	free(commentList[forwardMostMove+1]);
+	commentList[forwardMostMove+1] = NULL;
+    }
+    CopyBoard(boards[forwardMostMove+1], boards[forwardMostMove]);
+    ApplyMove(fromX, fromY, toX, toY, promoChar, boards[forwardMostMove+1]);
+    forwardMostMove++; // [HGM] bare: moved to after ApplyMove, to make sure clock interrupt finds complete board
+    gameInfo.result = GameUnfinished;
+    if (gameInfo.resultDetails != NULL) {
+	free(gameInfo.resultDetails);
+	gameInfo.resultDetails = NULL;
+    }
+    CoordsToComputerAlgebraic(fromY, fromX, toY, toX, promoChar,
+			      moveList[forwardMostMove - 1]);
+    (void) CoordsToAlgebraic(boards[forwardMostMove - 1],
+			     PosFlags(forwardMostMove - 1), EP_UNKNOWN,
+			     fromY, fromX, toY, toX, promoChar,
+			     parseList[forwardMostMove - 1]);
+    switch (MateTest(boards[forwardMostMove], PosFlags(forwardMostMove),
+                       epStatus[forwardMostMove], /* [HGM] use true e.p. */
+                            castlingRights[forwardMostMove]) ) {
+      case MT_NONE:
+      case MT_STALEMATE:
+      default:
+	break;
+      case MT_CHECK:
+        if(gameInfo.variant != VariantShogi)
+            strcat(parseList[forwardMostMove - 1], "+");
+	break;
+      case MT_CHECKMATE:
+	strcat(parseList[forwardMostMove - 1], "#");
+	break;
+    }
+    if (appData.debugMode) {
+        fprintf(debugFP, "move: %s, parse: %s (%c)\n", moveList[forwardMostMove-1], parseList[forwardMostMove-1], moveList[forwardMostMove-1][4]);
+    }
+
+}
+
+/* Updates currentMove if not pausing */
+void
+ShowMove(fromX, fromY, toX, toY)
+{
+    int instant = (gameMode == PlayFromGameFile) ?
+	(matchMode || (appData.timeDelay == 0 && !pausing)) : pausing;
+    if(appData.noGUI) return;
+    if (!pausing || gameMode == PlayFromGameFile || gameMode == AnalyzeFile) {
+	if (!instant) {
+	    if (forwardMostMove == currentMove + 1) {
+		AnimateMove(boards[forwardMostMove - 1],
+			    fromX, fromY, toX, toY);
+	    }
+	    if (appData.highlightLastMove) {
+		SetHighlights(fromX, fromY, toX, toY);
+	    }
+	}
+	currentMove = forwardMostMove;
+    }
+
+    if (instant) return;
+
+    DisplayMove(currentMove - 1);
+    DrawPosition(FALSE, boards[currentMove]);
+    DisplayBothClocks();
+    HistorySet(parseList,backwardMostMove,forwardMostMove,currentMove-1);
+}
+
+void SendEgtPath(ChessProgramState *cps)
+{       /* [HGM] EGT: match formats given in feature with those given by user, and send info for each match */
+	char buf[MSG_SIZ], name[MSG_SIZ], *p;
+
+	if((p = cps->egtFormats) == NULL || appData.egtFormats == NULL) return;
+
+	while(*p) {
+	    char c, *q = name+1, *r, *s;
+
+	    name[0] = ','; // extract next format name from feature and copy with prefixed ','
+	    while(*p && *p != ',') *q++ = *p++;
+	    *q++ = ':'; *q = 0;
+	    if( appData.defaultPathEGTB && appData.defaultPathEGTB[0] && 
+		strcmp(name, ",nalimov:") == 0 ) {
+		// take nalimov path from the menu-changeable option first, if it is defined
+		sprintf(buf, "egtpath nalimov %s\n", appData.defaultPathEGTB);
+		SendToProgram(buf,cps);     // send egtbpath command for nalimov
+	    } else
+	    if( (s = StrStr(appData.egtFormats, name+1)) == appData.egtFormats ||
+		(s = StrStr(appData.egtFormats, name)) != NULL) {
+		// format name occurs amongst user-supplied formats, at beginning or immediately after comma
+		s = r = StrStr(s, ":") + 1; // beginning of path info
+		while(*r && *r != ',') r++; // path info is everything upto next ';' or end of string
+		c = *r; *r = 0;             // temporarily null-terminate path info
+		    *--q = 0;               // strip of trailig ':' from name
+		    sprintf(buf, "egtbpath %s %s\n", name+1, s);
+		*r = c;
+		SendToProgram(buf,cps);     // send egtbpath command for this format
+	    }
+	    if(*p == ',') p++; // read away comma to position for next format name
+	}
+}
+
+void
+InitChessProgram(cps, setup)
+     ChessProgramState *cps;
+     int setup; /* [HGM] needed to setup FRC opening position */
+{
+    char buf[MSG_SIZ], b[MSG_SIZ]; int overruled;
+    if (appData.noChessProgram) return;
+    hintRequested = FALSE;
+    bookRequested = FALSE;
+
+    /* [HGM] some new WB protocol commands to configure engine are sent now, if engine supports them */
+    /*       moved to before sending initstring in 4.3.15, so Polyglot can delay UCI 'isready' to recepton of 'new' */
+    if(cps->memSize) { /* [HGM] memory */
+	sprintf(buf, "memory %d\n", appData.defaultHashSize + appData.defaultCacheSizeEGTB);
+	SendToProgram(buf, cps);
+    }
+    SendEgtPath(cps); /* [HGM] EGT */
+    if(cps->maxCores) { /* [HGM] SMP: (protocol specified must be last settings command before new!) */
+	sprintf(buf, "cores %d\n", appData.smpCores);
+	SendToProgram(buf, cps);
+    }
+
+    SendToProgram(cps->initString, cps);
+    if (gameInfo.variant != VariantNormal &&
+	gameInfo.variant != VariantLoadable
+        /* [HGM] also send variant if board size non-standard */
+        || gameInfo.boardWidth != 8 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 0
+                                            ) {
+      char *v = VariantName(gameInfo.variant);
+      if (cps->protocolVersion != 1 && StrStr(cps->variants, v) == NULL) {
+        /* [HGM] in protocol 1 we have to assume all variants valid */
+	sprintf(buf, _("Variant %s not supported by %s"), v, cps->tidy);
+	DisplayFatalError(buf, 0, 1);
+	return;
+      }
+
+      /* [HGM] make prefix for non-standard board size. Awkward testing... */
+      overruled = gameInfo.boardWidth != 8 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 0;
+      if( gameInfo.variant == VariantXiangqi )
+           overruled = gameInfo.boardWidth != 9 || gameInfo.boardHeight != 10 || gameInfo.holdingsSize != 0;
+      if( gameInfo.variant == VariantShogi )
+           overruled = gameInfo.boardWidth != 9 || gameInfo.boardHeight != 9 || gameInfo.holdingsSize != 7;
+      if( gameInfo.variant == VariantBughouse || gameInfo.variant == VariantCrazyhouse )
+           overruled = gameInfo.boardWidth != 8 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 5;
+      if( gameInfo.variant == VariantCapablanca || gameInfo.variant == VariantCapaRandom || 
+                               gameInfo.variant == VariantGothic  || gameInfo.variant == VariantFalcon )
+           overruled = gameInfo.boardWidth != 10 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 0;
+      if( gameInfo.variant == VariantCourier )
+           overruled = gameInfo.boardWidth != 12 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 0;
+      if( gameInfo.variant == VariantSuper )
+           overruled = gameInfo.boardWidth != 8 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 8;
+      if( gameInfo.variant == VariantGreat )
+           overruled = gameInfo.boardWidth != 10 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 8;
+
+      if(overruled) {
+           sprintf(b, "%dx%d+%d_%s", gameInfo.boardWidth, gameInfo.boardHeight, 
+                               gameInfo.holdingsSize, VariantName(gameInfo.variant)); // cook up sized variant name
+           /* [HGM] varsize: try first if this defiant size variant is specifically known */
+           if(StrStr(cps->variants, b) == NULL) { 
+               // specific sized variant not known, check if general sizing allowed
+               if (cps->protocolVersion != 1) { // for protocol 1 we cannot check and hope for the best
+                   if(StrStr(cps->variants, "boardsize") == NULL) {
+                       sprintf(buf, "Board size %dx%d+%d not supported by %s",
+                            gameInfo.boardWidth, gameInfo.boardHeight, gameInfo.holdingsSize, cps->tidy);
+                       DisplayFatalError(buf, 0, 1);
+                       return;
+                   }
+                   /* [HGM] here we really should compare with the maximum supported board size */
+               }
+           }
+      } else sprintf(b, "%s", VariantName(gameInfo.variant));
+      sprintf(buf, "variant %s\n", b);
+      SendToProgram(buf, cps);
+    }
+    currentlyInitializedVariant = gameInfo.variant;
+
+    /* [HGM] send opening position in FRC to first engine */
+    if(setup) {
+          SendToProgram("force\n", cps);
+          SendBoard(cps, 0);
+          /* engine is now in force mode! Set flag to wake it up after first move. */
+          setboardSpoiledMachineBlack = 1;
+    }
+
+    if (cps->sendICS) {
+      sprintf(buf, "ics %s\n", appData.icsActive ? appData.icsHost : "-");
+      SendToProgram(buf, cps);
+    }
+    cps->maybeThinking = FALSE;
+    cps->offeredDraw = 0;
+    if (!appData.icsActive) {
+	SendTimeControl(cps, movesPerSession, timeControl,
+			timeIncrement, appData.searchDepth,
+			searchTime);
+    }
+    if (appData.showThinking 
+	// [HGM] thinking: four options require thinking output to be sent
+	|| !appData.hideThinkingFromHuman || appData.adjudicateLossThreshold != 0 || EngineOutputIsUp()
+				) {
+	SendToProgram("post\n", cps);
+    }
+    SendToProgram("hard\n", cps);
+    if (!appData.ponderNextMove) {
+	/* Warning: "easy" is a toggle in GNU Chess, so don't send
+	   it without being sure what state we are in first.  "hard"
+	   is not a toggle, so that one is OK.
+	 */
+	SendToProgram("easy\n", cps);
+    }
+    if (cps->usePing) {
+      sprintf(buf, "ping %d\n", ++cps->lastPing);
+      SendToProgram(buf, cps);
+    }
+    cps->initDone = TRUE;
+}   
+
+
+void
+StartChessProgram(cps)
+     ChessProgramState *cps;
+{
+    char buf[MSG_SIZ];
+    int err;
+
+    if (appData.noChessProgram) return;
+    cps->initDone = FALSE;
+
+    if (strcmp(cps->host, "localhost") == 0) {
+	err = StartChildProcess(cps->program, cps->dir, &cps->pr);
+    } else if (*appData.remoteShell == NULLCHAR) {
+	err = OpenRcmd(cps->host, appData.remoteUser, cps->program, &cps->pr);
+    } else {
+	if (*appData.remoteUser == NULLCHAR) {
+	    sprintf(buf, "%s %s %s", appData.remoteShell, cps->host,
+		    cps->program);
+	} else {
+	    sprintf(buf, "%s %s -l %s %s", appData.remoteShell,
+		    cps->host, appData.remoteUser, cps->program);
+	}
+	err = StartChildProcess(buf, "", &cps->pr);
+    }
+    
+    if (err != 0) {
+	sprintf(buf, _("Startup failure on '%s'"), cps->program);
+	DisplayFatalError(buf, err, 1);
+	cps->pr = NoProc;
+	cps->isr = NULL;
+	return;
+    }
+    
+    cps->isr = AddInputSource(cps->pr, TRUE, ReceiveFromProgram, cps);
+    if (cps->protocolVersion > 1) {
+      sprintf(buf, "xboard\nprotover %d\n", cps->protocolVersion);
+      cps->nrOptions = 0; // [HGM] options: clear all engine-specific options
+      cps->comboCnt = 0;  //                and values of combo boxes
+      SendToProgram(buf, cps);
+    } else {
+      SendToProgram("xboard\n", cps);
+    }
+}
+
+
+void
+TwoMachinesEventIfReady P((void))
+{
+  if (first.lastPing != first.lastPong) {
+    DisplayMessage("", _("Waiting for first chess program"));
+    ScheduleDelayedEvent(TwoMachinesEventIfReady, 10); // [HGM] fast: lowered from 1000
+    return;
+  }
+  if (second.lastPing != second.lastPong) {
+    DisplayMessage("", _("Waiting for second chess program"));
+    ScheduleDelayedEvent(TwoMachinesEventIfReady, 10); // [HGM] fast: lowered from 1000
+    return;
+  }
+  ThawUI();
+  TwoMachinesEvent();
+}
+
+void
+NextMatchGame P((void))
+{
+    int index; /* [HGM] autoinc: step lod index during match */
+    Reset(FALSE, TRUE);
+    if (*appData.loadGameFile != NULLCHAR) {
+	index = appData.loadGameIndex;
+	if(index < 0) { // [HGM] autoinc
+	    lastIndex = index = (index == -2 && first.twoMachinesColor[0] == 'b') ? lastIndex : lastIndex+1;
+	    if(appData.rewindIndex > 0 && index > appData.rewindIndex) lastIndex = index = 1;
+	} 
+	LoadGameFromFile(appData.loadGameFile,
+			 index,
+			 appData.loadGameFile, FALSE);
+    } else if (*appData.loadPositionFile != NULLCHAR) {
+	index = appData.loadPositionIndex;
+	if(index < 0) { // [HGM] autoinc
+	    lastIndex = index = (index == -2 && first.twoMachinesColor[0] == 'b') ? lastIndex : lastIndex+1;
+	    if(appData.rewindIndex > 0 && index > appData.rewindIndex) lastIndex = index = 1;
+	} 
+	LoadPositionFromFile(appData.loadPositionFile,
+			     index,
+			     appData.loadPositionFile);
+    }
+    TwoMachinesEventIfReady();
+}
+
+void UserAdjudicationEvent( int result )
+{
+    ChessMove gameResult = GameIsDrawn;
+
+    if( result > 0 ) {
+        gameResult = WhiteWins;
+    }
+    else if( result < 0 ) {
+        gameResult = BlackWins;
+    }
+
+    if( gameMode == TwoMachinesPlay ) {
+        GameEnds( gameResult, "User adjudication", GE_XBOARD );
+    }
+}
+
+
+void
+GameEnds(result, resultDetails, whosays)
+     ChessMove result;
+     char *resultDetails;
+     int whosays;
+{
+    GameMode nextGameMode;
+    int isIcsGame;
+    char buf[MSG_SIZ];
+
+    if(endingGame) return; /* [HGM] crash: forbid recursion */
+    endingGame = 1;
+
+    if (appData.debugMode) {
+      fprintf(debugFP, "GameEnds(%d, %s, %d)\n",
+	      result, resultDetails ? resultDetails : "(null)", whosays);
+    }
+
+    if (appData.icsActive && (whosays == GE_ENGINE || whosays >= GE_ENGINE1)) {
+	/* If we are playing on ICS, the server decides when the
+	   game is over, but the engine can offer to draw, claim 
+	   a draw, or resign. 
+	 */
+#if ZIPPY
+	if (appData.zippyPlay && first.initDone) {
+	    if (result == GameIsDrawn) {
+		/* In case draw still needs to be claimed */
+		SendToICS(ics_prefix);
+		SendToICS("draw\n");
+	    } else if (StrCaseStr(resultDetails, "resign")) {
+		SendToICS(ics_prefix);
+		SendToICS("resign\n");
+	    }
+        }
+#endif
+	endingGame = 0; /* [HGM] crash */
+        return;
+    }
+
+    /* If we're loading the game from a file, stop */
+    if (whosays == GE_FILE) {
+      (void) StopLoadGameTimer();
+      gameFileFP = NULL;
+    }
+
+    /* Cancel draw offers */
+    first.offeredDraw = second.offeredDraw = 0;
+
+    /* If this is an ICS game, only ICS can really say it's done;
+       if not, anyone can. */
+    isIcsGame = (gameMode == IcsPlayingWhite || 
+	         gameMode == IcsPlayingBlack || 
+		 gameMode == IcsObserving    || 
+		 gameMode == IcsExamining);
+
+    if (!isIcsGame || whosays == GE_ICS) {
+	/* OK -- not an ICS game, or ICS said it was done */
+	StopClocks();
+	if (!isIcsGame && !appData.noChessProgram) 
+	  SetUserThinkingEnables();
+    
+        /* [HGM] if a machine claims the game end we verify this claim */
+        if(gameMode == TwoMachinesPlay && appData.testClaims) {
+	    if(appData.testLegality && whosays >= GE_ENGINE1 ) {
+                char claimer;
+		ChessMove trueResult = (ChessMove) -1;
+
+                claimer = whosays == GE_ENGINE1 ?      /* color of claimer */
+                                            first.twoMachinesColor[0] :
+                                            second.twoMachinesColor[0] ;
+
+		// [HGM] losers: because the logic is becoming a bit hairy, determine true result first
+		if(epStatus[forwardMostMove] == EP_CHECKMATE) {
+		    /* [HGM] verify: engine mate claims accepted if they were flagged */
+		    trueResult = WhiteOnMove(forwardMostMove) != (gameInfo.variant == VariantLosers)
+			? BlackWins : WhiteWins; // [HGM] losers: reverse the result in VariantLosers!
+		} else
+		if(epStatus[forwardMostMove] == EP_STALEMATE) {
+		    trueResult = GameIsDrawn; // default; in variants where stalemate loses, Status is CHECKMATE
+		    if(gameInfo.variant == VariantGiveaway || gameInfo.variant == VariantSuicide || 
+		       gameInfo.variant == VariantLosers)  // [HGM] losers: in giveaway variants stalemate wins
+			trueResult = WhiteOnMove(forwardMostMove) ? WhiteWins : BlackWins;
+		}
+
+		// now verify win claims, but not in drop games, as we don't understand those yet
+                if( (gameInfo.holdingsWidth == 0 || gameInfo.variant == VariantSuper
+						 || gameInfo.variant == VariantGreat) &&
+                    (result == WhiteWins && claimer == 'w' ||
+                     result == BlackWins && claimer == 'b'   ) ) { // case to verify: engine claims own win
+		      if (appData.debugMode) {
+	 		fprintf(debugFP, "result=%d sp=%d move=%d\n",
+		 		result, epStatus[forwardMostMove], forwardMostMove);
+		      }
+		      if(result != trueResult) {
+	                      sprintf(buf, "False win claim: '%s'", resultDetails);
+	                      result = claimer == 'w' ? BlackWins : WhiteWins;
+	                      resultDetails = buf;
+		      }
+                } else
+                if( result == GameIsDrawn && epStatus[forwardMostMove] > EP_DRAWS
+                    && (forwardMostMove <= backwardMostMove ||
+                        epStatus[forwardMostMove-1] > EP_DRAWS ||
+                        (claimer=='b')==(forwardMostMove&1))
+                                                                                  ) {
+                      /* [HGM] verify: draws that were not flagged are false claims */
+                      sprintf(buf, "False draw claim: '%s'", resultDetails);
+                      result = claimer == 'w' ? BlackWins : WhiteWins;
+                      resultDetails = buf;
+                }
+                /* (Claiming a loss is accepted no questions asked!) */
+	    }
+	    /* [HGM] bare: don't allow bare King to win */
+	    if((gameInfo.holdingsWidth == 0 || gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat)
+	       && gameInfo.variant != VariantLosers && gameInfo.variant != VariantGiveaway 
+	       && gameInfo.variant != VariantSuicide // [HGM] losers: except in losers, of course...
+	       && result != GameIsDrawn)
+	    {   int i, j, k=0, color = (result==WhiteWins ? (int)WhitePawn : (int)BlackPawn);
+		for(j=BOARD_LEFT; j<BOARD_RGHT; j++) for(i=0; i<BOARD_HEIGHT; i++) {
+			int p = (int)boards[forwardMostMove][i][j] - color;
+			if(p >= 0 && p <= (int)WhiteKing) k++;
+		}
+		if (appData.debugMode) {
+	 	     fprintf(debugFP, "GE(%d, %s, %d) bare king k=%d color=%d\n",
+		 	result, resultDetails ? resultDetails : "(null)", whosays, k, color);
+		}
+		if(k <= 1) {
+			result = GameIsDrawn;
+			sprintf(buf, "%s but bare king", resultDetails);
+			resultDetails = buf;
+		}
+	    }
+        }
+
+
+        if(serverMoves != NULL && !loadFlag) { char c = '=';
+            if(result==WhiteWins) c = '+';
+            if(result==BlackWins) c = '-';
+            if(resultDetails != NULL)
+                fprintf(serverMoves, ";%c;%s\n", c, resultDetails);
+        }
+ 	if (resultDetails != NULL) {
+	    gameInfo.result = result;
+	    gameInfo.resultDetails = StrSave(resultDetails);
+
+	    /* display last move only if game was not loaded from file */
+	    if ((whosays != GE_FILE) && (currentMove == forwardMostMove))
+		DisplayMove(currentMove - 1);
+    
+	    if (forwardMostMove != 0) {
+		if (gameMode != PlayFromGameFile && gameMode != EditGame) {
+		    if (*appData.saveGameFile != NULLCHAR) {
+			SaveGameToFile(appData.saveGameFile, TRUE);
+		    } else if (appData.autoSaveGames) {
+			AutoSaveGame();
+		    }
+		    if (*appData.savePositionFile != NULLCHAR) {
+			SavePositionToFile(appData.savePositionFile);
+		    }
+		}
+	    }
+
+	    /* Tell program how game ended in case it is learning */
+            /* [HGM] Moved this to after saving the PGN, just in case */
+            /* engine died and we got here through time loss. In that */
+            /* case we will get a fatal error writing the pipe, which */
+            /* would otherwise lose us the PGN.                       */
+            /* [HGM] crash: not needed anymore, but doesn't hurt;     */
+            /* output during GameEnds should never be fatal anymore   */
+	    if (gameMode == MachinePlaysWhite ||
+		gameMode == MachinePlaysBlack ||
+		gameMode == TwoMachinesPlay ||
+		gameMode == IcsPlayingWhite ||
+		gameMode == IcsPlayingBlack ||
+		gameMode == BeginningOfGame) {
+		char buf[MSG_SIZ];
+		sprintf(buf, "result %s {%s}\n", PGNResult(result),
+			resultDetails);
+		if (first.pr != NoProc) {
+		    SendToProgram(buf, &first);
+		}
+		if (second.pr != NoProc &&
+		    gameMode == TwoMachinesPlay) {
+		    SendToProgram(buf, &second);
+		}
+	    }
+	}
+
+	if (appData.icsActive) {
+	    if (appData.quietPlay &&
+		(gameMode == IcsPlayingWhite ||
+		 gameMode == IcsPlayingBlack)) {
+		SendToICS(ics_prefix);
+		SendToICS("set shout 1\n");
+	    }
+	    nextGameMode = IcsIdle;
+	    ics_user_moved = FALSE;
+	    /* clean up premove.  It's ugly when the game has ended and the
+	     * premove highlights are still on the board.
+	     */
+	    if (gotPremove) {
+	      gotPremove = FALSE;
+	      ClearPremoveHighlights();
+	      DrawPosition(FALSE, boards[currentMove]);
+	    }
+	    if (whosays == GE_ICS) {
+		switch (result) {
+		case WhiteWins:
+		    if (gameMode == IcsPlayingWhite)
+			PlayIcsWinSound();
+		    else if(gameMode == IcsPlayingBlack)
+			PlayIcsLossSound();
+		    break;
+		case BlackWins:
+		    if (gameMode == IcsPlayingBlack)
+			PlayIcsWinSound();
+		    else if(gameMode == IcsPlayingWhite)
+			PlayIcsLossSound();
+		    break;
+		case GameIsDrawn:
+		    PlayIcsDrawSound();
+		    break;
+		default:
+		    PlayIcsUnfinishedSound();
+		}
+	    }
+	} else if (gameMode == EditGame ||
+	           gameMode == PlayFromGameFile || 
+	           gameMode == AnalyzeMode || 
+		   gameMode == AnalyzeFile) {
+	    nextGameMode = gameMode;
+	} else {
+	    nextGameMode = EndOfGame;
+	}
+	pausing = FALSE;
+	ModeHighlight();
+    } else {
+	nextGameMode = gameMode;
+    }
+
+    if (appData.noChessProgram) {
+	gameMode = nextGameMode;
+	ModeHighlight();
+	endingGame = 0; /* [HGM] crash */
+        return;
+    }
+
+    if (first.reuse) {
+	/* Put first chess program into idle state */
+	if (first.pr != NoProc &&
+	    (gameMode == MachinePlaysWhite ||
+	     gameMode == MachinePlaysBlack ||
+	     gameMode == TwoMachinesPlay ||
+	     gameMode == IcsPlayingWhite ||
+	     gameMode == IcsPlayingBlack ||
+	     gameMode == BeginningOfGame)) {
+	    SendToProgram("force\n", &first);
+	    if (first.usePing) {
+	      char buf[MSG_SIZ];
+	      sprintf(buf, "ping %d\n", ++first.lastPing);
+	      SendToProgram(buf, &first);
+	    }
+	}
+    } else if (result != GameUnfinished || nextGameMode == IcsIdle) {
+	/* Kill off first chess program */
+	if (first.isr != NULL)
+	  RemoveInputSource(first.isr);
+	first.isr = NULL;
+    
+	if (first.pr != NoProc) {
+	    ExitAnalyzeMode();
+            DoSleep( appData.delayBeforeQuit );
+	    SendToProgram("quit\n", &first);
+            DoSleep( appData.delayAfterQuit );
+	    DestroyChildProcess(first.pr, first.useSigterm);
+	}
+	first.pr = NoProc;
+    }
+    if (second.reuse) {
+	/* Put second chess program into idle state */
+	if (second.pr != NoProc &&
+	    gameMode == TwoMachinesPlay) {
+	    SendToProgram("force\n", &second);
+	    if (second.usePing) {
+	      char buf[MSG_SIZ];
+	      sprintf(buf, "ping %d\n", ++second.lastPing);
+	      SendToProgram(buf, &second);
+	    }
+	}
+    } else if (result != GameUnfinished || nextGameMode == IcsIdle) {
+	/* Kill off second chess program */
+	if (second.isr != NULL)
+	  RemoveInputSource(second.isr);
+	second.isr = NULL;
+    
+	if (second.pr != NoProc) {
+            DoSleep( appData.delayBeforeQuit );
+	    SendToProgram("quit\n", &second);
+            DoSleep( appData.delayAfterQuit );
+	    DestroyChildProcess(second.pr, second.useSigterm);
+	}
+	second.pr = NoProc;
+    }
+
+    if (matchMode && gameMode == TwoMachinesPlay) {
+        switch (result) {
+	case WhiteWins:
+	  if (first.twoMachinesColor[0] == 'w') {
+	    first.matchWins++;
+	  } else {
+	    second.matchWins++;
+	  }
+	  break;
+	case BlackWins:
+	  if (first.twoMachinesColor[0] == 'b') {
+	    first.matchWins++;
+	  } else {
+	    second.matchWins++;
+	  }
+	  break;
+	default:
+	  break;
+	}
+	if (matchGame < appData.matchGames) {
+	    char *tmp;
+	    if(appData.sameColorGames <= 1) { /* [HGM] alternate: suppress color swap */
+		tmp = first.twoMachinesColor;
+		first.twoMachinesColor = second.twoMachinesColor;
+		second.twoMachinesColor = tmp;
+	    }
+	    gameMode = nextGameMode;
+	    matchGame++;
+            if(appData.matchPause>10000 || appData.matchPause<10)
+                appData.matchPause = 10000; /* [HGM] make pause adjustable */
+            ScheduleDelayedEvent(NextMatchGame, appData.matchPause);
+	    endingGame = 0; /* [HGM] crash */
+	    return;
+	} else {
+	    char buf[MSG_SIZ];
+	    gameMode = nextGameMode;
+	    sprintf(buf, _("Match %s vs. %s: final score %d-%d-%d"),
+		    first.tidy, second.tidy,
+		    first.matchWins, second.matchWins,
+		    appData.matchGames - (first.matchWins + second.matchWins));
+	    DisplayFatalError(buf, 0, 0);
+	}
+    }
+    if ((gameMode == AnalyzeMode || gameMode == AnalyzeFile) &&
+	!(nextGameMode == AnalyzeMode || nextGameMode == AnalyzeFile))
+      ExitAnalyzeMode();
+    gameMode = nextGameMode;
+    ModeHighlight();
+    endingGame = 0;  /* [HGM] crash */
+}
+
+/* Assumes program was just initialized (initString sent).
+   Leaves program in force mode. */
+void
+FeedMovesToProgram(cps, upto) 
+     ChessProgramState *cps;
+     int upto;
+{
+    int i;
+    
+    if (appData.debugMode)
+      fprintf(debugFP, "Feeding %smoves %d through %d to %s chess program\n",
+	      startedFromSetupPosition ? "position and " : "",
+	      backwardMostMove, upto, cps->which);
+    if(currentlyInitializedVariant != gameInfo.variant) { char buf[MSG_SIZ];
+        // [HGM] variantswitch: make engine aware of new variant
+	if(cps->protocolVersion > 1 && StrStr(cps->variants, VariantName(gameInfo.variant)) == NULL)
+		return; // [HGM] refrain from feeding moves altogether if variant is unsupported!
+	sprintf(buf, "variant %s\n", VariantName(gameInfo.variant));
+	SendToProgram(buf, cps);
+        currentlyInitializedVariant = gameInfo.variant;
+    }
+    SendToProgram("force\n", cps);
+    if (startedFromSetupPosition) {
+	SendBoard(cps, backwardMostMove);
+    if (appData.debugMode) {
+        fprintf(debugFP, "feedMoves\n");
+    }
+    }
+    for (i = backwardMostMove; i < upto; i++) {
+	SendMoveToProgram(i, cps);
+    }
+}
+
+
+void
+ResurrectChessProgram()
+{
+     /* The chess program may have exited.
+	If so, restart it and feed it all the moves made so far. */
+
+    if (appData.noChessProgram || first.pr != NoProc) return;
+    
+    StartChessProgram(&first);
+    InitChessProgram(&first, FALSE);
+    FeedMovesToProgram(&first, currentMove);
+
+    if (!first.sendTime) {
+	/* can't tell gnuchess what its clock should read,
+	   so we bow to its notion. */
+	ResetClocks();
+	timeRemaining[0][currentMove] = whiteTimeRemaining;
+	timeRemaining[1][currentMove] = blackTimeRemaining;
+    }
+
+    if ((gameMode == AnalyzeMode || gameMode == AnalyzeFile ||
+                appData.icsEngineAnalyze) && first.analysisSupport) {
+      SendToProgram("analyze\n", &first);
+      first.analyzing = TRUE;
+    }
+}
+
+/*
+ * Button procedures
+ */
+void
+Reset(redraw, init)
+     int redraw, init;
+{
+    int i;
+
+    if (appData.debugMode) {
+	fprintf(debugFP, "Reset(%d, %d) from gameMode %d\n",
+		redraw, init, gameMode);
+    }
+    pausing = pauseExamInvalid = FALSE;
+    startedFromSetupPosition = blackPlaysFirst = FALSE;
+    firstMove = TRUE;
+    whiteFlag = blackFlag = FALSE;
+    userOfferedDraw = FALSE;
+    hintRequested = bookRequested = FALSE;
+    first.maybeThinking = FALSE;
+    second.maybeThinking = FALSE;
+    first.bookSuspend = FALSE; // [HGM] book
+    second.bookSuspend = FALSE;
+    thinkOutput[0] = NULLCHAR;
+    lastHint[0] = NULLCHAR;
+    ClearGameInfo(&gameInfo);
+    gameInfo.variant = StringToVariant(appData.variant);
+    ics_user_moved = ics_clock_paused = FALSE;
+    ics_getting_history = H_FALSE;
+    ics_gamenum = -1;
+    white_holding[0] = black_holding[0] = NULLCHAR;
+    ClearProgramStats();
+    opponentKibitzes = FALSE; // [HGM] kibitz: do not reserve space in engine-output window in zippy mode
+    
+    ResetFrontEnd();
+    ClearHighlights();
+    flipView = appData.flipView;
+    ClearPremoveHighlights();
+    gotPremove = FALSE;
+    alarmSounded = FALSE;
+
+    GameEnds((ChessMove) 0, NULL, GE_PLAYER);
+    if(appData.serverMovesName != NULL) {
+        /* [HGM] prepare to make moves file for broadcasting */
+        clock_t t = clock();
+        if(serverMoves != NULL) fclose(serverMoves);
+        serverMoves = fopen(appData.serverMovesName, "r");
+        if(serverMoves != NULL) {
+            fclose(serverMoves);
+            /* delay 15 sec before overwriting, so all clients can see end */
+            while(clock()-t < appData.serverPause*CLOCKS_PER_SEC);
+        }
+        serverMoves = fopen(appData.serverMovesName, "w");
+    }
+
+    ExitAnalyzeMode();
+    gameMode = BeginningOfGame;
+    ModeHighlight();
+    if(appData.icsActive) gameInfo.variant = VariantNormal;
+    InitPosition(redraw);
+    for (i = 0; i < MAX_MOVES; i++) {
+	if (commentList[i] != NULL) {
+	    free(commentList[i]);
+	    commentList[i] = NULL;
+	}
+    }
+    ResetClocks();
+    timeRemaining[0][0] = whiteTimeRemaining;
+    timeRemaining[1][0] = blackTimeRemaining;
+    if (first.pr == NULL) {
+	StartChessProgram(&first);
+    }
+    if (init) {
+	    InitChessProgram(&first, startedFromSetupPosition);
+    }
+    DisplayTitle("");
+    DisplayMessage("", "");
+    HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
+}
+
+void
+AutoPlayGameLoop()
+{
+    for (;;) {
+	if (!AutoPlayOneMove())
+	  return;
+	if (matchMode || appData.timeDelay == 0)
+	  continue;
+	if (appData.timeDelay < 0 || gameMode == AnalyzeFile)
+	  return;
+	StartLoadGameTimer((long)(1000.0 * appData.timeDelay));
+	break;
+    }
+}
+
+
+int
+AutoPlayOneMove()
+{
+    int fromX, fromY, toX, toY;
+
+    if (appData.debugMode) {
+      fprintf(debugFP, "AutoPlayOneMove(): current %d\n", currentMove);
+    }
+
+    if (gameMode != PlayFromGameFile)
+      return FALSE;
+
+    if (currentMove >= forwardMostMove) {
+      gameMode = EditGame;
+      ModeHighlight();
+
+      /* [AS] Clear current move marker at the end of a game */
+      /* HistorySet(parseList, backwardMostMove, forwardMostMove, -1); */
+
+      return FALSE;
+    }
+    
+    toX = moveList[currentMove][2] - AAA;
+    toY = moveList[currentMove][3] - ONE;
+
+    if (moveList[currentMove][1] == '@') {
+	if (appData.highlightLastMove) {
+	    SetHighlights(-1, -1, toX, toY);
+	}
+    } else {
+        fromX = moveList[currentMove][0] - AAA;
+        fromY = moveList[currentMove][1] - ONE;
+
+        HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove); /* [AS] */
+
+	AnimateMove(boards[currentMove], fromX, fromY, toX, toY);
+
+	if (appData.highlightLastMove) {
+	    SetHighlights(fromX, fromY, toX, toY);
+	}
+    }
+    DisplayMove(currentMove);
+    SendMoveToProgram(currentMove++, &first);
+    DisplayBothClocks();
+    DrawPosition(FALSE, boards[currentMove]);
+    // [HGM] PV info: always display, routine tests if empty
+    DisplayComment(currentMove - 1, commentList[currentMove]);
+    return TRUE;
+}
+
+
+int
+LoadGameOneMove(readAhead)
+     ChessMove readAhead;
+{
+    int fromX = 0, fromY = 0, toX = 0, toY = 0, done;
+    char promoChar = NULLCHAR;
+    ChessMove moveType;
+    char move[MSG_SIZ];
+    char *p, *q;
+    
+    if (gameMode != PlayFromGameFile && gameMode != AnalyzeFile && 
+	gameMode != AnalyzeMode && gameMode != Training) {
+	gameFileFP = NULL;
+	return FALSE;
+    }
+    
+    yyboardindex = forwardMostMove;
+    if (readAhead != (ChessMove)0) {
+      moveType = readAhead;
+    } else {
+      if (gameFileFP == NULL)
+	  return FALSE;
+      moveType = (ChessMove) yylex();
+    }
+    
+    done = FALSE;
+    switch (moveType) {
+      case Comment:
+	if (appData.debugMode) 
+	  fprintf(debugFP, "Parsed Comment: %s\n", yy_text);
+	p = yy_text;
+	if (*p == '{' || *p == '[' || *p == '(') {
+	    p[strlen(p) - 1] = NULLCHAR;
+	    p++;
+	}
+
+	/* append the comment but don't display it */
+	while (*p == '\n') p++;
+	AppendComment(currentMove, p);
+	return TRUE;
+
+      case WhiteCapturesEnPassant:
+      case BlackCapturesEnPassant:
+      case WhitePromotionChancellor:
+      case BlackPromotionChancellor:
+      case WhitePromotionArchbishop:
+      case BlackPromotionArchbishop:
+      case WhitePromotionCentaur:
+      case BlackPromotionCentaur:
+      case WhitePromotionQueen:
+      case BlackPromotionQueen:
+      case WhitePromotionRook:
+      case BlackPromotionRook:
+      case WhitePromotionBishop:
+      case BlackPromotionBishop:
+      case WhitePromotionKnight:
+      case BlackPromotionKnight:
+      case WhitePromotionKing:
+      case BlackPromotionKing:
+      case NormalMove:
+      case WhiteKingSideCastle:
+      case WhiteQueenSideCastle:
+      case BlackKingSideCastle:
+      case BlackQueenSideCastle:
+      case WhiteKingSideCastleWild:
+      case WhiteQueenSideCastleWild:
+      case BlackKingSideCastleWild:
+      case BlackQueenSideCastleWild:
+      /* PUSH Fabien */
+      case WhiteHSideCastleFR:
+      case WhiteASideCastleFR:
+      case BlackHSideCastleFR:
+      case BlackASideCastleFR:
+      /* POP Fabien */
+	if (appData.debugMode)
+	  fprintf(debugFP, "Parsed %s into %s\n", yy_text, currentMoveString);
+        fromX = currentMoveString[0] - AAA;
+        fromY = currentMoveString[1] - ONE;
+        toX = currentMoveString[2] - AAA;
+        toY = currentMoveString[3] - ONE;
+	promoChar = currentMoveString[4];
+	break;
+
+      case WhiteDrop:
+      case BlackDrop:
+	if (appData.debugMode)
+	  fprintf(debugFP, "Parsed %s into %s\n", yy_text, currentMoveString);
+	fromX = moveType == WhiteDrop ?
+	  (int) CharToPiece(ToUpper(currentMoveString[0])) :
+	(int) CharToPiece(ToLower(currentMoveString[0]));
+	fromY = DROP_RANK;
+        toX = currentMoveString[2] - AAA;
+        toY = currentMoveString[3] - ONE;
+	break;
+
+      case WhiteWins:
+      case BlackWins:
+      case GameIsDrawn:
+      case GameUnfinished:
+	if (appData.debugMode)
+	  fprintf(debugFP, "Parsed game end: %s\n", yy_text);
+	p = strchr(yy_text, '{');
+	if (p == NULL) p = strchr(yy_text, '(');
+	if (p == NULL) {
+	    p = yy_text;
+	    if (p[0] == '0' || p[0] == '1' || p[0] == '*') p = "";
+	} else {
+	    q = strchr(p, *p == '{' ? '}' : ')');
+	    if (q != NULL) *q = NULLCHAR;
+	    p++;
+	}
+	GameEnds(moveType, p, GE_FILE);
+	done = TRUE;
+	if (cmailMsgLoaded) {
+ 	    ClearHighlights();
+	    flipView = WhiteOnMove(currentMove);
+	    if (moveType == GameUnfinished) flipView = !flipView;
+	    if (appData.debugMode)
+	      fprintf(debugFP, "Setting flipView to %d\n", flipView) ;
+	}
+	break;
+
+      case (ChessMove) 0:	/* end of file */
+	if (appData.debugMode)
+	  fprintf(debugFP, "Parser hit end of file\n");
+	switch (MateTest(boards[currentMove], PosFlags(currentMove),
+                         EP_UNKNOWN, castlingRights[currentMove]) ) {
+	  case MT_NONE:
+	  case MT_CHECK:
+	    break;
+	  case MT_CHECKMATE:
+	    if (WhiteOnMove(currentMove)) {
+		GameEnds(BlackWins, "Black mates", GE_FILE);
+	    } else {
+		GameEnds(WhiteWins, "White mates", GE_FILE);
+	    }
+	    break;
+	  case MT_STALEMATE:
+	    GameEnds(GameIsDrawn, "Stalemate", GE_FILE);
+	    break;
+	}
+	done = TRUE;
+	break;
+
+      case MoveNumberOne:
+	if (lastLoadGameStart == GNUChessGame) {
+	    /* GNUChessGames have numbers, but they aren't move numbers */
+	    if (appData.debugMode)
+	      fprintf(debugFP, "Parser ignoring: '%s' (%d)\n",
+		      yy_text, (int) moveType);
+	    return LoadGameOneMove((ChessMove)0); /* tail recursion */
+	}
+	/* else fall thru */
+
+      case XBoardGame:
+      case GNUChessGame:
+      case PGNTag:
+	/* Reached start of next game in file */
+	if (appData.debugMode)
+	  fprintf(debugFP, "Parsed start of next game: %s\n", yy_text);
+	switch (MateTest(boards[currentMove], PosFlags(currentMove),
+                         EP_UNKNOWN, castlingRights[currentMove]) ) {
+	  case MT_NONE:
+	  case MT_CHECK:
+	    break;
+	  case MT_CHECKMATE:
+	    if (WhiteOnMove(currentMove)) {
+		GameEnds(BlackWins, "Black mates", GE_FILE);
+	    } else {
+		GameEnds(WhiteWins, "White mates", GE_FILE);
+	    }
+	    break;
+	  case MT_STALEMATE:
+	    GameEnds(GameIsDrawn, "Stalemate", GE_FILE);
+	    break;
+	}
+	done = TRUE;
+	break;
+
+      case PositionDiagram:	/* should not happen; ignore */
+      case ElapsedTime:		/* ignore */
+      case NAG:                 /* ignore */
+	if (appData.debugMode)
+	  fprintf(debugFP, "Parser ignoring: '%s' (%d)\n",
+		  yy_text, (int) moveType);
+	return LoadGameOneMove((ChessMove)0); /* tail recursion */
+
+      case IllegalMove:
+	if (appData.testLegality) {
+	    if (appData.debugMode)
+	      fprintf(debugFP, "Parsed IllegalMove: %s\n", yy_text);
+	    sprintf(move, _("Illegal move: %d.%s%s"),
+		    (forwardMostMove / 2) + 1,
+		    WhiteOnMove(forwardMostMove) ? " " : ".. ", yy_text);
+	    DisplayError(move, 0);
+	    done = TRUE;
+	} else {
+	    if (appData.debugMode)
+	      fprintf(debugFP, "Parsed %s into IllegalMove %s\n",
+		      yy_text, currentMoveString);
+            fromX = currentMoveString[0] - AAA;
+            fromY = currentMoveString[1] - ONE;
+            toX = currentMoveString[2] - AAA;
+            toY = currentMoveString[3] - ONE;
+	    promoChar = currentMoveString[4];
+	}
+	break;
+
+      case AmbiguousMove:
+	if (appData.debugMode)
+	  fprintf(debugFP, "Parsed AmbiguousMove: %s\n", yy_text);
+	sprintf(move, _("Ambiguous move: %d.%s%s"),
+		(forwardMostMove / 2) + 1,
+		WhiteOnMove(forwardMostMove) ? " " : ".. ", yy_text);
+	DisplayError(move, 0);
+	done = TRUE;
+	break;
+
+      default:
+      case ImpossibleMove:
+	if (appData.debugMode)
+	  fprintf(debugFP, "Parsed ImpossibleMove (type = %d): %s\n", moveType, yy_text);
+	sprintf(move, _("Illegal move: %d.%s%s"),
+		(forwardMostMove / 2) + 1,
+		WhiteOnMove(forwardMostMove) ? " " : ".. ", yy_text);
+	DisplayError(move, 0);
+	done = TRUE;
+	break;
+    }
+
+    if (done) {
+	if (appData.matchMode || (appData.timeDelay == 0 && !pausing)) {
+	    DrawPosition(FALSE, boards[currentMove]);
+	    DisplayBothClocks();
+            if (!appData.matchMode) // [HGM] PV info: routine tests if empty
+	      DisplayComment(currentMove - 1, commentList[currentMove]);
+	}
+	(void) StopLoadGameTimer();
+	gameFileFP = NULL;
+	cmailOldMove = forwardMostMove;
+	return FALSE;
+    } else {
+	/* currentMoveString is set as a side-effect of yylex */
+	strcat(currentMoveString, "\n");
+	strcpy(moveList[forwardMostMove], currentMoveString);
+	
+	thinkOutput[0] = NULLCHAR;
+	MakeMove(fromX, fromY, toX, toY, promoChar);
+	currentMove = forwardMostMove;
+	return TRUE;
+    }
+}
+
+/* Load the nth game from the given file */
+int
+LoadGameFromFile(filename, n, title, useList)
+     char *filename;
+     int n;
+     char *title;
+     /*Boolean*/ int useList;
+{
+    FILE *f;
+    char buf[MSG_SIZ];
+
+    if (strcmp(filename, "-") == 0) {
+	f = stdin;
+	title = "stdin";
+    } else {
+	f = fopen(filename, "rb");
+	if (f == NULL) {
+	    sprintf(buf, _("Can't open \"%s\""), filename);
+	    DisplayError(buf, errno);
+	    return FALSE;
+	}
+    }
+    if (fseek(f, 0, 0) == -1) {
+	/* f is not seekable; probably a pipe */
+	useList = FALSE;
+    }
+    if (useList && n == 0) {
+	int error = GameListBuild(f);
+	if (error) {
+	    DisplayError(_("Cannot build game list"), error);
+	} else if (!ListEmpty(&gameList) &&
+		   ((ListGame *) gameList.tailPred)->number > 1) {
+	    GameListPopUp(f, title);
+	    return TRUE;
+	}
+	GameListDestroy();
+	n = 1;
+    }
+    if (n == 0) n = 1;
+    return LoadGame(f, n, title, FALSE);
+}
+
+
+void
+MakeRegisteredMove()
+{
+    int fromX, fromY, toX, toY;
+    char promoChar;
+    if (cmailMoveRegistered[lastLoadGameNumber - 1]) {
+	switch (cmailMoveType[lastLoadGameNumber - 1]) {
+	  case CMAIL_MOVE:
+	  case CMAIL_DRAW:
+	    if (appData.debugMode)
+	      fprintf(debugFP, "Restoring %s for game %d\n",
+		      cmailMove[lastLoadGameNumber - 1], lastLoadGameNumber);
+    
+	    thinkOutput[0] = NULLCHAR;
+	    strcpy(moveList[currentMove], cmailMove[lastLoadGameNumber - 1]);
+            fromX = cmailMove[lastLoadGameNumber - 1][0] - AAA;
+            fromY = cmailMove[lastLoadGameNumber - 1][1] - ONE;
+            toX = cmailMove[lastLoadGameNumber - 1][2] - AAA;
+            toY = cmailMove[lastLoadGameNumber - 1][3] - ONE;
+	    promoChar = cmailMove[lastLoadGameNumber - 1][4];
+	    MakeMove(fromX, fromY, toX, toY, promoChar);
+	    ShowMove(fromX, fromY, toX, toY);
+	      
+	    switch (MateTest(boards[currentMove], PosFlags(currentMove),
+                             EP_UNKNOWN, castlingRights[currentMove]) ) {
+	      case MT_NONE:
+	      case MT_CHECK:
+		break;
+    		
+	      case MT_CHECKMATE:
+		if (WhiteOnMove(currentMove)) {
+		    GameEnds(BlackWins, "Black mates", GE_PLAYER);
+		} else {
+		    GameEnds(WhiteWins, "White mates", GE_PLAYER);
+		}
+		break;
+    		
+	      case MT_STALEMATE:
+		GameEnds(GameIsDrawn, "Stalemate", GE_PLAYER);
+		break;
+	    }
+
+	    break;
+	    
+	  case CMAIL_RESIGN:
+	    if (WhiteOnMove(currentMove)) {
+		GameEnds(BlackWins, "White resigns", GE_PLAYER);
+	    } else {
+		GameEnds(WhiteWins, "Black resigns", GE_PLAYER);
+	    }
+	    break;
+	    
+	  case CMAIL_ACCEPT:
+	    GameEnds(GameIsDrawn, "Draw agreed", GE_PLAYER);
+	    break;
+	      
+	  default:
+	    break;
+	}
+    }
+
+    return;
+}
+
+/* Wrapper around LoadGame for use when a Cmail message is loaded */
+int
+CmailLoadGame(f, gameNumber, title, useList)
+     FILE *f;
+     int gameNumber;
+     char *title;
+     int useList;
+{
+    int retVal;
+
+    if (gameNumber > nCmailGames) {
+	DisplayError(_("No more games in this message"), 0);
+	return FALSE;
+    }
+    if (f == lastLoadGameFP) {
+	int offset = gameNumber - lastLoadGameNumber;
+	if (offset == 0) {
+	    cmailMsg[0] = NULLCHAR;
+	    if (cmailMoveRegistered[lastLoadGameNumber - 1]) {
+		cmailMoveRegistered[lastLoadGameNumber - 1] = FALSE;
+		nCmailMovesRegistered--;
+	    }
+	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_MOVE;
+	    if (cmailResult[lastLoadGameNumber - 1] == CMAIL_NEW_RESULT) {
+		cmailResult[lastLoadGameNumber - 1] = CMAIL_NOT_RESULT;
+	    }
+	} else {
+	    if (! RegisterMove()) return FALSE;
+	}
+    }
+
+    retVal = LoadGame(f, gameNumber, title, useList);
+
+    /* Make move registered during previous look at this game, if any */
+    MakeRegisteredMove();
+
+    if (cmailCommentList[lastLoadGameNumber - 1] != NULL) {
+	commentList[currentMove]
+	  = StrSave(cmailCommentList[lastLoadGameNumber - 1]);
+	DisplayComment(currentMove - 1, commentList[currentMove]);
+    }
+
+    return retVal;
+}
+
+/* Support for LoadNextGame, LoadPreviousGame, ReloadSameGame */
+int
+ReloadGame(offset)
+     int offset;
+{
+    int gameNumber = lastLoadGameNumber + offset;
+    if (lastLoadGameFP == NULL) {
+	DisplayError(_("No game has been loaded yet"), 0);
+	return FALSE;
+    }
+    if (gameNumber <= 0) {
+	DisplayError(_("Can't back up any further"), 0);
+	return FALSE;
+    }
+    if (cmailMsgLoaded) {
+	return CmailLoadGame(lastLoadGameFP, gameNumber,
+			     lastLoadGameTitle, lastLoadGameUseList);
+    } else {
+	return LoadGame(lastLoadGameFP, gameNumber,
+			lastLoadGameTitle, lastLoadGameUseList);
+    }
+}
+
+
+
+/* Load the nth game from open file f */
+int
+LoadGame(f, gameNumber, title, useList)
+     FILE *f;
+     int gameNumber;
+     char *title;
+     int useList;
+{
+    ChessMove cm;
+    char buf[MSG_SIZ];
+    int gn = gameNumber;
+    ListGame *lg = NULL;
+    int numPGNTags = 0;
+    int err;
+    GameMode oldGameMode;
+    VariantClass oldVariant = gameInfo.variant; /* [HGM] PGNvariant */
+
+    if (appData.debugMode) 
+	fprintf(debugFP, "LoadGame(): on entry, gameMode %d\n", gameMode);
+
+    if (gameMode == Training )
+	SetTrainingModeOff();
+
+    oldGameMode = gameMode;
+    if (gameMode != BeginningOfGame) {
+      Reset(FALSE, TRUE);
+    }
+
+    gameFileFP = f;
+    if (lastLoadGameFP != NULL && lastLoadGameFP != f) {
+	fclose(lastLoadGameFP);
+    }
+
+    if (useList) {
+	lg = (ListGame *) ListElem(&gameList, gameNumber-1);
+	
+	if (lg) {
+	    fseek(f, lg->offset, 0);
+	    GameListHighlight(gameNumber);
+	    gn = 1;
+	}
+	else {
+	    DisplayError(_("Game number out of range"), 0);
+	    return FALSE;
+	}
+    } else {
+	GameListDestroy();
+	if (fseek(f, 0, 0) == -1) {
+	    if (f == lastLoadGameFP ?
+	 	gameNumber == lastLoadGameNumber + 1 :
+		gameNumber == 1) {
+		gn = 1;
+	    } else {
+		DisplayError(_("Can't seek on game file"), 0);
+		return FALSE;
+	    }
+	}
+    }
+    lastLoadGameFP = f;
+    lastLoadGameNumber = gameNumber;
+    strcpy(lastLoadGameTitle, title);
+    lastLoadGameUseList = useList;
+
+    yynewfile(f);
+
+    if (lg && lg->gameInfo.white && lg->gameInfo.black) {
+	sprintf(buf, "%s vs. %s", lg->gameInfo.white,
+		lg->gameInfo.black);
+	    DisplayTitle(buf);
+    } else if (*title != NULLCHAR) {
+	if (gameNumber > 1) {
+	    sprintf(buf, "%s %d", title, gameNumber);
+	    DisplayTitle(buf);
+	} else {
+	    DisplayTitle(title);
+	}
+    }
+
+    if (gameMode != AnalyzeFile && gameMode != AnalyzeMode) {
+	gameMode = PlayFromGameFile;
+	ModeHighlight();
+    }
+
+    currentMove = forwardMostMove = backwardMostMove = 0;
+    CopyBoard(boards[0], initialPosition);
+    StopClocks();
+
+    /*
+     * Skip the first gn-1 games in the file.
+     * Also skip over anything that precedes an identifiable 
+     * start of game marker, to avoid being confused by 
+     * garbage at the start of the file.  Currently 
+     * recognized start of game markers are the move number "1",
+     * the pattern "gnuchess .* game", the pattern
+     * "^[#;%] [^ ]* game file", and a PGN tag block.  
+     * A game that starts with one of the latter two patterns
+     * will also have a move number 1, possibly
+     * following a position diagram.
+     * 5-4-02: Let's try being more lenient and allowing a game to
+     * start with an unnumbered move.  Does that break anything?
+     */
+    cm = lastLoadGameStart = (ChessMove) 0;
+    while (gn > 0) {
+	yyboardindex = forwardMostMove;
+	cm = (ChessMove) yylex();
+	switch (cm) {
+	  case (ChessMove) 0:
+	    if (cmailMsgLoaded) {
+		nCmailGames = CMAIL_MAX_GAMES - gn;
+	    } else {
+		Reset(TRUE, TRUE);
+		DisplayError(_("Game not found in file"), 0);
+	    }
+	    return FALSE;
+
+	  case GNUChessGame:
+	  case XBoardGame:
+	    gn--;
+	    lastLoadGameStart = cm;
+	    break;
+	    
+	  case MoveNumberOne:
+	    switch (lastLoadGameStart) {
+	      case GNUChessGame:
+	      case XBoardGame:
+	      case PGNTag:
+		break;
+	      case MoveNumberOne:
+	      case (ChessMove) 0:
+		gn--;		/* count this game */
+		lastLoadGameStart = cm;
+		break;
+	      default:
+		/* impossible */
+		break;
+	    }
+	    break;
+
+	  case PGNTag:
+	    switch (lastLoadGameStart) {
+	      case GNUChessGame:
+	      case PGNTag:
+	      case MoveNumberOne:
+	      case (ChessMove) 0:
+		gn--;		/* count this game */
+		lastLoadGameStart = cm;
+		break;
+	      case XBoardGame:
+		lastLoadGameStart = cm; /* game counted already */
+		break;
+	      default:
+		/* impossible */
+		break;
+	    }
+	    if (gn > 0) {
+		do {
+		    yyboardindex = forwardMostMove;
+		    cm = (ChessMove) yylex();
+		} while (cm == PGNTag || cm == Comment);
+	    }
+	    break;
+
+	  case WhiteWins:
+	  case BlackWins:
+	  case GameIsDrawn:
+	    if (cmailMsgLoaded && (CMAIL_MAX_GAMES == lastLoadGameNumber)) {
+		if (   cmailResult[CMAIL_MAX_GAMES - gn - 1]
+		    != CMAIL_OLD_RESULT) {
+		    nCmailResults ++ ;
+		    cmailResult[  CMAIL_MAX_GAMES
+				- gn - 1] = CMAIL_OLD_RESULT;
+		}
+	    }
+	    break;
+
+	  case NormalMove:
+	    /* Only a NormalMove can be at the start of a game
+	     * without a position diagram. */
+	    if (lastLoadGameStart == (ChessMove) 0) {
+	      gn--;
+	      lastLoadGameStart = MoveNumberOne;
+	    }
+	    break;
+
+	  default:
+	    break;
+	}
+    }
+    
+    if (appData.debugMode)
+      fprintf(debugFP, "Parsed game start '%s' (%d)\n", yy_text, (int) cm);
+
+    if (cm == XBoardGame) {
+	/* Skip any header junk before position diagram and/or move 1 */
+	for (;;) {
+	    yyboardindex = forwardMostMove;
+	    cm = (ChessMove) yylex();
+
+	    if (cm == (ChessMove) 0 ||
+		cm == GNUChessGame || cm == XBoardGame) {
+		/* Empty game; pretend end-of-file and handle later */
+		cm = (ChessMove) 0;
+		break;
+	    }
+
+	    if (cm == MoveNumberOne || cm == PositionDiagram ||
+		cm == PGNTag || cm == Comment)
+	      break;
+	}
+    } else if (cm == GNUChessGame) {
+	if (gameInfo.event != NULL) {
+	    free(gameInfo.event);
+	}
+	gameInfo.event = StrSave(yy_text);
+    }	
+
+    startedFromSetupPosition = FALSE;
+    while (cm == PGNTag) {
+	if (appData.debugMode) 
+	  fprintf(debugFP, "Parsed PGNTag: %s\n", yy_text);
+	err = ParsePGNTag(yy_text, &gameInfo);
+	if (!err) numPGNTags++;
+
+        /* [HGM] PGNvariant: automatically switch to variant given in PGN tag */
+        if(gameInfo.variant != oldVariant) {
+            startedFromPositionFile = FALSE; /* [HGM] loadPos: variant switch likely makes position invalid */
+	    InitPosition(TRUE);
+            oldVariant = gameInfo.variant;
+	    if (appData.debugMode) 
+	      fprintf(debugFP, "New variant %d\n", (int) oldVariant);
+        }
+
+
+	if (gameInfo.fen != NULL) {
+	  Board initial_position;
+	  startedFromSetupPosition = TRUE;
+	  if (!ParseFEN(initial_position, &blackPlaysFirst, gameInfo.fen)) {
+	    Reset(TRUE, TRUE);
+	    DisplayError(_("Bad FEN position in file"), 0);
+	    return FALSE;
+	  }
+	  CopyBoard(boards[0], initial_position);
+	  if (blackPlaysFirst) {
+	    currentMove = forwardMostMove = backwardMostMove = 1;
+	    CopyBoard(boards[1], initial_position);
+	    strcpy(moveList[0], "");
+	    strcpy(parseList[0], "");
+	    timeRemaining[0][1] = whiteTimeRemaining;
+	    timeRemaining[1][1] = blackTimeRemaining;
+	    if (commentList[0] != NULL) {
+	      commentList[1] = commentList[0];
+	      commentList[0] = NULL;
+	    }
+	  } else {
+	    currentMove = forwardMostMove = backwardMostMove = 0;
+	  }
+          /* [HGM] copy FEN attributes as well. Bugfix 4.3.14m and 4.3.15e: moved to after 'blackPlaysFirst' */
+          {   int i;
+              initialRulePlies = FENrulePlies;
+              epStatus[forwardMostMove] = FENepStatus;
+              for( i=0; i< nrCastlingRights; i++ )
+                  initialRights[i] = castlingRights[forwardMostMove][i] = FENcastlingRights[i];
+          }
+	  yyboardindex = forwardMostMove;
+	  free(gameInfo.fen);
+	  gameInfo.fen = NULL;
+	}
+
+	yyboardindex = forwardMostMove;
+	cm = (ChessMove) yylex();
+
+	/* Handle comments interspersed among the tags */
+	while (cm == Comment) {
+	    char *p;
+	    if (appData.debugMode) 
+	      fprintf(debugFP, "Parsed Comment: %s\n", yy_text);
+	    p = yy_text;
+	    if (*p == '{' || *p == '[' || *p == '(') {
+		p[strlen(p) - 1] = NULLCHAR;
+		p++;
+	    }
+	    while (*p == '\n') p++;
+	    AppendComment(currentMove, p);
+	    yyboardindex = forwardMostMove;
+	    cm = (ChessMove) yylex();
+	}
+    }
+
+    /* don't rely on existence of Event tag since if game was
+     * pasted from clipboard the Event tag may not exist
+     */
+    if (numPGNTags > 0){
+        char *tags;
+	if (gameInfo.variant == VariantNormal) {
+	  gameInfo.variant = StringToVariant(gameInfo.event);
+	}
+	if (!matchMode) {
+          if( appData.autoDisplayTags ) {
+	    tags = PGNTags(&gameInfo);
+	    TagsPopUp(tags, CmailMsg());
+	    free(tags);
+          }
+	}
+    } else {
+	/* Make something up, but don't display it now */
+	SetGameInfo();
+	TagsPopDown();
+    }
+
+    if (cm == PositionDiagram) {
+	int i, j;
+	char *p;
+	Board initial_position;
+
+	if (appData.debugMode)
+	  fprintf(debugFP, "Parsed PositionDiagram: %s\n", yy_text);
+
+	if (!startedFromSetupPosition) {
+	    p = yy_text;
+            for (i = BOARD_HEIGHT - 1; i >= 0; i--)
+              for (j = BOARD_LEFT; j < BOARD_RGHT; p++)
+		switch (*p) {
+		  case '[':
+		  case '-':
+		  case ' ':
+		  case '\t':
+		  case '\n':
+		  case '\r':
+		    break;
+		  default:
+		    initial_position[i][j++] = CharToPiece(*p);
+		    break;
+		}
+	    while (*p == ' ' || *p == '\t' ||
+		   *p == '\n' || *p == '\r') p++;
+	
+	    if (strncmp(p, "black", strlen("black"))==0)
+	      blackPlaysFirst = TRUE;
+	    else
+	      blackPlaysFirst = FALSE;
+	    startedFromSetupPosition = TRUE;
+	
+	    CopyBoard(boards[0], initial_position);
+	    if (blackPlaysFirst) {
+		currentMove = forwardMostMove = backwardMostMove = 1;
+		CopyBoard(boards[1], initial_position);
+		strcpy(moveList[0], "");
+		strcpy(parseList[0], "");
+		timeRemaining[0][1] = whiteTimeRemaining;
+		timeRemaining[1][1] = blackTimeRemaining;
+		if (commentList[0] != NULL) {
+		    commentList[1] = commentList[0];
+		    commentList[0] = NULL;
+		}
+	    } else {
+		currentMove = forwardMostMove = backwardMostMove = 0;
+	    }
+	}
+	yyboardindex = forwardMostMove;
+	cm = (ChessMove) yylex();
+    }
+
+    if (first.pr == NoProc) {
+	StartChessProgram(&first);
+    }
+    InitChessProgram(&first, FALSE);
+    SendToProgram("force\n", &first);
+    if (startedFromSetupPosition) {
+	SendBoard(&first, forwardMostMove);
+    if (appData.debugMode) {
+        fprintf(debugFP, "Load Game\n");
+    }
+	DisplayBothClocks();
+    }      
+
+    /* [HGM] server: flag to write setup moves in broadcast file as one */
+    loadFlag = appData.suppressLoadMoves;
+
+    while (cm == Comment) {
+	char *p;
+	if (appData.debugMode) 
+	  fprintf(debugFP, "Parsed Comment: %s\n", yy_text);
+	p = yy_text;
+	if (*p == '{' || *p == '[' || *p == '(') {
+	    p[strlen(p) - 1] = NULLCHAR;
+	    p++;
+	}
+	while (*p == '\n') p++;
+	AppendComment(currentMove, p);
+	yyboardindex = forwardMostMove;
+	cm = (ChessMove) yylex();
+    }
+
+    if ((cm == (ChessMove) 0 && lastLoadGameStart != (ChessMove) 0) ||
+	cm == WhiteWins || cm == BlackWins ||
+	cm == GameIsDrawn || cm == GameUnfinished) {
+	DisplayMessage("", _("No moves in game"));
+	if (cmailMsgLoaded) {
+	    if (appData.debugMode)
+	      fprintf(debugFP, "Setting flipView to %d.\n", FALSE);
+ 	    ClearHighlights();
+	    flipView = FALSE;
+	}
+	DrawPosition(FALSE, boards[currentMove]);
+	DisplayBothClocks();
+	gameMode = EditGame;
+	ModeHighlight();
+	gameFileFP = NULL;
+	cmailOldMove = 0;
+	return TRUE;
+    }
+
+    // [HGM] PV info: routine tests if comment empty
+    if (!matchMode && (pausing || appData.timeDelay != 0)) {
+	DisplayComment(currentMove - 1, commentList[currentMove]);
+    }
+    if (!matchMode && appData.timeDelay != 0) 
+      DrawPosition(FALSE, boards[currentMove]);
+
+    if (gameMode == AnalyzeFile || gameMode == AnalyzeMode) {
+      programStats.ok_to_send = 1;
+    }
+
+    /* if the first token after the PGN tags is a move
+     * and not move number 1, retrieve it from the parser 
+     */
+    if (cm != MoveNumberOne)
+	LoadGameOneMove(cm);
+
+    /* load the remaining moves from the file */
+    while (LoadGameOneMove((ChessMove)0)) {
+      timeRemaining[0][forwardMostMove] = whiteTimeRemaining;
+      timeRemaining[1][forwardMostMove] = blackTimeRemaining;
+    }
+
+    /* rewind to the start of the game */
+    currentMove = backwardMostMove;
+
+    HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
+
+    if (oldGameMode == AnalyzeFile ||
+	oldGameMode == AnalyzeMode) {
+      AnalyzeFileEvent();
+    }
+
+    if (matchMode || appData.timeDelay == 0) {
+      ToEndEvent();
+      gameMode = EditGame;
+      ModeHighlight();
+    } else if (appData.timeDelay > 0) {
+      AutoPlayGameLoop();
+    }
+
+    if (appData.debugMode) 
+	fprintf(debugFP, "LoadGame(): on exit, gameMode %d\n", gameMode);
+
+    loadFlag = 0; /* [HGM] true game starts */
+    return TRUE;
+}
+
+/* Support for LoadNextPosition, LoadPreviousPosition, ReloadSamePosition */
+int
+ReloadPosition(offset)
+     int offset;
+{
+    int positionNumber = lastLoadPositionNumber + offset;
+    if (lastLoadPositionFP == NULL) {
+	DisplayError(_("No position has been loaded yet"), 0);
+	return FALSE;
+    }
+    if (positionNumber <= 0) {
+	DisplayError(_("Can't back up any further"), 0);
+	return FALSE;
+    }
+    return LoadPosition(lastLoadPositionFP, positionNumber,
+			lastLoadPositionTitle);
+}
+
+/* Load the nth position from the given file */
+int
+LoadPositionFromFile(filename, n, title)
+     char *filename;
+     int n;
+     char *title;
+{
+    FILE *f;
+    char buf[MSG_SIZ];
+
+    if (strcmp(filename, "-") == 0) {
+	return LoadPosition(stdin, n, "stdin");
+    } else {
+	f = fopen(filename, "rb");
+	if (f == NULL) {
+	    sprintf(buf, _("Can't open \"%s\""), filename);
+	    DisplayError(buf, errno);
+	    return FALSE;
+	} else {
+	    return LoadPosition(f, n, title);
+	}
+    }
+}
+
+/* Load the nth position from the given open file, and close it */
+int
+LoadPosition(f, positionNumber, title)
+     FILE *f;
+     int positionNumber;
+     char *title;
+{
+    char *p, line[MSG_SIZ];
+    Board initial_position;
+    int i, j, fenMode, pn;
+    
+    if (gameMode == Training )
+	SetTrainingModeOff();
+
+    if (gameMode != BeginningOfGame) {
+	Reset(FALSE, TRUE);
+    }
+    if (lastLoadPositionFP != NULL && lastLoadPositionFP != f) {
+	fclose(lastLoadPositionFP);
+    }
+    if (positionNumber == 0) positionNumber = 1;
+    lastLoadPositionFP = f;
+    lastLoadPositionNumber = positionNumber;
+    strcpy(lastLoadPositionTitle, title);
+    if (first.pr == NoProc) {
+      StartChessProgram(&first);
+      InitChessProgram(&first, FALSE);
+    }    
+    pn = positionNumber;
+    if (positionNumber < 0) {
+	/* Negative position number means to seek to that byte offset */
+	if (fseek(f, -positionNumber, 0) == -1) {
+	    DisplayError(_("Can't seek on position file"), 0);
+	    return FALSE;
+	};
+	pn = 1;
+    } else {
+	if (fseek(f, 0, 0) == -1) {
+	    if (f == lastLoadPositionFP ?
+		positionNumber == lastLoadPositionNumber + 1 :
+		positionNumber == 1) {
+		pn = 1;
+	    } else {
+		DisplayError(_("Can't seek on position file"), 0);
+		return FALSE;
+	    }
+	}
+    }
+    /* See if this file is FEN or old-style xboard */
+    if (fgets(line, MSG_SIZ, f) == NULL) {
+	DisplayError(_("Position not found in file"), 0);
+	return FALSE;
+    }
+#if 0
+    switch (line[0]) {
+      case '#':  case 'x':
+      default:
+	fenMode = FALSE;
+	break;
+      case 'p':  case 'n':  case 'b':  case 'r':  case 'q':  case 'k':
+      case 'P':  case 'N':  case 'B':  case 'R':  case 'Q':  case 'K':
+      case '1':  case '2':  case '3':  case '4':  case '5':  case '6':
+      case '7':  case '8':  case '9':
+      case 'H':  case 'A':  case 'M':  case 'h':  case 'a':  case 'm':
+      case 'E':  case 'F':  case 'G':  case 'e':  case 'f':  case 'g':
+      case 'C':  case 'W':             case 'c':  case 'w': 
+	fenMode = TRUE;
+	break;
+    }
+#else
+    // [HGM] FEN can begin with digit, any piece letter valid in this variant, or a + for Shogi promoted pieces
+    fenMode = line[0] >= '0' && line[0] <= '9' || line[0] == '+' || CharToPiece(line[0]) != EmptySquare;
+#endif
+
+    if (pn >= 2) {
+	if (fenMode || line[0] == '#') pn--;
+	while (pn > 0) {
+	    /* skip positions before number pn */
+	    if (fgets(line, MSG_SIZ, f) == NULL) {
+	        Reset(TRUE, TRUE);
+		DisplayError(_("Position not found in file"), 0);
+		return FALSE;
+	    }
+	    if (fenMode || line[0] == '#') pn--;
+	}
+    }
+
+    if (fenMode) {
+	if (!ParseFEN(initial_position, &blackPlaysFirst, line)) {
+	    DisplayError(_("Bad FEN position in file"), 0);
+	    return FALSE;
+	}
+    } else {
+	(void) fgets(line, MSG_SIZ, f);
+	(void) fgets(line, MSG_SIZ, f);
+    
+        for (i = BOARD_HEIGHT - 1; i >= 0; i--) {
+	    (void) fgets(line, MSG_SIZ, f);
+            for (p = line, j = BOARD_LEFT; j < BOARD_RGHT; p++) {
+		if (*p == ' ')
+		  continue;
+		initial_position[i][j++] = CharToPiece(*p);
+	    }
+	}
+    
+	blackPlaysFirst = FALSE;
+	if (!feof(f)) {
+	    (void) fgets(line, MSG_SIZ, f);
+	    if (strncmp(line, "black", strlen("black"))==0)
+	      blackPlaysFirst = TRUE;
+	}
+    }
+    startedFromSetupPosition = TRUE;
+    
+    SendToProgram("force\n", &first);
+    CopyBoard(boards[0], initial_position);
+    if (blackPlaysFirst) {
+	currentMove = forwardMostMove = backwardMostMove = 1;
+	strcpy(moveList[0], "");
+	strcpy(parseList[0], "");
+	CopyBoard(boards[1], initial_position);
+	DisplayMessage("", _("Black to play"));
+    } else {
+	currentMove = forwardMostMove = backwardMostMove = 0;
+	DisplayMessage("", _("White to play"));
+    }
+          /* [HGM] copy FEN attributes as well */
+          {   int i;
+              initialRulePlies = FENrulePlies;
+              epStatus[forwardMostMove] = FENepStatus;
+              for( i=0; i< nrCastlingRights; i++ )
+                  castlingRights[forwardMostMove][i] = FENcastlingRights[i];
+          }
+    SendBoard(&first, forwardMostMove);
+    if (appData.debugMode) {
+int i, j;
+  for(i=0;i<2;i++){for(j=0;j<6;j++)fprintf(debugFP, " %d", castlingRights[i][j]);fprintf(debugFP,"\n");}
+  for(j=0;j<6;j++)fprintf(debugFP, " %d", initialRights[j]);fprintf(debugFP,"\n");
+        fprintf(debugFP, "Load Position\n");
+    }
+
+    if (positionNumber > 1) {
+	sprintf(line, "%s %d", title, positionNumber);
+	DisplayTitle(line);
+    } else {
+	DisplayTitle(title);
+    }
+    gameMode = EditGame;
+    ModeHighlight();
+    ResetClocks();
+    timeRemaining[0][1] = whiteTimeRemaining;
+    timeRemaining[1][1] = blackTimeRemaining;
+    DrawPosition(FALSE, boards[currentMove]);
+   
+    return TRUE;
+}
+
+
+void
+CopyPlayerNameIntoFileName(dest, src)
+     char **dest, *src;
+{
+    while (*src != NULLCHAR && *src != ',') {
+	if (*src == ' ') {
+	    *(*dest)++ = '_';
+	    src++;
+	} else {
+	    *(*dest)++ = *src++;
+	}
+    }
+}
+
+char *DefaultFileName(ext)
+     char *ext;
+{
+    static char def[MSG_SIZ];
+    char *p;
+
+    if (gameInfo.white != NULL && gameInfo.white[0] != '-') {
+	p = def;
+	CopyPlayerNameIntoFileName(&p, gameInfo.white);
+	*p++ = '-';
+	CopyPlayerNameIntoFileName(&p, gameInfo.black);
+	*p++ = '.';
+	strcpy(p, ext);
+    } else {
+	def[0] = NULLCHAR;
+    }
+    return def;
+}
+
+/* Save the current game to the given file */
+int
+SaveGameToFile(filename, append)
+     char *filename;
+     int append;
+{
+    FILE *f;
+    char buf[MSG_SIZ];
+
+    if (strcmp(filename, "-") == 0) {
+	return SaveGame(stdout, 0, NULL);
+    } else {
+	f = fopen(filename, append ? "a" : "w");
+	if (f == NULL) {
+	    sprintf(buf, _("Can't open \"%s\""), filename);
+	    DisplayError(buf, errno);
+	    return FALSE;
+	} else {
+	    return SaveGame(f, 0, NULL);
+	}
+    }
+}
+
+char *
+SavePart(str)
+     char *str;
+{
+    static char buf[MSG_SIZ];
+    char *p;
+    
+    p = strchr(str, ' ');
+    if (p == NULL) return str;
+    strncpy(buf, str, p - str);
+    buf[p - str] = NULLCHAR;
+    return buf;
+}
+
+#define PGN_MAX_LINE 75
+
+#define PGN_SIDE_WHITE  0
+#define PGN_SIDE_BLACK  1
+
+/* [AS] */
+static int FindFirstMoveOutOfBook( int side )
+{
+    int result = -1;
+
+    if( backwardMostMove == 0 && ! startedFromSetupPosition) {
+        int index = backwardMostMove;
+        int has_book_hit = 0;
+
+        if( (index % 2) != side ) {
+            index++;
+        }
+
+        while( index < forwardMostMove ) {
+            /* Check to see if engine is in book */
+            int depth = pvInfoList[index].depth;
+            int score = pvInfoList[index].score;
+            int in_book = 0;
+
+            if( depth <= 2 ) {
+                in_book = 1;
+            }
+            else if( score == 0 && depth == 63 ) {
+                in_book = 1; /* Zappa */
+            }
+            else if( score == 2 && depth == 99 ) {
+                in_book = 1; /* Abrok */
+            }
+
+            has_book_hit += in_book;
+
+            if( ! in_book ) {
+                result = index;
+
+                break;
+            }
+
+            index += 2;
+        }
+    }
+
+    return result;
+}
+
+/* [AS] */
+void GetOutOfBookInfo( char * buf )
+{
+    int oob[2];
+    int i;
+    int offset = backwardMostMove & (~1L); /* output move numbers start at 1 */
+
+    oob[0] = FindFirstMoveOutOfBook( PGN_SIDE_WHITE );
+    oob[1] = FindFirstMoveOutOfBook( PGN_SIDE_BLACK );
+
+    *buf = '\0';
+
+    if( oob[0] >= 0 || oob[1] >= 0 ) {
+        for( i=0; i<2; i++ ) {
+            int idx = oob[i];
+
+            if( idx >= 0 ) {
+                if( i > 0 && oob[0] >= 0 ) {
+                    strcat( buf, "   " );
+                }
+
+                sprintf( buf+strlen(buf), "%d%s. ", (idx - offset)/2 + 1, idx & 1 ? ".." : "" );
+                sprintf( buf+strlen(buf), "%s%.2f", 
+                    pvInfoList[idx].score >= 0 ? "+" : "",
+                    pvInfoList[idx].score / 100.0 );
+            }
+        }
+    }
+}
+
+/* Save game in PGN style and close the file */
+int
+SaveGamePGN(f)
+     FILE *f;
+{
+    int i, offset, linelen, newblock;
+    time_t tm;
+//    char *movetext;
+    char numtext[32];
+    int movelen, numlen, blank;
+    char move_buffer[100]; /* [AS] Buffer for move+PV info */
+
+    offset = backwardMostMove & (~1L); /* output move numbers start at 1 */
+    
+    tm = time((time_t *) NULL);
+    
+    PrintPGNTags(f, &gameInfo);
+    
+    if (backwardMostMove > 0 || startedFromSetupPosition) {
+        char *fen = PositionToFEN(backwardMostMove, NULL);
+        fprintf(f, "[FEN \"%s\"]\n[SetUp \"1\"]\n", fen);
+	fprintf(f, "\n{--------------\n");
+	PrintPosition(f, backwardMostMove);
+	fprintf(f, "--------------}\n");
+        free(fen);
+    }
+    else {
+        /* [AS] Out of book annotation */
+        if( appData.saveOutOfBookInfo ) {
+            char buf[64];
+
+            GetOutOfBookInfo( buf );
+
+            if( buf[0] != '\0' ) {
+                fprintf( f, "[%s \"%s\"]\n", PGN_OUT_OF_BOOK, buf ); 
+            }
+        }
+
+	fprintf(f, "\n");
+    }
+
+    i = backwardMostMove;
+    linelen = 0;
+    newblock = TRUE;
+
+    while (i < forwardMostMove) {
+	/* Print comments preceding this move */
+	if (commentList[i] != NULL) {
+	    if (linelen > 0) fprintf(f, "\n");
+	    fprintf(f, "{\n%s}\n", commentList[i]);
+	    linelen = 0;
+	    newblock = TRUE;
+	}
+
+	/* Format move number */
+	if ((i % 2) == 0) {
+	    sprintf(numtext, "%d.", (i - offset)/2 + 1);
+	} else {
+	    if (newblock) {
+		sprintf(numtext, "%d...", (i - offset)/2 + 1);
+	    } else {
+		numtext[0] = NULLCHAR;
+	    }
+	}
+	numlen = strlen(numtext);
+	newblock = FALSE;
+
+	/* Print move number */
+	blank = linelen > 0 && numlen > 0;
+	if (linelen + (blank ? 1 : 0) + numlen > PGN_MAX_LINE) {
+	    fprintf(f, "\n");
+	    linelen = 0;
+	    blank = 0;
+	}
+	if (blank) {
+	    fprintf(f, " ");
+	    linelen++;
+	}
+	fprintf(f, numtext);
+	linelen += numlen;
+
+	/* Get move */
+	movelen = strlen(parseList[i]); /* [HGM] pgn: line-break point before move */
+
+	/* Print move */
+	blank = linelen > 0 && movelen > 0;
+	if (linelen + (blank ? 1 : 0) + movelen > PGN_MAX_LINE) {
+	    fprintf(f, "\n");
+	    linelen = 0;
+	    blank = 0;
+	}
+	if (blank) {
+	    fprintf(f, " ");
+	    linelen++;
+	}
+	fprintf(f, parseList[i]);
+	linelen += movelen;
+
+        /* [AS] Add PV info if present */
+        if( i >= 0 && appData.saveExtendedInfoInPGN && pvInfoList[i].depth > 0 ) {
+            /* [HGM] add time */
+            char buf[MSG_SIZ]; int seconds = 0;
+
+#if 0
+            if(i >= backwardMostMove) {
+		if(WhiteOnMove(i))
+			seconds = timeRemaining[0][i] - timeRemaining[0][i+1]
+				  + GetTimeQuota(i/2) / WhitePlayer()->timeOdds;
+		else
+			seconds = timeRemaining[1][i] - timeRemaining[1][i+1]
+                                  + GetTimeQuota(i/2) / WhitePlayer()->other->timeOdds;
+            }
+            seconds = (seconds+50)/100; // deci-seconds, rounded to nearest
+#else
+            seconds = (pvInfoList[i].time + 5)/10; // [HGM] PVtime: use engine time
+#endif
+
+            if( seconds <= 0) buf[0] = 0; else
+            if( seconds < 30 ) sprintf(buf, " %3.1f%c", seconds/10., 0); else {
+		seconds = (seconds + 4)/10; // round to full seconds
+	        if( seconds < 60 ) sprintf(buf, " %d%c", seconds, 0); else
+				   sprintf(buf, " %d:%02d%c", seconds/60, seconds%60, 0);
+	    }
+
+            sprintf( move_buffer, "{%s%.2f/%d%s}", 
+                pvInfoList[i].score >= 0 ? "+" : "",
+                pvInfoList[i].score / 100.0,
+                pvInfoList[i].depth,
+		buf );
+
+	    movelen = strlen(move_buffer); /* [HGM] pgn: line-break point after move */
+
+	    /* Print score/depth */
+	    blank = linelen > 0 && movelen > 0;
+	    if (linelen + (blank ? 1 : 0) + movelen > PGN_MAX_LINE) {
+		fprintf(f, "\n");
+		linelen = 0;
+		blank = 0;
+	    }
+	    if (blank) {
+		fprintf(f, " ");
+		linelen++;
+	    }
+	    fprintf(f, move_buffer);
+	    linelen += movelen;
+        }
+
+	i++;
+    }
+    
+    /* Start a new line */
+    if (linelen > 0) fprintf(f, "\n");
+
+    /* Print comments after last move */
+    if (commentList[i] != NULL) {
+	fprintf(f, "{\n%s}\n", commentList[i]);
+    }
+
+    /* Print result */
+    if (gameInfo.resultDetails != NULL &&
+	gameInfo.resultDetails[0] != NULLCHAR) {
+	fprintf(f, "{%s} %s\n\n", gameInfo.resultDetails,
+		PGNResult(gameInfo.result));
+    } else {
+	fprintf(f, "%s\n\n", PGNResult(gameInfo.result));
+    }
+
+    fclose(f);
+    return TRUE;
+}
+
+/* Save game in old style and close the file */
+int
+SaveGameOldStyle(f)
+     FILE *f;
+{
+    int i, offset;
+    time_t tm;
+    
+    tm = time((time_t *) NULL);
+    
+    fprintf(f, "# %s game file -- %s", programName, ctime(&tm));
+    PrintOpponents(f);
+    
+    if (backwardMostMove > 0 || startedFromSetupPosition) {
+	fprintf(f, "\n[--------------\n");
+	PrintPosition(f, backwardMostMove);
+	fprintf(f, "--------------]\n");
+    } else {
+	fprintf(f, "\n");
+    }
+
+    i = backwardMostMove;
+    offset = backwardMostMove & (~1L); /* output move numbers start at 1 */
+
+    while (i < forwardMostMove) {
+	if (commentList[i] != NULL) {
+	    fprintf(f, "[%s]\n", commentList[i]);
+	}
+
+	if ((i % 2) == 1) {
+	    fprintf(f, "%d. ...  %s\n", (i - offset)/2 + 1, parseList[i]);
+	    i++;
+	} else {
+	    fprintf(f, "%d. %s  ", (i - offset)/2 + 1, parseList[i]);
+	    i++;
+	    if (commentList[i] != NULL) {
+		fprintf(f, "\n");
+		continue;
+	    }
+	    if (i >= forwardMostMove) {
+		fprintf(f, "\n");
+		break;
+	    }
+	    fprintf(f, "%s\n", parseList[i]);
+	    i++;
+	}
+    }
+    
+    if (commentList[i] != NULL) {
+	fprintf(f, "[%s]\n", commentList[i]);
+    }
+
+    /* This isn't really the old style, but it's close enough */
+    if (gameInfo.resultDetails != NULL &&
+	gameInfo.resultDetails[0] != NULLCHAR) {
+	fprintf(f, "%s (%s)\n\n", PGNResult(gameInfo.result),
+		gameInfo.resultDetails);
+    } else {
+	fprintf(f, "%s\n\n", PGNResult(gameInfo.result));
+    }
+
+    fclose(f);
+    return TRUE;
+}
+
+/* Save the current game to open file f and close the file */
+int
+SaveGame(f, dummy, dummy2)
+     FILE *f;
+     int dummy;
+     char *dummy2;
+{
+    if (gameMode == EditPosition) EditPositionDone();
+    if (appData.oldSaveStyle)
+      return SaveGameOldStyle(f);
+    else
+      return SaveGamePGN(f);
+}
+
+/* Save the current position to the given file */
+int
+SavePositionToFile(filename)
+     char *filename;
+{
+    FILE *f;
+    char buf[MSG_SIZ];
+
+    if (strcmp(filename, "-") == 0) {
+	return SavePosition(stdout, 0, NULL);
+    } else {
+	f = fopen(filename, "a");
+	if (f == NULL) {
+	    sprintf(buf, _("Can't open \"%s\""), filename);
+	    DisplayError(buf, errno);
+	    return FALSE;
+	} else {
+	    SavePosition(f, 0, NULL);
+	    return TRUE;
+	}
+    }
+}
+
+/* Save the current position to the given open file and close the file */
+int
+SavePosition(f, dummy, dummy2)
+     FILE *f;
+     int dummy;
+     char *dummy2;
+{
+    time_t tm;
+    char *fen;
+    
+    if (appData.oldSaveStyle) {
+	tm = time((time_t *) NULL);
+    
+	fprintf(f, "# %s position file -- %s", programName, ctime(&tm));
+	PrintOpponents(f);
+	fprintf(f, "[--------------\n");
+	PrintPosition(f, currentMove);
+	fprintf(f, "--------------]\n");
+    } else {
+	fen = PositionToFEN(currentMove, NULL);
+	fprintf(f, "%s\n", fen);
+	free(fen);
+    }
+    fclose(f);
+    return TRUE;
+}
+
+void
+ReloadCmailMsgEvent(unregister)
+     int unregister;
+{
+#if !WIN32
+    static char *inFilename = NULL;
+    static char *outFilename;
+    int i;
+    struct stat inbuf, outbuf;
+    int status;
+    
+    /* Any registered moves are unregistered if unregister is set, */
+    /* i.e. invoked by the signal handler */
+    if (unregister) {
+	for (i = 0; i < CMAIL_MAX_GAMES; i ++) {
+	    cmailMoveRegistered[i] = FALSE;
+	    if (cmailCommentList[i] != NULL) {
+		free(cmailCommentList[i]);
+		cmailCommentList[i] = NULL;
+	    }
+	}
+	nCmailMovesRegistered = 0;
+    }
+
+    for (i = 0; i < CMAIL_MAX_GAMES; i ++) {
+	cmailResult[i] = CMAIL_NOT_RESULT;
+    }
+    nCmailResults = 0;
+
+    if (inFilename == NULL) {
+	/* Because the filenames are static they only get malloced once  */
+	/* and they never get freed                                      */
+	inFilename = (char *) malloc(strlen(appData.cmailGameName) + 9);
+	sprintf(inFilename, "%s.game.in", appData.cmailGameName);
+
+	outFilename = (char *) malloc(strlen(appData.cmailGameName) + 5);
+	sprintf(outFilename, "%s.out", appData.cmailGameName);
+    }
+    
+    status = stat(outFilename, &outbuf);
+    if (status < 0) {
+	cmailMailedMove = FALSE;
+    } else {
+	status = stat(inFilename, &inbuf);
+	cmailMailedMove = (inbuf.st_mtime < outbuf.st_mtime);
+    }
+    
+    /* LoadGameFromFile(CMAIL_MAX_GAMES) with cmailMsgLoaded == TRUE
+       counts the games, notes how each one terminated, etc.
+       
+       It would be nice to remove this kludge and instead gather all
+       the information while building the game list.  (And to keep it
+       in the game list nodes instead of having a bunch of fixed-size
+       parallel arrays.)  Note this will require getting each game's
+       termination from the PGN tags, as the game list builder does
+       not process the game moves.  --mann
+       */
+    cmailMsgLoaded = TRUE;
+    LoadGameFromFile(inFilename, CMAIL_MAX_GAMES, "", FALSE);
+    
+    /* Load first game in the file or popup game menu */
+    LoadGameFromFile(inFilename, 0, appData.cmailGameName, TRUE);
+
+#endif /* !WIN32 */
+    return;
+}
+
+int
+RegisterMove()
+{
+    FILE *f;
+    char string[MSG_SIZ];
+
+    if (   cmailMailedMove
+	|| (cmailResult[lastLoadGameNumber - 1] == CMAIL_OLD_RESULT)) {
+	return TRUE;		/* Allow free viewing  */
+    }
+
+    /* Unregister move to ensure that we don't leave RegisterMove        */
+    /* with the move registered when the conditions for registering no   */
+    /* longer hold                                                       */
+    if (cmailMoveRegistered[lastLoadGameNumber - 1]) {
+	cmailMoveRegistered[lastLoadGameNumber - 1] = FALSE;
+	nCmailMovesRegistered --;
+
+	if (cmailCommentList[lastLoadGameNumber - 1] != NULL) 
+	  {
+	      free(cmailCommentList[lastLoadGameNumber - 1]);
+	      cmailCommentList[lastLoadGameNumber - 1] = NULL;
+	  }
+    }
+
+    if (cmailOldMove == -1) {
+	DisplayError(_("You have edited the game history.\nUse Reload Same Game and make your move again."), 0);
+	return FALSE;
+    }
+
+    if (currentMove > cmailOldMove + 1) {
+	DisplayError(_("You have entered too many moves.\nBack up to the correct position and try again."), 0);
+	return FALSE;
+    }
+
+    if (currentMove < cmailOldMove) {
+	DisplayError(_("Displayed position is not current.\nStep forward to the correct position and try again."), 0);
+	return FALSE;
+    }
+
+    if (forwardMostMove > currentMove) {
+	/* Silently truncate extra moves */
+	TruncateGame();
+    }
+
+    if (   (currentMove == cmailOldMove + 1)
+	|| (   (currentMove == cmailOldMove)
+	    && (   (cmailMoveType[lastLoadGameNumber - 1] == CMAIL_ACCEPT)
+		|| (cmailMoveType[lastLoadGameNumber - 1] == CMAIL_RESIGN)))) {
+	if (gameInfo.result != GameUnfinished) {
+	    cmailResult[lastLoadGameNumber - 1] = CMAIL_NEW_RESULT;
+	}
+
+	if (commentList[currentMove] != NULL) {
+	    cmailCommentList[lastLoadGameNumber - 1]
+	      = StrSave(commentList[currentMove]);
+	}
+	strcpy(cmailMove[lastLoadGameNumber - 1], moveList[currentMove - 1]);
+
+	if (appData.debugMode)
+	  fprintf(debugFP, "Saving %s for game %d\n",
+		  cmailMove[lastLoadGameNumber - 1], lastLoadGameNumber);
+
+	sprintf(string,
+		"%s.game.out.%d", appData.cmailGameName, lastLoadGameNumber);
+	
+	f = fopen(string, "w");
+	if (appData.oldSaveStyle) {
+	    SaveGameOldStyle(f); /* also closes the file */
+	    
+	    sprintf(string, "%s.pos.out", appData.cmailGameName);
+	    f = fopen(string, "w");
+	    SavePosition(f, 0, NULL); /* also closes the file */
+	} else {
+	    fprintf(f, "{--------------\n");
+	    PrintPosition(f, currentMove);
+	    fprintf(f, "--------------}\n\n");
+	    
+	    SaveGame(f, 0, NULL); /* also closes the file*/
+	}
+	
+	cmailMoveRegistered[lastLoadGameNumber - 1] = TRUE;
+	nCmailMovesRegistered ++;
+    } else if (nCmailGames == 1) {
+	DisplayError(_("You have not made a move yet"), 0);
+	return FALSE;
+    }
+
+    return TRUE;
+}
+
+void
+MailMoveEvent()
+{
+#if !WIN32
+    static char *partCommandString = "cmail -xv%s -remail -game %s 2>&1";
+    FILE *commandOutput;
+    char buffer[MSG_SIZ], msg[MSG_SIZ], string[MSG_SIZ];
+    int nBytes = 0;		/*  Suppress warnings on uninitialized variables    */
+    int nBuffers;
+    int i;
+    int archived;
+    char *arcDir;
+
+    if (! cmailMsgLoaded) {
+	DisplayError(_("The cmail message is not loaded.\nUse Reload CMail Message and make your move again."), 0);
+	return;
+    }
+
+    if (nCmailGames == nCmailResults) {
+	DisplayError(_("No unfinished games"), 0);
+	return;
+    }
+
+#if CMAIL_PROHIBIT_REMAIL
+    if (cmailMailedMove) {
+	sprintf(msg, _("You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line."), appData.cmailGameName);
+	DisplayError(msg, 0);
+	return;
+    }
+#endif
+
+    if (! (cmailMailedMove || RegisterMove())) return;
+    
+    if (   cmailMailedMove
+	|| (nCmailMovesRegistered + nCmailResults == nCmailGames)) {
+	sprintf(string, partCommandString,
+		appData.debugMode ? " -v" : "", appData.cmailGameName);
+	commandOutput = popen(string, "r");
+
+	if (commandOutput == NULL) {
+	    DisplayError(_("Failed to invoke cmail"), 0);
+	} else {
+	    for (nBuffers = 0; (! feof(commandOutput)); nBuffers ++) {
+		nBytes = fread(buffer, 1, MSG_SIZ - 1, commandOutput);
+	    }
+	    if (nBuffers > 1) {
+		(void) memcpy(msg, buffer + nBytes, MSG_SIZ - nBytes - 1);
+		(void) memcpy(msg + MSG_SIZ - nBytes - 1, buffer, nBytes);
+		nBytes = MSG_SIZ - 1;
+	    } else {
+		(void) memcpy(msg, buffer, nBytes);
+	    }
+	    *(msg + nBytes) = '\0'; /* \0 for end-of-string*/
+
+	    if(StrStr(msg, "Mailed cmail message to ") != NULL) {
+		cmailMailedMove = TRUE; /* Prevent >1 moves    */
+
+		archived = TRUE;
+		for (i = 0; i < nCmailGames; i ++) {
+		    if (cmailResult[i] == CMAIL_NOT_RESULT) {
+			archived = FALSE;
+		    }
+		}
+		if (   archived
+		    && (   (arcDir = (char *) getenv("CMAIL_ARCDIR"))
+			!= NULL)) {
+		    sprintf(buffer, "%s/%s.%s.archive",
+			    arcDir,
+			    appData.cmailGameName,
+			    gameInfo.date);
+		    LoadGameFromFile(buffer, 1, buffer, FALSE);
+		    cmailMsgLoaded = FALSE;
+		}
+	    }
+
+	    DisplayInformation(msg);
+	    pclose(commandOutput);
+	}
+    } else {
+	if ((*cmailMsg) != '\0') {
+	    DisplayInformation(cmailMsg);
+	}
+    }
+
+    return;
+#endif /* !WIN32 */
+}
+
+char *
+CmailMsg()
+{
+#if WIN32
+    return NULL;
+#else
+    int  prependComma = 0;
+    char number[5];
+    char string[MSG_SIZ];	/* Space for game-list */
+    int  i;
+    
+    if (!cmailMsgLoaded) return "";
+
+    if (cmailMailedMove) {
+	sprintf(cmailMsg, _("Waiting for reply from opponent\n"));
+    } else {
+	/* Create a list of games left */
+	sprintf(string, "[");
+	for (i = 0; i < nCmailGames; i ++) {
+	    if (! (   cmailMoveRegistered[i]
+		   || (cmailResult[i] == CMAIL_OLD_RESULT))) {
+		if (prependComma) {
+		    sprintf(number, ",%d", i + 1);
+		} else {
+		    sprintf(number, "%d", i + 1);
+		    prependComma = 1;
+		}
+		
+		strcat(string, number);
+	    }
+	}
+	strcat(string, "]");
+
+	if (nCmailMovesRegistered + nCmailResults == 0) {
+	    switch (nCmailGames) {
+	      case 1:
+		sprintf(cmailMsg,
+			_("Still need to make move for game\n"));
+		break;
+		
+	      case 2:
+		sprintf(cmailMsg,
+			_("Still need to make moves for both games\n"));
+		break;
+		
+	      default:
+		sprintf(cmailMsg,
+			_("Still need to make moves for all %d games\n"),
+			nCmailGames);
+		break;
+	    }
+	} else {
+	    switch (nCmailGames - nCmailMovesRegistered - nCmailResults) {
+	      case 1:
+		sprintf(cmailMsg,
+			_("Still need to make a move for game %s\n"),
+			string);
+		break;
+		
+	      case 0:
+		if (nCmailResults == nCmailGames) {
+		    sprintf(cmailMsg, _("No unfinished games\n"));
+		} else {
+		    sprintf(cmailMsg, _("Ready to send mail\n"));
+		}
+		break;
+		
+	      default:
+		sprintf(cmailMsg,
+			_("Still need to make moves for games %s\n"),
+			string);
+	    }
+	}
+    }
+    return cmailMsg;
+#endif /* WIN32 */
+}
+
+void
+ResetGameEvent()
+{
+    if (gameMode == Training)
+      SetTrainingModeOff();
+
+    Reset(TRUE, TRUE);
+    cmailMsgLoaded = FALSE;
+    if (appData.icsActive) {
+      SendToICS(ics_prefix);
+      SendToICS("refresh\n");
+    }
+}
+
+void
+ExitEvent(status)
+     int status;
+{
+    exiting++;
+    if (exiting > 2) {
+      /* Give up on clean exit */
+      exit(status);
+    }
+    if (exiting > 1) {
+      /* Keep trying for clean exit */
+      return;
+    }
+
+    if (appData.icsActive && appData.colorize) Colorize(ColorNone, FALSE);
+
+    if (telnetISR != NULL) {
+      RemoveInputSource(telnetISR);
+    }
+    if (icsPR != NoProc) {
+      DestroyChildProcess(icsPR, TRUE);
+    }
+#if 0
+    /* Save game if resource set and not already saved by GameEnds() */
+    if ((gameInfo.resultDetails == NULL || errorExitFlag )
+                             && forwardMostMove > 0) {
+      if (*appData.saveGameFile != NULLCHAR) {
+	SaveGameToFile(appData.saveGameFile, TRUE);
+      } else if (appData.autoSaveGames) {
+	AutoSaveGame();
+      }
+      if (*appData.savePositionFile != NULLCHAR) {
+	SavePositionToFile(appData.savePositionFile);
+      }
+    }
+    GameEnds((ChessMove) 0, NULL, GE_PLAYER);
+#else
+    /* [HGM] crash: leave writing PGN and position entirely to GameEnds() */
+    GameEnds(gameInfo.result, gameInfo.resultDetails==NULL ? "xboard exit" : gameInfo.resultDetails, GE_PLAYER);
+#endif
+    /* [HGM] crash: the above GameEnds() is a dud if another one was running */
+    /* make sure this other one finishes before killing it!                  */
+    if(endingGame) { int count = 0;
+        if(appData.debugMode) fprintf(debugFP, "ExitEvent() during GameEnds(), wait\n");
+        while(endingGame && count++ < 10) DoSleep(1);
+        if(appData.debugMode && endingGame) fprintf(debugFP, "GameEnds() seems stuck, proceed exiting\n");
+    }
+
+    /* Kill off chess programs */
+    if (first.pr != NoProc) {
+	ExitAnalyzeMode();
+        
+        DoSleep( appData.delayBeforeQuit );
+	SendToProgram("quit\n", &first);
+        DoSleep( appData.delayAfterQuit );
+	DestroyChildProcess(first.pr, 10 /* [AS] first.useSigterm */ );
+    }
+    if (second.pr != NoProc) {
+        DoSleep( appData.delayBeforeQuit );
+	SendToProgram("quit\n", &second);
+        DoSleep( appData.delayAfterQuit );
+	DestroyChildProcess(second.pr, 10 /* [AS] second.useSigterm */ );
+    }
+    if (first.isr != NULL) {
+	RemoveInputSource(first.isr);
+    }
+    if (second.isr != NULL) {
+	RemoveInputSource(second.isr);
+    }
+
+    ShutDownFrontEnd();
+    exit(status);
+}
+
+void
+PauseEvent()
+{
+    if (appData.debugMode)
+	fprintf(debugFP, "PauseEvent(): pausing %d\n", pausing);
+    if (pausing) {
+	pausing = FALSE;
+	ModeHighlight();
+	if (gameMode == MachinePlaysWhite ||
+	    gameMode == MachinePlaysBlack) {
+	    StartClocks();
+	} else {
+	    DisplayBothClocks();
+	}
+	if (gameMode == PlayFromGameFile) {
+	    if (appData.timeDelay >= 0) 
+		AutoPlayGameLoop();
+	} else if (gameMode == IcsExamining && pauseExamInvalid) {
+	    Reset(FALSE, TRUE);
+	    SendToICS(ics_prefix);
+	    SendToICS("refresh\n");
+	} else if (currentMove < forwardMostMove) {
+	    ForwardInner(forwardMostMove);
+	}
+	pauseExamInvalid = FALSE;
+    } else {
+	switch (gameMode) {
+	  default:
+	    return;
+	  case IcsExamining:
+	    pauseExamForwardMostMove = forwardMostMove;
+	    pauseExamInvalid = FALSE;
+	    /* fall through */
+	  case IcsObserving:
+	  case IcsPlayingWhite:
+	  case IcsPlayingBlack:
+	    pausing = TRUE;
+	    ModeHighlight();
+	    return;
+	  case PlayFromGameFile:
+	    (void) StopLoadGameTimer();
+	    pausing = TRUE;
+	    ModeHighlight();
+	    break;
+	  case BeginningOfGame:
+	    if (appData.icsActive) return;
+	    /* else fall through */
+	  case MachinePlaysWhite:
+	  case MachinePlaysBlack:
+	  case TwoMachinesPlay:
+	    if (forwardMostMove == 0)
+	      return;		/* don't pause if no one has moved */
+	    if ((gameMode == MachinePlaysWhite &&
+		 !WhiteOnMove(forwardMostMove)) ||
+		(gameMode == MachinePlaysBlack &&
+		 WhiteOnMove(forwardMostMove))) {
+		StopClocks();
+	    }
+	    pausing = TRUE;
+	    ModeHighlight();
+	    break;
+	}
+    }
+}
+
+void
+EditCommentEvent()
+{
+    char title[MSG_SIZ];
+
+    if (currentMove < 1 || parseList[currentMove - 1][0] == NULLCHAR) {
+	strcpy(title, _("Edit comment"));
+    } else {
+	sprintf(title, _("Edit comment on %d.%s%s"), (currentMove - 1) / 2 + 1,
+		WhiteOnMove(currentMove - 1) ? " " : ".. ",
+		parseList[currentMove - 1]);
+    }
+
+    EditCommentPopUp(currentMove, title, commentList[currentMove]);
+}
+
+
+void
+EditTagsEvent()
+{
+    char *tags = PGNTags(&gameInfo);
+    EditTagsPopUp(tags);
+    free(tags);
+}
+
+void
+AnalyzeModeEvent()
+{
+    if (appData.noChessProgram || gameMode == AnalyzeMode)
+      return;
+
+    if (gameMode != AnalyzeFile) {
+        if (!appData.icsEngineAnalyze) {
+               EditGameEvent();
+               if (gameMode != EditGame) return;
+        }
+	ResurrectChessProgram();
+	SendToProgram("analyze\n", &first);
+	first.analyzing = TRUE;
+	/*first.maybeThinking = TRUE;*/
+	first.maybeThinking = FALSE; /* avoid killing GNU Chess */
+	AnalysisPopUp(_("Analysis"),
+		      _("Starting analysis mode...\nIf this message stays up, your chess program does not support analysis."));
+    }
+    if (!appData.icsEngineAnalyze) gameMode = AnalyzeMode;
+    pausing = FALSE;
+    ModeHighlight();
+    SetGameInfo();
+
+    StartAnalysisClock();
+    GetTimeMark(&lastNodeCountTime);
+    lastNodeCount = 0;
+}
+
+void
+AnalyzeFileEvent()
+{
+    if (appData.noChessProgram || gameMode == AnalyzeFile)
+      return;
+
+    if (gameMode != AnalyzeMode) {
+	EditGameEvent();
+	if (gameMode != EditGame) return;
+	ResurrectChessProgram();
+	SendToProgram("analyze\n", &first);
+	first.analyzing = TRUE;
+	/*first.maybeThinking = TRUE;*/
+	first.maybeThinking = FALSE; /* avoid killing GNU Chess */
+	AnalysisPopUp(_("Analysis"),
+		      _("Starting analysis mode...\nIf this message stays up, your chess program does not support analysis."));
+    }
+    gameMode = AnalyzeFile;
+    pausing = FALSE;
+    ModeHighlight();
+    SetGameInfo();
+
+    StartAnalysisClock();
+    GetTimeMark(&lastNodeCountTime);
+    lastNodeCount = 0;
+}
+
+void
+MachineWhiteEvent()
+{
+    char buf[MSG_SIZ];
+    char *bookHit = NULL;
+
+    if (appData.noChessProgram || (gameMode == MachinePlaysWhite))
+      return;
+
+
+    if (gameMode == PlayFromGameFile || 
+	gameMode == TwoMachinesPlay  || 
+	gameMode == Training         || 
+	gameMode == AnalyzeMode      || 
+	gameMode == EndOfGame)
+	EditGameEvent();
+
+    if (gameMode == EditPosition) 
+        EditPositionDone();
+
+    if (!WhiteOnMove(currentMove)) {
+	DisplayError(_("It is not White's turn"), 0);
+	return;
+    }
+  
+    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile)
+      ExitAnalyzeMode();
+
+    if (gameMode == EditGame || gameMode == AnalyzeMode || 
+	gameMode == AnalyzeFile)
+	TruncateGame();
+
+    ResurrectChessProgram();	/* in case it isn't running */
+    if(gameMode == BeginningOfGame) { /* [HGM] time odds: to get right odds in human mode */
+	gameMode = MachinePlaysWhite;
+	ResetClocks();
+    } else
+    gameMode = MachinePlaysWhite;
+    pausing = FALSE;
+    ModeHighlight();
+    SetGameInfo();
+    sprintf(buf, "%s vs. %s", gameInfo.white, gameInfo.black);
+    DisplayTitle(buf);
+    if (first.sendName) {
+      sprintf(buf, "name %s\n", gameInfo.black);
+      SendToProgram(buf, &first);
+    }
+    if (first.sendTime) {
+      if (first.useColors) {
+	SendToProgram("black\n", &first); /*gnu kludge*/
+      }
+      SendTimeRemaining(&first, TRUE);
+    }
+    if (first.useColors) {
+      SendToProgram("white\n", &first); // [HGM] book: send 'go' separately
+    }
+    bookHit = SendMoveToBookUser(forwardMostMove-1, &first, TRUE); // [HGM] book: send go or retrieve book move
+    SetMachineThinkingEnables();
+    first.maybeThinking = TRUE;
+    StartClocks();
+
+    if (appData.autoFlipView && !flipView) {
+      flipView = !flipView;
+      DrawPosition(FALSE, NULL);
+      DisplayBothClocks();       // [HGM] logo: clocks might have to be exchanged;
+    }
+
+    if(bookHit) { // [HGM] book: simulate book reply
+	static char bookMove[MSG_SIZ]; // a bit generous?
+
+	programStats.nodes = programStats.depth = programStats.time = 
+	programStats.score = programStats.got_only_move = 0;
+	sprintf(programStats.movelist, "%s (xbook)", bookHit);
+
+	strcpy(bookMove, "move ");
+	strcat(bookMove, bookHit);
+	HandleMachineMove(bookMove, &first);
+    }
+}
+
+void
+MachineBlackEvent()
+{
+    char buf[MSG_SIZ];
+   char *bookHit = NULL;
+
+    if (appData.noChessProgram || (gameMode == MachinePlaysBlack))
+	return;
+
+
+    if (gameMode == PlayFromGameFile || 
+	gameMode == TwoMachinesPlay  || 
+	gameMode == Training         || 
+	gameMode == AnalyzeMode      || 
+	gameMode == EndOfGame)
+        EditGameEvent();
+
+    if (gameMode == EditPosition) 
+        EditPositionDone();
+
+    if (WhiteOnMove(currentMove)) {
+	DisplayError(_("It is not Black's turn"), 0);
+	return;
+    }
+    
+    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile)
+      ExitAnalyzeMode();
+
+    if (gameMode == EditGame || gameMode == AnalyzeMode || 
+	gameMode == AnalyzeFile)
+	TruncateGame();
+
+    ResurrectChessProgram();	/* in case it isn't running */
+    gameMode = MachinePlaysBlack;
+    pausing = FALSE;
+    ModeHighlight();
+    SetGameInfo();
+    sprintf(buf, "%s vs. %s", gameInfo.white, gameInfo.black);
+    DisplayTitle(buf);
+    if (first.sendName) {
+      sprintf(buf, "name %s\n", gameInfo.white);
+      SendToProgram(buf, &first);
+    }
+    if (first.sendTime) {
+      if (first.useColors) {
+	SendToProgram("white\n", &first); /*gnu kludge*/
+      }
+      SendTimeRemaining(&first, FALSE);
+    }
+    if (first.useColors) {
+      SendToProgram("black\n", &first); // [HGM] book: 'go' sent separately
+    }
+    bookHit = SendMoveToBookUser(forwardMostMove-1, &first, TRUE); // [HGM] book: send go or retrieve book move
+    SetMachineThinkingEnables();
+    first.maybeThinking = TRUE;
+    StartClocks();
+
+    if (appData.autoFlipView && flipView) {
+      flipView = !flipView;
+      DrawPosition(FALSE, NULL);
+      DisplayBothClocks();       // [HGM] logo: clocks might have to be exchanged;
+    }
+    if(bookHit) { // [HGM] book: simulate book reply
+	static char bookMove[MSG_SIZ]; // a bit generous?
+
+	programStats.nodes = programStats.depth = programStats.time = 
+	programStats.score = programStats.got_only_move = 0;
+	sprintf(programStats.movelist, "%s (xbook)", bookHit);
+
+	strcpy(bookMove, "move ");
+	strcat(bookMove, bookHit);
+	HandleMachineMove(bookMove, &first);
+    }
+}
+
+
+void
+DisplayTwoMachinesTitle()
+{
+    char buf[MSG_SIZ];
+    if (appData.matchGames > 0) {
+        if (first.twoMachinesColor[0] == 'w') {
+	    sprintf(buf, "%s vs. %s (%d-%d-%d)",
+		    gameInfo.white, gameInfo.black,
+		    first.matchWins, second.matchWins,
+		    matchGame - 1 - (first.matchWins + second.matchWins));
+	} else {
+	    sprintf(buf, "%s vs. %s (%d-%d-%d)",
+		    gameInfo.white, gameInfo.black,
+		    second.matchWins, first.matchWins,
+		    matchGame - 1 - (first.matchWins + second.matchWins));
+	}
+    } else {
+	sprintf(buf, "%s vs. %s", gameInfo.white, gameInfo.black);
+    }
+    DisplayTitle(buf);
+}
+
+void
+TwoMachinesEvent P((void))
+{
+    int i;
+    char buf[MSG_SIZ];
+    ChessProgramState *onmove;
+    char *bookHit = NULL;
+    
+    if (appData.noChessProgram) return;
+
+    switch (gameMode) {
+      case TwoMachinesPlay:
+	return;
+      case MachinePlaysWhite:
+      case MachinePlaysBlack:
+	if (WhiteOnMove(forwardMostMove) == (gameMode == MachinePlaysWhite)) {
+	    DisplayError(_("Wait until your turn,\nor select Move Now"), 0);
+	    return;
+	}
+	/* fall through */
+      case BeginningOfGame:
+      case PlayFromGameFile:
+      case EndOfGame:
+	EditGameEvent();
+	if (gameMode != EditGame) return;
+	break;
+      case EditPosition:
+	EditPositionDone();
+	break;
+      case AnalyzeMode:
+      case AnalyzeFile:
+	ExitAnalyzeMode();
+	break;
+      case EditGame:
+      default:
+	break;
+    }
+
+    forwardMostMove = currentMove;
+    ResurrectChessProgram();	/* in case first program isn't running */
+
+    if (second.pr == NULL) {
+	StartChessProgram(&second);
+	if (second.protocolVersion == 1) {
+	  TwoMachinesEventIfReady();
+	} else {
+	  /* kludge: allow timeout for initial "feature" command */
+	  FreezeUI();
+	  DisplayMessage("", _("Starting second chess program"));
+	  ScheduleDelayedEvent(TwoMachinesEventIfReady, FEATURE_TIMEOUT);
+	}
+	return;
+    }
+    DisplayMessage("", "");
+    InitChessProgram(&second, FALSE);
+    SendToProgram("force\n", &second);
+    if (startedFromSetupPosition) {
+	SendBoard(&second, backwardMostMove);
+    if (appData.debugMode) {
+        fprintf(debugFP, "Two Machines\n");
+    }
+    }
+    for (i = backwardMostMove; i < forwardMostMove; i++) {
+	SendMoveToProgram(i, &second);
+    }
+
+    gameMode = TwoMachinesPlay;
+    pausing = FALSE;
+    ModeHighlight();
+    SetGameInfo();
+    DisplayTwoMachinesTitle();
+    firstMove = TRUE;
+    if ((first.twoMachinesColor[0] == 'w') == WhiteOnMove(forwardMostMove)) {
+	onmove = &first;
+    } else {
+	onmove = &second;
+    }
+
+    SendToProgram(first.computerString, &first);
+    if (first.sendName) {
+      sprintf(buf, "name %s\n", second.tidy);
+      SendToProgram(buf, &first);
+    }
+    SendToProgram(second.computerString, &second);
+    if (second.sendName) {
+      sprintf(buf, "name %s\n", first.tidy);
+      SendToProgram(buf, &second);
+    }
+
+    ResetClocks();
+    if (!first.sendTime || !second.sendTime) {
+	timeRemaining[0][forwardMostMove] = whiteTimeRemaining;
+	timeRemaining[1][forwardMostMove] = blackTimeRemaining;
+    }
+    if (onmove->sendTime) {
+      if (onmove->useColors) {
+	SendToProgram(onmove->other->twoMachinesColor, onmove); /*gnu kludge*/
+      }
+      SendTimeRemaining(onmove, WhiteOnMove(forwardMostMove));
+    }
+    if (onmove->useColors) {
+      SendToProgram(onmove->twoMachinesColor, onmove);
+    }
+    bookHit = SendMoveToBookUser(forwardMostMove-1, onmove, TRUE); // [HGM] book: send go or retrieve book move
+//    SendToProgram("go\n", onmove);
+    onmove->maybeThinking = TRUE;
+    SetMachineThinkingEnables();
+
+    StartClocks();
+
+    if(bookHit) { // [HGM] book: simulate book reply
+	static char bookMove[MSG_SIZ]; // a bit generous?
+
+	programStats.nodes = programStats.depth = programStats.time = 
+	programStats.score = programStats.got_only_move = 0;
+	sprintf(programStats.movelist, "%s (xbook)", bookHit);
+
+	strcpy(bookMove, "move ");
+	strcat(bookMove, bookHit);
+	HandleMachineMove(bookMove, &first);
+    }
+}
+
+void
+TrainingEvent()
+{
+    if (gameMode == Training) {
+      SetTrainingModeOff();
+      gameMode = PlayFromGameFile;
+      DisplayMessage("", _("Training mode off"));
+    } else {
+      gameMode = Training;
+      animateTraining = appData.animate;
+
+      /* make sure we are not already at the end of the game */
+      if (currentMove < forwardMostMove) {
+	SetTrainingModeOn();
+	DisplayMessage("", _("Training mode on"));
+      } else {
+	gameMode = PlayFromGameFile;
+	DisplayError(_("Already at end of game"), 0);
+      }
+    }
+    ModeHighlight();
+}
+
+void
+IcsClientEvent()
+{
+    if (!appData.icsActive) return;
+    switch (gameMode) {
+      case IcsPlayingWhite:
+      case IcsPlayingBlack:
+      case IcsObserving:
+      case IcsIdle:
+      case BeginningOfGame:
+      case IcsExamining:
+	return;
+
+      case EditGame:
+	break;
+
+      case EditPosition:
+	EditPositionDone();
+	break;
+
+      case AnalyzeMode:
+      case AnalyzeFile:
+	ExitAnalyzeMode();
+	break;
+	
+      default:
+	EditGameEvent();
+	break;
+    }
+
+    gameMode = IcsIdle;
+    ModeHighlight();
+    return;
+}
+
+
+void
+EditGameEvent()
+{
+    int i;
+
+    switch (gameMode) {
+      case Training:
+	SetTrainingModeOff();
+	break;
+      case MachinePlaysWhite:
+      case MachinePlaysBlack:
+      case BeginningOfGame:
+	SendToProgram("force\n", &first);
+	SetUserThinkingEnables();
+	break;
+      case PlayFromGameFile:
+	(void) StopLoadGameTimer();
+	if (gameFileFP != NULL) {
+	    gameFileFP = NULL;
+	}
+	break;
+      case EditPosition:
+	EditPositionDone();
+	break;
+      case AnalyzeMode:
+      case AnalyzeFile:
+	ExitAnalyzeMode();
+	SendToProgram("force\n", &first);
+	break;
+      case TwoMachinesPlay:
+	GameEnds((ChessMove) 0, NULL, GE_PLAYER);
+	ResurrectChessProgram();
+	SetUserThinkingEnables();
+	break;
+      case EndOfGame:
+	ResurrectChessProgram();
+	break;
+      case IcsPlayingBlack:
+      case IcsPlayingWhite:
+	DisplayError(_("Warning: You are still playing a game"), 0);
+	break;
+      case IcsObserving:
+	DisplayError(_("Warning: You are still observing a game"), 0);
+	break;
+      case IcsExamining:
+	DisplayError(_("Warning: You are still examining a game"), 0);
+	break;
+      case IcsIdle:
+	break;
+      case EditGame:
+      default:
+	return;
+    }
+    
+    pausing = FALSE;
+    StopClocks();
+    first.offeredDraw = second.offeredDraw = 0;
+
+    if (gameMode == PlayFromGameFile) {
+	whiteTimeRemaining = timeRemaining[0][currentMove];
+	blackTimeRemaining = timeRemaining[1][currentMove];
+	DisplayTitle("");
+    }
+
+    if (gameMode == MachinePlaysWhite ||
+	gameMode == MachinePlaysBlack ||
+	gameMode == TwoMachinesPlay ||
+	gameMode == EndOfGame) {
+	i = forwardMostMove;
+	while (i > currentMove) {
+	    SendToProgram("undo\n", &first);
+	    i--;
+	}
+	whiteTimeRemaining = timeRemaining[0][currentMove];
+	blackTimeRemaining = timeRemaining[1][currentMove];
+	DisplayBothClocks();
+	if (whiteFlag || blackFlag) {
+	    whiteFlag = blackFlag = 0;
+	}
+	DisplayTitle("");
+    }		
+    
+    gameMode = EditGame;
+    ModeHighlight();
+    SetGameInfo();
+}
+
+
+void
+EditPositionEvent()
+{
+    if (gameMode == EditPosition) {
+	EditGameEvent();
+	return;
+    }
+    
+    EditGameEvent();
+    if (gameMode != EditGame) return;
+    
+    gameMode = EditPosition;
+    ModeHighlight();
+    SetGameInfo();
+    if (currentMove > 0)
+      CopyBoard(boards[0], boards[currentMove]);
+    
+    blackPlaysFirst = !WhiteOnMove(currentMove);
+    ResetClocks();
+    currentMove = forwardMostMove = backwardMostMove = 0;
+    HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
+    DisplayMove(-1);
+}
+
+void
+ExitAnalyzeMode()
+{
+    /* [DM] icsEngineAnalyze - possible call from other functions */
+    if (appData.icsEngineAnalyze) {
+        appData.icsEngineAnalyze = FALSE;
+
+        DisplayMessage("",_("Close ICS engine analyze..."));
+    }
+    if (first.analysisSupport && first.analyzing) {
+      SendToProgram("exit\n", &first);
+      first.analyzing = FALSE;
+    }
+    AnalysisPopDown();
+    thinkOutput[0] = NULLCHAR;
+}
+
+void
+EditPositionDone()
+{
+    startedFromSetupPosition = TRUE;
+    InitChessProgram(&first, FALSE);
+    SendToProgram("force\n", &first);
+    if (blackPlaysFirst) {
+	strcpy(moveList[0], "");
+	strcpy(parseList[0], "");
+	currentMove = forwardMostMove = backwardMostMove = 1;
+	CopyBoard(boards[1], boards[0]);
+	/* [HGM] copy rights as well, as this code is also used after pasting a FEN */
+	{ int i;
+	  epStatus[1] = epStatus[0];
+	  for(i=0; i<nrCastlingRights; i++) castlingRights[1][i] = castlingRights[0][i];
+	}
+    } else {
+	currentMove = forwardMostMove = backwardMostMove = 0;
+    }
+    SendBoard(&first, forwardMostMove);
+    if (appData.debugMode) {
+        fprintf(debugFP, "EditPosDone\n");
+    }
+    DisplayTitle("");
+    timeRemaining[0][forwardMostMove] = whiteTimeRemaining;
+    timeRemaining[1][forwardMostMove] = blackTimeRemaining;
+    gameMode = EditGame;
+    ModeHighlight();
+    HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
+    ClearHighlights(); /* [AS] */
+}
+
+/* Pause for `ms' milliseconds */
+/* !! Ugh, this is a kludge. Fix it sometime. --tpm */
+void
+TimeDelay(ms)
+     long ms;
+{
+    TimeMark m1, m2;
+
+    GetTimeMark(&m1);
+    do {
+	GetTimeMark(&m2);
+    } while (SubtractTimeMarks(&m2, &m1) < ms);
+}
+
+/* !! Ugh, this is a kludge. Fix it sometime. --tpm */
+void
+SendMultiLineToICS(buf)
+     char *buf;
+{
+    char temp[MSG_SIZ+1], *p;
+    int len;
+
+    len = strlen(buf);
+    if (len > MSG_SIZ)
+      len = MSG_SIZ;
+  
+    strncpy(temp, buf, len);
+    temp[len] = 0;
+
+    p = temp;
+    while (*p) {
+	if (*p == '\n' || *p == '\r')
+	  *p = ' ';
+	++p;
+    }
+
+    strcat(temp, "\n");
+    SendToICS(temp);
+    SendToPlayer(temp, strlen(temp));
+}
+
+void
+SetWhiteToPlayEvent()
+{
+    if (gameMode == EditPosition) {
+	blackPlaysFirst = FALSE;
+	DisplayBothClocks();	/* works because currentMove is 0 */
+    } else if (gameMode == IcsExamining) {
+        SendToICS(ics_prefix);
+	SendToICS("tomove white\n");
+    }
+}
+
+void
+SetBlackToPlayEvent()
+{
+    if (gameMode == EditPosition) {
+	blackPlaysFirst = TRUE;
+	currentMove = 1;	/* kludge */
+	DisplayBothClocks();
+	currentMove = 0;
+    } else if (gameMode == IcsExamining) {
+        SendToICS(ics_prefix);
+	SendToICS("tomove black\n");
+    }
+}
+
+void
+EditPositionMenuEvent(selection, x, y)
+     ChessSquare selection;
+     int x, y;
+{
+    char buf[MSG_SIZ];
+    ChessSquare piece = boards[0][y][x];
+
+    if (gameMode != EditPosition && gameMode != IcsExamining) return;
+
+    switch (selection) {
+      case ClearBoard:
+	if (gameMode == IcsExamining && ics_type == ICS_FICS) {
+	    SendToICS(ics_prefix);
+	    SendToICS("bsetup clear\n");
+	} else if (gameMode == IcsExamining && ics_type == ICS_ICC) {
+	    SendToICS(ics_prefix);
+	    SendToICS("clearboard\n");
+	} else {
+            for (x = 0; x < BOARD_WIDTH; x++) { ChessSquare p = EmptySquare;
+		if(x == BOARD_LEFT-1 || x == BOARD_RGHT) p = (ChessSquare) 0; /* [HGM] holdings */
+                for (y = 0; y < BOARD_HEIGHT; y++) {
+		    if (gameMode == IcsExamining) {
+			if (boards[currentMove][y][x] != EmptySquare) {
+			    sprintf(buf, "%sx@%c%c\n", ics_prefix,
+                                    AAA + x, ONE + y);
+			    SendToICS(buf);
+			}
+		    } else {
+			boards[0][y][x] = p;
+		    }
+		}
+	    }
+	}
+	if (gameMode == EditPosition) {
+	    DrawPosition(FALSE, boards[0]);
+	}
+	break;
+
+      case WhitePlay:
+	SetWhiteToPlayEvent();
+	break;
+
+      case BlackPlay:
+	SetBlackToPlayEvent();
+	break;
+
+      case EmptySquare:
+	if (gameMode == IcsExamining) {
+            sprintf(buf, "%sx@%c%c\n", ics_prefix, AAA + x, ONE + y);
+	    SendToICS(buf);
+	} else {
+	    boards[0][y][x] = EmptySquare;
+	    DrawPosition(FALSE, boards[0]);
+	}
+	break;
+
+      case PromotePiece:
+        if(piece >= (int)WhitePawn && piece < (int)WhiteMan ||
+           piece >= (int)BlackPawn && piece < (int)BlackMan   ) {
+            selection = (ChessSquare) (PROMOTED piece);
+        } else if(piece == EmptySquare) selection = WhiteSilver;
+        else selection = (ChessSquare)((int)piece - 1);
+        goto defaultlabel;
+
+      case DemotePiece:
+        if(piece > (int)WhiteMan && piece <= (int)WhiteKing ||
+           piece > (int)BlackMan && piece <= (int)BlackKing   ) {
+            selection = (ChessSquare) (DEMOTED piece);
+        } else if(piece == EmptySquare) selection = BlackSilver;
+        else selection = (ChessSquare)((int)piece + 1);       
+        goto defaultlabel;
+
+      case WhiteQueen:
+      case BlackQueen:
+        if(gameInfo.variant == VariantShatranj ||
+           gameInfo.variant == VariantXiangqi  ||
+           gameInfo.variant == VariantCourier    )
+            selection = (ChessSquare)((int)selection - (int)WhiteQueen + (int)WhiteFerz);
+        goto defaultlabel;
+
+      case WhiteKing:
+      case BlackKing:
+        if(gameInfo.variant == VariantXiangqi)
+            selection = (ChessSquare)((int)selection - (int)WhiteKing + (int)WhiteWazir);
+        if(gameInfo.variant == VariantKnightmate)
+            selection = (ChessSquare)((int)selection - (int)WhiteKing + (int)WhiteUnicorn);
+      default:
+        defaultlabel:
+	if (gameMode == IcsExamining) {
+  	    sprintf(buf, "%s%c@%c%c\n", ics_prefix,
+                    PieceToChar(selection), AAA + x, ONE + y);
+	    SendToICS(buf);
+	} else {
+	    boards[0][y][x] = selection;
+	    DrawPosition(FALSE, boards[0]);
+	}
+	break;
+    }
+}
+
+
+void
+DropMenuEvent(selection, x, y)
+     ChessSquare selection;
+     int x, y;
+{
+    ChessMove moveType;
+
+    switch (gameMode) {
+      case IcsPlayingWhite:
+      case MachinePlaysBlack:
+	if (!WhiteOnMove(currentMove)) {
+	    DisplayMoveError(_("It is Black's turn"));
+	    return;
+	}
+	moveType = WhiteDrop;
+	break;
+      case IcsPlayingBlack:
+      case MachinePlaysWhite:
+	if (WhiteOnMove(currentMove)) {
+	    DisplayMoveError(_("It is White's turn"));
+	    return;
+	}
+	moveType = BlackDrop;
+	break;
+      case EditGame:
+	moveType = WhiteOnMove(currentMove) ? WhiteDrop : BlackDrop;
+	break;
+      default:
+	return;
+    }
+
+    if (moveType == BlackDrop && selection < BlackPawn) {
+      selection = (ChessSquare) ((int) selection
+				 + (int) BlackPawn - (int) WhitePawn);
+    }
+    if (boards[currentMove][y][x] != EmptySquare) {
+	DisplayMoveError(_("That square is occupied"));
+	return;
+    }
+
+    FinishMove(moveType, (int) selection, DROP_RANK, x, y, NULLCHAR);
+}
+
+void
+AcceptEvent()
+{
+    /* Accept a pending offer of any kind from opponent */
+    
+    if (appData.icsActive) {
+        SendToICS(ics_prefix);
+	SendToICS("accept\n");
+    } else if (cmailMsgLoaded) {
+	if (currentMove == cmailOldMove &&
+	    commentList[cmailOldMove] != NULL &&
+	    StrStr(commentList[cmailOldMove], WhiteOnMove(cmailOldMove) ?
+		   "Black offers a draw" : "White offers a draw")) {
+	    TruncateGame();
+	    GameEnds(GameIsDrawn, "Draw agreed", GE_PLAYER);
+	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_ACCEPT;
+	} else {
+	    DisplayError(_("There is no pending offer on this move"), 0);
+	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_MOVE;
+	}
+    } else {
+	/* Not used for offers from chess program */
+    }
+}
+
+void
+DeclineEvent()
+{
+    /* Decline a pending offer of any kind from opponent */
+    
+    if (appData.icsActive) {
+        SendToICS(ics_prefix);
+	SendToICS("decline\n");
+    } else if (cmailMsgLoaded) {
+	if (currentMove == cmailOldMove &&
+	    commentList[cmailOldMove] != NULL &&
+	    StrStr(commentList[cmailOldMove], WhiteOnMove(cmailOldMove) ?
+		   "Black offers a draw" : "White offers a draw")) {
+#ifdef NOTDEF
+	    AppendComment(cmailOldMove, "Draw declined");
+	    DisplayComment(cmailOldMove - 1, "Draw declined");
+#endif /*NOTDEF*/
+	} else {
+	    DisplayError(_("There is no pending offer on this move"), 0);
+	}
+    } else {
+	/* Not used for offers from chess program */
+    }
+}
+
+void
+RematchEvent()
+{
+    /* Issue ICS rematch command */
+    if (appData.icsActive) {
+        SendToICS(ics_prefix);
+	SendToICS("rematch\n");
+    }
+}
+
+void
+CallFlagEvent()
+{
+    /* Call your opponent's flag (claim a win on time) */
+    if (appData.icsActive) {
+        SendToICS(ics_prefix);
+	SendToICS("flag\n");
+    } else {
+	switch (gameMode) {
+	  default:
+	    return;
+	  case MachinePlaysWhite:
+	    if (whiteFlag) {
+		if (blackFlag)
+		  GameEnds(GameIsDrawn, "Both players ran out of time",
+			   GE_PLAYER);
+		else
+		  GameEnds(BlackWins, "Black wins on time", GE_PLAYER);
+	    } else {
+		DisplayError(_("Your opponent is not out of time"), 0);
+	    }
+	    break;
+	  case MachinePlaysBlack:
+	    if (blackFlag) {
+		if (whiteFlag)
+		  GameEnds(GameIsDrawn, "Both players ran out of time",
+			   GE_PLAYER);
+		else
+		  GameEnds(WhiteWins, "White wins on time", GE_PLAYER);
+	    } else {
+		DisplayError(_("Your opponent is not out of time"), 0);
+	    }
+	    break;
+	}
+    }
+}
+
+void
+DrawEvent()
+{
+    /* Offer draw or accept pending draw offer from opponent */
+    
+    if (appData.icsActive) {
+	/* Note: tournament rules require draw offers to be
+	   made after you make your move but before you punch
+	   your clock.  Currently ICS doesn't let you do that;
+	   instead, you immediately punch your clock after making
+	   a move, but you can offer a draw at any time. */
+	
+        SendToICS(ics_prefix);
+	SendToICS("draw\n");
+    } else if (cmailMsgLoaded) {
+	if (currentMove == cmailOldMove &&
+	    commentList[cmailOldMove] != NULL &&
+	    StrStr(commentList[cmailOldMove], WhiteOnMove(cmailOldMove) ?
+		   "Black offers a draw" : "White offers a draw")) {
+	    GameEnds(GameIsDrawn, "Draw agreed", GE_PLAYER);
+	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_ACCEPT;
+	} else if (currentMove == cmailOldMove + 1) {
+	    char *offer = WhiteOnMove(cmailOldMove) ?
+	      "White offers a draw" : "Black offers a draw";
+	    AppendComment(currentMove, offer);
+	    DisplayComment(currentMove - 1, offer);
+	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_DRAW;
+	} else {
+	    DisplayError(_("You must make your move before offering a draw"), 0);
+	    cmailMoveType[lastLoadGameNumber - 1] = CMAIL_MOVE;
+	}
+    } else if (first.offeredDraw) {
+	GameEnds(GameIsDrawn, "Draw agreed", GE_XBOARD);
+    } else {
+        if (first.sendDrawOffers) {
+	    SendToProgram("draw\n", &first);
+            userOfferedDraw = TRUE;
+	}
+    }
+}
+
+void
+AdjournEvent()
+{
+    /* Offer Adjourn or accept pending Adjourn offer from opponent */
+    
+    if (appData.icsActive) {
+        SendToICS(ics_prefix);
+	SendToICS("adjourn\n");
+    } else {
+	/* Currently GNU Chess doesn't offer or accept Adjourns */
+    }
+}
+
+
+void
+AbortEvent()
+{
+    /* Offer Abort or accept pending Abort offer from opponent */
+    
+    if (appData.icsActive) {
+        SendToICS(ics_prefix);
+	SendToICS("abort\n");
+    } else {
+	GameEnds(GameUnfinished, "Game aborted", GE_PLAYER);
+    }
+}
+
+void
+ResignEvent()
+{
+    /* Resign.  You can do this even if it's not your turn. */
+    
+    if (appData.icsActive) {
+        SendToICS(ics_prefix);
+	SendToICS("resign\n");
+    } else {
+	switch (gameMode) {
+	  case MachinePlaysWhite:
+	    GameEnds(WhiteWins, "Black resigns", GE_PLAYER);
+	    break;
+	  case MachinePlaysBlack:
+	    GameEnds(BlackWins, "White resigns", GE_PLAYER);
+	    break;
+	  case EditGame:
+	    if (cmailMsgLoaded) {
+		TruncateGame();
+		if (WhiteOnMove(cmailOldMove)) {
+		    GameEnds(BlackWins, "White resigns", GE_PLAYER);
+		} else {
+		    GameEnds(WhiteWins, "Black resigns", GE_PLAYER);
+		}
+		cmailMoveType[lastLoadGameNumber - 1] = CMAIL_RESIGN;
+	    }
+	    break;
+	  default:
+	    break;
+	}
+    }
+}
+
+
+void
+StopObservingEvent()
+{
+    /* Stop observing current games */
+    SendToICS(ics_prefix);
+    SendToICS("unobserve\n");
+}
+
+void
+StopExaminingEvent()
+{
+    /* Stop observing current game */
+    SendToICS(ics_prefix);
+    SendToICS("unexamine\n");
+}
+
+void
+ForwardInner(target)
+     int target;
+{
+    int limit;
+
+    if (appData.debugMode)
+	fprintf(debugFP, "ForwardInner(%d), current %d, forward %d\n",
+		target, currentMove, forwardMostMove);
+
+    if (gameMode == EditPosition)
+      return;
+
+    if (gameMode == PlayFromGameFile && !pausing)
+      PauseEvent();
+    
+    if (gameMode == IcsExamining && pausing)
+      limit = pauseExamForwardMostMove;
+    else
+      limit = forwardMostMove;
+    
+    if (target > limit) target = limit;
+
+    if (target > 0 && moveList[target - 1][0]) {
+	int fromX, fromY, toX, toY;
+        toX = moveList[target - 1][2] - AAA;
+        toY = moveList[target - 1][3] - ONE;
+	if (moveList[target - 1][1] == '@') {
+	    if (appData.highlightLastMove) {
+		SetHighlights(-1, -1, toX, toY);
+	    }
+	} else {
+            fromX = moveList[target - 1][0] - AAA;
+            fromY = moveList[target - 1][1] - ONE;
+	    if (target == currentMove + 1) {
+		AnimateMove(boards[currentMove], fromX, fromY, toX, toY);
+	    }
+	    if (appData.highlightLastMove) {
+		SetHighlights(fromX, fromY, toX, toY);
+	    }
+	}
+    }
+    if (gameMode == EditGame || gameMode == AnalyzeMode || 
+	gameMode == Training || gameMode == PlayFromGameFile || 
+	gameMode == AnalyzeFile) {
+	while (currentMove < target) {
+	    SendMoveToProgram(currentMove++, &first);
+	}
+    } else {
+	currentMove = target;
+    }
+    
+    if (gameMode == EditGame || gameMode == EndOfGame) {
+	whiteTimeRemaining = timeRemaining[0][currentMove];
+	blackTimeRemaining = timeRemaining[1][currentMove];
+    }
+    DisplayBothClocks();
+    DisplayMove(currentMove - 1);
+    DrawPosition(FALSE, boards[currentMove]);
+    HistorySet(parseList,backwardMostMove,forwardMostMove,currentMove-1);
+    if ( !matchMode && gameMode != Training) { // [HGM] PV info: routine tests if empty
+	DisplayComment(currentMove - 1, commentList[currentMove]);
+    }
+}
+
+
+void
+ForwardEvent()
+{
+    if (gameMode == IcsExamining && !pausing) {
+        SendToICS(ics_prefix);
+	SendToICS("forward\n");
+    } else {
+	ForwardInner(currentMove + 1);
+    }
+}
+
+void
+ToEndEvent()
+{
+    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
+	/* to optimze, we temporarily turn off analysis mode while we feed
+	 * the remaining moves to the engine. Otherwise we get analysis output
+	 * after each move.
+	 */ 
+        if (first.analysisSupport) {
+	  SendToProgram("exit\nforce\n", &first);
+	  first.analyzing = FALSE;
+	}
+    }
+	
+    if (gameMode == IcsExamining && !pausing) {
+        SendToICS(ics_prefix);
+	SendToICS("forward 999999\n");
+    } else {
+	ForwardInner(forwardMostMove);
+    }
+
+    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
+	/* we have fed all the moves, so reactivate analysis mode */
+	SendToProgram("analyze\n", &first);
+	first.analyzing = TRUE;
+	/*first.maybeThinking = TRUE;*/
+	first.maybeThinking = FALSE; /* avoid killing GNU Chess */
+    }
+}
+
+void
+BackwardInner(target)
+     int target;
+{
+    int full_redraw = TRUE; /* [AS] Was FALSE, had to change it! */
+
+    if (appData.debugMode)
+	fprintf(debugFP, "BackwardInner(%d), current %d, forward %d\n",
+		target, currentMove, forwardMostMove);
+
+    if (gameMode == EditPosition) return;
+    if (currentMove <= backwardMostMove) {
+	ClearHighlights();
+	DrawPosition(full_redraw, boards[currentMove]);
+	return;
+    }
+    if (gameMode == PlayFromGameFile && !pausing)
+      PauseEvent();
+    
+    if (moveList[target][0]) {
+	int fromX, fromY, toX, toY;
+        toX = moveList[target][2] - AAA;
+        toY = moveList[target][3] - ONE;
+	if (moveList[target][1] == '@') {
+	    if (appData.highlightLastMove) {
+		SetHighlights(-1, -1, toX, toY);
+	    }
+	} else {
+            fromX = moveList[target][0] - AAA;
+            fromY = moveList[target][1] - ONE;
+	    if (target == currentMove - 1) {
+		AnimateMove(boards[currentMove], toX, toY, fromX, fromY);
+	    }
+	    if (appData.highlightLastMove) {
+		SetHighlights(fromX, fromY, toX, toY);
+	    }
+	}
+    }
+    if (gameMode == EditGame || gameMode==AnalyzeMode ||
+	gameMode == PlayFromGameFile || gameMode == AnalyzeFile) {
+	while (currentMove > target) {
+	    SendToProgram("undo\n", &first);
+	    currentMove--;
+	}
+    } else {
+	currentMove = target;
+    }
+    
+    if (gameMode == EditGame || gameMode == EndOfGame) {
+	whiteTimeRemaining = timeRemaining[0][currentMove];
+	blackTimeRemaining = timeRemaining[1][currentMove];
+    }
+    DisplayBothClocks();
+    DisplayMove(currentMove - 1);
+    DrawPosition(full_redraw, boards[currentMove]);
+    HistorySet(parseList,backwardMostMove,forwardMostMove,currentMove-1);
+    // [HGM] PV info: routine tests if comment empty
+    DisplayComment(currentMove - 1, commentList[currentMove]);
+}
+
+void
+BackwardEvent()
+{
+    if (gameMode == IcsExamining && !pausing) {
+        SendToICS(ics_prefix);
+	SendToICS("backward\n");
+    } else {
+	BackwardInner(currentMove - 1);
+    }
+}
+
+void
+ToStartEvent()
+{
+    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
+	/* to optimze, we temporarily turn off analysis mode while we undo
+	 * all the moves. Otherwise we get analysis output after each undo.
+	 */ 
+        if (first.analysisSupport) {
+	  SendToProgram("exit\nforce\n", &first);
+	  first.analyzing = FALSE;
+	}
+    }
+
+    if (gameMode == IcsExamining && !pausing) {
+        SendToICS(ics_prefix);
+	SendToICS("backward 999999\n");
+    } else {
+	BackwardInner(backwardMostMove);
+    }
+
+    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
+	/* we have fed all the moves, so reactivate analysis mode */
+	SendToProgram("analyze\n", &first);
+	first.analyzing = TRUE;
+	/*first.maybeThinking = TRUE;*/
+	first.maybeThinking = FALSE; /* avoid killing GNU Chess */
+    }
+}
+
+void
+ToNrEvent(int to)
+{
+  if (gameMode == PlayFromGameFile && !pausing) PauseEvent();
+  if (to >= forwardMostMove) to = forwardMostMove;
+  if (to <= backwardMostMove) to = backwardMostMove;
+  if (to < currentMove) {
+    BackwardInner(to);
+  } else {
+    ForwardInner(to);
+  }
+}
+
+void
+RevertEvent()
+{
+    if (gameMode != IcsExamining) {
+	DisplayError(_("You are not examining a game"), 0);
+	return;
+    }
+    if (pausing) {
+	DisplayError(_("You can't revert while pausing"), 0);
+	return;
+    }
+    SendToICS(ics_prefix);
+    SendToICS("revert\n");
+}
+
+void
+RetractMoveEvent()
+{
+    switch (gameMode) {
+      case MachinePlaysWhite:
+      case MachinePlaysBlack:
+	if (WhiteOnMove(forwardMostMove) == (gameMode == MachinePlaysWhite)) {
+	    DisplayError(_("Wait until your turn,\nor select Move Now"), 0);
+	    return;
+	}
+	if (forwardMostMove < 2) return;
+	currentMove = forwardMostMove = forwardMostMove - 2;
+	whiteTimeRemaining = timeRemaining[0][currentMove];
+	blackTimeRemaining = timeRemaining[1][currentMove];
+	DisplayBothClocks();
+	DisplayMove(currentMove - 1);
+	ClearHighlights();/*!! could figure this out*/
+	DrawPosition(TRUE, boards[currentMove]); /* [AS] Changed to full redraw! */
+	SendToProgram("remove\n", &first);
+	/*first.maybeThinking = TRUE;*/ /* GNU Chess does not ponder here */
+	break;
+
+      case BeginningOfGame:
+      default:
+	break;
+
+      case IcsPlayingWhite:
+      case IcsPlayingBlack:
+	if (WhiteOnMove(forwardMostMove) == (gameMode == IcsPlayingWhite)) {
+	    SendToICS(ics_prefix);
+	    SendToICS("takeback 2\n");
+	} else {
+	    SendToICS(ics_prefix);
+	    SendToICS("takeback 1\n");
+	}
+	break;
+    }
+}
+
+void
+MoveNowEvent()
+{
+    ChessProgramState *cps;
+
+    switch (gameMode) {
+      case MachinePlaysWhite:
+	if (!WhiteOnMove(forwardMostMove)) {
+	    DisplayError(_("It is your turn"), 0);
+	    return;
+	}
+	cps = &first;
+	break;
+      case MachinePlaysBlack:
+	if (WhiteOnMove(forwardMostMove)) {
+	    DisplayError(_("It is your turn"), 0);
+	    return;
+	}
+	cps = &first;
+	break;
+      case TwoMachinesPlay:
+	if (WhiteOnMove(forwardMostMove) ==
+	    (first.twoMachinesColor[0] == 'w')) {
+	    cps = &first;
+	} else {
+	    cps = &second;
+	}
+	break;
+      case BeginningOfGame:
+      default:
+	return;
+    }
+    SendToProgram("?\n", cps);
+}
+
+void
+TruncateGameEvent()
+{
+    EditGameEvent();
+    if (gameMode != EditGame) return;
+    TruncateGame();
+}
+
+void
+TruncateGame()
+{
+    if (forwardMostMove > currentMove) {
+	if (gameInfo.resultDetails != NULL) {
+	    free(gameInfo.resultDetails);
+	    gameInfo.resultDetails = NULL;
+	    gameInfo.result = GameUnfinished;
+	}
+	forwardMostMove = currentMove;
+	HistorySet(parseList, backwardMostMove, forwardMostMove,
+		   currentMove-1);
+    }
+}
+
+void
+HintEvent()
+{
+    if (appData.noChessProgram) return;
+    switch (gameMode) {
+      case MachinePlaysWhite:
+	if (WhiteOnMove(forwardMostMove)) {
+	    DisplayError(_("Wait until your turn"), 0);
+	    return;
+	}
+	break;
+      case BeginningOfGame:
+      case MachinePlaysBlack:
+	if (!WhiteOnMove(forwardMostMove)) {
+	    DisplayError(_("Wait until your turn"), 0);
+	    return;
+	}
+	break;
+      default:
+	DisplayError(_("No hint available"), 0);
+	return;
+    }
+    SendToProgram("hint\n", &first);
+    hintRequested = TRUE;
+}
+
+void
+BookEvent()
+{
+    if (appData.noChessProgram) return;
+    switch (gameMode) {
+      case MachinePlaysWhite:
+	if (WhiteOnMove(forwardMostMove)) {
+	    DisplayError(_("Wait until your turn"), 0);
+	    return;
+	}
+	break;
+      case BeginningOfGame:
+      case MachinePlaysBlack:
+	if (!WhiteOnMove(forwardMostMove)) {
+	    DisplayError(_("Wait until your turn"), 0);
+	    return;
+	}
+	break;
+      case EditPosition:
+	EditPositionDone();
+	break;
+      case TwoMachinesPlay:
+	return;
+      default:
+	break;
+    }
+    SendToProgram("bk\n", &first);
+    bookOutput[0] = NULLCHAR;
+    bookRequested = TRUE;
+}
+
+void
+AboutGameEvent()
+{
+    char *tags = PGNTags(&gameInfo);
+    TagsPopUp(tags, CmailMsg());
+    free(tags);
+}
+
+/* end button procedures */
+
+void
+PrintPosition(fp, move)
+     FILE *fp;
+     int move;
+{
+    int i, j;
+    
+    for (i = BOARD_HEIGHT - 1; i >= 0; i--) {
+        for (j = BOARD_LEFT; j < BOARD_RGHT; j++) {
+	    char c = PieceToChar(boards[move][i][j]);
+	    fputc(c == 'x' ? '.' : c, fp);
+            fputc(j == BOARD_RGHT - 1 ? '\n' : ' ', fp);
+	}
+    }
+    if ((gameMode == EditPosition) ? !blackPlaysFirst : (move % 2 == 0))
+      fprintf(fp, "white to play\n");
+    else
+      fprintf(fp, "black to play\n");
+}
+
+void
+PrintOpponents(fp)
+     FILE *fp;
+{
+    if (gameInfo.white != NULL) {
+	fprintf(fp, "\t%s vs. %s\n", gameInfo.white, gameInfo.black);
+    } else {
+	fprintf(fp, "\n");
+    }
+}
+
+/* Find last component of program's own name, using some heuristics */
+void
+TidyProgramName(prog, host, buf)
+     char *prog, *host, buf[MSG_SIZ];
+{
+    char *p, *q;
+    int local = (strcmp(host, "localhost") == 0);
+    while (!local && (p = strchr(prog, ';')) != NULL) {
+	p++;
+	while (*p == ' ') p++;
+	prog = p;
+    }
+    if (*prog == '"' || *prog == '\'') {
+	q = strchr(prog + 1, *prog);
+    } else {
+	q = strchr(prog, ' ');
+    }
+    if (q == NULL) q = prog + strlen(prog);
+    p = q;
+    while (p >= prog && *p != '/' && *p != '\\') p--;
+    p++;
+    if(p == prog && *p == '"') p++;
+    if (q - p >= 4 && StrCaseCmp(q - 4, ".exe") == 0) q -= 4;
+    memcpy(buf, p, q - p);
+    buf[q - p] = NULLCHAR;
+    if (!local) {
+	strcat(buf, "@");
+	strcat(buf, host);
+    }
+}
+
+char *
+TimeControlTagValue()
+{
+    char buf[MSG_SIZ];
+    if (!appData.clockMode) {
+	strcpy(buf, "-");
+    } else if (movesPerSession > 0) {
+	sprintf(buf, "%d/%ld", movesPerSession, timeControl/1000);
+    } else if (timeIncrement == 0) {
+	sprintf(buf, "%ld", timeControl/1000);
+    } else {
+	sprintf(buf, "%ld+%ld", timeControl/1000, timeIncrement/1000);
+    }
+    return StrSave(buf);
+}
+
+void
+SetGameInfo()
+{
+    /* This routine is used only for certain modes */
+    VariantClass v = gameInfo.variant;
+    ClearGameInfo(&gameInfo);
+    gameInfo.variant = v;
+
+    switch (gameMode) {
+      case MachinePlaysWhite:
+	gameInfo.event = StrSave( appData.pgnEventHeader );
+	gameInfo.site = StrSave(HostName());
+	gameInfo.date = PGNDate();
+	gameInfo.round = StrSave("-");
+	gameInfo.white = StrSave(first.tidy);
+	gameInfo.black = StrSave(UserName());
+	gameInfo.timeControl = TimeControlTagValue();
+	break;
+
+      case MachinePlaysBlack:
+	gameInfo.event = StrSave( appData.pgnEventHeader );
+	gameInfo.site = StrSave(HostName());
+	gameInfo.date = PGNDate();
+	gameInfo.round = StrSave("-");
+	gameInfo.white = StrSave(UserName());
+	gameInfo.black = StrSave(first.tidy);
+	gameInfo.timeControl = TimeControlTagValue();
+	break;
+
+      case TwoMachinesPlay:
+	gameInfo.event = StrSave( appData.pgnEventHeader );
+	gameInfo.site = StrSave(HostName());
+	gameInfo.date = PGNDate();
+	if (matchGame > 0) {
+	    char buf[MSG_SIZ];
+	    sprintf(buf, "%d", matchGame);
+	    gameInfo.round = StrSave(buf);
+	} else {
+	    gameInfo.round = StrSave("-");
+	}
+	if (first.twoMachinesColor[0] == 'w') {
+	    gameInfo.white = StrSave(first.tidy);
+	    gameInfo.black = StrSave(second.tidy);
+	} else {
+	    gameInfo.white = StrSave(second.tidy);
+	    gameInfo.black = StrSave(first.tidy);
+	}
+	gameInfo.timeControl = TimeControlTagValue();
+	break;
+
+      case EditGame:
+	gameInfo.event = StrSave("Edited game");
+	gameInfo.site = StrSave(HostName());
+	gameInfo.date = PGNDate();
+	gameInfo.round = StrSave("-");
+	gameInfo.white = StrSave("-");
+	gameInfo.black = StrSave("-");
+	break;
+
+      case EditPosition:
+	gameInfo.event = StrSave("Edited position");
+	gameInfo.site = StrSave(HostName());
+	gameInfo.date = PGNDate();
+	gameInfo.round = StrSave("-");
+	gameInfo.white = StrSave("-");
+	gameInfo.black = StrSave("-");
+	break;
+
+      case IcsPlayingWhite:
+      case IcsPlayingBlack:
+      case IcsObserving:
+      case IcsExamining:
+	break;
+
+      case PlayFromGameFile:
+	gameInfo.event = StrSave("Game from non-PGN file");
+	gameInfo.site = StrSave(HostName());
+	gameInfo.date = PGNDate();
+	gameInfo.round = StrSave("-");
+	gameInfo.white = StrSave("?");
+	gameInfo.black = StrSave("?");
+	break;
+
+      default:
+	break;
+    }
+}
+
+void
+ReplaceComment(index, text)
+     int index;
+     char *text;
+{
+    int len;
+
+    while (*text == '\n') text++;
+    len = strlen(text);
+    while (len > 0 && text[len - 1] == '\n') len--;
+
+    if (commentList[index] != NULL)
+      free(commentList[index]);
+
+    if (len == 0) {
+	commentList[index] = NULL;
+	return;
+    }
+    commentList[index] = (char *) malloc(len + 2);
+    strncpy(commentList[index], text, len);
+    commentList[index][len] = '\n';
+    commentList[index][len + 1] = NULLCHAR;
+}
+
+void
+CrushCRs(text)
+     char *text;
+{
+  char *p = text;
+  char *q = text;
+  char ch;
+
+  do {
+    ch = *p++;
+    if (ch == '\r') continue;
+    *q++ = ch;
+  } while (ch != '\0');
+}
+
+void
+AppendComment(index, text)
+     int index;
+     char *text;
+{
+    int oldlen, len;
+    char *old;
+
+    text = GetInfoFromComment( index, text ); /* [HGM] PV time: strip PV info from comment */
+
+    CrushCRs(text);
+    while (*text == '\n') text++;
+    len = strlen(text);
+    while (len > 0 && text[len - 1] == '\n') len--;
+
+    if (len == 0) return;
+
+    if (commentList[index] != NULL) {
+	old = commentList[index];
+	oldlen = strlen(old);
+	commentList[index] = (char *) malloc(oldlen + len + 2);
+	strcpy(commentList[index], old);
+	free(old);
+	strncpy(&commentList[index][oldlen], text, len);
+	commentList[index][oldlen + len] = '\n';
+	commentList[index][oldlen + len + 1] = NULLCHAR;
+    } else {
+	commentList[index] = (char *) malloc(len + 2);
+	strncpy(commentList[index], text, len);
+	commentList[index][len] = '\n';
+	commentList[index][len + 1] = NULLCHAR;
+    }
+}
+
+static char * FindStr( char * text, char * sub_text )
+{
+    char * result = strstr( text, sub_text );
+
+    if( result != NULL ) {
+        result += strlen( sub_text );
+    }
+
+    return result;
+}
+
+/* [AS] Try to extract PV info from PGN comment */
+/* [HGM] PV time: and then remove it, to prevent it appearing twice */
+char *GetInfoFromComment( int index, char * text )
+{
+    char * sep = text;
+
+    if( text != NULL && index > 0 ) {
+        int score = 0;
+        int depth = 0;
+        int time = -1, sec = 0, deci;
+        char * s_eval = FindStr( text, "[%eval " );
+        char * s_emt = FindStr( text, "[%emt " );
+
+        if( s_eval != NULL || s_emt != NULL ) {
+            /* New style */
+            char delim;
+
+            if( s_eval != NULL ) {
+                if( sscanf( s_eval, "%d,%d%c", &score, &depth, &delim ) != 3 ) {
+                    return text;
+                }
+
+                if( delim != ']' ) {
+                    return text;
+                }
+            }
+
+            if( s_emt != NULL ) {
+            }
+        }
+        else {
+            /* We expect something like: [+|-]nnn.nn/dd */
+            int score_lo = 0;
+
+            sep = strchr( text, '/' );
+            if( sep == NULL || sep < (text+4) ) {
+                return text;
+            }
+
+            time = -1; sec = -1; deci = -1;
+            if( sscanf( text, "%d.%d/%d %d:%d", &score, &score_lo, &depth, &time, &sec ) != 5 &&
+		sscanf( text, "%d.%d/%d %d.%d", &score, &score_lo, &depth, &time, &deci ) != 5 &&
+                sscanf( text, "%d.%d/%d %d", &score, &score_lo, &depth, &time ) != 4 &&
+                sscanf( text, "%d.%d/%d", &score, &score_lo, &depth ) != 3   ) {
+                return text;
+            }
+
+            if( score_lo < 0 || score_lo >= 100 ) {
+                return text;
+            }
+
+            if(sec >= 0) time = 600*time + 10*sec; else
+            if(deci >= 0) time = 10*time + deci; else time *= 10; // deci-sec
+
+            score = score >= 0 ? score*100 + score_lo : score*100 - score_lo;
+
+            /* [HGM] PV time: now locate end of PV info */
+            while( *++sep >= '0' && *sep <= '9'); // strip depth
+            if(time >= 0)
+            while( *++sep >= '0' && *sep <= '9'); // strip time
+            if(sec >= 0)
+            while( *++sep >= '0' && *sep <= '9'); // strip seconds
+            if(deci >= 0)
+            while( *++sep >= '0' && *sep <= '9'); // strip fractional seconds
+            while(*sep == ' ') sep++;
+        }
+
+        if( depth <= 0 ) {
+            return text;
+        }
+
+        if( time < 0 ) {
+            time = -1;
+        }
+
+        pvInfoList[index-1].depth = depth;
+        pvInfoList[index-1].score = score;
+        pvInfoList[index-1].time  = 10*time; // centi-sec
+    }
+    return sep;
+}
+
+void
+SendToProgram(message, cps)
+     char *message;
+     ChessProgramState *cps;
+{
+    int count, outCount, error;
+    char buf[MSG_SIZ];
+
+    if (cps->pr == NULL) return;
+    Attention(cps);
+    
+    if (appData.debugMode) {
+	TimeMark now;
+	GetTimeMark(&now);
+	fprintf(debugFP, "%ld >%-6s: %s", 
+		SubtractTimeMarks(&now, &programStartTime),
+		cps->which, message);
+    }
+    
+    count = strlen(message);
+    outCount = OutputToProcess(cps->pr, message, count, &error);
+    if (outCount < count && !exiting 
+                         && !endingGame) { /* [HGM] crash: to not hang GameEnds() writing to deceased engines */
+	sprintf(buf, _("Error writing to %s chess program"), cps->which);
+        if(gameInfo.resultDetails==NULL) { /* [HGM] crash: if game in progress, give reason for abort */
+            if(epStatus[forwardMostMove] <= EP_DRAWS) {
+                gameInfo.result = GameIsDrawn; /* [HGM] accept exit as draw claim */
+                sprintf(buf, "%s program exits in draw position (%s)", cps->which, cps->program);
+            } else {
+                gameInfo.result = cps->twoMachinesColor[0]=='w' ? BlackWins : WhiteWins;
+            }
+            gameInfo.resultDetails = buf;
+        }
+        DisplayFatalError(buf, error, 1);
+    }
+}
+
+void
+ReceiveFromProgram(isr, closure, message, count, error)
+     InputSourceRef isr;
+     VOIDSTAR closure;
+     char *message;
+     int count;
+     int error;
+{
+    char *end_str;
+    char buf[MSG_SIZ];
+    ChessProgramState *cps = (ChessProgramState *)closure;
+
+    if (isr != cps->isr) return; /* Killed intentionally */
+    if (count <= 0) {
+	if (count == 0) {
+	    sprintf(buf,
+		    _("Error: %s chess program (%s) exited unexpectedly"),
+		    cps->which, cps->program);
+        if(gameInfo.resultDetails==NULL) { /* [HGM] crash: if game in progress, give reason for abort */
+                if(epStatus[forwardMostMove] <= EP_DRAWS) {
+                    gameInfo.result = GameIsDrawn; /* [HGM] accept exit as draw claim */
+                    sprintf(buf, _("%s program exits in draw position (%s)"), cps->which, cps->program);
+                } else {
+                    gameInfo.result = cps->twoMachinesColor[0]=='w' ? BlackWins : WhiteWins;
+                }
+                gameInfo.resultDetails = buf;
+            }
+	    RemoveInputSource(cps->isr);
+	    DisplayFatalError(buf, 0, 1);
+	} else {
+	    sprintf(buf,
+		    _("Error reading from %s chess program (%s)"),
+		    cps->which, cps->program);
+	    RemoveInputSource(cps->isr);
+
+            /* [AS] Program is misbehaving badly... kill it */
+            if( count == -2 ) {
+                DestroyChildProcess( cps->pr, 9 );
+                cps->pr = NoProc;
+            }
+
+            DisplayFatalError(buf, error, 1);
+	}
+	return;
+    }
+    
+    if ((end_str = strchr(message, '\r')) != NULL)
+      *end_str = NULLCHAR;
+    if ((end_str = strchr(message, '\n')) != NULL)
+      *end_str = NULLCHAR;
+    
+    if (appData.debugMode) {
+	TimeMark now; int print = 1;
+	char *quote = ""; char c; int i;
+
+	if(appData.engineComments != 1) { /* [HGM] debug: decide if protocol-violating output is written */
+		char start = message[0];
+		if(start >='A' && start <= 'Z') start += 'a' - 'A'; // be tolerant to capitalizing
+		if(sscanf(message, "%d%c%d%d%d", &i, &c, &i, &i, &i) != 5 && 
+		   sscanf(message, "move %c", &c)!=1  && sscanf(message, "offer%c", &c)!=1 &&
+		   sscanf(message, "resign%c", &c)!=1 && sscanf(message, "feature %c", &c)!=1 &&
+		   sscanf(message, "error %c", &c)!=1 && sscanf(message, "illegal %c", &c)!=1 &&
+		   sscanf(message, "tell%c", &c)!=1   && sscanf(message, "0-1 %c", &c)!=1 &&
+		   sscanf(message, "1-0 %c", &c)!=1   && sscanf(message, "1/2-1/2 %c", &c)!=1 && start != '#')
+			{ quote = "# "; print = (appData.engineComments == 2); }
+		message[0] = start; // restore original message
+	}
+	if(print) {
+		GetTimeMark(&now);
+		fprintf(debugFP, "%ld <%-6s: %s%s\n", 
+			SubtractTimeMarks(&now, &programStartTime), cps->which, 
+			quote,
+			message);
+	}
+    }
+
+    /* [DM] if icsEngineAnalyze is active we block all whisper and kibitz output, because nobody want to see this */
+    if (appData.icsEngineAnalyze) {
+        if (strstr(message, "whisper") != NULL ||
+             strstr(message, "kibitz") != NULL || 
+            strstr(message, "tellics") != NULL) return;
+    }
+
+    HandleMachineMove(message, cps);
+}
+
+
+void
+SendTimeControl(cps, mps, tc, inc, sd, st)
+     ChessProgramState *cps;
+     int mps, inc, sd, st;
+     long tc;
+{
+    char buf[MSG_SIZ];
+    int seconds;
+
+    if( timeControl_2 > 0 ) {
+        if( (gameMode == MachinePlaysBlack) || (gameMode == TwoMachinesPlay && cps->twoMachinesColor[0] == 'b') ) {
+            tc = timeControl_2;
+        }
+    }
+    tc  /= cps->timeOdds; /* [HGM] time odds: apply before telling engine */
+    inc /= cps->timeOdds;
+    st  /= cps->timeOdds;
+
+    seconds = (tc / 1000) % 60; /* [HGM] displaced to after applying odds */
+
+    if (st > 0) {
+      /* Set exact time per move, normally using st command */
+      if (cps->stKludge) {
+	/* GNU Chess 4 has no st command; uses level in a nonstandard way */
+	seconds = st % 60;
+	if (seconds == 0) {
+	  sprintf(buf, "level 1 %d\n", st/60);
+	} else {
+	  sprintf(buf, "level 1 %d:%02d\n", st/60, seconds);
+	}
+      } else {
+	sprintf(buf, "st %d\n", st);
+      }
+    } else {
+      /* Set conventional or incremental time control, using level command */
+      if (seconds == 0) {
+	/* Note old gnuchess bug -- minutes:seconds used to not work.
+	   Fixed in later versions, but still avoid :seconds
+	   when seconds is 0. */
+	sprintf(buf, "level %d %ld %d\n", mps, tc/60000, inc/1000);
+      } else {
+	sprintf(buf, "level %d %ld:%02d %d\n", mps, tc/60000,
+		seconds, inc/1000);
+      }
+    }
+    SendToProgram(buf, cps);
+
+    /* Orthoganally (except for GNU Chess 4), limit time to st seconds */
+    /* Orthogonally, limit search to given depth */
+    if (sd > 0) {
+      if (cps->sdKludge) {
+	sprintf(buf, "depth\n%d\n", sd);
+      } else {
+	sprintf(buf, "sd %d\n", sd);
+      }
+      SendToProgram(buf, cps);
+    }
+
+    if(cps->nps > 0) { /* [HGM] nps */
+	if(cps->supportsNPS == FALSE) cps->nps = -1; // don't use if engine explicitly says not supported!
+	else {
+		sprintf(buf, "nps %d\n", cps->nps);
+	      SendToProgram(buf, cps);
+	}
+    }
+}
+
+ChessProgramState *WhitePlayer()
+/* [HGM] return pointer to 'first' or 'second', depending on who plays white */
+{
+    if(gameMode == TwoMachinesPlay && first.twoMachinesColor[0] == 'b' || 
+       gameMode == BeginningOfGame || gameMode == MachinePlaysBlack)
+        return &second;
+    return &first;
+}
+
+void
+SendTimeRemaining(cps, machineWhite)
+     ChessProgramState *cps;
+     int /*boolean*/ machineWhite;
+{
+    char message[MSG_SIZ];
+    long time, otime;
+
+    /* Note: this routine must be called when the clocks are stopped
+       or when they have *just* been set or switched; otherwise
+       it will be off by the time since the current tick started.
+    */
+    if (machineWhite) {
+	time = whiteTimeRemaining / 10;
+	otime = blackTimeRemaining / 10;
+    } else {
+	time = blackTimeRemaining / 10;
+	otime = whiteTimeRemaining / 10;
+    }
+    /* [HGM] translate opponent's time by time-odds factor */
+    otime = (otime * cps->other->timeOdds) / cps->timeOdds;
+    if (appData.debugMode) {
+        fprintf(debugFP, "time odds: %d %d \n", cps->timeOdds, cps->other->timeOdds);
+    }
+
+    if (time <= 0) time = 1;
+    if (otime <= 0) otime = 1;
+    
+    sprintf(message, "time %ld\n", time);
+    SendToProgram(message, cps);
+
+    sprintf(message, "otim %ld\n", otime);
+    SendToProgram(message, cps);
+}
+
+int
+BoolFeature(p, name, loc, cps)
+     char **p;
+     char *name;
+     int *loc;
+     ChessProgramState *cps;
+{
+  char buf[MSG_SIZ];
+  int len = strlen(name);
+  int val;
+  if (strncmp((*p), name, len) == 0 && (*p)[len] == '=') {
+    (*p) += len + 1;
+    sscanf(*p, "%d", &val);
+    *loc = (val != 0);
+    while (**p && **p != ' ') (*p)++;
+    sprintf(buf, "accepted %s\n", name);
+    SendToProgram(buf, cps);
+    return TRUE;
+  }
+  return FALSE;
+}
+
+int
+IntFeature(p, name, loc, cps)
+     char **p;
+     char *name;
+     int *loc;
+     ChessProgramState *cps;
+{
+  char buf[MSG_SIZ];
+  int len = strlen(name);
+  if (strncmp((*p), name, len) == 0 && (*p)[len] == '=') {
+    (*p) += len + 1;
+    sscanf(*p, "%d", loc);
+    while (**p && **p != ' ') (*p)++;
+    sprintf(buf, "accepted %s\n", name);
+    SendToProgram(buf, cps);
+    return TRUE;
+  }
+  return FALSE;
+}
+
+int
+StringFeature(p, name, loc, cps)
+     char **p;
+     char *name;
+     char loc[];
+     ChessProgramState *cps;
+{
+  char buf[MSG_SIZ];
+  int len = strlen(name);
+  if (strncmp((*p), name, len) == 0
+      && (*p)[len] == '=' && (*p)[len+1] == '\"') {
+    (*p) += len + 2;
+    sscanf(*p, "%[^\"]", loc);
+    while (**p && **p != '\"') (*p)++;
+    if (**p == '\"') (*p)++;
+    sprintf(buf, "accepted %s\n", name);
+    SendToProgram(buf, cps);
+    return TRUE;
+  }
+  return FALSE;
+}
+
+int 
+ParseOption(Option *opt, ChessProgramState *cps)
+// [HGM] options: process the string that defines an engine option, and determine
+// name, type, default value, and allowed value range
+{
+	char *p, *q, buf[MSG_SIZ];
+	int n, min = (-1)<<31, max = 1<<31, def;
+
+	if(p = strstr(opt->name, " -spin ")) {
+	    if((n = sscanf(p, " -spin %d %d %d", &def, &min, &max)) < 3 ) return FALSE;
+	    if(max < min) max = min; // enforce consistency
+	    if(def < min) def = min;
+	    if(def > max) def = max;
+	    opt->value = def;
+	    opt->min = min;
+	    opt->max = max;
+	    opt->type = Spin;
+	} else if(p = strstr(opt->name, " -string ")) {
+	    opt->textValue = p+9;
+	    opt->type = TextBox;
+	} else if(p = strstr(opt->name, " -check ")) {
+	    if(sscanf(p, " -check %d", &def) < 1) return FALSE;
+	    opt->value = (def != 0);
+	    opt->type = CheckBox;
+	} else if(p = strstr(opt->name, " -combo ")) {
+	    opt->textValue = (char*) (&cps->comboList[cps->comboCnt]); // cheat with pointer type
+	    cps->comboList[cps->comboCnt++] = q = p+8; // holds possible choices
+	    opt->value = n = 0;
+	    while(q = StrStr(q, " /// ")) {
+		n++; *q = 0;    // count choices, and null-terminate each of them
+		q += 5;
+		if(*q == '*') { // remember default, which is marked with * prefix
+		    q++;
+		    opt->value = n;
+		}
+		cps->comboList[cps->comboCnt++] = q;
+	    }
+	    cps->comboList[cps->comboCnt++] = NULL;
+	    opt->max = n + 1;
+	    opt->type = ComboBox;
+	} else if(p = strstr(opt->name, " -button")) {
+	    opt->type = Button;
+	} else if(p = strstr(opt->name, " -save")) {
+	    opt->type = SaveButton;
+	} else return FALSE;
+	*p = 0; // terminate option name
+	// now look if the command-line options define a setting for this engine option.
+	if(cps->optionSettings && cps->optionSettings[0])
+	    p = strstr(cps->optionSettings, opt->name); else p = NULL;
+	if(p && (p == cps->optionSettings || p[-1] == ',')) {
+		sprintf(buf, "option %s", p);
+		if(p = strstr(buf, ",")) *p = 0;
+		strcat(buf, "\n");
+		SendToProgram(buf, cps);
+	}
+	return TRUE;
+}
+
+void
+FeatureDone(cps, val)
+     ChessProgramState* cps;
+     int val;
+{
+  DelayedEventCallback cb = GetDelayedEvent();
+  if ((cb == InitBackEnd3 && cps == &first) ||
+      (cb == TwoMachinesEventIfReady && cps == &second)) {
+    CancelDelayedEvent();
+    ScheduleDelayedEvent(cb, val ? 1 : 3600000);
+  }
+  cps->initDone = val;
+}
+
+/* Parse feature command from engine */
+void
+ParseFeatures(args, cps)
+     char* args;
+     ChessProgramState *cps;  
+{
+  char *p = args;
+  char *q;
+  int val;
+  char buf[MSG_SIZ];
+
+  for (;;) {
+    while (*p == ' ') p++;
+    if (*p == NULLCHAR) return;
+
+    if (BoolFeature(&p, "setboard", &cps->useSetboard, cps)) continue;
+    if (BoolFeature(&p, "time", &cps->sendTime, cps)) continue;    
+    if (BoolFeature(&p, "draw", &cps->sendDrawOffers, cps)) continue;    
+    if (BoolFeature(&p, "sigint", &cps->useSigint, cps)) continue;    
+    if (BoolFeature(&p, "sigterm", &cps->useSigterm, cps)) continue;    
+    if (BoolFeature(&p, "reuse", &val, cps)) {
+      /* Engine can disable reuse, but can't enable it if user said no */
+      if (!val) cps->reuse = FALSE;
+      continue;
+    }
+    if (BoolFeature(&p, "analyze", &cps->analysisSupport, cps)) continue;
+    if (StringFeature(&p, "myname", &cps->tidy, cps)) {
+      if (gameMode == TwoMachinesPlay) {
+	DisplayTwoMachinesTitle();
+      } else {
+	DisplayTitle("");
+      }
+      continue;
+    }
+    if (StringFeature(&p, "variants", &cps->variants, cps)) continue;
+    if (BoolFeature(&p, "san", &cps->useSAN, cps)) continue;
+    if (BoolFeature(&p, "ping", &cps->usePing, cps)) continue;
+    if (BoolFeature(&p, "playother", &cps->usePlayother, cps)) continue;
+    if (BoolFeature(&p, "colors", &cps->useColors, cps)) continue;
+    if (BoolFeature(&p, "usermove", &cps->useUsermove, cps)) continue;
+    if (BoolFeature(&p, "ics", &cps->sendICS, cps)) continue;
+    if (BoolFeature(&p, "name", &cps->sendName, cps)) continue;
+    if (BoolFeature(&p, "pause", &val, cps)) continue; /* unused at present */
+    if (IntFeature(&p, "done", &val, cps)) {
+      FeatureDone(cps, val);
+      continue;
+    }
+    /* Added by Tord: */
+    if (BoolFeature(&p, "fen960", &cps->useFEN960, cps)) continue;
+    if (BoolFeature(&p, "oocastle", &cps->useOOCastle, cps)) continue;
+    /* End of additions by Tord */
+
+    /* [HGM] added features: */
+    if (BoolFeature(&p, "debug", &cps->debug, cps)) continue;
+    if (BoolFeature(&p, "nps", &cps->supportsNPS, cps)) continue;
+    if (IntFeature(&p, "level", &cps->maxNrOfSessions, cps)) continue;
+    if (BoolFeature(&p, "memory", &cps->memSize, cps)) continue;
+    if (BoolFeature(&p, "smp", &cps->maxCores, cps)) continue;
+    if (StringFeature(&p, "egt", &cps->egtFormats, cps)) continue;
+    if (StringFeature(&p, "option", &(cps->option[cps->nrOptions].name), cps)) {
+	ParseOption(&(cps->option[cps->nrOptions++]), cps); // [HGM] options: add option feature
+	if(cps->nrOptions >= MAX_OPTIONS) {
+	    cps->nrOptions--;
+	    sprintf(buf, "%s engine has too many options\n", cps->which);
+	    DisplayError(buf, 0);
+	}
+	continue;
+    }
+    if (BoolFeature(&p, "smp", &cps->maxCores, cps)) continue;
+    /* End of additions by HGM */
+
+    /* unknown feature: complain and skip */
+    q = p;
+    while (*q && *q != '=') q++;
+    sprintf(buf, "rejected %.*s\n", q-p, p);
+    SendToProgram(buf, cps);
+    p = q;
+    if (*p == '=') {
+      p++;
+      if (*p == '\"') {
+	p++;
+	while (*p && *p != '\"') p++;
+	if (*p == '\"') p++;
+      } else {
+	while (*p && *p != ' ') p++;
+      }
+    }
+  }
+
+}
+
+void
+PeriodicUpdatesEvent(newState)
+     int newState;
+{
+    if (newState == appData.periodicUpdates)
+      return;
+
+    appData.periodicUpdates=newState;
+
+    /* Display type changes, so update it now */
+    DisplayAnalysis();
+
+    /* Get the ball rolling again... */
+    if (newState) {
+	AnalysisPeriodicEvent(1);
+	StartAnalysisClock();
+    }
+}
+
+void
+PonderNextMoveEvent(newState)
+     int newState;
+{
+    if (newState == appData.ponderNextMove) return;
+    if (gameMode == EditPosition) EditPositionDone();
+    if (newState) {
+	SendToProgram("hard\n", &first);
+	if (gameMode == TwoMachinesPlay) {
+	    SendToProgram("hard\n", &second);
+	}
+    } else {
+	SendToProgram("easy\n", &first);
+	thinkOutput[0] = NULLCHAR;
+	if (gameMode == TwoMachinesPlay) {
+	    SendToProgram("easy\n", &second);
+	}
+    }
+    appData.ponderNextMove = newState;
+}
+
+void
+NewSettingEvent(option, command, value)
+     char *command;
+     int option, value;
+{
+    char buf[MSG_SIZ];
+
+    if (gameMode == EditPosition) EditPositionDone();
+    sprintf(buf, "%s%s %d\n", (option ? "option ": ""), command, value);
+    SendToProgram(buf, &first);
+    if (gameMode == TwoMachinesPlay) {
+	SendToProgram(buf, &second);
+    }
+}
+
+void
+ShowThinkingEvent()
+// [HGM] thinking: this routine is now also called from "Options -> Engine..." popup
+{
+    static int oldState = 2; // kludge alert! Neither true nor fals, so first time oldState is always updated
+    int newState = appData.showThinking
+	// [HGM] thinking: other features now need thinking output as well
+	|| !appData.hideThinkingFromHuman || appData.adjudicateLossThreshold != 0 || EngineOutputIsUp();
+    
+    if (oldState == newState) return;
+    oldState = newState;
+    if (gameMode == EditPosition) EditPositionDone();
+    if (oldState) {
+	SendToProgram("post\n", &first);
+	if (gameMode == TwoMachinesPlay) {
+	    SendToProgram("post\n", &second);
+	}
+    } else {
+	SendToProgram("nopost\n", &first);
+	thinkOutput[0] = NULLCHAR;
+	if (gameMode == TwoMachinesPlay) {
+	    SendToProgram("nopost\n", &second);
+	}
+    }
+//    appData.showThinking = newState; // [HGM] thinking: responsible option should already have be changed when calling this routine!
+}
+
+void
+AskQuestionEvent(title, question, replyPrefix, which)
+     char *title; char *question; char *replyPrefix; char *which;
+{
+  ProcRef pr = (which[0] == '1') ? first.pr : second.pr;
+  if (pr == NoProc) return;
+  AskQuestion(title, question, replyPrefix, pr);
+}
+
+void
+DisplayMove(moveNumber)
+     int moveNumber;
+{
+    char message[MSG_SIZ];
+    char res[MSG_SIZ];
+    char cpThinkOutput[MSG_SIZ];
+
+    if(appData.noGUI) return; // [HGM] fast: suppress display of moves
+    
+    if (moveNumber == forwardMostMove - 1 || 
+	gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
+
+	safeStrCpy(cpThinkOutput, thinkOutput, sizeof(cpThinkOutput));
+
+        if (strchr(cpThinkOutput, '\n')) {
+	    *strchr(cpThinkOutput, '\n') = NULLCHAR;
+        }
+    } else {
+	*cpThinkOutput = NULLCHAR;
+    }
+
+    /* [AS] Hide thinking from human user */
+    if( appData.hideThinkingFromHuman && gameMode != TwoMachinesPlay ) {
+        *cpThinkOutput = NULLCHAR;
+        if( thinkOutput[0] != NULLCHAR ) {
+            int i;
+
+            for( i=0; i<=hiddenThinkOutputState; i++ ) {
+                cpThinkOutput[i] = '.';
+            }
+            cpThinkOutput[i] = NULLCHAR;
+            hiddenThinkOutputState = (hiddenThinkOutputState + 1) % 3;
+        }
+    }
+
+    if (moveNumber == forwardMostMove - 1 &&
+	gameInfo.resultDetails != NULL) {
+	if (gameInfo.resultDetails[0] == NULLCHAR) {
+	    sprintf(res, " %s", PGNResult(gameInfo.result));
+	} else {
+	    sprintf(res, " {%s} %s",
+		    gameInfo.resultDetails, PGNResult(gameInfo.result));
+	}
+    } else {
+	res[0] = NULLCHAR;
+    }
+
+    if (moveNumber < 0 || parseList[moveNumber][0] == NULLCHAR) {
+	DisplayMessage(res, cpThinkOutput);
+    } else {
+	sprintf(message, "%d.%s%s%s", moveNumber / 2 + 1,
+		WhiteOnMove(moveNumber) ? " " : ".. ",
+		parseList[moveNumber], res);
+	DisplayMessage(message, cpThinkOutput);
+    }
+}
+
+void
+DisplayAnalysisText(text)
+     char *text;
+{
+    char buf[MSG_SIZ];
+
+    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile 
+               || appData.icsEngineAnalyze) {
+	sprintf(buf, "Analysis (%s)", first.tidy);
+	AnalysisPopUp(buf, text);
+    }
+}
+
+static int
+only_one_move(str)
+     char *str;
+{
+    while (*str && isspace(*str)) ++str;
+    while (*str && !isspace(*str)) ++str;
+    if (!*str) return 1;
+    while (*str && isspace(*str)) ++str;
+    if (!*str) return 1;
+    return 0;
+}
+
+void
+DisplayAnalysis()
+{
+    char buf[MSG_SIZ];
+    char lst[MSG_SIZ / 2];
+    double nps;
+    static char *xtra[] = { "", " (--)", " (++)" };
+    int h, m, s, cs;
+  
+    if (programStats.time == 0) {
+	programStats.time = 1;
+    }
+  
+    if (programStats.got_only_move) {
+	safeStrCpy(buf, programStats.movelist, sizeof(buf));
+    } else {
+        safeStrCpy( lst, programStats.movelist, sizeof(lst));
+
+        nps = (u64ToDouble(programStats.nodes) /
+             ((double)programStats.time /100.0));
+
+	cs = programStats.time % 100;
+	s = programStats.time / 100;
+	h = (s / (60*60));
+	s = s - h*60*60;
+	m = (s/60);
+	s = s - m*60;
+
+	if (programStats.moves_left > 0 && appData.periodicUpdates) {
+	  if (programStats.move_name[0] != NULLCHAR) {
+	    sprintf(buf, "depth=%d %d/%d(%s) %+.2f %s%s\nNodes: " u64Display " NPS: %d\nTime: %02d:%02d:%02d.%02d",
+		    programStats.depth,
+		    programStats.nr_moves-programStats.moves_left,
+		    programStats.nr_moves, programStats.move_name,
+		    ((float)programStats.score)/100.0, lst,
+		    only_one_move(lst)?
+		    xtra[programStats.got_fail] : "",
+		    (u64)programStats.nodes, (int)nps, h, m, s, cs);
+	  } else {
+	    sprintf(buf, "depth=%d %d/%d %+.2f %s%s\nNodes: " u64Display " NPS: %d\nTime: %02d:%02d:%02d.%02d",
+		    programStats.depth,
+		    programStats.nr_moves-programStats.moves_left,
+		    programStats.nr_moves, ((float)programStats.score)/100.0,
+		    lst,
+		    only_one_move(lst)?
+		    xtra[programStats.got_fail] : "",
+		    (u64)programStats.nodes, (int)nps, h, m, s, cs);
+	  }
+	} else {
+	    sprintf(buf, "depth=%d %+.2f %s%s\nNodes: " u64Display " NPS: %d\nTime: %02d:%02d:%02d.%02d",
+		    programStats.depth,
+		    ((float)programStats.score)/100.0,
+		    lst,
+		    only_one_move(lst)?
+		    xtra[programStats.got_fail] : "",
+		    (u64)programStats.nodes, (int)nps, h, m, s, cs);
+	}
+    }
+    DisplayAnalysisText(buf);
+}
+
+void
+DisplayComment(moveNumber, text)
+     int moveNumber;
+     char *text;
+{
+    char title[MSG_SIZ];
+    char buf[8000]; // comment can be long!
+    int score, depth;
+
+    if( appData.autoDisplayComment ) {
+        if (moveNumber < 0 || parseList[moveNumber][0] == NULLCHAR) {
+	    strcpy(title, "Comment");
+        } else {
+	    sprintf(title, "Comment on %d.%s%s", moveNumber / 2 + 1,
+		    WhiteOnMove(moveNumber) ? " " : ".. ",
+		    parseList[moveNumber]);
+        }
+    } else title[0] = 0;
+
+    // [HGM] PV info: display PV info together with (or as) comment
+    if(moveNumber >= 0 && (depth = pvInfoList[moveNumber].depth) > 0) {
+        if(text == NULL) text = "";                                           
+        score = pvInfoList[moveNumber].score;
+        sprintf(buf, "%s%.2f/%d %d\n%s", score>0 ? "+" : "", score/100.,
+                              depth, (pvInfoList[moveNumber].time+50)/100, text);
+        CommentPopUp(title, buf);
+    } else
+    if (text != NULL)
+        CommentPopUp(title, text);
+}
+
+/* This routine sends a ^C interrupt to gnuchess, to awaken it if it
+ * might be busy thinking or pondering.  It can be omitted if your
+ * gnuchess is configured to stop thinking immediately on any user
+ * input.  However, that gnuchess feature depends on the FIONREAD
+ * ioctl, which does not work properly on some flavors of Unix.
+ */
+void
+Attention(cps)
+     ChessProgramState *cps;
+{
+#if ATTENTION
+    if (!cps->useSigint) return;
+    if (appData.noChessProgram || (cps->pr == NoProc)) return;
+    switch (gameMode) {
+      case MachinePlaysWhite:
+      case MachinePlaysBlack:
+      case TwoMachinesPlay:
+      case IcsPlayingWhite:
+      case IcsPlayingBlack:
+      case AnalyzeMode:
+      case AnalyzeFile:
+	/* Skip if we know it isn't thinking */
+	if (!cps->maybeThinking) return;
+	if (appData.debugMode)
+	  fprintf(debugFP, "Interrupting %s\n", cps->which);
+	InterruptChildProcess(cps->pr);
+	cps->maybeThinking = FALSE;
+	break;
+      default:
+	break;
+    }
+#endif /*ATTENTION*/
+}
+
+int
+CheckFlags()
+{
+    if (whiteTimeRemaining <= 0) {
+	if (!whiteFlag) {
+	    whiteFlag = TRUE;
+	    if (appData.icsActive) {
+		if (appData.autoCallFlag &&
+		    gameMode == IcsPlayingBlack && !blackFlag) {
+		  SendToICS(ics_prefix);
+		  SendToICS("flag\n");
+		}
+	    } else {
+		if (blackFlag) {
+                    if(gameMode != TwoMachinesPlay) DisplayTitle(_("Both flags fell"));
+		} else {
+                    if(gameMode != TwoMachinesPlay) DisplayTitle(_("White's flag fell"));
+ 		    if (appData.autoCallFlag) {
+			GameEnds(BlackWins, "Black wins on time", GE_XBOARD);
+			return TRUE;
+		    }
+		}
+	    }
+	}
+    }
+    if (blackTimeRemaining <= 0) {
+	if (!blackFlag) {
+	    blackFlag = TRUE;
+	    if (appData.icsActive) {
+		if (appData.autoCallFlag &&
+		    gameMode == IcsPlayingWhite && !whiteFlag) {
+		  SendToICS(ics_prefix);
+		  SendToICS("flag\n");
+		}
+	    } else {
+		if (whiteFlag) {
+                    if(gameMode != TwoMachinesPlay) DisplayTitle(_("Both flags fell"));
+		} else {
+                    if(gameMode != TwoMachinesPlay) DisplayTitle(_("Black's flag fell"));
+		    if (appData.autoCallFlag) {
+			GameEnds(WhiteWins, "White wins on time", GE_XBOARD);
+			return TRUE;
+		    }
+		}
+	    }
+	}
+    }
+    return FALSE;
+}
+
+void
+CheckTimeControl()
+{
+    if (!appData.clockMode || appData.icsActive ||
+	gameMode == PlayFromGameFile || forwardMostMove == 0) return;
+
+    /*
+     * add time to clocks when time control is achieved ([HGM] now also used for increment)
+     */
+    if ( !WhiteOnMove(forwardMostMove) )
+	/* White made time control */
+        whiteTimeRemaining += GetTimeQuota((forwardMostMove-1)/2)
+        /* [HGM] time odds: correct new time quota for time odds! */
+                                            / WhitePlayer()->timeOdds;
+      else
+	/* Black made time control */
+        blackTimeRemaining += GetTimeQuota((forwardMostMove-1)/2)
+                                            / WhitePlayer()->other->timeOdds;
+}
+
+void
+DisplayBothClocks()
+{
+    int wom = gameMode == EditPosition ?
+      !blackPlaysFirst : WhiteOnMove(currentMove);
+    DisplayWhiteClock(whiteTimeRemaining, wom);
+    DisplayBlackClock(blackTimeRemaining, !wom);
+}
+
+
+/* Timekeeping seems to be a portability nightmare.  I think everyone
+   has ftime(), but I'm really not sure, so I'm including some ifdefs
+   to use other calls if you don't.  Clocks will be less accurate if
+   you have neither ftime nor gettimeofday.
+*/
+
+/* VS 2008 requires the #include outside of the function */
+#if !HAVE_GETTIMEOFDAY && HAVE_FTIME
+#include <sys/timeb.h>
+#endif
+
+/* Get the current time as a TimeMark */
+void
+GetTimeMark(tm)
+     TimeMark *tm;
+{
+#if HAVE_GETTIMEOFDAY
+
+    struct timeval timeVal;
+    struct timezone timeZone;
+
+    gettimeofday(&timeVal, &timeZone);
+    tm->sec = (long) timeVal.tv_sec; 
+    tm->ms = (int) (timeVal.tv_usec / 1000L);
+
+#else /*!HAVE_GETTIMEOFDAY*/
+#if HAVE_FTIME
+
+// include <sys/timeb.h> / moved to just above start of function
+    struct timeb timeB;
+
+    ftime(&timeB);
+    tm->sec = (long) timeB.time;
+    tm->ms = (int) timeB.millitm;
+
+#else /*!HAVE_FTIME && !HAVE_GETTIMEOFDAY*/
+    tm->sec = (long) time(NULL);
+    tm->ms = 0;
+#endif
+#endif
+}
+
+/* Return the difference in milliseconds between two
+   time marks.  We assume the difference will fit in a long!
+*/
+long
+SubtractTimeMarks(tm2, tm1)
+     TimeMark *tm2, *tm1;
+{
+    return 1000L*(tm2->sec - tm1->sec) +
+           (long) (tm2->ms - tm1->ms);
+}
+
+
+/*
+ * Code to manage the game clocks.
+ *
+ * In tournament play, black starts the clock and then white makes a move.
+ * We give the human user a slight advantage if he is playing white---the
+ * clocks don't run until he makes his first move, so it takes zero time.
+ * Also, we don't account for network lag, so we could get out of sync
+ * with GNU Chess's clock -- but then, referees are always right.  
+ */
+
+static TimeMark tickStartTM;
+static long intendedTickLength;
+
+long
+NextTickLength(timeRemaining)
+     long timeRemaining;
+{
+    long nominalTickLength, nextTickLength;
+
+    if (timeRemaining > 0L && timeRemaining <= 10000L)
+      nominalTickLength = 100L;
+    else
+      nominalTickLength = 1000L;
+    nextTickLength = timeRemaining % nominalTickLength;
+    if (nextTickLength <= 0) nextTickLength += nominalTickLength;
+
+    return nextTickLength;
+}
+
+/* Adjust clock one minute up or down */
+void
+AdjustClock(Boolean which, int dir)
+{
+    if(which) blackTimeRemaining += 60000*dir;
+    else      whiteTimeRemaining += 60000*dir;
+    DisplayBothClocks();
+}
+
+/* Stop clocks and reset to a fresh time control */
+void
+ResetClocks() 
+{
+    (void) StopClockTimer();
+    if (appData.icsActive) {
+	whiteTimeRemaining = blackTimeRemaining = 0;
+    } else { /* [HGM] correct new time quote for time odds */
+        whiteTimeRemaining = GetTimeQuota(-1) / WhitePlayer()->timeOdds;
+        blackTimeRemaining = GetTimeQuota(-1) / WhitePlayer()->other->timeOdds;
+    }
+    if (whiteFlag || blackFlag) {
+	DisplayTitle("");
+	whiteFlag = blackFlag = FALSE;
+    }
+    DisplayBothClocks();
+}
+
+#define FUDGE 25 /* 25ms = 1/40 sec; should be plenty even for 50 Hz clocks */
+
+/* Decrement running clock by amount of time that has passed */
+void
+DecrementClocks()
+{
+    long timeRemaining;
+    long lastTickLength, fudge;
+    TimeMark now;
+
+    if (!appData.clockMode) return;
+    if (gameMode==AnalyzeMode || gameMode == AnalyzeFile) return;
+	
+    GetTimeMark(&now);
+
+    lastTickLength = SubtractTimeMarks(&now, &tickStartTM);
+
+    /* Fudge if we woke up a little too soon */
+    fudge = intendedTickLength - lastTickLength;
+    if (fudge < 0 || fudge > FUDGE) fudge = 0;
+
+    if (WhiteOnMove(forwardMostMove)) {
+	if(whiteNPS >= 0) lastTickLength = 0;
+	timeRemaining = whiteTimeRemaining -= lastTickLength;
+	DisplayWhiteClock(whiteTimeRemaining - fudge,
+			  WhiteOnMove(currentMove));
+    } else {
+	if(blackNPS >= 0) lastTickLength = 0;
+	timeRemaining = blackTimeRemaining -= lastTickLength;
+	DisplayBlackClock(blackTimeRemaining - fudge,
+			  !WhiteOnMove(currentMove));
+    }
+
+    if (CheckFlags()) return;
+	
+    tickStartTM = now;
+    intendedTickLength = NextTickLength(timeRemaining - fudge) + fudge;
+    StartClockTimer(intendedTickLength);
+
+    /* if the time remaining has fallen below the alarm threshold, sound the
+     * alarm. if the alarm has sounded and (due to a takeback or time control
+     * with increment) the time remaining has increased to a level above the
+     * threshold, reset the alarm so it can sound again. 
+     */
+    
+    if (appData.icsActive && appData.icsAlarm) {
+
+	/* make sure we are dealing with the user's clock */
+	if (!( ((gameMode == IcsPlayingWhite) && WhiteOnMove(currentMove)) ||
+	       ((gameMode == IcsPlayingBlack) && !WhiteOnMove(currentMove))
+	   )) return;
+
+	if (alarmSounded && (timeRemaining > appData.icsAlarmTime)) {
+	    alarmSounded = FALSE;
+	} else if (!alarmSounded && (timeRemaining <= appData.icsAlarmTime)) { 
+	    PlayAlarmSound();
+	    alarmSounded = TRUE;
+	}
+    }
+}
+
+
+/* A player has just moved, so stop the previously running
+   clock and (if in clock mode) start the other one.
+   We redisplay both clocks in case we're in ICS mode, because
+   ICS gives us an update to both clocks after every move.
+   Note that this routine is called *after* forwardMostMove
+   is updated, so the last fractional tick must be subtracted
+   from the color that is *not* on move now.
+*/
+void
+SwitchClocks()
+{
+    long lastTickLength;
+    TimeMark now;
+    int flagged = FALSE;
+
+    GetTimeMark(&now);
+
+    if (StopClockTimer() && appData.clockMode) {
+	lastTickLength = SubtractTimeMarks(&now, &tickStartTM);
+	if (WhiteOnMove(forwardMostMove)) {
+	    if(blackNPS >= 0) lastTickLength = 0;
+	    blackTimeRemaining -= lastTickLength;
+           /* [HGM] PGNtime: save time for PGN file if engine did not give it */
+//         if(pvInfoList[forwardMostMove-1].time == -1)
+                 pvInfoList[forwardMostMove-1].time =               // use GUI time
+                      (timeRemaining[1][forwardMostMove-1] - blackTimeRemaining)/10;
+	} else {
+	   if(whiteNPS >= 0) lastTickLength = 0;
+	   whiteTimeRemaining -= lastTickLength;
+           /* [HGM] PGNtime: save time for PGN file if engine did not give it */
+//         if(pvInfoList[forwardMostMove-1].time == -1)
+                 pvInfoList[forwardMostMove-1].time = 
+                      (timeRemaining[0][forwardMostMove-1] - whiteTimeRemaining)/10;
+	}
+	flagged = CheckFlags();
+    }
+    CheckTimeControl();
+
+    if (flagged || !appData.clockMode) return;
+
+    switch (gameMode) {
+      case MachinePlaysBlack:
+      case MachinePlaysWhite:
+      case BeginningOfGame:
+	if (pausing) return;
+	break;
+
+      case EditGame:
+      case PlayFromGameFile:
+      case IcsExamining:
+	return;
+
+      default:
+	break;
+    }
+
+    tickStartTM = now;
+    intendedTickLength = NextTickLength(WhiteOnMove(forwardMostMove) ?
+      whiteTimeRemaining : blackTimeRemaining);
+    StartClockTimer(intendedTickLength);
+}
+	
+
+/* Stop both clocks */
+void
+StopClocks()
+{	
+    long lastTickLength;
+    TimeMark now;
+
+    if (!StopClockTimer()) return;
+    if (!appData.clockMode) return;
+
+    GetTimeMark(&now);
+
+    lastTickLength = SubtractTimeMarks(&now, &tickStartTM);
+    if (WhiteOnMove(forwardMostMove)) {
+	if(whiteNPS >= 0) lastTickLength = 0;
+	whiteTimeRemaining -= lastTickLength;
+	DisplayWhiteClock(whiteTimeRemaining, WhiteOnMove(currentMove));
+    } else {
+	if(blackNPS >= 0) lastTickLength = 0;
+	blackTimeRemaining -= lastTickLength;
+	DisplayBlackClock(blackTimeRemaining, !WhiteOnMove(currentMove));
+    }
+    CheckFlags();
+}
+	
+/* Start clock of player on move.  Time may have been reset, so
+   if clock is already running, stop and restart it. */
+void
+StartClocks()
+{
+    (void) StopClockTimer(); /* in case it was running already */
+    DisplayBothClocks();
+    if (CheckFlags()) return;
+
+    if (!appData.clockMode) return;
+    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) return;
+
+    GetTimeMark(&tickStartTM);
+    intendedTickLength = NextTickLength(WhiteOnMove(forwardMostMove) ?
+      whiteTimeRemaining : blackTimeRemaining);
+
+   /* [HGM] nps: figure out nps factors, by determining which engine plays white and/or black once and for all */
+    whiteNPS = blackNPS = -1; 
+    if(gameMode == MachinePlaysWhite || gameMode == TwoMachinesPlay && first.twoMachinesColor[0] == 'w'
+       || appData.zippyPlay && gameMode == IcsPlayingBlack) // first (perhaps only) engine has white
+	whiteNPS = first.nps;
+    if(gameMode == MachinePlaysBlack || gameMode == TwoMachinesPlay && first.twoMachinesColor[0] == 'b'
+       || appData.zippyPlay && gameMode == IcsPlayingWhite) // first (perhaps only) engine has black
+	blackNPS = first.nps;
+    if(gameMode == TwoMachinesPlay && first.twoMachinesColor[0] == 'b') // second only used in Two-Machines mode
+	whiteNPS = second.nps;
+    if(gameMode == TwoMachinesPlay && first.twoMachinesColor[0] == 'w')
+	blackNPS = second.nps;
+    if(appData.debugMode) fprintf(debugFP, "nps: w=%d, b=%d\n", whiteNPS, blackNPS);
+
+    StartClockTimer(intendedTickLength);
+}
+
+char *
+TimeString(ms)
+     long ms;
+{
+    long second, minute, hour, day;
+    char *sign = "";
+    static char buf[32];
+    
+    if (ms > 0 && ms <= 9900) {
+      /* convert milliseconds to tenths, rounding up */
+      double tenths = floor( ((double)(ms + 99L)) / 100.00 );
+
+      sprintf(buf, " %03.1f ", tenths/10.0);
+      return buf;
+    }
+
+    /* convert milliseconds to seconds, rounding up */
+    /* use floating point to avoid strangeness of integer division
+       with negative dividends on many machines */
+    second = (long) floor(((double) (ms + 999L)) / 1000.0);
+
+    if (second < 0) {
+	sign = "-";
+	second = -second;
+    }
+    
+    day = second / (60 * 60 * 24);
+    second = second % (60 * 60 * 24);
+    hour = second / (60 * 60);
+    second = second % (60 * 60);
+    minute = second / 60;
+    second = second % 60;
+    
+    if (day > 0)
+      sprintf(buf, " %s%ld:%02ld:%02ld:%02ld ",
+	      sign, day, hour, minute, second);
+    else if (hour > 0)
+      sprintf(buf, " %s%ld:%02ld:%02ld ", sign, hour, minute, second);
+    else
+      sprintf(buf, " %s%2ld:%02ld ", sign, minute, second);
+    
+    return buf;
+}
+
+
+/*
+ * This is necessary because some C libraries aren't ANSI C compliant yet.
+ */
+char *
+StrStr(string, match)
+     char *string, *match;
+{
+    int i, length;
+    
+    length = strlen(match);
+    
+    for (i = strlen(string) - length; i >= 0; i--, string++)
+      if (!strncmp(match, string, length))
+	return string;
+    
+    return NULL;
+}
+
+char *
+StrCaseStr(string, match)
+     char *string, *match;
+{
+    int i, j, length;
+    
+    length = strlen(match);
+    
+    for (i = strlen(string) - length; i >= 0; i--, string++) {
+	for (j = 0; j < length; j++) {
+	    if (ToLower(match[j]) != ToLower(string[j]))
+	      break;
+	}
+	if (j == length) return string;
+    }
+
+    return NULL;
+}
+
+#ifndef _amigados
+int
+StrCaseCmp(s1, s2)
+     char *s1, *s2;
+{
+    char c1, c2;
+    
+    for (;;) {
+	c1 = ToLower(*s1++);
+	c2 = ToLower(*s2++);
+	if (c1 > c2) return 1;
+	if (c1 < c2) return -1;
+	if (c1 == NULLCHAR) return 0;
+    }
+}
+
+
+int
+ToLower(c)
+     int c;
+{
+    return isupper(c) ? tolower(c) : c;
+}
+
+
+int
+ToUpper(c)
+     int c;
+{
+    return islower(c) ? toupper(c) : c;
+}
+#endif /* !_amigados	*/
+
+char *
+StrSave(s)
+     char *s;
+{
+    char *ret;
+
+    if ((ret = (char *) malloc(strlen(s) + 1))) {
+	strcpy(ret, s);
+    }
+    return ret;
+}
+
+char *
+StrSavePtr(s, savePtr)
+     char *s, **savePtr;
+{
+    if (*savePtr) {
+	free(*savePtr);
+    }
+    if ((*savePtr = (char *) malloc(strlen(s) + 1))) {
+	strcpy(*savePtr, s);
+    }
+    return(*savePtr);
+}
+
+char *
+PGNDate()
+{
+    time_t clock;
+    struct tm *tm;
+    char buf[MSG_SIZ];
+
+    clock = time((time_t *)NULL);
+    tm = localtime(&clock);
+    sprintf(buf, "%04d.%02d.%02d",
+	    tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
+    return StrSave(buf);
+}
+
+
+char *
+PositionToFEN(move, overrideCastling)
+     int move;
+     char *overrideCastling;
+{
+    int i, j, fromX, fromY, toX, toY;
+    int whiteToPlay;
+    char buf[128];
+    char *p, *q;
+    int emptycount;
+    ChessSquare piece;
+
+    whiteToPlay = (gameMode == EditPosition) ?
+      !blackPlaysFirst : (move % 2 == 0);
+    p = buf;
+
+    /* Piece placement data */
+    for (i = BOARD_HEIGHT - 1; i >= 0; i--) {
+	emptycount = 0;
+        for (j = BOARD_LEFT; j < BOARD_RGHT; j++) {
+	    if (boards[move][i][j] == EmptySquare) {
+		emptycount++;
+            } else { ChessSquare piece = boards[move][i][j];
+		if (emptycount > 0) {
+                    if(emptycount<10) /* [HGM] can be >= 10 */
+                        *p++ = '0' + emptycount;
+                    else { *p++ = '0' + emptycount/10; *p++ = '0' + emptycount%10; }
+		    emptycount = 0;
+		}
+                if(PieceToChar(piece) == '+') {
+                    /* [HGM] write promoted pieces as '+<unpromoted>' (Shogi) */
+                    *p++ = '+';
+                    piece = (ChessSquare)(DEMOTED piece);
+                } 
+                *p++ = PieceToChar(piece);
+                if(p[-1] == '~') {
+                    /* [HGM] flag promoted pieces as '<promoted>~' (Crazyhouse) */
+                    p[-1] = PieceToChar((ChessSquare)(DEMOTED piece));
+                    *p++ = '~';
+                }
+	    }
+	}
+	if (emptycount > 0) {
+            if(emptycount<10) /* [HGM] can be >= 10 */
+                *p++ = '0' + emptycount;
+            else { *p++ = '0' + emptycount/10; *p++ = '0' + emptycount%10; }
+	    emptycount = 0;
+	}
+	*p++ = '/';
+    }
+    *(p - 1) = ' ';
+
+    /* [HGM] print Crazyhouse or Shogi holdings */
+    if( gameInfo.holdingsWidth ) {
+        *(p-1) = '['; /* if we wanted to support BFEN, this could be '/' */
+        q = p;
+        for(i=0; i<gameInfo.holdingsSize; i++) { /* white holdings */
+            piece = boards[move][i][BOARD_WIDTH-1];
+            if( piece != EmptySquare )
+              for(j=0; j<(int) boards[move][i][BOARD_WIDTH-2]; j++)
+                  *p++ = PieceToChar(piece);
+        }
+        for(i=0; i<gameInfo.holdingsSize; i++) { /* black holdings */
+            piece = boards[move][BOARD_HEIGHT-i-1][0];
+            if( piece != EmptySquare )
+              for(j=0; j<(int) boards[move][BOARD_HEIGHT-i-1][1]; j++)
+                  *p++ = PieceToChar(piece);
+        }
+
+        if( q == p ) *p++ = '-';
+        *p++ = ']';
+        *p++ = ' ';
+    }
+
+    /* Active color */
+    *p++ = whiteToPlay ? 'w' : 'b';
+    *p++ = ' ';
+
+  if(q = overrideCastling) { // [HGM] FRC: override castling & e.p fields for non-compliant engines
+    while(*p++ = *q++); if(q != overrideCastling+1) p[-1] = ' ';
+  } else {
+  if(nrCastlingRights) {
+     q = p;
+     if(gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom) {
+       /* [HGM] write directly from rights */
+           if(castlingRights[move][2] >= 0 &&
+              castlingRights[move][0] >= 0   )
+                *p++ = castlingRights[move][0] + AAA + 'A' - 'a';
+           if(castlingRights[move][2] >= 0 &&
+              castlingRights[move][1] >= 0   )
+                *p++ = castlingRights[move][1] + AAA + 'A' - 'a';
+           if(castlingRights[move][5] >= 0 &&
+              castlingRights[move][3] >= 0   )
+                *p++ = castlingRights[move][3] + AAA;
+           if(castlingRights[move][5] >= 0 &&
+              castlingRights[move][4] >= 0   )
+                *p++ = castlingRights[move][4] + AAA;
+     } else {
+
+        /* [HGM] write true castling rights */
+        if( nrCastlingRights == 6 ) {
+            if(castlingRights[move][0] == BOARD_RGHT-1 &&
+               castlingRights[move][2] >= 0  ) *p++ = 'K';
+            if(castlingRights[move][1] == BOARD_LEFT &&
+               castlingRights[move][2] >= 0  ) *p++ = 'Q';
+            if(castlingRights[move][3] == BOARD_RGHT-1 &&
+               castlingRights[move][5] >= 0  ) *p++ = 'k';
+            if(castlingRights[move][4] == BOARD_LEFT &&
+               castlingRights[move][5] >= 0  ) *p++ = 'q';
+        }
+     }
+     if (q == p) *p++ = '-'; /* No castling rights */
+     *p++ = ' ';
+  }
+
+  if(gameInfo.variant != VariantShogi    && gameInfo.variant != VariantXiangqi &&
+     gameInfo.variant != VariantShatranj && gameInfo.variant != VariantCourier ) { 
+    /* En passant target square */
+    if (move > backwardMostMove) {
+        fromX = moveList[move - 1][0] - AAA;
+        fromY = moveList[move - 1][1] - ONE;
+        toX = moveList[move - 1][2] - AAA;
+        toY = moveList[move - 1][3] - ONE;
+	if (fromY == (whiteToPlay ? BOARD_HEIGHT-2 : 1) &&
+	    toY == (whiteToPlay ? BOARD_HEIGHT-4 : 3) &&
+	    boards[move][toY][toX] == (whiteToPlay ? BlackPawn : WhitePawn) &&
+	    fromX == toX) {
+	    /* 2-square pawn move just happened */
+            *p++ = toX + AAA;
+	    *p++ = whiteToPlay ? '6'+BOARD_HEIGHT-8 : '3';
+	} else {
+	    *p++ = '-';
+	}
+    } else {
+	*p++ = '-';
+    }
+    *p++ = ' ';
+  }
+  }
+
+    /* [HGM] find reversible plies */
+    {   int i = 0, j=move;
+
+        if (appData.debugMode) { int k;
+            fprintf(debugFP, "write FEN 50-move: %d %d %d\n", initialRulePlies, forwardMostMove, backwardMostMove);
+            for(k=backwardMostMove; k<=forwardMostMove; k++)
+                fprintf(debugFP, "e%d. p=%d\n", k, epStatus[k]);
+
+        }
+
+        while(j > backwardMostMove && epStatus[j] <= EP_NONE) j--,i++;
+        if( j == backwardMostMove ) i += initialRulePlies;
+        sprintf(p, "%d ", i);
+        p += i>=100 ? 4 : i >= 10 ? 3 : 2;
+    }
+    /* Fullmove number */
+    sprintf(p, "%d", (move / 2) + 1);
+    
+    return StrSave(buf);
+}
+
+Boolean
+ParseFEN(board, blackPlaysFirst, fen)
+    Board board;
+     int *blackPlaysFirst;
+     char *fen;
+{
+    int i, j;
+    char *p;
+    int emptycount;
+    ChessSquare piece;
+
+    p = fen;
+
+    /* [HGM] by default clear Crazyhouse holdings, if present */
+    if(gameInfo.holdingsWidth) {
+       for(i=0; i<BOARD_HEIGHT; i++) {
+           board[i][0]             = EmptySquare; /* black holdings */
+           board[i][BOARD_WIDTH-1] = EmptySquare; /* white holdings */
+           board[i][1]             = (ChessSquare) 0; /* black counts */
+           board[i][BOARD_WIDTH-2] = (ChessSquare) 0; /* white counts */
+       }
+    }
+
+    /* Piece placement data */
+    for (i = BOARD_HEIGHT - 1; i >= 0; i--) {
+	j = 0;
+	for (;;) {
+            if (*p == '/' || *p == ' ' || (*p == '[' && i == 0) ) {
+                if (*p == '/') p++;
+                emptycount = gameInfo.boardWidth - j;
+                while (emptycount--)
+                        board[i][(j++)+gameInfo.holdingsWidth] = EmptySquare;
+		break;
+#if(BOARD_SIZE >= 10)
+            } else if(*p=='x' || *p=='X') { /* [HGM] X means 10 */
+                p++; emptycount=10;
+                if (j + emptycount > gameInfo.boardWidth) return FALSE;
+                while (emptycount--)
+                        board[i][(j++)+gameInfo.holdingsWidth] = EmptySquare;
+#endif
+            } else if (isdigit(*p)) {
+		emptycount = *p++ - '0';
+                while(isdigit(*p)) emptycount = 10*emptycount + *p++ - '0'; /* [HGM] allow > 9 */
+                if (j + emptycount > gameInfo.boardWidth) return FALSE;
+                while (emptycount--)
+                        board[i][(j++)+gameInfo.holdingsWidth] = EmptySquare;
+            } else if (*p == '+' || isalpha(*p)) {
+                if (j >= gameInfo.boardWidth) return FALSE;
+                if(*p=='+') {
+                    piece = CharToPiece(*++p);
+                    if(piece == EmptySquare) return FALSE; /* unknown piece */
+                    piece = (ChessSquare) (PROMOTED piece ); p++;
+                    if(PieceToChar(piece) != '+') return FALSE; /* unpromotable piece */
+                } else piece = CharToPiece(*p++);
+
+                if(piece==EmptySquare) return FALSE; /* unknown piece */
+                if(*p == '~') { /* [HGM] make it a promoted piece for Crazyhouse */
+                    piece = (ChessSquare) (PROMOTED piece);
+                    if(PieceToChar(piece) != '~') return FALSE; /* cannot be a promoted piece */
+                    p++;
+                }
+                board[i][(j++)+gameInfo.holdingsWidth] = piece;
+	    } else {
+		return FALSE;
+	    }
+	}
+    }
+    while (*p == '/' || *p == ' ') p++;
+
+    /* [HGM] look for Crazyhouse holdings here */
+    while(*p==' ') p++;
+    if( gameInfo.holdingsWidth && p[-1] == '/' || *p == '[') {
+        if(*p == '[') p++;
+        if(*p == '-' ) *p++; /* empty holdings */ else {
+            if( !gameInfo.holdingsWidth ) return FALSE; /* no room to put holdings! */
+            /* if we would allow FEN reading to set board size, we would   */
+            /* have to add holdings and shift the board read so far here   */
+            while( (piece = CharToPiece(*p) ) != EmptySquare ) {
+                *p++;
+                if((int) piece >= (int) BlackPawn ) {
+                    i = (int)piece - (int)BlackPawn;
+		    i = PieceToNumber((ChessSquare)i);
+                    if( i >= gameInfo.holdingsSize ) return FALSE;
+                    board[BOARD_HEIGHT-1-i][0] = piece; /* black holdings */
+                    board[BOARD_HEIGHT-1-i][1]++;       /* black counts   */
+                } else {
+                    i = (int)piece - (int)WhitePawn;
+		    i = PieceToNumber((ChessSquare)i);
+                    if( i >= gameInfo.holdingsSize ) return FALSE;
+                    board[i][BOARD_WIDTH-1] = piece;    /* white holdings */
+                    board[i][BOARD_WIDTH-2]++;          /* black holdings */
+                }
+            }
+        }
+        if(*p == ']') *p++;
+    }
+
+    while(*p == ' ') p++;
+
+    /* Active color */
+    switch (*p++) {
+      case 'w':
+        *blackPlaysFirst = FALSE;
+	break;
+      case 'b': 
+	*blackPlaysFirst = TRUE;
+	break;
+      default:
+	return FALSE;
+    }
+
+    /* [HGM] We NO LONGER ignore the rest of the FEN notation */
+    /* return the extra info in global variiables             */
+
+    /* set defaults in case FEN is incomplete */
+    FENepStatus = EP_UNKNOWN;
+    for(i=0; i<nrCastlingRights; i++ ) {
+        FENcastlingRights[i] =
+            gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom ? -1 : initialRights[i];
+    }   /* assume possible unless obviously impossible */
+    if(initialRights[0]>=0 && board[castlingRank[0]][initialRights[0]] != WhiteRook) FENcastlingRights[0] = -1;
+    if(initialRights[1]>=0 && board[castlingRank[1]][initialRights[1]] != WhiteRook) FENcastlingRights[1] = -1;
+    if(initialRights[2]>=0 && board[castlingRank[2]][initialRights[2]] != WhiteKing) FENcastlingRights[2] = -1;
+    if(initialRights[3]>=0 && board[castlingRank[3]][initialRights[3]] != BlackRook) FENcastlingRights[3] = -1;
+    if(initialRights[4]>=0 && board[castlingRank[4]][initialRights[4]] != BlackRook) FENcastlingRights[4] = -1;
+    if(initialRights[5]>=0 && board[castlingRank[5]][initialRights[5]] != BlackKing) FENcastlingRights[5] = -1;
+    FENrulePlies = 0;
+
+    while(*p==' ') p++;
+    if(nrCastlingRights) {
+      if(*p=='K' || *p=='Q' || *p=='k' || *p=='q' || *p=='-') {
+          /* castling indicator present, so default becomes no castlings */
+          for(i=0; i<nrCastlingRights; i++ ) {
+                 FENcastlingRights[i] = -1;
+          }
+      }
+      while(*p=='K' || *p=='Q' || *p=='k' || *p=='q' || *p=='-' ||
+             (gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom) &&
+             ( *p >= 'a' && *p < 'a' + gameInfo.boardWidth) ||
+             ( *p >= 'A' && *p < 'A' + gameInfo.boardWidth)   ) {
+        char c = *p++; int whiteKingFile=-1, blackKingFile=-1;
+
+        for(i=BOARD_LEFT; i<BOARD_RGHT; i++) {
+            if(board[BOARD_HEIGHT-1][i] == BlackKing) blackKingFile = i;
+            if(board[0             ][i] == WhiteKing) whiteKingFile = i;
+        }
+        switch(c) {
+          case'K':
+              for(i=BOARD_RGHT-1; board[0][i]!=WhiteRook && i>whiteKingFile; i--);
+              FENcastlingRights[0] = i != whiteKingFile ? i : -1;
+              FENcastlingRights[2] = whiteKingFile;
+              break;
+          case'Q':
+              for(i=BOARD_LEFT; board[0][i]!=WhiteRook && i<whiteKingFile; i++);
+              FENcastlingRights[1] = i != whiteKingFile ? i : -1;
+              FENcastlingRights[2] = whiteKingFile;
+              break;
+          case'k':
+              for(i=BOARD_RGHT-1; board[BOARD_HEIGHT-1][i]!=BlackRook && i>blackKingFile; i--);
+              FENcastlingRights[3] = i != blackKingFile ? i : -1;
+              FENcastlingRights[5] = blackKingFile;
+              break;
+          case'q':
+              for(i=BOARD_LEFT; board[BOARD_HEIGHT-1][i]!=BlackRook && i<blackKingFile; i++);
+              FENcastlingRights[4] = i != blackKingFile ? i : -1;
+              FENcastlingRights[5] = blackKingFile;
+          case '-':
+              break;
+          default: /* FRC castlings */
+              if(c >= 'a') { /* black rights */
+                  for(i=BOARD_LEFT; i<BOARD_RGHT; i++)
+                    if(board[BOARD_HEIGHT-1][i] == BlackKing) break;
+                  if(i == BOARD_RGHT) break;
+                  FENcastlingRights[5] = i;
+                  c -= AAA;
+                  if(board[BOARD_HEIGHT-1][c] <  BlackPawn ||
+                     board[BOARD_HEIGHT-1][c] >= BlackKing   ) break;
+                  if(c > i)
+                      FENcastlingRights[3] = c;
+                  else
+                      FENcastlingRights[4] = c;
+              } else { /* white rights */
+                  for(i=BOARD_LEFT; i<BOARD_RGHT; i++)
+                    if(board[0][i] == WhiteKing) break;
+                  if(i == BOARD_RGHT) break;
+                  FENcastlingRights[2] = i;
+                  c -= AAA - 'a' + 'A';
+                  if(board[0][c] >= WhiteKing) break;
+                  if(c > i)
+                      FENcastlingRights[0] = c;
+                  else
+                      FENcastlingRights[1] = c;
+              }
+        }
+      }
+    if (appData.debugMode) {
+        fprintf(debugFP, "FEN castling rights:");
+        for(i=0; i<nrCastlingRights; i++)
+        fprintf(debugFP, " %d", FENcastlingRights[i]);
+        fprintf(debugFP, "\n");
+    }
+
+      while(*p==' ') p++;
+    }
+
+    /* read e.p. field in games that know e.p. capture */
+    if(gameInfo.variant != VariantShogi    && gameInfo.variant != VariantXiangqi &&
+       gameInfo.variant != VariantShatranj && gameInfo.variant != VariantCourier ) { 
+      if(*p=='-') {
+        p++; FENepStatus = EP_NONE;
+      } else {
+         char c = *p++ - AAA;
+
+         if(c < BOARD_LEFT || c >= BOARD_RGHT) return TRUE;
+         if(*p >= '0' && *p <='9') *p++;
+         FENepStatus = c;
+      }
+    }
+
+
+    if(sscanf(p, "%d", &i) == 1) {
+        FENrulePlies = i; /* 50-move ply counter */
+        /* (The move number is still ignored)    */
+    }
+
+    return TRUE;
+}
+      
+void
+EditPositionPasteFEN(char *fen)
+{
+  if (fen != NULL) {
+    Board initial_position;
+
+    if (!ParseFEN(initial_position, &blackPlaysFirst, fen)) {
+      DisplayError(_("Bad FEN position in clipboard"), 0);
+      return ;
+    } else {
+      int savedBlackPlaysFirst = blackPlaysFirst;
+      EditPositionEvent();
+      blackPlaysFirst = savedBlackPlaysFirst;
+      CopyBoard(boards[0], initial_position);
+          /* [HGM] copy FEN attributes as well */
+          {   int i;
+              initialRulePlies = FENrulePlies;
+              epStatus[0] = FENepStatus;
+              for( i=0; i<nrCastlingRights; i++ )
+                  castlingRights[0][i] = FENcastlingRights[i];
+          }
+      EditPositionDone();
+      DisplayBothClocks();
+      DrawPosition(FALSE, boards[currentMove]);
+    }
+  }
+}
diff --git a/backend.h b/backend.h
index dff919c..b52ea06 100644
--- a/backend.h
+++ b/backend.h
@@ -1,243 +1,368 @@
-/*
- * backend.h -- Interface exported by XBoard back end
- * $Id: backend.h,v 2.1 2003/10/27 19:21:00 mann Exp $
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 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 XBoard distributed
- * by the Free Software Foundation:
- * ------------------------------------------------------------------------
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
-#ifndef _BACKEND
-#define _BACKEND
-
-#include "lists.h"
-#include "frontend.h"
-
-extern int gotPremove;
-extern GameMode gameMode;
-extern int pausing, cmailMsgLoaded, flipView;
-extern char white_holding[], black_holding[];
-extern int currentMove, backwardMostMove, forwardMostMove;
-extern int blackPlaysFirst;
-extern FILE *debugFP;
-extern char* programVersion;
-extern ProcRef firstProgramPR, secondProgramPR;
-extern Board boards[];
-
-char *CmailMsg P((void));
-char *PositionToFEN P((int move));
-void EditPositionPasteFEN P((char *fen));
-void TimeDelay P((long ms));
-void SendMultiLineToICS P(( char *text ));
-void AnalysisPeriodicEvent P((int force));
-void SetWhiteToPlayEvent P((void));
-void SetBlackToPlayEvent P((void));
-void InitBackEnd1 P((void));
-void InitBackEnd2 P((void));
-int IsPromotion P((int fromX, int fromY, int toX, int toY));
-int PieceForSquare P((int x, int y));
-int OKToStartUserMove P((int x, int y));
-void Reset P((int redraw, int init));
-void ResetGameEvent P((void));
-int LoadGame P((FILE *f, int n, char *title, int useList));
-int LoadGameFromFile P((char *filename, int n, char *title, int useList));
-int CmailLoadGame P((FILE *f, int n, char *title, int useList));
-int ReloadGame P((int offset));
-int SaveGame P((FILE *f, int dummy, char *dummy2));
-int SaveGameToFile P((char *filename, int append));
-int LoadPosition P((FILE *f, int n, char *title));
-int ReloadPosition P((int offset));
-int SavePosition P((FILE *f, int dummy, char *dummy2));
-void EditPositionEvent P((void));
-void FlipViewEvent P((void));
-void MachineWhiteEvent P((void));
-void MachineBlackEvent P((void));
-void TwoMachinesEvent P((void));
-void EditGameEvent P((void));
-void TrainingEvent P((void));
-void IcsClientEvent P((void));
-void ForwardEvent P((void));
-void BackwardEvent P((void));
-void ToEndEvent P((void));
-void ToStartEvent P((void));
-void ToNrEvent P((int to));
-void RevertEvent P((void));
-void RetractMoveEvent P((void));
-void MoveNowEvent P((void));
-void TruncateGameEvent P((void));
-void PauseEvent P((void));
-void CallFlagEvent P((void));
-void AcceptEvent P((void));
-void DeclineEvent P((void));
-void RematchEvent P((void));
-void DrawEvent P((void));
-void AbortEvent P((void));
-void AdjournEvent P((void));
-void ResignEvent P((void));
-void StopObservingEvent P((void));
-void StopExaminingEvent P((void));
-void PonderNextMoveEvent P((int newState));
-void ShowThinkingEvent P((int newState));
-void PeriodicUpdatesEvent P((int newState));
-void HintEvent P((void));
-void BookEvent P((void));
-void AboutGameEvent P((void));
-void ExitEvent P((int status));
-char *DefaultFileName P((char *));
-void UserMoveEvent P((int fromX, int fromY, int toX, int toY, int promoChar));
-void DecrementClocks P((void));
-char *TimeString P((long millisec));
-void AutoPlayGameLoop P((void));
-void DisplayBothClocks P((void));
-void EditPositionMenuEvent P((ChessSquare selection, int x, int y));
-void DropMenuEvent P((ChessSquare selection, int x, int y));
-int ParseTimeControl P((char *tc, int ti, int mps));
-void ProcessICSInitScript P((FILE * f));
-void EditCommentEvent P((void));
-void ReplaceComment P((int index, char *text));
-int ReplaceTags P((char *tags, GameInfo *gi));/* returns nonzero on error */
-void AppendComment P((int index, char *text));
-void ReloadCmailMsgEvent P((int unregister));
-void MailMoveEvent P((void));
-void EditTagsEvent P((void));
-void GetMoveListEvent P((void));
-void ExitAnalyzeMode P((void));
-void AnalyzeModeEvent P((void));
-void AnalyzeFileEvent P((void));
-void DoEcho P((void));
-void DontEcho P((void));
-void TidyProgramName P((char *prog, char *host, char *buf));
-void AskQuestionEvent P((char *title, char *question,
-			 char *replyPrefix, char *which));
-Boolean ParseOneMove P((char *move, int moveNum,
-			ChessMove *moveType, int *fromX, int *fromY,
-			int *toX, int *toY, char *promoChar));
-char *VariantName P((VariantClass v));
-VariantClass StringToVariant P((char *e));
-
-char *StrStr P((char *string, char *match));
-char *StrCaseStr P((char *string, char *match));
-char *StrSave P((char *s));
-char *StrSavePtr P((char *s, char **savePtr));
-
-#ifndef _amigados
-int StrCaseCmp P((char *s1, char *s2));
-int ToLower P((int c));
-int ToUpper P((int c));
-#else
-#define StrCaseCmp Stricmp  /*  Use utility.library functions   */
-#include <proto/utility.h>
-#endif
-
-extern GameInfo gameInfo;
-
-
-/* pgntags.c prototypes
- */
-char *PGNTags P((GameInfo *));
-void PrintPGNTags P((FILE *f, GameInfo *));
-int ParsePGNTag P((char *, GameInfo *));
-char *PGNResult P((ChessMove result));
-
-
-/* gamelist.c prototypes
- */
-/* A game node in the double linked list of games.
- */
-typedef struct _ListGame {
-    ListNode node;
-    int number;
-    unsigned long offset;   /*  Byte offset of game within file.     */
-    GameInfo gameInfo;      /*  Note that some entries may be NULL. */
-} ListGame;
- 
-extern List gameList;
-void ClearGameInfo P((GameInfo *));
-int GameListBuild P((FILE *));
-void GameListInitGameInfo P((GameInfo *));
-char *GameListLine P((int, GameInfo *));
-
-extern char* StripHighlight P((char *));  /* returns static data */
-extern char* StripHighlightAndTitle P((char *));  /* returns static data */
-
-
-typedef struct _CPS {
-    char *which;
-    int maybeThinking;
-    ProcRef pr;
-    InputSourceRef isr;
-    char *twoMachinesColor; /* "white\n" or "black\n" */
-    char *program;
-    char *host;
-    char *dir;
-    struct _CPS *other;
-    char *initString;
-    char *computerString;
-    int sendTime; /* 0=don't, 1=do, 2=test */
-    int sendDrawOffers;
-    int useSigint;
-    int useSigterm;
-    int offeredDraw; /* countdown */
-    int reuse;
-    int useSetboard; /* 0=use "edit"; 1=use "setboard" */
-    int useSAN;      /* 0=use coordinate notation; 1=use SAN */
-    int usePing;     /* 0=not OK to use ping; 1=OK */
-    int lastPing;
-    int lastPong;
-    int usePlayother;/* 0=not OK to use playother; 1=OK */
-    int useColors;   /* 0=avoid obsolete white/black commands; 1=use them */
-    int useUsermove; /* 0=just send move; 1=send "usermove move" */
-    int sendICS;     /* 0=don't use "ics" command; 1=do */
-    int sendName;    /* 0=don't use "name" command; 1=do */
-    int sdKludge;    /* 0=use "sd DEPTH" command; 1=use "depth\nDEPTH" */
-    int stKludge;    /* 0=use "st TIME" command; 1=use "level 1 TIME" */
-    char tidy[MSG_SIZ];
-    int matchWins;
-    char variants[MSG_SIZ];
-    int analysisSupport;
-    int analyzing;
-    int protocolVersion;
-    int initDone;
-} ChessProgramState;
-
-extern ChessProgramState first, second;
-
-#endif /* _BACKEND */
+/*
+ * backend.h -- Interface exported by XBoard back end
+ * $Id: backend.h,v 2.1 2003/10/27 19:21:00 mann Exp $
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 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 XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#ifndef _BACKEND
+#define _BACKEND
+
+/* unsigned int 64 for engine nodes work and display */
+#ifdef WIN32
+       /* I don't know the name for this type of other compiler
+        * If it not work, just modify here
+        * This is for MS Visual Studio
+        */
+       #ifdef _MSC_VER
+               #define u64 unsigned __int64
+               #define s64 signed __int64
+               #define u64Display "%I64u"
+               #define s64Display "%I64d"
+               #define u64Const(c) (c ## UI64)
+               #define s64Const(c) (c ## I64)
+       #else
+               /* place holder
+                * or dummy types for other compiler
+                */
+               #define u64 unsigned long long
+               #define s64 signed long long
+               #define u64Display "%llu"
+               #define s64Display "%lld"
+               #define u64Const(c) (c ## ULL)
+               #define s64Const(c) (c ## LL)
+       #endif
+#else
+       /* GNU gcc */
+       #define u64 unsigned long long
+       #define s64 signed long long
+       #define u64Display "%llu"
+       #define s64Display "%lld"
+       #define u64Const(c) (c ## ull)
+       #define s64Const(c) (c ## ll)
+#endif
+
+#include "lists.h"
+#include "frontend.h"
+
+extern int gotPremove;
+extern GameMode gameMode;
+extern int pausing, cmailMsgLoaded, flipView;
+extern char white_holding[], black_holding[];
+extern int currentMove, backwardMostMove, forwardMostMove;
+extern int blackPlaysFirst;
+extern FILE *debugFP;
+extern char* programVersion;
+extern ProcRef firstProgramPR, secondProgramPR;
+extern Board boards[];
+
+char *CmailMsg P((void));
+/* Tord: Added the useFEN960 parameter in PositionToFEN() below */
+char *PositionToFEN P((int move, char* useFEN960));
+void AlphaRank P((char *s, int n)); /* [HGM] Shogi move preprocessor */
+void EditPositionPasteFEN P((char *fen));
+void TimeDelay P((long ms));
+void SendMultiLineToICS P(( char *text ));
+void AnalysisPeriodicEvent P((int force));
+void SetWhiteToPlayEvent P((void));
+void SetBlackToPlayEvent P((void));
+void InitBackEnd1 P((void));
+void InitBackEnd2 P((void));
+int IsPromotion P((int fromX, int fromY, int toX, int toY));
+int InPalace P((int row, int column));
+int PieceForSquare P((int x, int y));
+int OKToStartUserMove P((int x, int y));
+void Reset P((int redraw, int init));
+void ResetGameEvent P((void));
+int LoadGame P((FILE *f, int n, char *title, int useList));
+int LoadGameFromFile P((char *filename, int n, char *title, int useList));
+int CmailLoadGame P((FILE *f, int n, char *title, int useList));
+int ReloadGame P((int offset));
+int SaveGame P((FILE *f, int dummy, char *dummy2));
+int SaveGameToFile P((char *filename, int append));
+int LoadPosition P((FILE *f, int n, char *title));
+int ReloadPosition P((int offset));
+int SavePosition P((FILE *f, int dummy, char *dummy2));
+void EditPositionEvent P((void));
+void FlipViewEvent P((void));
+void MachineWhiteEvent P((void));
+void MachineBlackEvent P((void));
+void TwoMachinesEvent P((void));
+void EditGameEvent P((void));
+void TrainingEvent P((void));
+void IcsClientEvent P((void));
+void ForwardEvent P((void));
+void BackwardEvent P((void));
+void ToEndEvent P((void));
+void ToStartEvent P((void));
+void ToNrEvent P((int to));
+void RevertEvent P((void));
+void RetractMoveEvent P((void));
+void MoveNowEvent P((void));
+void TruncateGameEvent P((void));
+void PauseEvent P((void));
+void CallFlagEvent P((void));
+void AcceptEvent P((void));
+void DeclineEvent P((void));
+void RematchEvent P((void));
+void DrawEvent P((void));
+void AbortEvent P((void));
+void AdjournEvent P((void));
+void ResignEvent P((void));
+void UserAdjudicationEvent P((int result));
+void StopObservingEvent P((void));
+void StopExaminingEvent P((void));
+void PonderNextMoveEvent P((int newState));
+void NewSettingeEvent P((int option, char *command, int value));
+void ShowThinkingEvent P(());
+void PeriodicUpdatesEvent P((int newState));
+void HintEvent P((void));
+void BookEvent P((void));
+void AboutGameEvent P((void));
+void ExitEvent P((int status));
+char *DefaultFileName P((char *));
+ChessMove UserMoveTest P((int fromX, int fromY, int toX, int toY, int promoChar));
+void UserMoveEvent P((int fromX, int fromY, int toX, int toY, int promoChar));
+void DecrementClocks P((void));
+char *TimeString P((long millisec));
+void AutoPlayGameLoop P((void));
+void AdjustClock P((Boolean which, int dir));
+void DisplayBothClocks P((void));
+void EditPositionMenuEvent P((ChessSquare selection, int x, int y));
+void DropMenuEvent P((ChessSquare selection, int x, int y));
+int ParseTimeControl P((char *tc, int ti, int mps));
+void ProcessICSInitScript P((FILE * f));
+void EditCommentEvent P((void));
+void ReplaceComment P((int index, char *text));
+int ReplaceTags P((char *tags, GameInfo *gi));/* returns nonzero on error */
+void AppendComment P((int index, char *text));
+void ReloadCmailMsgEvent P((int unregister));
+void MailMoveEvent P((void));
+void EditTagsEvent P((void));
+void GetMoveListEvent P((void));
+void ExitAnalyzeMode P((void));
+void AnalyzeModeEvent P((void));
+void AnalyzeFileEvent P((void));
+void DoEcho P((void));
+void DontEcho P((void));
+void TidyProgramName P((char *prog, char *host, char *buf));
+void AskQuestionEvent P((char *title, char *question,
+			 char *replyPrefix, char *which));
+Boolean ParseOneMove P((char *move, int moveNum,
+			ChessMove *moveType, int *fromX, int *fromY,
+			int *toX, int *toY, char *promoChar));
+char *VariantName P((VariantClass v));
+VariantClass StringToVariant P((char *e));
+double u64ToDouble P((u64 value));
+
+char *StrStr P((char *string, char *match));
+char *StrCaseStr P((char *string, char *match));
+char *StrSave P((char *s));
+char *StrSavePtr P((char *s, char **savePtr));
+
+#ifndef _amigados
+int StrCaseCmp P((char *s1, char *s2));
+int ToLower P((int c));
+int ToUpper P((int c));
+#else
+#define StrCaseCmp Stricmp  /*  Use utility.library functions   */
+#include <proto/utility.h>
+#endif
+
+extern GameInfo gameInfo;
+
+/* ICS vars used with backend.c and zippy.c */
+#define ICS_GENERIC 0
+#define ICS_ICC 1
+#define ICS_FICS 2
+#define ICS_CHESSNET 3 /* not really supported */
+int ics_type;
+
+ 
+
+/* pgntags.c prototypes
+ */
+char *PGNTags P((GameInfo *));
+void PrintPGNTags P((FILE *f, GameInfo *));
+int ParsePGNTag P((char *, GameInfo *));
+char *PGNResult P((ChessMove result));
+
+
+/* gamelist.c prototypes
+ */
+/* A game node in the double linked list of games.
+ */
+typedef struct _ListGame {
+    ListNode node;
+    int number;
+    unsigned long offset;   /*  Byte offset of game within file.     */
+    GameInfo gameInfo;      /*  Note that some entries may be NULL. */
+} ListGame;
+ 
+extern List gameList;
+void ClearGameInfo P((GameInfo *));
+int GameListBuild P((FILE *));
+void GameListInitGameInfo P((GameInfo *));
+char *GameListLine P((int, GameInfo *));
+char * GameListLineFull P(( int, GameInfo *));
+
+extern char* StripHighlight P((char *));  /* returns static data */
+extern char* StripHighlightAndTitle P((char *));  /* returns static data */
+
+typedef enum { CheckBox, ComboBox, TextBox, Button, Spin, SaveButton } Control;
+
+typedef struct _OPT {   // [HGM] options: descriptor of UCI-style option
+    int value;          // current setting, starts as default
+    int min;
+    int max;
+    void *handle;       // for use by front end
+    char *textValue;    // points to beginning of text value in name field
+    char **choice;      // points to array of combo choices in cps->combo
+    Control type;
+    char name[MSG_SIZ]; // holds both option name and text value
+} Option;
+
+typedef struct _CPS {
+    char *which;
+    int maybeThinking;
+    ProcRef pr;
+    InputSourceRef isr;
+    char *twoMachinesColor; /* "white\n" or "black\n" */
+    char *program;
+    char *host;
+    char *dir;
+    struct _CPS *other;
+    char *initString;
+    char *computerString;
+    int sendTime; /* 0=don't, 1=do, 2=test */
+    int sendDrawOffers;
+    int useSigint;
+    int useSigterm;
+    int offeredDraw; /* countdown */
+    int reuse;
+    int useSetboard; /* 0=use "edit"; 1=use "setboard" */
+    int useSAN;      /* 0=use coordinate notation; 1=use SAN */
+    int usePing;     /* 0=not OK to use ping; 1=OK */
+    int lastPing;
+    int lastPong;
+    int usePlayother;/* 0=not OK to use playother; 1=OK */
+    int useColors;   /* 0=avoid obsolete white/black commands; 1=use them */
+    int useUsermove; /* 0=just send move; 1=send "usermove move" */
+    int sendICS;     /* 0=don't use "ics" command; 1=do */
+    int sendName;    /* 0=don't use "name" command; 1=do */
+    int sdKludge;    /* 0=use "sd DEPTH" command; 1=use "depth\nDEPTH" */
+    int stKludge;    /* 0=use "st TIME" command; 1=use "level 1 TIME" */
+    char tidy[MSG_SIZ];
+    int matchWins;
+    char variants[MSG_SIZ];
+    int analysisSupport;
+    int analyzing;
+    int protocolVersion;
+    int initDone;
+
+    /* Added by Tord: */
+    int useFEN960;   /* 0=use "KQkq" style FENs, 1=use "HAha" style FENs */
+    int useOOCastle; /* 0="O-O" notation for castling, 1="king capture rook" notation */
+    /* End of additions by Tord */
+
+    int scoreIsAbsolute; /* [AS] 0=don't know (standard), 1=score is always from white side */
+    int isUCI;           /* [AS] 0=no (Winboard), 1=UCI (requires Polyglot) */
+    int hasOwnBookUCI;   /* [AS] 0=use GUI or Polyglot book, 1=has own book */
+
+    /* [HGM] time odds */
+    int timeOdds;   /* factor through which we divide time for this engine  */
+    int debug;      /* [HGM] ignore engine debug lines starting with '#'    */
+    int maxNrOfSessions; /* [HGM] secondary TC: max args in 'level' command */
+    int accumulateTC; /* [HGM] secondary TC: how to handle extra sessions   */
+    int nps;          /* [HGM] nps: factor for node count to replace time   */
+    int supportsNPS;
+    int alphaRank;    /* [HGM] shogi: engine uses shogi-type coordinates    */
+    int maxCores;     /* [HGM] SMP: engine understands cores command        */
+    int memSize;      /* [HGM] memsize: engine understands memory command   */
+    char egtFormats[MSG_SIZ];     /* [HGM] EGT: supported tablebase formats */
+    int bookSuspend;  /* [HGM] book: go was deferred because of book hit    */
+    int nrOptions;    /* [HGM] options: remembered option="..." features    */
+#define MAX_OPTIONS 50
+    Option option[MAX_OPTIONS];
+    int comboCnt;
+    char *comboList[10*MAX_OPTIONS];
+    char *optionSettings;
+    void *programLogo; /* [HGM] logo: bitmap of the logo                    */
+    char *fenOverride; /* [HGM} FRC: force FEN casling & ep fields by hand  */
+} ChessProgramState;
+
+extern ChessProgramState first, second;
+
+/* [AS] Search stats from chessprogram, for the played move */
+typedef struct {
+    int score;  /* Centipawns */
+    int depth;  /* Plies */
+    int time;   /* Milliseconds */
+} ChessProgramStats_Move;
+
+/* Search stats from chessprogram */
+typedef struct {
+  char movelist[2*MSG_SIZ]; /* Last PV we were sent */
+  int depth;              /* Current search depth */
+  int nr_moves;           /* Total nr of root moves */
+  int moves_left;         /* Moves remaining to be searched */
+  char move_name[MOVE_LEN];  /* Current move being searched, if provided */
+  u64 nodes;    /* # of nodes searched */
+  int time;               /* Search time (centiseconds) */
+  int score;              /* Score (centipawns) */
+  int got_only_move;      /* If last msg was "(only move)" */
+  int got_fail;           /* 0 - nothing, 1 - got "--", 2 - got "++" */
+  int ok_to_send;         /* handshaking between send & recv */
+  int line_is_book;       /* 1 if movelist is book moves */
+  int seen_stat;          /* 1 if we've seen the stat01: line */
+} ChessProgramStats;
+
+extern ChessProgramStats_Move pvInfoList[MAX_MOVES];
+extern int shuffleOpenings;
+extern ChessProgramStats programStats;
+
+#endif /* _BACKEND */
diff --git a/backendz.h b/backendz.h
index 4014e3b..f337845 100644
--- a/backendz.h
+++ b/backendz.h
@@ -5,6 +5,11 @@
  * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
  * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
  *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
+ *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
  * ------------------------------------------------------------------------
@@ -27,24 +32,25 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #ifndef _BACKENDZ
 #define _BACKENDZ
diff --git a/bitmaps/CVS/Entries b/bitmaps/CVS/Entries
deleted file mode 100644
index 4b92f41..0000000
--- a/bitmaps/CVS/Entries
+++ /dev/null
@@ -1,227 +0,0 @@
-/README.bitmaps/2.0/Sun Dec 17 02:24:40 2000//
-/b108o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/b108s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/b116o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/b116s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/b129o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/b129s.bm/2.0/Sun Dec 17 02:24:46 2000//
-/b21o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/b21s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/b25o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/b25s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/b29o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/b29s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/b33o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/b33s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/b37o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/b37s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/b40o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/b40s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/b45o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/b45s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/b49o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/b49s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/b54o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/b54s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/b58o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/b58s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/b64o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/b64s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/b72o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/b72s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/b80o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/b80s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/b87o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/b87s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/b95o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/b95s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/checkmark.bm/2.0/Sun Dec 17 02:24:39 2000//
-/dopkbm.sh/2.0/Sun Dec 17 02:24:40 2000//
-/dopkbm1.sh/2.0/Sun Dec 17 02:24:41 2000//
-/fixup.sed/2.0/Sun Dec 17 02:24:41 2000//
-/icon_outline.bm/2.0/Sun Dec 17 02:24:39 2000//
-/k108o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/k108s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/k116o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/k116s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/k129o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/k129s.bm/2.0/Sun Dec 17 02:24:46 2000//
-/k21o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/k21s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/k25o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/k25s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/k29o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/k29s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/k33o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/k33s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/k37o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/k37s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/k40o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/k40s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/k45o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/k45s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/k49o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/k49s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/k54o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/k54s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/k58o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/k58s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/k64o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/k64s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/k72o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/k72s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/k80o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/k80s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/k87o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/k87s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/k95o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/k95s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/n108o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/n108s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/n116o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/n116s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/n129o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/n129s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/n21o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/n21s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/n25o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/n25s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/n29o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/n29s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/n33o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/n33s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/n37o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/n37s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/n40o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/n40s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/n45o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/n45s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/n49o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/n49s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/n54o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/n54s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/n58o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/n58s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/n64o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/n64s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/n72o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/n72s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/n80o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/n80s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/n87o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/n87s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/n95o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/n95s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/p108o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/p108s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/p116o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/p116s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/p129o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/p129s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/p21o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/p21s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/p25o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/p25s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/p29o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/p29s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/p33o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/p33s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/p37o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/p37s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/p40o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/p40s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/p45o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/p45s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/p49o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/p49s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/p54o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/p54s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/p58o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/p58s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/p64o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/p64s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/p72o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/p72s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/p80o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/p80s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/p87o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/p87s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/p95o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/p95s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/q108o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/q108s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/q116o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/q116s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/q129o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/q129s.bm/2.0/Sun Dec 17 02:24:46 2000//
-/q21o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/q21s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/q25o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/q25s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/q29o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/q29s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/q33o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/q33s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/q37o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/q37s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/q40o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/q40s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/q45o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/q45s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/q49o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/q49s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/q54o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/q54s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/q58o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/q58s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/q64o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/q64s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/q72o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/q72s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/q80o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/q80s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/q87o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/q87s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/q95o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/q95s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/r108o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/r108s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/r116o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/r116s.bm/2.0/Sun Dec 17 02:24:45 2000//
-/r129o.bm/2.0/Sun Dec 17 02:24:45 2000//
-/r129s.bm/2.0/Sun Dec 17 02:24:46 2000//
-/r21o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/r21s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/r25o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/r25s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/r29o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/r29s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/r33o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/r33s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/r37o.bm/2.0/Sun Dec 17 02:24:43 2000//
-/r37s.bm/2.0/Sun Dec 17 02:24:43 2000//
-/r40o.bm/2.0/Sun Dec 17 02:24:40 2000//
-/r40s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/r45o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/r45s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/r49o.bm/2.0/Sun Dec 17 02:24:41 2000//
-/r49s.bm/2.0/Sun Dec 17 02:24:41 2000//
-/r54o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/r54s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/r58o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/r58s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/r64o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/r64s.bm/2.0/Sun Dec 17 02:24:40 2000//
-/r72o.bm/2.0/Sun Dec 17 02:24:42 2000//
-/r72s.bm/2.0/Sun Dec 17 02:24:42 2000//
-/r80o.bm/2.0/Sun Dec 17 02:24:39 2000//
-/r80s.bm/2.0/Sun Dec 17 02:24:39 2000//
-/r87o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/r87s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/r95o.bm/2.0/Sun Dec 17 02:24:44 2000//
-/r95s.bm/2.0/Sun Dec 17 02:24:44 2000//
-/unsigned.sh/2.0/Sun Dec 17 02:24:40 2000//
-/bitmaps.h/2.1/Mon Oct 27 19:21:01 2003//
-/icon_black.bm/2.1/Wed Nov 19 08:58:03 2003//
-/icon_white.bm/2.1/Wed Nov 19 08:57:29 2003//
-D
diff --git a/bitmaps/CVS/Repository b/bitmaps/CVS/Repository
deleted file mode 100644
index dcd9a1f..0000000
--- a/bitmaps/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-xboard/bitmaps
diff --git a/bitmaps/CVS/Root b/bitmaps/CVS/Root
deleted file mode 100644
index 489b0fb..0000000
--- a/bitmaps/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-mann at subversions.gnu.org:/cvsroot/xboard
diff --git a/bitmaps/README.bitmaps b/bitmaps/README.bitmaps
index b868cfd..8e86abe 100644
--- a/bitmaps/README.bitmaps
+++ b/bitmaps/README.bitmaps
@@ -1,94 +1,101 @@
-This directory provides bitmaps with the same size and naming
-conventions as those distributed till xboard-3.**
-These bitmaps are distributed under the GNU GENERAL PUBLIC LICENSE
-coming with xboard.
-
-The bitmaps contained herein were converted from my MetaFont
-version of chess font. These are designed very well to deliver
-good rastered images on low resolution devices. The general
-shape of these fonts are designed after very old typefaces
-used in printing chess books. They are not as fancy as the
-currently used bitmaps of xboard, but I like them in their
-'san serif'-ness - may be others too.
-  The MetaFont source of this font may be obtained from me
-under the GNU GENERAL PUBLIC LICENSE.
-  To convert the pk-Files to bitmaps I used the conversion tool
-mftobdf to generate X11-bdf - fonts, and then used a small C
-program, to write the xbm-files.
-
-5.Feb.1994 Elmar Bartel
-bartel at informatik.tu-muenchen.de
-
-[Elmar supplied only 80, 64, and 40 pixel bitmaps]
-
-* * *
-
-The 21-pixel bitmaps are also based on Elmar's font, but I hand-tuned
-them quite a bit.  I converted them from the Metafont gf file by
-running gftype and applying a C program of my own to the
-human-readable output.
-
-icon_white and icon_black were produced in the same way.
-
-21 Nov 1995  Tim Mann
-
-* * *
-
-The 33, 45, 49, 54, and 58 pixel bitmaps are also based on Elmar's font.
-They were converted using dopkbm.sh, followed by a manual pass with the
-X bitmap editor to adjust the size (adding blank borders as needed) and
-to hand-tune the pixels in a few cases where that was badly needed.
-Here is some data that may be useful in later conversions:
-
-Character numbers in fselch fonts:
-
-Piece  Open  Solid  Open/bg  Solid/bg
-P      0     014    022      036
-N      1     015    023      037
-B      2     016    024      040
-R      3     017    025      041
-Q      4     020    026      042
-K      5     021    027      043
-
-Sizes (WxH):
-
-fselch*.mf  blank sq  queen   used for
-----------  --------  -----   --------
-8           33x33     31x29   33x33
-9           37x37     33x32   none
-10          42x42     41x37   none
-11          46x46     43x41   45x45
-12          50x50     47x43   49x49
-13          54x54     50x47   54x54
-14          58x58     56x50   58x58
-20          83x83     71x76   none
-21          87x87     76x81   87x87
-22          91x91     79x83   none
-23          95x95     82x89   95x95
-25          104x104   91x99   none
-26          108x108   94x103  108x108
-28          116x116   99x107  116x116
-30          125x125   110x118 none
-31          129x129   113x122 129x129
-32          133x133   116x124 none
-
-
-In each case, fselch*.mf was formatted for 300 dpi.  On Linux with the
-Red Hat tetex-0.4pl8-9 package, this required mag=0.5.  Example:
-
-  mf
-  \mode=localfont; mag=0.5; input fselch8.mf
-  gftopk fselch8.300gf
-
-On Red Hat with tetex-0.9-6, mag=1.0 was needed instead.
-
-  mf
-  \mode=localfont; mag=1.0; input fselch26.mf
-  gftopk fselch26.300gf
-
-
-15 Feb 1998  Tim Mann
-25 Feb 1999  Tim Mann
-
-* * *
-
+This directory provides bitmaps with the same size and naming
+conventions as those distributed till xboard-3.**
+These bitmaps are distributed under the GNU GENERAL PUBLIC LICENSE
+coming with xboard.
+
+The bitmaps contained herein were converted from my MetaFont
+version of chess font. These are designed very well to deliver
+good rastered images on low resolution devices. The general
+shape of these fonts are designed after very old typefaces
+used in printing chess books. They are not as fancy as the
+currently used bitmaps of xboard, but I like them in their
+'san serif'-ness - may be others too.
+  The MetaFont source of this font may be obtained from me
+under the GNU GENERAL PUBLIC LICENSE.
+  To convert the pk-Files to bitmaps I used the conversion tool
+mftobdf to generate X11-bdf - fonts, and then used a small C
+program, to write the xbm-files.
+
+5.Feb.1994 Elmar Bartel
+bartel at informatik.tu-muenchen.de
+
+[Elmar supplied only 80, 64, and 40 pixel bitmaps]
+
+* * *
+
+The 21-pixel bitmaps are also based on Elmar's font, but I hand-tuned
+them quite a bit.  I converted them from the Metafont gf file by
+running gftype and applying a C program of my own to the
+human-readable output.
+
+icon_white and icon_black were produced in the same way.
+
+21 Nov 1995  Tim Mann
+
+* * *
+
+The 33, 45, 49, 54, and 58 pixel bitmaps are also based on Elmar's font.
+They were converted using dopkbm.sh, followed by a manual pass with the
+X bitmap editor to adjust the size (adding blank borders as needed) and
+to hand-tune the pixels in a few cases where that was badly needed.
+Here is some data that may be useful in later conversions:
+
+Character numbers in fselch fonts:
+
+Piece  Open  Solid  Open/bg  Solid/bg
+P      0     014    022      036
+N      1     015    023      037
+B      2     016    024      040
+R      3     017    025      041
+Q      4     020    026      042
+K      5     021    027      043
+
+Sizes (WxH):
+
+fselch*.mf  blank sq  queen   used for
+----------  --------  -----   --------
+8           33x33     31x29   33x33
+9           37x37     33x32   none
+10          42x42     41x37   none
+11          46x46     43x41   45x45
+12          50x50     47x43   49x49
+13          54x54     50x47   54x54
+14          58x58     56x50   58x58
+20          83x83     71x76   none
+21          87x87     76x81   87x87
+22          91x91     79x83   none
+23          95x95     82x89   95x95
+25          104x104   91x99   none
+26          108x108   94x103  108x108
+28          116x116   99x107  116x116
+30          125x125   110x118 none
+31          129x129   113x122 129x129
+32          133x133   116x124 none
+
+
+In each case, fselch*.mf was formatted for 300 dpi.  On Linux with the
+Red Hat tetex-0.4pl8-9 package, this required mag=0.5.  Example:
+
+  mf
+  \mode=localfont; mag=0.5; input fselch8.mf
+  gftopk fselch8.300gf
+
+On Red Hat with tetex-0.9-6, mag=1.0 was needed instead.
+
+  mf
+  \mode=localfont; mag=1.0; input fselch26.mf
+  gftopk fselch26.300gf
+
+
+15 Feb 1998  Tim Mann
+25 Feb 1999  Tim Mann
+
+* * *
+
+I added a large number of bitmaps for non-orthodox pieces, mainly in
+size middling and bulky (and to a lesser extent in petite). A few pieces
+(Archbishop, Chancellor and Lance) are available in all sizes from petite to bulky.
+The bitmaps were created as WinBoard .bmp monochrome bitmaps with MS Paint, and 
+converted to .bm C-source files semi-automatically, to be used as built-ins for xboard.
+
+ 4 Aug 2008 H.G. Muller
\ No newline at end of file
diff --git a/bitmaps/a33o.bm b/bitmaps/a33o.bm
new file mode 100644
index 0000000..a38343d
--- /dev/null
+++ b/bitmaps/a33o.bm
@@ -0,0 +1,16 @@
+#define a33o_width 33
+#define a33o_height 33
+static char a33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00,
+0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00,
+0x00, 0x03, 0x80, 0x01, 0x00, 0xc0, 0x00, 0x01, 0x06, 0x00, 0x30, 0x00, 0x01, 0x18, 0x00,
+0x08, 0x00, 0x01, 0x20, 0x00, 0x08, 0xc0, 0x07, 0x20, 0x00, 0x30, 0x00, 0x01, 0x18, 0x00,
+0xc0, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00,
+0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00,
+0x00, 0xf4, 0x5f, 0x00, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00,
+0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x06, 0x00, 0x00, 0xf0, 0x3f, 0xf8, 0x1f, 0x00,
+0x08, 0x00, 0x01, 0x20, 0x00, 0x08, 0xc0, 0x06, 0x20, 0x00, 0xf0, 0x3f, 0xf8, 0x1f, 0x00,
+0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/a33s.bm b/bitmaps/a33s.bm
new file mode 100644
index 0000000..5675e6c
--- /dev/null
+++ b/bitmaps/a33s.bm
@@ -0,0 +1,16 @@
+#define a33s_width 33
+#define a33s_height 33
+static char a33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00,
+0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00,
+0x00, 0xff, 0xff, 0x01, 0x00, 0xc0, 0xff, 0xfe, 0x07, 0x00, 0xf0, 0xff, 0xfe, 0x1f, 0x00,
+0xf8, 0xff, 0xfe, 0x3f, 0x00, 0xf8, 0x3f, 0xf8, 0x3f, 0x00, 0xf0, 0xff, 0xfe, 0x1f, 0x00,
+0xc0, 0xff, 0xfe, 0x07, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00,
+0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00,
+0x00, 0x0c, 0x60, 0x00, 0x00, 0x00, 0xf4, 0x5f, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00,
+0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00,
+0xf8, 0xff, 0xff, 0x3f, 0x00, 0xf8, 0xff, 0xfe, 0x3f, 0x00, 0xf0, 0x3f, 0xf8, 0x1f, 0x00,
+0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/a37o.bm b/bitmaps/a37o.bm
new file mode 100644
index 0000000..15faaf8
--- /dev/null
+++ b/bitmaps/a37o.bm
@@ -0,0 +1,17 @@
+#define a37o_width 37
+#define a37o_height 37
+static char a37o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x80, 0x31, 0x00, 0x00, 0x00, 0x70, 0xc0, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00,
+0x80, 0x01, 0x00, 0x30, 0x00, 0x20, 0x00, 0x00, 0xc0, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
+0x08, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x04, 0x00, 0x02, 0x08, 0x00, 0x04, 0x00, 0x02,
+0x10, 0x80, 0x3f, 0x00, 0x01, 0x10, 0x00, 0x04, 0x00, 0x01, 0x60, 0x00, 0x04, 0xc0, 0x00,
+0x80, 0x01, 0x04, 0x30, 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00,
+0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0xf0, 0xff, 0x01, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,
+0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0xf0, 0xff, 0x01, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00,
+0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00,
+0x00, 0xc3, 0x60, 0x18, 0x00, 0xf0, 0x3c, 0x84, 0xe7, 0x01, 0x08, 0x00, 0x1b, 0x00, 0x02,
+0xd0, 0xff, 0xe0, 0x7f, 0x01, 0x30, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a37s.bm b/bitmaps/a37s.bm
new file mode 100644
index 0000000..121250a
--- /dev/null
+++ b/bitmaps/a37s.bm
@@ -0,0 +1,17 @@
+#define a37s_width 37
+#define a37s_height 37
+static char a37s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x01, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00,
+0x80, 0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01,
+0xf8, 0xff, 0xff, 0xff, 0x03, 0xf8, 0xff, 0xfb, 0xff, 0x03, 0xf8, 0xff, 0xfb, 0xff, 0x03,
+0xf0, 0x7f, 0xc0, 0xff, 0x01, 0xf0, 0xff, 0xfb, 0xff, 0x01, 0xe0, 0xff, 0xfb, 0xff, 0x00,
+0x80, 0xff, 0xfb, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00,
+0x00, 0xf0, 0xff, 0x01, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0xf0, 0xff, 0x01, 0x00,
+0x00, 0xf0, 0xff, 0x01, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00,
+0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+0x00, 0xc3, 0x7f, 0x18, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0xf8, 0xff, 0xfb, 0xff, 0x03,
+0xf0, 0xff, 0xe0, 0xff, 0x01, 0x30, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a40o.bm b/bitmaps/a40o.bm
new file mode 100644
index 0000000..25bbadb
--- /dev/null
+++ b/bitmaps/a40o.bm
@@ -0,0 +1,18 @@
+#define a40o_width 40
+#define a40o_height 40
+static char a40o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00,
+0x00, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x30, 0x00, 0x00, 0x06, 0x00, 0xc0, 0x00,
+0x80, 0x01, 0x10, 0x00, 0x03, 0x40, 0x00, 0x10, 0x00, 0x04, 0x20, 0x00, 0x10, 0x00, 0x08,
+0x20, 0x00, 0xfe, 0x00, 0x08, 0x40, 0x00, 0x10, 0x00, 0x04, 0x80, 0x00, 0x10, 0x00, 0x02,
+0x00, 0x03, 0x10, 0x80, 0x01, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00,
+0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x20, 0xff, 0x09, 0x00, 0x00, 0xc0, 0x00, 0x06, 0x00,
+0x00, 0x40, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x08, 0x00, 0x00, 0xe0, 0xff, 0x0f, 0x00,
+0x00, 0x30, 0x00, 0x18, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0xc0, 0xff, 0x01, 0xff, 0x07,
+0x30, 0x00, 0x10, 0x00, 0x18, 0x08, 0x00, 0x6c, 0x00, 0x20, 0xd0, 0xff, 0x83, 0xff, 0x17,
+0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a40s.bm b/bitmaps/a40s.bm
new file mode 100644
index 0000000..9f58f2e
--- /dev/null
+++ b/bitmaps/a40s.bm
@@ -0,0 +1,18 @@
+#define a40s_width 40
+#define a40s_height 40
+static char a40s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00,
+0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0xf8, 0xff, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x00,
+0x80, 0xff, 0xef, 0xff, 0x03, 0xc0, 0xff, 0xef, 0xff, 0x07, 0xe0, 0xff, 0xef, 0xff, 0x0f,
+0xe0, 0xff, 0x01, 0xff, 0x0f, 0xc0, 0xff, 0xef, 0xff, 0x07, 0x80, 0xff, 0xef, 0xff, 0x03,
+0x00, 0xff, 0xef, 0xff, 0x01, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0xf8, 0xff, 0x3f, 0x00,
+0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x00, 0x0e, 0x00, 0x00, 0x40, 0xff, 0x05, 0x00,
+0x00, 0xc0, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x20, 0x00, 0x08, 0x00,
+0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x07,
+0xf0, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xef, 0xff, 0x3f, 0xf0, 0xff, 0x83, 0xff, 0x1f,
+0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a45o.bm b/bitmaps/a45o.bm
new file mode 100644
index 0000000..8717312
--- /dev/null
+++ b/bitmaps/a45o.bm
@@ -0,0 +1,23 @@
+#define a45o_width 45
+#define a45o_height 45
+static char a45o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00,
+0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00,
+0xc0, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0c, 0x00,
+0x80, 0x01, 0x40, 0x00, 0x30, 0x00, 0x60, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x10, 0x00, 0x40,
+0x00, 0x00, 0x01, 0x10, 0x00, 0xfc, 0x07, 0x00, 0x01, 0x10, 0x00, 0x40, 0x00, 0x00, 0x01,
+0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x40,
+0x00, 0x60, 0x00, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x00,
+0x00, 0x30, 0x00, 0x80, 0x01, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0xc0, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00,
+0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xc0, 0x00,
+0x60, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0x00,
+0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0c,
+0x06, 0x00, 0x00, 0x80, 0xff, 0x43, 0xf8, 0x3f, 0x00, 0x70, 0x00, 0xb0, 0x01, 0xc0, 0x01,
+0x08, 0x00, 0x08, 0x02, 0x00, 0x02, 0xc8, 0xff, 0x07, 0xfc, 0x7f, 0x02, 0x30, 0x00, 0x00,
+0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/a45s.bm b/bitmaps/a45s.bm
new file mode 100644
index 0000000..6991ceb
--- /dev/null
+++ b/bitmaps/a45s.bm
@@ -0,0 +1,23 @@
+#define a45s_width 45
+#define a45s_height 45
+static char a45s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x0f, 0x00,
+0x80, 0xff, 0xbf, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xbf, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xbf,
+0xff, 0xff, 0x01, 0xf0, 0xff, 0x03, 0xf8, 0xff, 0x01, 0xf0, 0xff, 0xbf, 0xff, 0xff, 0x01,
+0xe0, 0xff, 0xbf, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xbf, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xbf,
+0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00,
+0x00, 0xf0, 0xff, 0xff, 0x01, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x40, 0x00,
+0x40, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x40, 0xff,
+0x5f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00,
+0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0x07, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xf0, 0xff, 0xbf, 0xff, 0xff, 0x01,
+0xf8, 0xff, 0x0f, 0xfe, 0xff, 0x03, 0xf8, 0xff, 0x07, 0xfc, 0xff, 0x03, 0x30, 0x00, 0x00,
+0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/a49o.bm b/bitmaps/a49o.bm
new file mode 100644
index 0000000..c777c8b
--- /dev/null
+++ b/bitmaps/a49o.bm
@@ -0,0 +1,27 @@
+#define a49o_width 49
+#define a49o_height 49
+static char a49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x06, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
+0x00, 0x00, 0xc0, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0x00,
+0x00, 0x0c, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x80, 0x01, 0x00, 0xc0,
+0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x10, 0x00,
+0x00, 0x01, 0x00, 0x10, 0x00, 0x20, 0x00, 0xf0, 0x1f, 0x00, 0x08, 0x00, 0x40, 0x00, 0x00,
+0x01, 0x00, 0x04, 0x00, 0x80, 0x01, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x01,
+0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00,
+0x00, 0x00, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x3f, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x07, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80,
+0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00,
+0x00, 0x04, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x00,
+0x00, 0x00, 0x00, 0xff, 0x0f, 0xe1, 0xff, 0x01, 0x00, 0xe0, 0x00, 0xc0, 0x06, 0x00, 0x0e,
+0x00, 0x10, 0x00, 0x30, 0x18, 0x00, 0x10, 0x00, 0x10, 0xff, 0x0f, 0xe0, 0xff, 0x11, 0x00,
+0xf0, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a49s.bm b/bitmaps/a49s.bm
new file mode 100644
index 0000000..a911f25
--- /dev/null
+++ b/bitmaps/a49s.bm
@@ -0,0 +1,27 @@
+#define a49s_width 49
+#define a49s_height 49
+static char a49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00,
+0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xff, 0x01, 0x00, 0xc0,
+0xff, 0xff, 0xfe, 0xff, 0x07, 0x00, 0xe0, 0xff, 0xff, 0xfe, 0xff, 0x0f, 0x00, 0xf0, 0xff,
+0xff, 0xfe, 0xff, 0x1f, 0x00, 0xe0, 0xff, 0x0f, 0xe0, 0xff, 0x0f, 0x00, 0xc0, 0xff, 0xff,
+0xfe, 0xff, 0x07, 0x00, 0x80, 0xff, 0xff, 0xfe, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xfe,
+0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f,
+0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x01, 0x00, 0x00,
+0x00, 0x00, 0xf9, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x80,
+0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xc0, 0xff,
+0xff, 0x07, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xe0, 0xff, 0xff, 0xfe, 0xff, 0x0f,
+0x00, 0xf0, 0xff, 0x3f, 0xf8, 0xff, 0x1f, 0x00, 0xf0, 0xff, 0x0f, 0xe0, 0xff, 0x1f, 0x00,
+0xf0, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a54o.bm b/bitmaps/a54o.bm
new file mode 100644
index 0000000..b4118f0
--- /dev/null
+++ b/bitmaps/a54o.bm
@@ -0,0 +1,30 @@
+#define a54o_width 54
+#define a54o_height 54
+static char a54o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00,
+0x00, 0x00, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0xf8, 0x00, 0x00,
+0x00, 0xf8, 0x01, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
+0x07, 0x00, 0x0c, 0x00, 0x38, 0x00, 0x80, 0x03, 0x00, 0x0c, 0x00, 0x70, 0x00, 0xc0, 0x01,
+0x00, 0x0c, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0x00, 0x0c, 0x00, 0xc0, 0x01, 0x60, 0x00, 0xc0,
+0xff, 0x00, 0x80, 0x01, 0xe0, 0x00, 0xc0, 0xff, 0x00, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x0c,
+0x00, 0xc0, 0x00, 0xc0, 0x01, 0x00, 0x0c, 0x00, 0xe0, 0x00, 0x80, 0x07, 0x00, 0x0c, 0x00,
+0x78, 0x00, 0x00, 0x1e, 0x00, 0x0c, 0x00, 0x1e, 0x00, 0x00, 0x78, 0x00, 0x00, 0x80, 0x07,
+0x00, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x70, 0x00, 0x00,
+0x00, 0x00, 0xe7, 0xff, 0x39, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x00,
+0x00, 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
+0x0e, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x00, 0xff,
+0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+0x30, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf3, 0x00, 0x00,
+0x00, 0x80, 0xff, 0xff, 0xc0, 0xff, 0x7f, 0x00, 0xe0, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x01,
+0x78, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x03, 0x70,
+0x00, 0x80, 0x7f, 0x00, 0x80, 0x03, 0xe0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0x01, 0xc0, 0xff,
+0x7f, 0x80, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a54s.bm b/bitmaps/a54s.bm
new file mode 100644
index 0000000..293173d
--- /dev/null
+++ b/bitmaps/a54s.bm
@@ -0,0 +1,30 @@
+#define a54s_width 54
+#define a54s_height 54
+static char a54s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x03,
+0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x0f, 0x00,
+0x00, 0x00, 0x00, 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x00, 0x00,
+0x00, 0xf8, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0xff, 0xff, 0xf3, 0xff, 0x3f, 0x00, 0x80, 0xff, 0xff, 0xf3, 0xff, 0x7f, 0x00, 0xc0, 0xff,
+0xff, 0xf3, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0x01, 0xe0, 0xff, 0x3f,
+0x00, 0xff, 0xff, 0x01, 0xe0, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0xf3,
+0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0xf3, 0xff,
+0x7f, 0x00, 0x00, 0xfe, 0xff, 0xf3, 0xff, 0x1f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x07,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x80, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x1f, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x00, 0x00,
+0x00, 0xec, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0xfe, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x03,
+0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xf3, 0xff, 0x33, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+0x3f, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00,
+0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
+0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xf0,
+0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0xf3, 0xff, 0xff, 0x01, 0xc0, 0xff,
+0x7f, 0x80, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a58o.bm b/bitmaps/a58o.bm
new file mode 100644
index 0000000..1de3962
--- /dev/null
+++ b/bitmaps/a58o.bm
@@ -0,0 +1,35 @@
+#define a58o_width 58
+#define a58o_height 58
+static char a58o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x03, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x3c, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x01, 0x00, 0x00,
+0x00, 0x80, 0x07, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x1e, 0x00,
+0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x30, 0x00, 0xe0,
+0x01, 0x00, 0x80, 0x07, 0x00, 0x30, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x01, 0x00, 0x30, 0x00,
+0x00, 0x0e, 0x00, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0x60, 0x00, 0x00, 0xff,
+0x03, 0x00, 0x18, 0x00, 0xe0, 0x00, 0x00, 0xff, 0x03, 0x00, 0x1c, 0x00, 0xc0, 0x01, 0x00,
+0x30, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x03, 0x00, 0x30, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0f,
+0x00, 0x30, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x3c, 0x00, 0x30, 0x00, 0xf0, 0x00, 0x00, 0x00,
+0xf0, 0x00, 0x30, 0x00, 0x3c, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x07, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x1c, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x60,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
+0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x3e, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xcf, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03,
+0x00, 0xc0, 0xff, 0xff, 0x00, 0xfc, 0xff, 0x0f, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x3c, 0x00, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x38, 0x00, 0x60, 0x00, 0x00, 0xfc, 0x00,
+0x00, 0x18, 0x00, 0xe0, 0xfe, 0x01, 0xcf, 0x03, 0xfe, 0x1d, 0x00, 0xc0, 0xff, 0xff, 0x03,
+0xff, 0xff, 0x0f, 0x00, 0x80, 0x01, 0xfe, 0x00, 0xfc, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a58s.bm b/bitmaps/a58s.bm
new file mode 100644
index 0000000..10d89d0
--- /dev/null
+++ b/bitmaps/a58s.bm
@@ -0,0 +1,35 @@
+#define a58s_width 58
+#define a58s_height 58
+static char a58s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00,
+0x00, 0x80, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xcf, 0xff, 0xff,
+0x01, 0x00, 0x80, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x07, 0x00, 0xc0, 0xff, 0xff, 0xcf, 0xff,
+0xff, 0x0f, 0x00, 0xe0, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x1f, 0x00, 0xe0, 0xff, 0xff, 0x00,
+0xfc, 0xff, 0x1f, 0x00, 0xe0, 0xff, 0xff, 0x00, 0xfc, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff,
+0xcf, 0xff, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x07, 0x00, 0x00, 0xff,
+0xff, 0xcf, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfc, 0xff, 0xcf, 0xff, 0xff, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0xcf, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x01, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x60, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
+0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
+0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
+0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
+0x3f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x1f, 0x00, 0xe0, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, 0x03,
+0xff, 0xff, 0x0f, 0x00, 0x80, 0x01, 0xfe, 0x00, 0xfc, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a64o.bm b/bitmaps/a64o.bm
new file mode 100644
index 0000000..24fa413
--- /dev/null
+++ b/bitmaps/a64o.bm
@@ -0,0 +1,39 @@
+#define a64o_width 64
+#define a64o_height 64
+static char a64o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0xf0, 0x01, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x03, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x78,
+0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00,
+0x80, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x01, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x80,
+0x01, 0x00, 0xf0, 0x00, 0x80, 0x03, 0x00, 0x80, 0x01, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0x00,
+0x80, 0x01, 0x00, 0x80, 0x03, 0xc0, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x03, 0xc0, 0x00,
+0x00, 0xfc, 0x3f, 0x00, 0x00, 0x03, 0xc0, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x03, 0x80,
+0x07, 0x00, 0x80, 0x01, 0x00, 0xe0, 0x01, 0x00, 0x0e, 0x00, 0x80, 0x01, 0x00, 0x70, 0x00,
+0x00, 0x3c, 0x00, 0x80, 0x01, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x0e,
+0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xe0,
+0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00,
+0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, 0xfe, 0x7f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x60,
+0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
+0x70, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x00,
+0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x80, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0xf0, 0xff, 0x7f, 0x00, 0x80, 0xff, 0xff, 0x03,
+0xc0, 0xff, 0xff, 0x01, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x70, 0x00, 0x00,
+0x80, 0x01, 0x00, 0x00, 0x0e, 0xe0, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x07, 0xc0, 0xf8,
+0x07, 0x78, 0x1e, 0xe0, 0x1f, 0x03, 0xc0, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x03, 0x80,
+0x07, 0xf8, 0x07, 0xe0, 0x1f, 0xe0, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00
+};
diff --git a/bitmaps/a64s.bm b/bitmaps/a64s.bm
new file mode 100644
index 0000000..f3fe088
--- /dev/null
+++ b/bitmaps/a64s.bm
@@ -0,0 +1,39 @@
+#define a64s_width 64
+#define a64s_height 64
+static char a64s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f,
+0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff,
+0xff, 0x0f, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x7f,
+0xfe, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff,
+0x7f, 0xfe, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x03, 0xc0, 0xff,
+0xff, 0x03, 0xc0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x03, 0x80,
+0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x01, 0x00, 0xfe, 0xff, 0x7f, 0xfe, 0xff, 0x7f, 0x00,
+0x00, 0xfc, 0xff, 0x7f, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f,
+0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
+0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x60, 0xfe, 0x7f, 0x04, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x98, 0xff, 0xff, 0x19, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x80, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0x01, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x0f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xc0, 0xff,
+0xff, 0x7f, 0xfe, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x03, 0x80,
+0x07, 0xf8, 0x07, 0xe0, 0x1f, 0xe0, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00
+};
diff --git a/bitmaps/a72o.bm b/bitmaps/a72o.bm
new file mode 100644
index 0000000..e399d30
--- /dev/null
+++ b/bitmaps/a72o.bm
@@ -0,0 +1,48 @@
+#define a72o_width 72
+#define a72o_height 72
+static char a72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x78, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x0f, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0xe0,
+0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x7c,
+0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
+0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00,
+0xe0, 0x07, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x7e, 0x00,
+0x00, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x18, 0x00, 0x00, 0xf8, 0x00,
+0xc0, 0x07, 0x00, 0x00, 0x18, 0x00, 0x00, 0xe0, 0x03, 0xc0, 0x01, 0x00, 0x00, 0x18, 0x00,
+0x00, 0x80, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00,
+0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x07,
+0x80, 0x01, 0x00, 0xe0, 0xff, 0x07, 0x00, 0xc0, 0x03, 0x80, 0x0f, 0x00, 0x00, 0x18, 0x00,
+0x00, 0xf0, 0x01, 0x00, 0x3e, 0x00, 0x00, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xf0, 0x00,
+0x00, 0x18, 0x00, 0x00, 0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x18, 0x00, 0x80, 0x07, 0x00,
+0x00, 0x80, 0x03, 0x00, 0x18, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+0xe0, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x1c,
+0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
+0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf1, 0xff, 0x8f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80,
+0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xf0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x80,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0x01, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf8, 0xff, 0x1f, 0x03, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0xe0,
+0x07, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x70,
+0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x81, 0x07, 0x00, 0x00, 0x00,
+0x00, 0xf8, 0xff, 0x7f, 0x00, 0xfe, 0xff, 0x1f, 0x00, 0x80, 0xff, 0xff, 0x1f, 0x00, 0xf8,
+0xff, 0xff, 0x01, 0xe0, 0x07, 0x00, 0x00, 0x18, 0x00, 0x00, 0xe0, 0x07, 0x70, 0x00, 0x00,
+0x00, 0x7e, 0x00, 0x00, 0x00, 0x0e, 0x30, 0x00, 0x00, 0xc0, 0xe7, 0x03, 0x00, 0x00, 0x0c,
+0x70, 0xf0, 0xff, 0xff, 0x81, 0xff, 0xff, 0x0f, 0x0e, 0xe0, 0xfe, 0xff, 0x3f, 0x00, 0xfc,
+0xff, 0x7f, 0x07, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x80, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/a72s.bm b/bitmaps/a72s.bm
new file mode 100644
index 0000000..1f726e9
--- /dev/null
+++ b/bitmaps/a72s.bm
@@ -0,0 +1,48 @@
+#define a72s_width 72
+#define a72s_height 72
+static char a72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x3f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x07, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0xe7, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0x00,
+0xc0, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xe7, 0xff,
+0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff,
+0xff, 0xe7, 0xff, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x1f, 0x00, 0xf8, 0xff, 0xff, 0x07,
+0x80, 0xff, 0xff, 0x1f, 0x00, 0xf8, 0xff, 0xff, 0x03, 0x80, 0xff, 0xff, 0xff, 0xe7, 0xff,
+0xff, 0xff, 0x01, 0x00, 0xfe, 0xff, 0xff, 0xe7, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff,
+0xff, 0xe7, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xe7, 0xff, 0xff, 0x07, 0x00,
+0x00, 0x80, 0xff, 0xff, 0xe7, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
+0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x03, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0xff, 0x8f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0xe0, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0xf8, 0xff, 0x1f,
+0x06, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x00,
+0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x01, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0x0f,
+0xf0, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0x0f, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0xfc,
+0xff, 0xff, 0x07, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x80, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/as33o.bm b/bitmaps/as33o.bm
new file mode 100644
index 0000000..6f87913
--- /dev/null
+++ b/bitmaps/as33o.bm
@@ -0,0 +1,16 @@
+#define as33o_width 33
+#define as33o_height 33
+static char as33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0x01, 0x00, 0x3f, 0x00, 0x08, 0x02, 0x80, 0x20, 0x00, 0x08, 0x04, 0x40, 0x20, 0x00,
+0x48, 0x08, 0x20, 0x24, 0x00, 0x88, 0x10, 0x10, 0x22, 0x00, 0x08, 0x21, 0x08, 0x21, 0x00,
+0x10, 0x42, 0x84, 0x10, 0x00, 0x20, 0x84, 0x42, 0x08, 0x00, 0x40, 0x08, 0x21, 0x04, 0x00,
+0x80, 0x10, 0x12, 0x02, 0x00, 0x00, 0x21, 0x04, 0x01, 0x00, 0x00, 0x42, 0x88, 0x00, 0x00,
+0x00, 0x84, 0x50, 0x00, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x00, 0x14, 0x42, 0x00, 0x00,
+0x38, 0x22, 0x84, 0x38, 0x00, 0x44, 0x41, 0x08, 0x45, 0x00, 0x84, 0x90, 0x10, 0x42, 0x00,
+0x08, 0x09, 0x21, 0x21, 0x00, 0x30, 0x82, 0x82, 0x18, 0x00, 0x40, 0x44, 0x44, 0x04, 0x00,
+0xa0, 0x28, 0x28, 0x0a, 0x00, 0x10, 0x11, 0x10, 0x11, 0x00, 0x08, 0x22, 0x88, 0x20, 0x00,
+0x04, 0x45, 0x44, 0x41, 0x00, 0x82, 0x44, 0x44, 0x82, 0x00, 0x42, 0x48, 0x24, 0x84, 0x00,
+0x24, 0x30, 0x18, 0x48, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/as33s.bm b/bitmaps/as33s.bm
new file mode 100644
index 0000000..80236bb
--- /dev/null
+++ b/bitmaps/as33s.bm
@@ -0,0 +1,16 @@
+#define as33s_width 33
+#define as33s_height 33
+static char as33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0x01, 0x00, 0x3f, 0x00, 0xf8, 0x03, 0x80, 0x3f, 0x00, 0xf8, 0x07, 0xc0, 0x37, 0x00,
+0xb8, 0x0f, 0xe0, 0x3b, 0x00, 0x78, 0x1f, 0xf0, 0x3d, 0x00, 0xf8, 0x3e, 0xf8, 0x3e, 0x00,
+0xf0, 0x7d, 0x7c, 0x1f, 0x00, 0xe0, 0xfb, 0xbe, 0x0f, 0x00, 0xc0, 0xf7, 0xdd, 0x07, 0x00,
+0x80, 0xef, 0xfb, 0x03, 0x00, 0x00, 0xdf, 0xf7, 0x01, 0x00, 0x00, 0xbe, 0xef, 0x00, 0x00,
+0x00, 0x7c, 0x5f, 0x00, 0x00, 0x00, 0xf8, 0x3e, 0x00, 0x00, 0x00, 0xf4, 0x7d, 0x00, 0x00,
+0x38, 0xee, 0xfb, 0x38, 0x00, 0x7c, 0xdf, 0xf7, 0x7d, 0x00, 0xfc, 0xae, 0xef, 0x7e, 0x00,
+0xf8, 0x75, 0x7f, 0x3f, 0x00, 0xf0, 0xfb, 0xbe, 0x1f, 0x00, 0xc0, 0x77, 0xdc, 0x07, 0x00,
+0xa0, 0x2f, 0xe8, 0x0b, 0x00, 0x70, 0x1f, 0xf0, 0x1d, 0x00, 0xf8, 0x3e, 0xf8, 0x3e, 0x00,
+0xfc, 0x7d, 0x7c, 0x7f, 0x00, 0xfe, 0x7c, 0x7c, 0xfe, 0x00, 0x7e, 0x78, 0x3c, 0xfc, 0x00,
+0x3c, 0x30, 0x18, 0x78, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/as49o.bm b/bitmaps/as49o.bm
new file mode 100644
index 0000000..eea2179
--- /dev/null
+++ b/bitmaps/as49o.bm
@@ -0,0 +1,27 @@
+#define as49o_width 49
+#define as49o_height 49
+static char as49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x80, 0x80, 0x00,
+0x00, 0x02, 0x02, 0x00, 0x80, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x80, 0x00, 0x02, 0x80,
+0x00, 0x02, 0x00, 0x80, 0x00, 0x04, 0x40, 0x20, 0x02, 0x00, 0x80, 0x10, 0x08, 0x20, 0x10,
+0x02, 0x00, 0x80, 0x20, 0x10, 0x10, 0x08, 0x02, 0x00, 0x80, 0x40, 0x20, 0x08, 0x04, 0x02,
+0x00, 0x00, 0x81, 0x40, 0x04, 0x02, 0x01, 0x00, 0x00, 0x02, 0x81, 0x02, 0x81, 0x00, 0x00,
+0x00, 0x04, 0x02, 0x81, 0x40, 0x00, 0x00, 0x00, 0x08, 0x04, 0x42, 0x20, 0x00, 0x00, 0x00,
+0x10, 0x08, 0x24, 0x10, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00, 0x40,
+0x20, 0x10, 0x04, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x81,
+0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02,
+0x01, 0x00, 0x00, 0x00, 0x80, 0x08, 0x04, 0x02, 0x00, 0x00, 0x00, 0x40, 0x10, 0x08, 0x04,
+0x03, 0x00, 0xc0, 0x20, 0x20, 0x10, 0x88, 0x04, 0x00, 0x20, 0x11, 0x48, 0x20, 0x50, 0x08,
+0x00, 0x10, 0x0a, 0x84, 0x40, 0x20, 0x08, 0x00, 0x10, 0x04, 0x02, 0x81, 0x10, 0x04, 0x00,
+0x20, 0x08, 0x81, 0x02, 0x09, 0x03, 0x00, 0xc0, 0x90, 0x40, 0x04, 0x84, 0x00, 0x00, 0x00,
+0x21, 0x20, 0x08, 0x42, 0x00, 0x00, 0x00, 0x42, 0x10, 0x10, 0xa1, 0x00, 0x00, 0x00, 0x85,
+0x08, 0xa0, 0x10, 0x01, 0x00, 0x80, 0x08, 0x05, 0x40, 0x08, 0x02, 0x00, 0x40, 0x10, 0x02,
+0x20, 0x04, 0x04, 0x00, 0x20, 0x20, 0x04, 0x10, 0x0a, 0x08, 0x00, 0x10, 0x50, 0x08, 0x08,
+0x11, 0x10, 0x00, 0x08, 0x88, 0x10, 0x08, 0x21, 0x10, 0x00, 0x08, 0x84, 0x10, 0x90, 0x40,
+0x10, 0x00, 0x08, 0x02, 0x09, 0x60, 0x80, 0x08, 0x00, 0x10, 0x01, 0x06, 0x00, 0x00, 0x07,
+0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/as49s.bm b/bitmaps/as49s.bm
new file mode 100644
index 0000000..3dac667
--- /dev/null
+++ b/bitmaps/as49s.bm
@@ -0,0 +1,27 @@
+#define as49s_width 49
+#define as49s_height 49
+static char as49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x80, 0xff, 0x00,
+0x00, 0xfe, 0x03, 0x00, 0x80, 0xff, 0x01, 0x00, 0xff, 0x03, 0x00, 0x80, 0xff, 0x03, 0x80,
+0xff, 0x03, 0x00, 0x80, 0xff, 0x07, 0xc0, 0xdf, 0x03, 0x00, 0x80, 0xef, 0x0f, 0xe0, 0xef,
+0x03, 0x00, 0x80, 0xdf, 0x1f, 0xf0, 0xf7, 0x03, 0x00, 0x80, 0xbf, 0x3f, 0xf8, 0xfb, 0x03,
+0x00, 0x00, 0x7f, 0x7f, 0xfc, 0xfd, 0x01, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00,
+0x00, 0xfc, 0xfd, 0x7d, 0x7f, 0x00, 0x00, 0x00, 0xf8, 0xfb, 0xbb, 0x3f, 0x00, 0x00, 0x00,
+0xf0, 0xf7, 0xd7, 0x1f, 0x00, 0x00, 0x00, 0xe0, 0xef, 0xef, 0x0f, 0x00, 0x00, 0x00, 0xc0,
+0xdf, 0xdf, 0x07, 0x00, 0x00, 0x00, 0x80, 0xbf, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f,
+0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfd,
+0x01, 0x00, 0x00, 0x00, 0x80, 0xfb, 0xfb, 0x03, 0x00, 0x00, 0x00, 0xc0, 0xf7, 0xf7, 0x07,
+0x03, 0x00, 0xc0, 0xe0, 0xef, 0xef, 0x8f, 0x07, 0x00, 0xe0, 0xf1, 0xd7, 0xdf, 0xdf, 0x0f,
+0x00, 0xf0, 0xfb, 0xbb, 0xbf, 0xef, 0x0f, 0x00, 0xf0, 0xf7, 0x7d, 0x7f, 0xf7, 0x07, 0x00,
+0xe0, 0xef, 0xfe, 0xfe, 0xfb, 0x03, 0x00, 0xc0, 0xdf, 0x7f, 0xfc, 0xfd, 0x00, 0x00, 0x00,
+0xbf, 0x3f, 0xf8, 0x7e, 0x00, 0x00, 0x00, 0x7e, 0x1f, 0x70, 0xbf, 0x00, 0x00, 0x00, 0xfd,
+0x0e, 0xa0, 0xdf, 0x01, 0x00, 0x80, 0xfb, 0x05, 0xc0, 0xef, 0x03, 0x00, 0xc0, 0xf7, 0x03,
+0xe0, 0xf7, 0x07, 0x00, 0xe0, 0xef, 0x07, 0xf0, 0xfb, 0x0f, 0x00, 0xf0, 0xdf, 0x0f, 0xf8,
+0xf1, 0x1f, 0x00, 0xf8, 0x8f, 0x1f, 0xf8, 0xe1, 0x1f, 0x00, 0xf8, 0x87, 0x1f, 0xf0, 0xc0,
+0x1f, 0x00, 0xf8, 0x03, 0x0f, 0x60, 0x80, 0x0f, 0x00, 0xf0, 0x01, 0x06, 0x00, 0x00, 0x07,
+0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/as72o.bm b/bitmaps/as72o.bm
new file mode 100644
index 0000000..660550a
--- /dev/null
+++ b/bitmaps/as72o.bm
@@ -0,0 +1,48 @@
+#define as72o_width 72
+#define as72o_height 72
+static char as72o_bits[] = {
+0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f,
+0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00,
+0x00, 0x03, 0xc0, 0x01, 0x00, 0x80, 0x01, 0x60, 0x00, 0x00, 0x03, 0x80, 0x03, 0x00, 0xc0,
+0x00, 0x60, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x03, 0x00,
+0x0e, 0x00, 0x30, 0x00, 0x60, 0x00, 0x00, 0x03, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x60, 0x00,
+0x00, 0x03, 0x01, 0x38, 0x00, 0x0c, 0xc0, 0x60, 0x00, 0x00, 0x03, 0x03, 0x70, 0x00, 0x06,
+0x60, 0x60, 0x00, 0x00, 0x03, 0x06, 0xe0, 0x00, 0x03, 0x30, 0x60, 0x00, 0x00, 0x03, 0x0c,
+0xc0, 0x81, 0x01, 0x18, 0x60, 0x00, 0x00, 0x03, 0x18, 0x80, 0xc3, 0x00, 0x0c, 0x60, 0x00,
+0x00, 0x03, 0x30, 0x00, 0x67, 0x00, 0x06, 0x60, 0x00, 0x00, 0x06, 0x60, 0x00, 0x3e, 0x00,
+0x03, 0x70, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x1c, 0x80, 0x01, 0x38, 0x00, 0x00, 0x18, 0x80,
+0x01, 0x38, 0xc0, 0x00, 0x1c, 0x00, 0x00, 0x30, 0x00, 0x03, 0x70, 0x60, 0x00, 0x0e, 0x00,
+0x00, 0x60, 0x00, 0x06, 0xe0, 0x30, 0x00, 0x07, 0x00, 0x00, 0xc0, 0x00, 0x0c, 0xc0, 0x19,
+0x80, 0x03, 0x00, 0x00, 0x80, 0x01, 0x18, 0x80, 0x0b, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x03,
+0x30, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x0e, 0x70, 0x00, 0x00,
+0x00, 0x00, 0x0c, 0xc0, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x38,
+0x1c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x03, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x60,
+0x00, 0x06, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x0c, 0xc0, 0x03, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x01, 0x18, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x60, 0x03, 0x30, 0x00,
+0x07, 0x00, 0x00, 0x00, 0x07, 0x30, 0x06, 0x60, 0x00, 0x0e, 0xe0, 0x00, 0x80, 0x0f, 0x18,
+0x0c, 0xc0, 0x00, 0x1c, 0xf0, 0x01, 0xc0, 0x1c, 0x0c, 0x18, 0x80, 0x01, 0x38, 0x98, 0x03,
+0x60, 0x38, 0x06, 0x30, 0x00, 0x03, 0x70, 0x0c, 0x07, 0x30, 0x70, 0x03, 0x60, 0x00, 0x06,
+0xe0, 0x06, 0x0e, 0x10, 0xe0, 0x01, 0xd8, 0x00, 0x0c, 0xc0, 0x03, 0x0c, 0x10, 0xc0, 0x01,
+0x8c, 0x01, 0x18, 0x80, 0x01, 0x0c, 0x30, 0x80, 0x03, 0x06, 0x03, 0x30, 0xc0, 0x00, 0x0e,
+0x60, 0x00, 0x07, 0x03, 0x06, 0x60, 0x60, 0x00, 0x07, 0xc0, 0x00, 0x8e, 0x01, 0x0c, 0xc0,
+0x30, 0x80, 0x03, 0x80, 0x01, 0x1c, 0x00, 0x1c, 0x80, 0x18, 0xc0, 0x01, 0x00, 0x0f, 0x38,
+0x00, 0x3e, 0x00, 0x0c, 0xf8, 0x00, 0x00, 0x1e, 0x70, 0x00, 0x67, 0x00, 0x06, 0x7c, 0x00,
+0x00, 0x30, 0xe0, 0x80, 0xc3, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x60, 0xc0, 0xc1, 0x81, 0x81,
+0x01, 0x07, 0x00, 0x00, 0xf0, 0x80, 0xe3, 0x00, 0xc3, 0x80, 0x0f, 0x00, 0x00, 0x98, 0x01,
+0x77, 0x00, 0x66, 0xc0, 0x1d, 0x00, 0x00, 0x0c, 0x03, 0x3e, 0x00, 0x3c, 0xe0, 0x38, 0x00,
+0x00, 0x06, 0x06, 0x1c, 0x00, 0x18, 0x70, 0x70, 0x00, 0x00, 0x03, 0x0c, 0x38, 0x00, 0x0c,
+0x38, 0xe0, 0x00, 0x80, 0x01, 0x1c, 0x70, 0x00, 0x06, 0x1c, 0xc0, 0x01, 0xc0, 0x00, 0x3e,
+0xe0, 0x00, 0x03, 0x3e, 0x80, 0x03, 0x60, 0x00, 0x67, 0xc0, 0x81, 0x01, 0x67, 0x00, 0x07,
+0x30, 0x80, 0xc3, 0x80, 0xc3, 0x00, 0xc3, 0x00, 0x0e, 0x18, 0xc0, 0xc1, 0x00, 0x43, 0x00,
+0x83, 0x01, 0x1c, 0x18, 0xe0, 0xc0, 0x80, 0xc3, 0x80, 0x03, 0x03, 0x18, 0x18, 0x70, 0x80,
+0xc1, 0x81, 0xc1, 0x01, 0x06, 0x1c, 0x30, 0x38, 0x00, 0xe3, 0x00, 0xe3, 0x00, 0x0c, 0x0e,
+0x60, 0x1c, 0x00, 0x76, 0x00, 0x76, 0x00, 0x18, 0x07, 0xc0, 0x0e, 0x00, 0x3c, 0x00, 0x3c,
+0x00, 0xb0, 0x03, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/as72s.bm b/bitmaps/as72s.bm
new file mode 100644
index 0000000..f9bbc53
--- /dev/null
+++ b/bitmaps/as72s.bm
@@ -0,0 +1,48 @@
+#define as72s_width 72
+#define as72s_height 72
+static char as72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00,
+0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x80,
+0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0xbf, 0xff,
+0x07, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00, 0x3f, 0xff, 0x0f, 0x00, 0xf0, 0xff, 0x7e, 0x00,
+0x00, 0x7f, 0xfe, 0x1f, 0x00, 0xf8, 0x7f, 0x7e, 0x00, 0x00, 0xff, 0xfc, 0x3f, 0x00, 0xfc,
+0x3f, 0x7f, 0x00, 0x00, 0xff, 0xf9, 0x7f, 0x00, 0xfe, 0x9f, 0x7f, 0x00, 0x00, 0xff, 0xf3,
+0xff, 0x00, 0xff, 0xcf, 0x7f, 0x00, 0x00, 0xff, 0xe7, 0xff, 0x81, 0xff, 0xe7, 0x7f, 0x00,
+0x00, 0xff, 0xcf, 0xff, 0xc3, 0xff, 0xf3, 0x7f, 0x00, 0x00, 0xfe, 0x9f, 0xff, 0xe7, 0xff,
+0xf9, 0x7f, 0x00, 0x00, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f,
+0xfe, 0x9f, 0x7f, 0xfe, 0x1f, 0x00, 0x00, 0xf0, 0xff, 0xfc, 0x3f, 0x3f, 0xff, 0x0f, 0x00,
+0x00, 0xe0, 0xff, 0xf9, 0x7f, 0x9e, 0xff, 0x07, 0x00, 0x00, 0xc0, 0xff, 0xf3, 0xff, 0xcc,
+0xff, 0x03, 0x00, 0x00, 0x80, 0xff, 0xe7, 0xff, 0xf9, 0xff, 0x01, 0x00, 0x00, 0x00, 0xff,
+0xcf, 0xff, 0xf3, 0xff, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x9f, 0xff, 0xe7, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0x3f, 0xff, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0xfe, 0x9f,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xfc, 0x3f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0xf9, 0x7f, 0x06, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xf3, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x80, 0xff, 0xe7, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xcf, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x07, 0x60, 0xfe, 0x9f, 0xff, 0x07, 0xe0, 0x00, 0x80, 0x0f, 0xf0,
+0xfc, 0x3f, 0xff, 0x0f, 0xf0, 0x01, 0xc0, 0x1f, 0xf8, 0xf9, 0x7f, 0xfe, 0x1f, 0xf8, 0x03,
+0xe0, 0x3f, 0xfc, 0xf3, 0xff, 0xfc, 0x3f, 0xfc, 0x07, 0xf0, 0x7f, 0xfe, 0xe7, 0xff, 0xf9,
+0x7f, 0xfe, 0x0f, 0xf0, 0xff, 0xfc, 0xcf, 0xff, 0xf3, 0x3f, 0xff, 0x0f, 0xf0, 0xff, 0xf9,
+0x9f, 0xff, 0xe7, 0x9f, 0xff, 0x0f, 0xf0, 0xff, 0xf3, 0x3b, 0xff, 0xcf, 0xcf, 0xff, 0x0f,
+0xe0, 0xff, 0xe7, 0x79, 0xfe, 0x9f, 0xe7, 0xff, 0x07, 0xc0, 0xff, 0xcf, 0xfd, 0xfc, 0xbf,
+0xf3, 0xff, 0x03, 0x80, 0xff, 0x9f, 0xff, 0xfd, 0xff, 0xf9, 0xff, 0x01, 0x00, 0xff, 0x3f,
+0xff, 0xff, 0xff, 0xfc, 0xff, 0x00, 0x00, 0xfe, 0x7f, 0xfe, 0xe7, 0x7f, 0xfe, 0x7f, 0x00,
+0x00, 0xf0, 0xff, 0xfc, 0xc3, 0x3f, 0xff, 0x0f, 0x00, 0x00, 0xe0, 0xff, 0xf9, 0x81, 0x9f,
+0xff, 0x07, 0x00, 0x00, 0xd0, 0xff, 0xf3, 0x00, 0xcf, 0xff, 0x0b, 0x00, 0x00, 0xb8, 0xff,
+0x67, 0x00, 0xe6, 0xff, 0x1d, 0x00, 0x00, 0x7c, 0xff, 0x0f, 0x00, 0xf0, 0xff, 0x3e, 0x00,
+0x00, 0xfe, 0xfe, 0x1f, 0x00, 0xf8, 0x7f, 0x7f, 0x00, 0x00, 0xff, 0xfd, 0x3f, 0x00, 0xfc,
+0xbf, 0xff, 0x00, 0x80, 0xff, 0xfb, 0x7f, 0x00, 0xfe, 0xdf, 0xff, 0x01, 0xc0, 0xff, 0xf7,
+0xff, 0x00, 0xff, 0xef, 0xff, 0x03, 0xe0, 0xff, 0xe7, 0xff, 0x81, 0xff, 0xe7, 0xff, 0x07,
+0xf0, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0x0f, 0xf8, 0xff, 0xc1, 0xff, 0xc3, 0xff,
+0x83, 0xff, 0x1f, 0xf8, 0xff, 0xc0, 0xff, 0xc3, 0xff, 0x03, 0xff, 0x1f, 0xf8, 0x7f, 0x80,
+0xff, 0x81, 0xff, 0x01, 0xfe, 0x1f, 0xf0, 0x3f, 0x00, 0xff, 0x00, 0xff, 0x00, 0xfc, 0x0f,
+0xe0, 0x1f, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0xf8, 0x07, 0xc0, 0x0f, 0x00, 0x3c, 0x00, 0x3c,
+0x00, 0xf0, 0x03, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/as74o.bm b/bitmaps/as74o.bm
new file mode 100644
index 0000000..660550a
--- /dev/null
+++ b/bitmaps/as74o.bm
@@ -0,0 +1,48 @@
+#define as72o_width 72
+#define as72o_height 72
+static char as72o_bits[] = {
+0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f,
+0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00,
+0x00, 0x03, 0xc0, 0x01, 0x00, 0x80, 0x01, 0x60, 0x00, 0x00, 0x03, 0x80, 0x03, 0x00, 0xc0,
+0x00, 0x60, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x03, 0x00,
+0x0e, 0x00, 0x30, 0x00, 0x60, 0x00, 0x00, 0x03, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x60, 0x00,
+0x00, 0x03, 0x01, 0x38, 0x00, 0x0c, 0xc0, 0x60, 0x00, 0x00, 0x03, 0x03, 0x70, 0x00, 0x06,
+0x60, 0x60, 0x00, 0x00, 0x03, 0x06, 0xe0, 0x00, 0x03, 0x30, 0x60, 0x00, 0x00, 0x03, 0x0c,
+0xc0, 0x81, 0x01, 0x18, 0x60, 0x00, 0x00, 0x03, 0x18, 0x80, 0xc3, 0x00, 0x0c, 0x60, 0x00,
+0x00, 0x03, 0x30, 0x00, 0x67, 0x00, 0x06, 0x60, 0x00, 0x00, 0x06, 0x60, 0x00, 0x3e, 0x00,
+0x03, 0x70, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x1c, 0x80, 0x01, 0x38, 0x00, 0x00, 0x18, 0x80,
+0x01, 0x38, 0xc0, 0x00, 0x1c, 0x00, 0x00, 0x30, 0x00, 0x03, 0x70, 0x60, 0x00, 0x0e, 0x00,
+0x00, 0x60, 0x00, 0x06, 0xe0, 0x30, 0x00, 0x07, 0x00, 0x00, 0xc0, 0x00, 0x0c, 0xc0, 0x19,
+0x80, 0x03, 0x00, 0x00, 0x80, 0x01, 0x18, 0x80, 0x0b, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x03,
+0x30, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x0e, 0x70, 0x00, 0x00,
+0x00, 0x00, 0x0c, 0xc0, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x38,
+0x1c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x03, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x60,
+0x00, 0x06, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x0c, 0xc0, 0x03, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x01, 0x18, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x60, 0x03, 0x30, 0x00,
+0x07, 0x00, 0x00, 0x00, 0x07, 0x30, 0x06, 0x60, 0x00, 0x0e, 0xe0, 0x00, 0x80, 0x0f, 0x18,
+0x0c, 0xc0, 0x00, 0x1c, 0xf0, 0x01, 0xc0, 0x1c, 0x0c, 0x18, 0x80, 0x01, 0x38, 0x98, 0x03,
+0x60, 0x38, 0x06, 0x30, 0x00, 0x03, 0x70, 0x0c, 0x07, 0x30, 0x70, 0x03, 0x60, 0x00, 0x06,
+0xe0, 0x06, 0x0e, 0x10, 0xe0, 0x01, 0xd8, 0x00, 0x0c, 0xc0, 0x03, 0x0c, 0x10, 0xc0, 0x01,
+0x8c, 0x01, 0x18, 0x80, 0x01, 0x0c, 0x30, 0x80, 0x03, 0x06, 0x03, 0x30, 0xc0, 0x00, 0x0e,
+0x60, 0x00, 0x07, 0x03, 0x06, 0x60, 0x60, 0x00, 0x07, 0xc0, 0x00, 0x8e, 0x01, 0x0c, 0xc0,
+0x30, 0x80, 0x03, 0x80, 0x01, 0x1c, 0x00, 0x1c, 0x80, 0x18, 0xc0, 0x01, 0x00, 0x0f, 0x38,
+0x00, 0x3e, 0x00, 0x0c, 0xf8, 0x00, 0x00, 0x1e, 0x70, 0x00, 0x67, 0x00, 0x06, 0x7c, 0x00,
+0x00, 0x30, 0xe0, 0x80, 0xc3, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x60, 0xc0, 0xc1, 0x81, 0x81,
+0x01, 0x07, 0x00, 0x00, 0xf0, 0x80, 0xe3, 0x00, 0xc3, 0x80, 0x0f, 0x00, 0x00, 0x98, 0x01,
+0x77, 0x00, 0x66, 0xc0, 0x1d, 0x00, 0x00, 0x0c, 0x03, 0x3e, 0x00, 0x3c, 0xe0, 0x38, 0x00,
+0x00, 0x06, 0x06, 0x1c, 0x00, 0x18, 0x70, 0x70, 0x00, 0x00, 0x03, 0x0c, 0x38, 0x00, 0x0c,
+0x38, 0xe0, 0x00, 0x80, 0x01, 0x1c, 0x70, 0x00, 0x06, 0x1c, 0xc0, 0x01, 0xc0, 0x00, 0x3e,
+0xe0, 0x00, 0x03, 0x3e, 0x80, 0x03, 0x60, 0x00, 0x67, 0xc0, 0x81, 0x01, 0x67, 0x00, 0x07,
+0x30, 0x80, 0xc3, 0x80, 0xc3, 0x00, 0xc3, 0x00, 0x0e, 0x18, 0xc0, 0xc1, 0x00, 0x43, 0x00,
+0x83, 0x01, 0x1c, 0x18, 0xe0, 0xc0, 0x80, 0xc3, 0x80, 0x03, 0x03, 0x18, 0x18, 0x70, 0x80,
+0xc1, 0x81, 0xc1, 0x01, 0x06, 0x1c, 0x30, 0x38, 0x00, 0xe3, 0x00, 0xe3, 0x00, 0x0c, 0x0e,
+0x60, 0x1c, 0x00, 0x76, 0x00, 0x76, 0x00, 0x18, 0x07, 0xc0, 0x0e, 0x00, 0x3c, 0x00, 0x3c,
+0x00, 0xb0, 0x03, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/bitmaps.h b/bitmaps/bitmaps.h
index 86a0c08..cb06cef 100644
--- a/bitmaps/bitmaps.h
+++ b/bitmaps/bitmaps.h
@@ -1,367 +1,535 @@
-/*
- * bitmaps.h - Include bitmap files for pieces and icons
- * $Id: bitmaps.h,v 2.1 2003/10/27 19:21:01 mann Exp $
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 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 XBoard distributed
- * by the Free Software Foundation:
- * ------------------------------------------------------------------------
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- *
- * See the file ChangeLog for a revision history.
- */
-
-#include "p129s.bm"
-#include "n129s.bm"
-#include "b129s.bm"
-#include "r129s.bm"
-#include "q129s.bm"
-#include "k129s.bm"
-
-#include "p129o.bm"
-#include "n129o.bm"
-#include "b129o.bm"
-#include "r129o.bm"
-#include "q129o.bm"
-#include "k129o.bm"
-
-#include "p116s.bm"
-#include "n116s.bm"
-#include "b116s.bm"
-#include "r116s.bm"
-#include "q116s.bm"
-#include "k116s.bm"
-
-#include "p116o.bm"
-#include "n116o.bm"
-#include "b116o.bm"
-#include "r116o.bm"
-#include "q116o.bm"
-#include "k116o.bm"
-
-#include "p108s.bm"
-#include "n108s.bm"
-#include "b108s.bm"
-#include "r108s.bm"
-#include "q108s.bm"
-#include "k108s.bm"
-
-#include "p108o.bm"
-#include "n108o.bm"
-#include "b108o.bm"
-#include "r108o.bm"
-#include "q108o.bm"
-#include "k108o.bm"
-
-#include "p95s.bm"
-#include "n95s.bm"
-#include "b95s.bm"
-#include "r95s.bm"
-#include "q95s.bm"
-#include "k95s.bm"
-
-#include "p95o.bm"
-#include "n95o.bm"
-#include "b95o.bm"
-#include "r95o.bm"
-#include "q95o.bm"
-#include "k95o.bm"
-
-#include "p87s.bm"
-#include "n87s.bm"
-#include "b87s.bm"
-#include "r87s.bm"
-#include "q87s.bm"
-#include "k87s.bm"
-
-#include "p87o.bm"
-#include "n87o.bm"
-#include "b87o.bm"
-#include "r87o.bm"
-#include "q87o.bm"
-#include "k87o.bm"
-
-#include "p80s.bm"
-#include "n80s.bm"
-#include "b80s.bm"
-#include "r80s.bm"
-#include "q80s.bm"
-#include "k80s.bm"
-
-#include "p80o.bm"
-#include "n80o.bm"
-#include "b80o.bm"
-#include "r80o.bm"
-#include "q80o.bm"
-#include "k80o.bm"
-
-#include "p72s.bm"
-#include "n72s.bm"
-#include "b72s.bm"
-#include "r72s.bm"
-#include "q72s.bm"
-#include "k72s.bm"
-
-#include "p72o.bm"
-#include "n72o.bm"
-#include "b72o.bm"
-#include "r72o.bm"
-#include "q72o.bm"
-#include "k72o.bm"
-
-#include "p64s.bm"
-#include "n64s.bm"
-#include "b64s.bm"
-#include "r64s.bm"
-#include "q64s.bm"
-#include "k64s.bm"
-
-#include "p64o.bm"
-#include "n64o.bm"
-#include "b64o.bm"
-#include "r64o.bm"
-#include "q64o.bm"
-#include "k64o.bm"
-
-#include "p58s.bm"
-#include "n58s.bm"
-#include "b58s.bm"
-#include "r58s.bm"
-#include "q58s.bm"
-#include "k58s.bm"
-
-#include "p58o.bm"
-#include "n58o.bm"
-#include "b58o.bm"
-#include "r58o.bm"
-#include "q58o.bm"
-#include "k58o.bm"
-
-#include "p54s.bm"
-#include "n54s.bm"
-#include "b54s.bm"
-#include "r54s.bm"
-#include "q54s.bm"
-#include "k54s.bm"
-
-#include "p54o.bm"
-#include "n54o.bm"
-#include "b54o.bm"
-#include "r54o.bm"
-#include "q54o.bm"
-#include "k54o.bm"
-
-#include "p49s.bm"
-#include "n49s.bm"
-#include "b49s.bm"
-#include "r49s.bm"
-#include "q49s.bm"
-#include "k49s.bm"
-
-#include "p49o.bm"
-#include "n49o.bm"
-#include "b49o.bm"
-#include "r49o.bm"
-#include "q49o.bm"
-#include "k49o.bm"
-
-#include "p45s.bm"
-#include "n45s.bm"
-#include "b45s.bm"
-#include "r45s.bm"
-#include "q45s.bm"
-#include "k45s.bm"
-
-#include "p45o.bm"
-#include "n45o.bm"
-#include "b45o.bm"
-#include "r45o.bm"
-#include "q45o.bm"
-#include "k45o.bm"
-
-#include "p40s.bm"
-#include "n40s.bm"
-#include "b40s.bm"
-#include "r40s.bm"
-#include "q40s.bm"
-#include "k40s.bm"
-
-#include "p40o.bm"
-#include "n40o.bm"
-#include "b40o.bm"
-#include "r40o.bm"
-#include "q40o.bm"
-#include "k40o.bm"
-
-#include "p37s.bm"
-#include "n37s.bm"
-#include "b37s.bm"
-#include "r37s.bm"
-#include "q37s.bm"
-#include "k37s.bm"
-
-#include "p37o.bm"
-#include "n37o.bm"
-#include "b37o.bm"
-#include "r37o.bm"
-#include "q37o.bm"
-#include "k37o.bm"
-
-#include "p33s.bm"
-#include "n33s.bm"
-#include "b33s.bm"
-#include "r33s.bm"
-#include "q33s.bm"
-#include "k33s.bm"
-
-#include "p33o.bm"
-#include "n33o.bm"
-#include "b33o.bm"
-#include "r33o.bm"
-#include "q33o.bm"
-#include "k33o.bm"
-
-#include "p29s.bm"
-#include "n29s.bm"
-#include "b29s.bm"
-#include "r29s.bm"
-#include "q29s.bm"
-#include "k29s.bm"
-
-#include "p29o.bm"
-#include "n29o.bm"
-#include "b29o.bm"
-#include "r29o.bm"
-#include "q29o.bm"
-#include "k29o.bm"
-
-#include "p25s.bm"
-#include "n25s.bm"
-#include "b25s.bm"
-#include "r25s.bm"
-#include "q25s.bm"
-#include "k25s.bm"
-
-#include "p25o.bm"
-#include "n25o.bm"
-#include "b25o.bm"
-#include "r25o.bm"
-#include "q25o.bm"
-#include "k25o.bm"
-
-#include "p21s.bm"
-#include "n21s.bm"
-#include "b21s.bm"
-#include "r21s.bm"
-#include "q21s.bm"
-#include "k21s.bm"
-
-#include "p21o.bm"
-#include "n21o.bm"
-#include "b21o.bm"
-#include "r21o.bm"
-#include "q21o.bm"
-#include "k21o.bm"
-
-typedef struct {
-    int squareSize;
-    unsigned char *bits[2][6];
-} BuiltInBits;
-
-BuiltInBits builtInBits[] = {\
-{ 129,\
-  { { p129s_bits, n129s_bits, b129s_bits, r129s_bits, q129s_bits, k129s_bits },\
-    { p129o_bits, n129o_bits, b129o_bits, r129o_bits, q129o_bits, k129o_bits } } },\
-{ 116,\
-  { { p116s_bits, n116s_bits, b116s_bits, r116s_bits, q116s_bits, k116s_bits },\
-    { p116o_bits, n116o_bits, b116o_bits, r116o_bits, q116o_bits, k116o_bits } } },\
-{ 108,\
-  { { p108s_bits, n108s_bits, b108s_bits, r108s_bits, q108s_bits, k108s_bits },\
-    { p108o_bits, n108o_bits, b108o_bits, r108o_bits, q108o_bits, k108o_bits } } },\
-{ 95,\
-  { { p95s_bits, n95s_bits, b95s_bits, r95s_bits, q95s_bits, k95s_bits },\
-    { p95o_bits, n95o_bits, b95o_bits, r95o_bits, q95o_bits, k95o_bits } } },\
-{ 87,\
-  { { p87s_bits, n87s_bits, b87s_bits, r87s_bits, q87s_bits, k87s_bits },\
-    { p87o_bits, n87o_bits, b87o_bits, r87o_bits, q87o_bits, k87o_bits } } },\
-{ 80,\
-  { { p80s_bits, n80s_bits, b80s_bits, r80s_bits, q80s_bits, k80s_bits },\
-    { p80o_bits, n80o_bits, b80o_bits, r80o_bits, q80o_bits, k80o_bits } } },\
-{ 72,\
-  { { p72s_bits, n72s_bits, b72s_bits, r72s_bits, q72s_bits, k72s_bits },\
-    { p72o_bits, n72o_bits, b72o_bits, r72o_bits, q72o_bits, k72o_bits } } },\
-{ 64,\
-  { { p64s_bits, n64s_bits, b64s_bits, r64s_bits, q64s_bits, k64s_bits },\
-    { p64o_bits, n64o_bits, b64o_bits, r64o_bits, q64o_bits, k64o_bits } } },\
-{ 58,\
-  { { p58s_bits, n58s_bits, b58s_bits, r58s_bits, q58s_bits, k58s_bits },\
-    { p58o_bits, n58o_bits, b58o_bits, r58o_bits, q58o_bits, k58o_bits } } },\
-{ 54,\
-  { { p54s_bits, n54s_bits, b54s_bits, r54s_bits, q54s_bits, k54s_bits },\
-    { p54o_bits, n54o_bits, b54o_bits, r54o_bits, q54o_bits, k54o_bits } } },\
-{ 49,\
-  { { p49s_bits, n49s_bits, b49s_bits, r49s_bits, q49s_bits, k49s_bits },\
-    { p49o_bits, n49o_bits, b49o_bits, r49o_bits, q49o_bits, k49o_bits } } },\
-{ 45,\
-  { { p45s_bits, n45s_bits, b45s_bits, r45s_bits, q45s_bits, k45s_bits },\
-    { p45o_bits, n45o_bits, b45o_bits, r45o_bits, q45o_bits, k45o_bits } } },\
-{ 40,\
-  { { p40s_bits, n40s_bits, b40s_bits, r40s_bits, q40s_bits, k40s_bits },\
-    { p40o_bits, n40o_bits, b40o_bits, r40o_bits, q40o_bits, k40o_bits } } },\
-{ 37,\
-  { { p37s_bits, n37s_bits, b37s_bits, r37s_bits, q37s_bits, k37s_bits },\
-    { p37o_bits, n37o_bits, b37o_bits, r37o_bits, q37o_bits, k37o_bits } } },\
-{ 33,\
-  { { p33s_bits, n33s_bits, b33s_bits, r33s_bits, q33s_bits, k33s_bits },\
-    { p33o_bits, n33o_bits, b33o_bits, r33o_bits, q33o_bits, k33o_bits } } },\
-{ 29,\
-  { { p29s_bits, n29s_bits, b29s_bits, r29s_bits, q29s_bits, k29s_bits },\
-    { p29o_bits, n29o_bits, b29o_bits, r29o_bits, q29o_bits, k29o_bits } } },\
-{ 25,\
-  { { p25s_bits, n25s_bits, b25s_bits, r25s_bits, q25s_bits, k25s_bits },\
-    { p25o_bits, n25o_bits, b25o_bits, r25o_bits, q25o_bits, k25o_bits } } },\
-{ 21,\
-  { { p21s_bits, n21s_bits, b21s_bits, r21s_bits, q21s_bits, k21s_bits },\
-    { p21o_bits, n21o_bits, b21o_bits, r21o_bits, q21o_bits, k21o_bits } } },\
-{ 0,\
-  { { NULL, NULL, NULL, NULL, NULL, NULL },\
-    { NULL, NULL, NULL, NULL, NULL, NULL } } }\
-};
-
+/*
+ * bitmaps.h - Include bitmap files for pieces and icons
+ * $Id: bitmaps.h,v 2.1 2003/10/27 19:21:01 mann Exp $
+ *
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 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 XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+// [HGM] Note: the bitmaps for Shogi promoted pieces are #included, but not referred to in the list bitmapBits.
+//       The front-end would have to substitutes them for some listed pieces, in variant shogi.
+//       It would also have to replace the Queen bitmap with that of the Lance.
+//       The Japanese-style Shogi symbols for size 58 are not included at all. To have those
+//       you would have to convert the WinBoard .bmp files in the shogibitmaps folder with convert.c
+
+
+#include "p129s.bm"
+#include "n129s.bm"
+#include "b129s.bm"
+#include "r129s.bm"
+#include "q129s.bm"
+#include "k129s.bm"
+
+#include "p129o.bm"
+#include "n129o.bm"
+#include "b129o.bm"
+#include "r129o.bm"
+#include "q129o.bm"
+#include "k129o.bm"
+
+#include "p116s.bm"
+#include "n116s.bm"
+#include "b116s.bm"
+#include "r116s.bm"
+#include "q116s.bm"
+#include "k116s.bm"
+
+#include "p116o.bm"
+#include "n116o.bm"
+#include "b116o.bm"
+#include "r116o.bm"
+#include "q116o.bm"
+#include "k116o.bm"
+
+#include "p108s.bm"
+#include "n108s.bm"
+#include "b108s.bm"
+#include "r108s.bm"
+#include "q108s.bm"
+#include "k108s.bm"
+
+#include "p108o.bm"
+#include "n108o.bm"
+#include "b108o.bm"
+#include "r108o.bm"
+#include "q108o.bm"
+#include "k108o.bm"
+
+#include "p95s.bm"
+#include "n95s.bm"
+#include "b95s.bm"
+#include "r95s.bm"
+#include "q95s.bm"
+#include "k95s.bm"
+
+#include "p95o.bm"
+#include "n95o.bm"
+#include "b95o.bm"
+#include "r95o.bm"
+#include "q95o.bm"
+#include "k95o.bm"
+
+#include "p87s.bm"
+#include "n87s.bm"
+#include "b87s.bm"
+#include "r87s.bm"
+#include "q87s.bm"
+#include "k87s.bm"
+
+#include "p87o.bm"
+#include "n87o.bm"
+#include "b87o.bm"
+#include "r87o.bm"
+#include "q87o.bm"
+#include "k87o.bm"
+
+#include "p80s.bm"
+#include "n80s.bm"
+#include "b80s.bm"
+#include "r80s.bm"
+#include "q80s.bm"
+#include "k80s.bm"
+
+#include "p80o.bm"
+#include "n80o.bm"
+#include "b80o.bm"
+#include "r80o.bm"
+#include "q80o.bm"
+#include "k80o.bm"
+
+#include "p72s.bm"
+#include "n72s.bm"
+#include "b72s.bm"
+#include "r72s.bm"
+#include "q72s.bm"
+#include "f72s.bm"
+#include "e72s.bm"
+#include "a72s.bm"
+#include "c72s.bm"
+#include "w72s.bm"
+#include "m72s.bm"
+#include "o72s.bm"
+#include "h72s.bm"
+#include "dk72s.bm"
+#include "g72s.bm"
+#include "v72s.bm"
+#include "l72s.bm"
+#include "s72s.bm"
+#include "u72s.bm"
+#include "k72s.bm"
+#include "wp72s.bm"
+#include "wl72s.bm"
+#include "wn72s.bm"
+#include "ws72s.bm"
+#include "as72s.bm"
+#include "cv72s.bm"
+#include "d72s.bm"
+
+#include "p72o.bm"
+#include "n72o.bm"
+#include "b72o.bm"
+#include "r72o.bm"
+#include "q72o.bm"
+#include "f72o.bm"
+#include "e72o.bm"
+#include "a72o.bm"
+#include "c72o.bm"
+#include "w72o.bm"
+#include "m72o.bm"
+#include "o72o.bm"
+#include "h72o.bm"
+#include "dk72o.bm"
+#include "g72o.bm"
+#include "v72o.bm"
+#include "l72o.bm"
+#include "s72o.bm"
+#include "u72o.bm"
+#include "k72o.bm"
+#include "wp72o.bm"
+#include "wl72o.bm"
+#include "wn72o.bm"
+#include "ws72o.bm"
+#include "as72o.bm"
+#include "cv72o.bm"
+#include "d72o.bm"
+
+#include "p64s.bm"
+#include "n64s.bm"
+#include "b64s.bm"
+#include "r64s.bm"
+#include "q64s.bm"
+#include "a64s.bm"
+#include "c64s.bm"
+#include "cv64s.bm"
+#include "l64s.bm"
+#include "k64s.bm"
+
+#include "p64o.bm"
+#include "n64o.bm"
+#include "b64o.bm"
+#include "r64o.bm"
+#include "q64o.bm"
+#include "a64o.bm"
+#include "c64o.bm"
+#include "cv64o.bm"
+#include "l64o.bm"
+#include "k64o.bm"
+
+#include "p58s.bm"
+#include "n58s.bm"
+#include "b58s.bm"
+#include "r58s.bm"
+#include "q58s.bm"
+#include "a58s.bm"
+#include "c58s.bm"
+#include "cv58s.bm"
+#include "l58s.bm"
+#include "k58s.bm"
+
+#include "p58o.bm"
+#include "n58o.bm"
+#include "b58o.bm"
+#include "r58o.bm"
+#include "q58o.bm"
+#include "a58o.bm"
+#include "c58o.bm"
+#include "cv58o.bm"
+#include "l58o.bm"
+#include "k58o.bm"
+
+#include "p54s.bm"
+#include "n54s.bm"
+#include "b54s.bm"
+#include "r54s.bm"
+#include "q54s.bm"
+#include "a54s.bm"
+#include "c54s.bm"
+#include "cv54s.bm"
+#include "l54s.bm"
+#include "k54s.bm"
+
+#include "p54o.bm"
+#include "n54o.bm"
+#include "b54o.bm"
+#include "r54o.bm"
+#include "q54o.bm"
+#include "a54o.bm"
+#include "c54o.bm"
+#include "cv54o.bm"
+#include "l54o.bm"
+#include "k54o.bm"
+
+#include "p49s.bm"
+#include "n49s.bm"
+#include "b49s.bm"
+#include "r49s.bm"
+#include "q49s.bm"
+#include "f49s.bm"
+#include "e49s.bm"
+#include "a49s.bm"
+#include "c49s.bm"
+#include "w49s.bm"
+#include "m49s.bm"
+#include "o49s.bm"
+#include "h49s.bm"
+#include "dk49s.bm"
+#include "g49s.bm"
+#include "v49s.bm"
+#include "l49s.bm"
+#include "s49s.bm"
+#include "u49s.bm"
+#include "k49s.bm"
+#include "wp49s.bm"
+#include "wl49s.bm"
+#include "wn49s.bm"
+#include "ws49s.bm"
+#include "as49s.bm"
+#include "cv49s.bm"
+#include "d49s.bm"
+
+#include "p49o.bm"
+#include "n49o.bm"
+#include "b49o.bm"
+#include "r49o.bm"
+#include "q49o.bm"
+#include "f49o.bm"
+#include "e49o.bm"
+#include "a49o.bm"
+#include "c49o.bm"
+#include "w49o.bm"
+#include "m49o.bm"
+#include "o49o.bm"
+#include "h49o.bm"
+#include "dk49o.bm"
+#include "g49o.bm"
+#include "v49o.bm"
+#include "l49o.bm"
+#include "s49o.bm"
+#include "u49o.bm"
+#include "k49o.bm"
+#include "wp49o.bm"
+#include "wl49o.bm"
+#include "wn49o.bm"
+#include "ws49o.bm"
+#include "as49o.bm"
+#include "cv49o.bm"
+#include "d49o.bm"
+
+#include "p45s.bm"
+#include "n45s.bm"
+#include "b45s.bm"
+#include "r45s.bm"
+#include "q45s.bm"
+#include "a45s.bm"
+#include "c45s.bm"
+#include "cv45s.bm"
+#include "l45s.bm"
+#include "k45s.bm"
+
+#include "p45o.bm"
+#include "n45o.bm"
+#include "b45o.bm"
+#include "r45o.bm"
+#include "q45o.bm"
+#include "a45o.bm"
+#include "c45o.bm"
+#include "cv45o.bm"
+#include "l45o.bm"
+#include "k45o.bm"
+
+#include "p40s.bm"
+#include "n40s.bm"
+#include "b40s.bm"
+#include "r40s.bm"
+#include "q40s.bm"
+#include "a40s.bm"
+#include "c40s.bm"
+#include "cv40s.bm"
+#include "l40s.bm"
+#include "k40s.bm"
+
+#include "p40o.bm"
+#include "n40o.bm"
+#include "b40o.bm"
+#include "r40o.bm"
+#include "q40o.bm"
+#include "a40o.bm"
+#include "c40o.bm"
+#include "cv40o.bm"
+#include "l40o.bm"
+#include "k40o.bm"
+
+#include "p37s.bm"
+#include "n37s.bm"
+#include "b37s.bm"
+#include "r37s.bm"
+#include "q37s.bm"
+#include "a37s.bm"
+#include "c37s.bm"
+#include "cv37s.bm"
+#include "l37s.bm"
+#include "k37s.bm"
+
+#include "p37o.bm"
+#include "n37o.bm"
+#include "b37o.bm"
+#include "r37o.bm"
+#include "q37o.bm"
+#include "a37o.bm"
+#include "c37o.bm"
+#include "cv37o.bm"
+#include "l37o.bm"
+#include "k37o.bm"
+
+#include "p33s.bm"
+#include "n33s.bm"
+#include "b33s.bm"
+#include "r33s.bm"
+#include "q33s.bm"
+#include "f33s.bm"
+#include "e33s.bm"
+#include "a33s.bm"
+#include "c33s.bm"
+#include "w33s.bm"
+#include "m33s.bm"
+#include "o33s.bm"
+#include "h33s.bm"
+#include "dk33s.bm"
+#include "g33s.bm"
+#include "cv33s.bm"
+#include "l33s.bm"
+#include "k33s.bm"
+#include "as33s.bm"
+
+#include "p33o.bm"
+#include "n33o.bm"
+#include "b33o.bm"
+#include "r33o.bm"
+#include "q33o.bm"
+#include "f33o.bm"
+#include "e33o.bm"
+#include "a33o.bm"
+#include "c33o.bm"
+#include "w33o.bm"
+#include "m33o.bm"
+#include "o33o.bm"
+#include "h33o.bm"
+#include "dk33o.bm"
+#include "g33o.bm"
+#include "cv33o.bm"
+#include "l33o.bm"
+#include "k33o.bm"
+#include "as33o.bm"
+
+#include "p29s.bm"
+#include "n29s.bm"
+#include "b29s.bm"
+#include "r29s.bm"
+#include "q29s.bm"
+#include "k29s.bm"
+
+#include "p29o.bm"
+#include "n29o.bm"
+#include "b29o.bm"
+#include "r29o.bm"
+#include "q29o.bm"
+#include "k29o.bm"
+
+#include "p25s.bm"
+#include "n25s.bm"
+#include "b25s.bm"
+#include "r25s.bm"
+#include "q25s.bm"
+#include "k25s.bm"
+
+#include "p25o.bm"
+#include "n25o.bm"
+#include "b25o.bm"
+#include "r25o.bm"
+#include "q25o.bm"
+#include "k25o.bm"
+
+#include "p21s.bm"
+#include "n21s.bm"
+#include "b21s.bm"
+#include "r21s.bm"
+#include "q21s.bm"
+#include "k21s.bm"
+
+#include "p21o.bm"
+#include "n21o.bm"
+#include "b21o.bm"
+#include "r21o.bm"
+#include "q21o.bm"
+#include "k21o.bm"
+
+typedef struct {
+    int squareSize;
+    unsigned char *bits[2][(int)BlackPawn];
+} BuiltInBits;
+
+BuiltInBits builtInBits[] = {\
+{ 129,\
+  { { p129s_bits, n129s_bits, b129s_bits, r129s_bits, q129s_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k129s_bits },\
+    { p129o_bits, n129o_bits, b129o_bits, r129o_bits, q129o_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k129o_bits } } },\
+{ 116,\
+  { { p116s_bits, n116s_bits, b116s_bits, r116s_bits, q116s_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k116s_bits },\
+    { p116o_bits, n116o_bits, b116o_bits, r116o_bits, q116o_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k116o_bits } } },\
+{ 108,\
+  { { p108s_bits, n108s_bits, b108s_bits, r108s_bits, q108s_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k108s_bits },\
+    { p108o_bits, n108o_bits, b108o_bits, r108o_bits, q108o_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k108o_bits } } },\
+{ 95,\
+  { { p95s_bits, n95s_bits, b95s_bits, r95s_bits, q95s_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k95s_bits },\
+    { p95o_bits, n95o_bits, b95o_bits, r95o_bits, q95o_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k95o_bits } } },\
+{ 87,\
+  { { p87s_bits, n87s_bits, b87s_bits, r87s_bits, q87s_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k87s_bits },\
+    { p87o_bits, n87o_bits, b87o_bits, r87o_bits, q87o_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k87o_bits } } },\
+{ 80,\
+  { { p80s_bits, n80s_bits, b80s_bits, r80s_bits, q80s_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k80s_bits },\
+    { p80o_bits, n80o_bits, b80o_bits, r80o_bits, q80o_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k80o_bits } } },\
+{ 72,\
+  { { p72s_bits, n72s_bits, b72s_bits, r72s_bits, q72s_bits, f72s_bits, e72s_bits, as72s_bits, c72s_bits, w72s_bits, m72s_bits, o72s_bits, h72s_bits, a72s_bits, dk72s_bits, g72s_bits, cv72s_bits, v72s_bits, l72s_bits, s72s_bits, u72s_bits, k72s_bits },\
+    { p72o_bits, n72o_bits, b72o_bits, r72o_bits, q72o_bits, f72o_bits, e72o_bits, as72o_bits, c72o_bits, w72o_bits, m72o_bits, o72o_bits, h72o_bits, a72o_bits, dk72o_bits, g72o_bits, cv72o_bits, v72o_bits, l72o_bits, s72o_bits, u72o_bits, k72o_bits } } },\
+{ 64,\
+  { { p64s_bits, n64s_bits, b64s_bits, r64s_bits, q64s_bits, l64s_bits, l64s_bits, a64s_bits, c64s_bits, l64s_bits, l64s_bits, l64s_bits, l64s_bits, l64s_bits, l64s_bits, l64s_bits, cv64s_bits, l64s_bits, l64s_bits, l64s_bits, l64s_bits, k64s_bits },\
+    { p64o_bits, n64o_bits, b64o_bits, r64o_bits, q64o_bits, l64o_bits, l64o_bits, a64o_bits, c64o_bits, l64o_bits, l64o_bits, l64o_bits, l64o_bits, l64o_bits, l64o_bits, l64o_bits, cv64o_bits, l64o_bits, l64o_bits, l64o_bits, l64o_bits, k64o_bits } } },\
+{ 58,\
+  { { p58s_bits, n58s_bits, b58s_bits, r58s_bits, q58s_bits, l58s_bits, l58s_bits, a58s_bits, c58s_bits, l58s_bits, l58s_bits, l58s_bits, l58s_bits, l58s_bits, l58s_bits, l58s_bits, cv58s_bits, l58s_bits, l58s_bits, l58s_bits, l58s_bits, k58s_bits },\
+    { p58o_bits, n58o_bits, b58o_bits, r58o_bits, q58o_bits, l58o_bits, l58o_bits, a58o_bits, c58o_bits, l58o_bits, l58o_bits, l58o_bits, l58o_bits, l58o_bits, l58o_bits, l58o_bits, cv58o_bits, l58o_bits, l58o_bits, l58o_bits, l58o_bits, k58o_bits } } },\
+{ 54,\
+  { { p54s_bits, n54s_bits, b54s_bits, r54s_bits, q54s_bits, l54s_bits, l54s_bits, a54s_bits, c54s_bits, l54s_bits, l54s_bits, l54s_bits, l54s_bits, l54s_bits, l54s_bits, l54s_bits, cv54s_bits, l54s_bits, l54s_bits, l54s_bits, l54s_bits, k54s_bits },\
+    { p54o_bits, n54o_bits, b54o_bits, r54o_bits, q54o_bits, l54o_bits, l54o_bits, a54o_bits, c54o_bits, l54o_bits, l54o_bits, l54o_bits, l54o_bits, l54o_bits, l54o_bits, l54o_bits, cv54o_bits, l54o_bits, l54o_bits, l54o_bits, l54o_bits, k54o_bits } } },\
+{ 49,\
+  { { p49s_bits, n49s_bits, b49s_bits, r49s_bits, q49s_bits, f49s_bits, e49s_bits, as49s_bits, c49s_bits, w49s_bits, m49s_bits, o49s_bits, h49s_bits, a49s_bits, dk49s_bits, g49s_bits, cv49s_bits, v49s_bits, l49s_bits, s49s_bits, u49s_bits, k49s_bits },\
+    { p49o_bits, n49o_bits, b49o_bits, r49o_bits, q49o_bits, f49o_bits, e49o_bits, as49o_bits, c49o_bits, w49o_bits, m49o_bits, o49o_bits, h49o_bits, a49s_bits, dk49o_bits, g49o_bits, cv49o_bits, v49o_bits, l49o_bits, s49o_bits, u49o_bits, k49o_bits } } },\
+{ 45,\
+  { { p45s_bits, n45s_bits, b45s_bits, r45s_bits, q45s_bits, l45s_bits, l45s_bits, a45s_bits, c45s_bits, l45s_bits, l45s_bits, l45s_bits, l45s_bits, l45s_bits, l45s_bits, l45s_bits, cv45s_bits, l45s_bits, l45s_bits, l45s_bits, l45s_bits, k45s_bits },\
+    { p45o_bits, n45o_bits, b45o_bits, r45o_bits, q45o_bits, l45o_bits, l45o_bits, a45o_bits, c45o_bits, l45o_bits, l45o_bits, l45o_bits, l45o_bits, l45o_bits, l45o_bits, l45o_bits, cv45o_bits, l45o_bits, l45o_bits, l45o_bits, l45o_bits, k45o_bits } } },\
+{ 40,\
+  { { p40s_bits, n40s_bits, b40s_bits, r40s_bits, q40s_bits, l40s_bits, l40s_bits, a40s_bits, c40s_bits, l40s_bits, l40s_bits, l40s_bits, l40s_bits, l40s_bits, l40s_bits, l40s_bits, cv40s_bits, l40s_bits, l40s_bits, l40s_bits, l40s_bits, k40s_bits },\
+    { p40o_bits, n40o_bits, b40o_bits, r40o_bits, q40o_bits, l40o_bits, l40o_bits, a40o_bits, c40o_bits, l40o_bits, l40o_bits, l40o_bits, l40o_bits, l40o_bits, l40o_bits, l40o_bits, cv40o_bits, l40o_bits, l40o_bits, l40o_bits, l40o_bits, k40o_bits } } },\
+{ 37,\
+  { { p37s_bits, n37s_bits, b37s_bits, r37s_bits, q37s_bits, l37s_bits, l37s_bits, a37s_bits, c37s_bits, l37s_bits, l37s_bits, l37s_bits, l37s_bits, l37s_bits, l37s_bits, l37s_bits, cv37s_bits, l37s_bits, l37s_bits, l37s_bits, l37s_bits, k37s_bits },\
+    { p37o_bits, n37o_bits, b37o_bits, r37o_bits, q37o_bits, l37o_bits, l37o_bits, a37o_bits, c37o_bits, l37o_bits, l37o_bits, l37o_bits, l37o_bits, l37o_bits, l37o_bits, l37o_bits, cv37o_bits, l37o_bits, l37o_bits, l37o_bits, l37o_bits, k37o_bits } } },\
+{ 33,\
+  { { p33s_bits, n33s_bits, b33s_bits, r33s_bits, q33s_bits, f33s_bits, e33s_bits, as33s_bits, c33s_bits, w33s_bits, m33s_bits, o33s_bits, h33s_bits, a33s_bits, dk33s_bits, g33s_bits, cv33s_bits, l33s_bits, cv33s_bits, l33s_bits, l33s_bits, k33s_bits },\
+    { p33o_bits, n33o_bits, b33o_bits, r33o_bits, q33o_bits, f33o_bits, e33o_bits, as33o_bits, c33o_bits, w33o_bits, m33o_bits, o33o_bits, h33o_bits, a33o_bits, dk33o_bits, g33o_bits, cv33o_bits, l33o_bits, cv33o_bits, l33o_bits, l33o_bits, k33o_bits } } },\
+{ 29,\
+  { { p29s_bits, n29s_bits, b29s_bits, r29s_bits, q29s_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k29s_bits },\
+    { p29o_bits, n29o_bits, b29o_bits, r29o_bits, q29o_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k29o_bits } } },\
+{ 25,\
+  { { p25s_bits, n25s_bits, b25s_bits, r25s_bits, q25s_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k25s_bits },\
+    { p25o_bits, n25o_bits, b25o_bits, r25o_bits, q25o_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k25o_bits } } },\
+{ 21,\
+  { { p21s_bits, n21s_bits, b21s_bits, r21s_bits, q21s_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k21s_bits },\
+    { p21o_bits, n21o_bits, b21o_bits, r21o_bits, q21o_bits, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, k21o_bits } } },\
+{ 0,\
+  { { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },\
+    { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } } }\
+};
+
+
diff --git a/bitmaps/c33o.bm b/bitmaps/c33o.bm
new file mode 100644
index 0000000..2304c5c
--- /dev/null
+++ b/bitmaps/c33o.bm
@@ -0,0 +1,16 @@
+#define c33o_width 33
+#define c33o_height 33
+static char c33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00,
+0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00,
+0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x30, 0x10, 0x08, 0x0c, 0x00,
+0xc8, 0x0f, 0xf0, 0x13, 0x00, 0x48, 0xc0, 0x03, 0x12, 0x00, 0x30, 0x30, 0x0c, 0x0c, 0x00,
+0x40, 0x10, 0x08, 0x02, 0x00, 0x40, 0x08, 0x10, 0x02, 0x00, 0x80, 0x08, 0x10, 0x01, 0x00,
+0x80, 0x04, 0x20, 0x01, 0x00, 0x00, 0x05, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x20, 0x01, 0x00,
+0x80, 0x08, 0x10, 0x01, 0x00, 0x40, 0x08, 0x10, 0x02, 0x00, 0x40, 0x10, 0x08, 0x02, 0x00,
+0x30, 0x30, 0x0c, 0x0c, 0x00, 0x48, 0xc0, 0x03, 0x12, 0x00, 0xc8, 0x0f, 0xf0, 0x13, 0x00,
+0x30, 0x10, 0x08, 0x0c, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00,
+0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00,
+0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/c33s.bm b/bitmaps/c33s.bm
new file mode 100644
index 0000000..9ca263a
--- /dev/null
+++ b/bitmaps/c33s.bm
@@ -0,0 +1,16 @@
+#define c33s_width 33
+#define c33s_height 33
+static char c33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00,
+0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00,
+0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x30, 0xf0, 0x0f, 0x0c, 0x00,
+0xc8, 0xff, 0xff, 0x13, 0x00, 0xc8, 0x3f, 0xfc, 0x13, 0x00, 0xf0, 0xcf, 0xf3, 0x0f, 0x00,
+0xc0, 0xef, 0xf7, 0x03, 0x00, 0xc0, 0xf7, 0xef, 0x03, 0x00, 0x80, 0xf7, 0xef, 0x01, 0x00,
+0x80, 0xfb, 0xdf, 0x01, 0x00, 0x00, 0xfb, 0xdf, 0x00, 0x00, 0x80, 0xfb, 0xdf, 0x01, 0x00,
+0x80, 0xf7, 0xef, 0x01, 0x00, 0xc0, 0xf7, 0xef, 0x03, 0x00, 0xc0, 0xef, 0xf7, 0x03, 0x00,
+0xf0, 0xcf, 0xf3, 0x0f, 0x00, 0xc8, 0x3f, 0xfc, 0x13, 0x00, 0xc8, 0xff, 0xff, 0x13, 0x00,
+0x30, 0xf0, 0x0f, 0x0c, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00,
+0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00,
+0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/c37o.bm b/bitmaps/c37o.bm
new file mode 100644
index 0000000..63568d0
--- /dev/null
+++ b/bitmaps/c37o.bm
@@ -0,0 +1,17 @@
+#define c37o_width 37
+#define c37o_height 37
+static char c37o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x38, 0x80, 0x20, 0x80, 0x03,
+0x44, 0x40, 0x40, 0x40, 0x04, 0xc4, 0x3f, 0x80, 0x7f, 0x04, 0x44, 0x00, 0x1f, 0x40, 0x04,
+0x38, 0xc0, 0x60, 0x80, 0x03, 0x40, 0x20, 0x80, 0x40, 0x00, 0x80, 0x10, 0x00, 0x21, 0x00,
+0x80, 0x10, 0x00, 0x21, 0x00, 0x00, 0x09, 0x00, 0x12, 0x00, 0x00, 0x09, 0x00, 0x12, 0x00,
+0x00, 0x0a, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x12, 0x00, 0x00, 0x09, 0x00, 0x12, 0x00,
+0x80, 0x10, 0x00, 0x21, 0x00, 0x80, 0x10, 0x00, 0x21, 0x00, 0x40, 0x20, 0x80, 0x40, 0x00,
+0x38, 0xc0, 0x60, 0x80, 0x03, 0x44, 0x00, 0x1f, 0x40, 0x04, 0xc4, 0x3f, 0x80, 0x7f, 0x04,
+0x44, 0x40, 0x40, 0x40, 0x04, 0x38, 0x80, 0x20, 0x80, 0x03, 0x00, 0x80, 0x20, 0x00, 0x00,
+0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c37s.bm b/bitmaps/c37s.bm
new file mode 100644
index 0000000..441569e
--- /dev/null
+++ b/bitmaps/c37s.bm
@@ -0,0 +1,17 @@
+#define c37s_width 37
+#define c37s_height 37
+static char c37s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x38, 0x80, 0x3f, 0x80, 0x03,
+0x44, 0xc0, 0x7f, 0x40, 0x04, 0xc4, 0xff, 0xff, 0x7f, 0x04, 0xc4, 0xff, 0xe0, 0x7f, 0x04,
+0xf8, 0x3f, 0x9f, 0xff, 0x03, 0xc0, 0xdf, 0x7f, 0x7f, 0x00, 0x80, 0xef, 0xff, 0x3e, 0x00,
+0x80, 0xef, 0xff, 0x3e, 0x00, 0x00, 0xf7, 0xff, 0x1d, 0x00, 0x00, 0xf7, 0xff, 0x1d, 0x00,
+0x00, 0xf6, 0xff, 0x0d, 0x00, 0x00, 0xf7, 0xff, 0x1d, 0x00, 0x00, 0xf7, 0xff, 0x1d, 0x00,
+0x80, 0xef, 0xff, 0x3e, 0x00, 0x80, 0xef, 0xff, 0x3e, 0x00, 0xc0, 0xdf, 0x7f, 0x7f, 0x00,
+0xf8, 0x3f, 0x9f, 0xff, 0x03, 0xc4, 0xff, 0xe0, 0x7f, 0x04, 0xc4, 0xff, 0xff, 0x7f, 0x04,
+0x44, 0xc0, 0x7f, 0x40, 0x04, 0x38, 0x80, 0x3f, 0x80, 0x03, 0x00, 0x80, 0x3f, 0x00, 0x00,
+0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c40o.bm b/bitmaps/c40o.bm
new file mode 100644
index 0000000..c37629e
--- /dev/null
+++ b/bitmaps/c40o.bm
@@ -0,0 +1,18 @@
+#define c40o_width 40
+#define c40o_height 40
+static char c40o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00,
+0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00,
+0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00,
+0xe0, 0x00, 0x82, 0x00, 0x07, 0x10, 0xff, 0x01, 0xff, 0x08, 0x10, 0x01, 0x00, 0x80, 0x08,
+0x10, 0x01, 0x7e, 0x80, 0x08, 0xe0, 0x00, 0x81, 0x00, 0x07, 0x00, 0x81, 0x00, 0x01, 0x01,
+0x00, 0x42, 0x00, 0x82, 0x00, 0x00, 0x22, 0x00, 0x82, 0x00, 0x00, 0x24, 0x00, 0x44, 0x00,
+0x00, 0x28, 0x00, 0x24, 0x00, 0x00, 0x28, 0x00, 0x14, 0x00, 0x00, 0x24, 0x00, 0x14, 0x00,
+0x00, 0x22, 0x00, 0x22, 0x00, 0x00, 0x41, 0x00, 0x42, 0x00, 0x00, 0x81, 0x00, 0x41, 0x00,
+0x80, 0x00, 0x81, 0x80, 0x00, 0xe0, 0x00, 0x7e, 0x00, 0x07, 0x10, 0x01, 0x00, 0x80, 0x08,
+0x10, 0xff, 0x01, 0xff, 0x08, 0x10, 0x01, 0x02, 0x81, 0x08, 0xe0, 0x00, 0x82, 0x00, 0x07,
+0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
+0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00,
+0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c40s.bm b/bitmaps/c40s.bm
new file mode 100644
index 0000000..b37b008
--- /dev/null
+++ b/bitmaps/c40s.bm
@@ -0,0 +1,18 @@
+#define c40s_width 40
+#define c40s_height 40
+static char c40s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00,
+0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00,
+0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00,
+0xe0, 0x00, 0xfe, 0x00, 0x07, 0x10, 0xff, 0xff, 0xff, 0x08, 0x10, 0xff, 0xff, 0xff, 0x08,
+0x10, 0xff, 0x81, 0xff, 0x08, 0xe0, 0xff, 0x7e, 0xff, 0x07, 0x00, 0x7f, 0xff, 0xfe, 0x01,
+0x00, 0xbe, 0xff, 0xfd, 0x00, 0x00, 0xde, 0xff, 0xfb, 0x00, 0x00, 0xdc, 0xff, 0x7b, 0x00,
+0x00, 0xd8, 0xff, 0x3b, 0x00, 0x00, 0xd8, 0xff, 0x1b, 0x00, 0x00, 0xdc, 0xff, 0x1b, 0x00,
+0x00, 0xde, 0xff, 0x3b, 0x00, 0x00, 0xbf, 0xff, 0x7d, 0x00, 0x00, 0x7f, 0xff, 0x7e, 0x00,
+0x80, 0xff, 0x7e, 0xff, 0x00, 0xe0, 0xff, 0x81, 0xff, 0x07, 0x10, 0xff, 0xff, 0xff, 0x08,
+0x10, 0xff, 0xff, 0xff, 0x08, 0x10, 0x01, 0xfe, 0x81, 0x08, 0xe0, 0x00, 0xfe, 0x00, 0x07,
+0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00,
+0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00,
+0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c45o.bm b/bitmaps/c45o.bm
new file mode 100644
index 0000000..2a11529
--- /dev/null
+++ b/bitmaps/c45o.bm
@@ -0,0 +1,23 @@
+#define c45o_width 45
+#define c45o_height 45
+static char c45o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00,
+0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x70, 0x00, 0x04, 0x04, 0xc0, 0x01, 0x88, 0x00, 0x02,
+0x08, 0x20, 0x02, 0x88, 0xff, 0x01, 0xf0, 0x3f, 0x02, 0x88, 0x00, 0xf0, 0x01, 0x20, 0x02,
+0x70, 0x00, 0x0c, 0x06, 0xc0, 0x01, 0x80, 0x00, 0x02, 0x08, 0x20, 0x00, 0x00, 0x01, 0x01,
+0x10, 0x10, 0x00, 0x00, 0x81, 0x00, 0x20, 0x10, 0x00, 0x00, 0x82, 0x00, 0x20, 0x08, 0x00,
+0x00, 0x42, 0x00, 0x40, 0x08, 0x00, 0x00, 0x44, 0x00, 0x40, 0x04, 0x00, 0x00, 0x48, 0x00,
+0x40, 0x02, 0x00, 0x00, 0x44, 0x00, 0x40, 0x04, 0x00, 0x00, 0x42, 0x00, 0x40, 0x08, 0x00,
+0x00, 0x82, 0x00, 0x20, 0x08, 0x00, 0x00, 0x81, 0x00, 0x20, 0x10, 0x00, 0x00, 0x01, 0x01,
+0x10, 0x10, 0x00, 0x80, 0x00, 0x02, 0x08, 0x20, 0x00, 0x70, 0x00, 0x0c, 0x06, 0xc0, 0x01,
+0x88, 0x00, 0xf0, 0x01, 0x20, 0x02, 0x88, 0xff, 0x01, 0xf0, 0x3f, 0x02, 0x88, 0x00, 0x02,
+0x08, 0x20, 0x02, 0x70, 0x00, 0x04, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00,
+0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10,
+0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/c45s.bm b/bitmaps/c45s.bm
new file mode 100644
index 0000000..de47fc7
--- /dev/null
+++ b/bitmaps/c45s.bm
@@ -0,0 +1,23 @@
+#define c45s_width 45
+#define c45s_height 45
+static char c45s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x70, 0x00, 0xfc, 0x07, 0xc0, 0x01, 0x88, 0x00, 0xfe,
+0x0f, 0x20, 0x02, 0x88, 0xff, 0xff, 0xff, 0x3f, 0x02, 0x88, 0xff, 0x0f, 0xfe, 0x3f, 0x02,
+0xf0, 0xff, 0xf3, 0xf9, 0xff, 0x01, 0x80, 0xff, 0xfd, 0xf7, 0x3f, 0x00, 0x00, 0xff, 0xfe,
+0xef, 0x1f, 0x00, 0x00, 0x7f, 0xff, 0xdf, 0x1f, 0x00, 0x00, 0x7e, 0xff, 0xdf, 0x0f, 0x00,
+0x00, 0xbe, 0xff, 0xbf, 0x0f, 0x00, 0x00, 0xbc, 0xff, 0xbf, 0x07, 0x00, 0x00, 0xb8, 0xff,
+0xbf, 0x03, 0x00, 0x00, 0xbc, 0xff, 0xbf, 0x07, 0x00, 0x00, 0xbe, 0xff, 0xbf, 0x0f, 0x00,
+0x00, 0x7e, 0xff, 0xdf, 0x0f, 0x00, 0x00, 0x7f, 0xff, 0xdf, 0x1f, 0x00, 0x00, 0xff, 0xfe,
+0xef, 0x1f, 0x00, 0x80, 0xff, 0xfd, 0xf7, 0x3f, 0x00, 0xf0, 0xff, 0xf3, 0xf9, 0xff, 0x01,
+0x88, 0xff, 0x0f, 0xfe, 0x3f, 0x02, 0x88, 0xff, 0xff, 0xff, 0x3f, 0x02, 0x88, 0x00, 0xfe,
+0x0f, 0x20, 0x02, 0x70, 0x00, 0xfc, 0x07, 0xc0, 0x01, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/c49o.bm b/bitmaps/c49o.bm
new file mode 100644
index 0000000..51e5ffc
--- /dev/null
+++ b/bitmaps/c49o.bm
@@ -0,0 +1,27 @@
+#define c49o_width 49
+#define c49o_height 49
+static char c49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x08, 0x20, 0x80, 0x03,
+0x00, 0x20, 0xfe, 0x07, 0xc0, 0x7f, 0x04, 0x00, 0x20, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00,
+0x20, 0x02, 0xc0, 0x03, 0x40, 0x04, 0x00, 0xc0, 0x01, 0x38, 0x1c, 0x80, 0x03, 0x00, 0x00,
+0x02, 0x04, 0x20, 0x40, 0x00, 0x00, 0x00, 0x04, 0x02, 0x40, 0x20, 0x00, 0x00, 0x00, 0x04,
+0x01, 0x80, 0x20, 0x00, 0x00, 0x00, 0x08, 0x01, 0x80, 0x10, 0x00, 0x00, 0x00, 0x08, 0x01,
+0x80, 0x08, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00,
+0x05, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x09,
+0x00, 0x00, 0x00, 0x10, 0x01, 0x80, 0x08, 0x00, 0x00, 0x00, 0x10, 0x01, 0x80, 0x10, 0x00,
+0x00, 0x00, 0x08, 0x01, 0x80, 0x20, 0x00, 0x00, 0x00, 0x04, 0x02, 0x40, 0x20, 0x00, 0x00,
+0x00, 0x04, 0x04, 0x20, 0x40, 0x00, 0x00, 0x00, 0x02, 0x38, 0x1c, 0x40, 0x00, 0x00, 0xc0,
+0x01, 0xc0, 0x03, 0xc0, 0x03, 0x00, 0x20, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x20, 0xfe,
+0x07, 0xc0, 0x7f, 0x04, 0x00, 0x20, 0x02, 0x08, 0x20, 0x40, 0x04, 0x00, 0xc0, 0x01, 0x10,
+0x10, 0x80, 0x03, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c49s.bm b/bitmaps/c49s.bm
new file mode 100644
index 0000000..9228bde
--- /dev/null
+++ b/bitmaps/c49s.bm
@@ -0,0 +1,27 @@
+#define c49s_width 49
+#define c49s_height 49
+static char c49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0x01, 0xf8, 0x3f, 0x80, 0x03,
+0x00, 0x20, 0xfe, 0xff, 0xff, 0x7f, 0x04, 0x00, 0x20, 0xfe, 0xff, 0xff, 0x7f, 0x04, 0x00,
+0x20, 0xfe, 0x3f, 0xfc, 0x7f, 0x04, 0x00, 0xc0, 0xff, 0xc7, 0xe3, 0xff, 0x03, 0x00, 0x00,
+0xfe, 0xfb, 0xdf, 0x7f, 0x00, 0x00, 0x00, 0xfc, 0xfd, 0xbf, 0x3f, 0x00, 0x00, 0x00, 0xfc,
+0xfe, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0xf8, 0xfe, 0x7f, 0x1f, 0x00, 0x00, 0x00, 0xf8, 0xfe,
+0x7f, 0x0f, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff,
+0x06, 0x00, 0x00, 0x00, 0x60, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x60, 0xff, 0xff, 0x0e,
+0x00, 0x00, 0x00, 0xf0, 0xfe, 0x7f, 0x0f, 0x00, 0x00, 0x00, 0xf0, 0xfe, 0x7f, 0x1f, 0x00,
+0x00, 0x00, 0xf8, 0xfe, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0xfc, 0xfd, 0xbf, 0x3f, 0x00, 0x00,
+0x00, 0xfc, 0xfb, 0xdf, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0xc7, 0xe3, 0x7f, 0x00, 0x00, 0xc0,
+0xff, 0x3f, 0xfc, 0xff, 0x03, 0x00, 0x20, 0xfe, 0xff, 0xff, 0x7f, 0x04, 0x00, 0x20, 0xfe,
+0xff, 0xff, 0x7f, 0x04, 0x00, 0x20, 0x02, 0xf8, 0x3f, 0x40, 0x04, 0x00, 0xc0, 0x01, 0xf0,
+0x1f, 0x80, 0x03, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c54o.bm b/bitmaps/c54o.bm
new file mode 100644
index 0000000..98d18a9
--- /dev/null
+++ b/bitmaps/c54o.bm
@@ -0,0 +1,30 @@
+#define c54o_width 54
+#define c54o_height 54
+static char c54o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x6d,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x60, 0x80, 0x01, 0xc0,
+0x00, 0xf0, 0x03, 0x30, 0x80, 0x01, 0xf0, 0x03, 0x38, 0x07, 0x30, 0x00, 0x03, 0x38, 0x07,
+0x18, 0xfe, 0x3f, 0x00, 0xfe, 0x1f, 0x06, 0x18, 0xfe, 0x1f, 0x3f, 0xfe, 0x1f, 0x06, 0x38,
+0x07, 0xc0, 0xff, 0x00, 0x38, 0x07, 0xf0, 0x03, 0xf0, 0xe1, 0x03, 0xf0, 0x03, 0xc0, 0x03,
+0x38, 0x00, 0x07, 0xd8, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x06, 0x0c,
+0x00, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x18, 0x06, 0x00, 0x00, 0x0c, 0x06, 0x00,
+0x18, 0x06, 0x00, 0x00, 0x18, 0x07, 0x00, 0x18, 0x03, 0x00, 0x00, 0x38, 0x03, 0x00, 0xb0,
+0x03, 0x00, 0x00, 0x70, 0x03, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x60, 0x03, 0x00, 0xb0, 0x03,
+0x00, 0x00, 0x70, 0x03, 0x00, 0x30, 0x03, 0x00, 0x00, 0x30, 0x07, 0x00, 0x18, 0x06, 0x00,
+0x00, 0x18, 0x06, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x18, 0x06, 0x00, 0x18, 0x0c, 0x00, 0x00,
+0x0c, 0x0c, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x0c, 0x1c, 0x00, 0x0e, 0x18, 0x00, 0xc0, 0x06,
+0x38, 0x00, 0x07, 0xf0, 0x00, 0xf0, 0x03, 0xf0, 0xe1, 0x03, 0xf0, 0x03, 0x38, 0x07, 0xc0,
+0xff, 0x00, 0x38, 0x07, 0x18, 0xfe, 0x0f, 0x1e, 0xfc, 0x1f, 0x06, 0x18, 0xfe, 0x1f, 0x00,
+0xfe, 0x1f, 0x06, 0x38, 0x07, 0x30, 0x00, 0x03, 0x38, 0x07, 0xf0, 0x03, 0x30, 0x80, 0x03,
+0xf0, 0x03, 0xc0, 0x00, 0x60, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x6d, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x73, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c54s.bm b/bitmaps/c54s.bm
new file mode 100644
index 0000000..fe594f8
--- /dev/null
+++ b/bitmaps/c54s.bm
@@ -0,0 +1,30 @@
+#define c54s_width 54
+#define c54s_height 54
+static char c54s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xe0, 0xff, 0x01, 0xc0,
+0x00, 0xf0, 0x03, 0xf0, 0xff, 0x01, 0xf0, 0x03, 0x38, 0x07, 0xf0, 0xff, 0x03, 0x38, 0x07,
+0x18, 0xfe, 0xff, 0xff, 0xff, 0x1f, 0x06, 0x18, 0xfe, 0xff, 0xc0, 0xff, 0x1f, 0x06, 0x38,
+0xff, 0x3f, 0x00, 0xff, 0x3f, 0x07, 0xf0, 0xff, 0x0f, 0x1e, 0xfc, 0xff, 0x03, 0xc0, 0xff,
+0xc7, 0xff, 0xf8, 0xdf, 0x00, 0x00, 0xfe, 0xe3, 0xff, 0xf1, 0x0f, 0x00, 0x00, 0xfe, 0xf3,
+0xff, 0xf3, 0x0f, 0x00, 0x00, 0xfc, 0xf9, 0xff, 0xe7, 0x07, 0x00, 0x00, 0xfc, 0xf9, 0xff,
+0xe7, 0x07, 0x00, 0x00, 0xf8, 0xf8, 0xff, 0xe7, 0x03, 0x00, 0x00, 0xf8, 0xfc, 0xff, 0xcf,
+0x03, 0x00, 0x00, 0xf0, 0xfc, 0xff, 0xcf, 0x01, 0x00, 0x00, 0xe0, 0xfc, 0xff, 0xcf, 0x03,
+0x00, 0x00, 0xf0, 0xfc, 0xff, 0xcf, 0x03, 0x00, 0x00, 0xf0, 0xf8, 0xff, 0xe7, 0x07, 0x00,
+0x00, 0xf8, 0xf9, 0xff, 0xe7, 0x0f, 0x00, 0x00, 0xf8, 0xf9, 0xff, 0xe7, 0x0f, 0x00, 0x00,
+0xfc, 0xf3, 0xff, 0xf3, 0x1f, 0x00, 0x00, 0xfc, 0xe3, 0xff, 0xf1, 0x1f, 0x00, 0xc0, 0xfe,
+0xc7, 0xff, 0xf8, 0xff, 0x00, 0xf0, 0xff, 0x0f, 0x1e, 0xfc, 0xff, 0x03, 0x38, 0xff, 0x3f,
+0x00, 0xff, 0x3f, 0x07, 0x18, 0xfe, 0xff, 0xe1, 0xff, 0x1f, 0x06, 0x18, 0xfe, 0xff, 0xff,
+0xff, 0x1f, 0x06, 0x38, 0x07, 0xf0, 0xff, 0x03, 0x38, 0x07, 0xf0, 0x03, 0xf0, 0xff, 0x03,
+0xf0, 0x03, 0xc0, 0x00, 0xe0, 0xff, 0x01, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x73, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c58o.bm b/bitmaps/c58o.bm
new file mode 100644
index 0000000..6f1adb6
--- /dev/null
+++ b/bitmaps/c58o.bm
@@ -0,0 +1,35 @@
+#define c58o_width 58
+#define c58o_height 58
+static char c58o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x83, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x03, 0x00, 0x00, 0x00, 0xf0,
+0x01, 0xc0, 0x00, 0x06, 0x00, 0x1f, 0x00, 0xf8, 0x03, 0xc0, 0x00, 0x06, 0x80, 0x3f, 0x00,
+0x18, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x31, 0x00, 0x18, 0xff, 0x3f, 0x00, 0xf8, 0xff, 0x31,
+0x00, 0x18, 0x03, 0x00, 0x7c, 0x00, 0x80, 0x31, 0x00, 0xf8, 0x03, 0x80, 0xff, 0x03, 0x80,
+0x3f, 0x00, 0xf0, 0x01, 0xe0, 0x83, 0x0f, 0x00, 0x1f, 0x00, 0x00, 0x03, 0x70, 0x00, 0x1c,
+0x80, 0x01, 0x00, 0x00, 0x06, 0x38, 0x00, 0x38, 0xc0, 0x00, 0x00, 0x00, 0x06, 0x1c, 0x00,
+0x70, 0xc0, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x0c, 0x06,
+0x00, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x18, 0x06, 0x00, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x30,
+0x06, 0x00, 0xc0, 0x18, 0x00, 0x00, 0x00, 0x30, 0x03, 0x00, 0x80, 0x19, 0x00, 0x00, 0x00,
+0x60, 0x03, 0x00, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x60, 0x03, 0x00, 0x80, 0x0d, 0x00, 0x00,
+0x00, 0x60, 0x03, 0x00, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x30, 0x03, 0x00, 0x80, 0x19, 0x00,
+0x00, 0x00, 0x38, 0x06, 0x00, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x18, 0x06, 0x00, 0xc0, 0x30,
+0x00, 0x00, 0x00, 0x0c, 0x06, 0x00, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x60,
+0x60, 0x00, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x70, 0xc0, 0x00, 0x00, 0x00, 0x06, 0x38, 0x00,
+0x38, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x70, 0x00, 0x1c, 0x80, 0x01, 0x00, 0xf0, 0x01, 0xe0,
+0x83, 0x0f, 0x00, 0x1f, 0x00, 0xf8, 0x03, 0x80, 0xff, 0x03, 0x80, 0x3f, 0x00, 0x18, 0x03,
+0x00, 0x7c, 0x00, 0x80, 0x31, 0x00, 0x18, 0xff, 0x3f, 0x00, 0xf8, 0xff, 0x31, 0x00, 0x18,
+0xff, 0x7f, 0x00, 0xfc, 0xff, 0x31, 0x00, 0xf8, 0x03, 0xc0, 0x00, 0x06, 0x80, 0x3f, 0x00,
+0xf0, 0x01, 0x80, 0x01, 0x03, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x80, 0x01, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c58s.bm b/bitmaps/c58s.bm
new file mode 100644
index 0000000..336b135
--- /dev/null
+++ b/bitmaps/c58s.bm
@@ -0,0 +1,35 @@
+#define c58s_width 58
+#define c58s_height 58
+static char c58s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0xf0,
+0x01, 0xc0, 0xff, 0x07, 0x00, 0x1f, 0x00, 0xf8, 0x03, 0xc0, 0xff, 0x07, 0x80, 0x3f, 0x00,
+0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0x31, 0x00, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0x31,
+0x00, 0x18, 0xff, 0xff, 0x83, 0xff, 0xff, 0x31, 0x00, 0xf8, 0xff, 0x7f, 0x00, 0xfc, 0xff,
+0x3f, 0x00, 0xf0, 0xff, 0x1f, 0x7c, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0xff, 0x8f, 0xff, 0xe3,
+0xff, 0x01, 0x00, 0x00, 0xfe, 0xc7, 0xff, 0xc7, 0xff, 0x00, 0x00, 0x00, 0xfe, 0xe3, 0xff,
+0x8f, 0xff, 0x00, 0x00, 0x00, 0xfc, 0xf3, 0xff, 0x9f, 0x7f, 0x00, 0x00, 0x00, 0xfc, 0xf9,
+0xff, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0xf8, 0xf9, 0xff, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0xf0,
+0xf9, 0xff, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0xfc, 0xff, 0x7f, 0x1e, 0x00, 0x00, 0x00,
+0xe0, 0xfc, 0xff, 0x7f, 0x0e, 0x00, 0x00, 0x00, 0xe0, 0xfc, 0xff, 0x7f, 0x0e, 0x00, 0x00,
+0x00, 0xe0, 0xfc, 0xff, 0x7f, 0x0e, 0x00, 0x00, 0x00, 0xf0, 0xfc, 0xff, 0x7f, 0x1e, 0x00,
+0x00, 0x00, 0xf8, 0xf9, 0xff, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0xf8, 0xf9, 0xff, 0x3f, 0x3f,
+0x00, 0x00, 0x00, 0xfc, 0xf9, 0xff, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0xfc, 0xf3, 0xff, 0x9f,
+0x7f, 0x00, 0x00, 0x00, 0xfe, 0xe3, 0xff, 0x8f, 0xff, 0x00, 0x00, 0x00, 0xfe, 0xc7, 0xff,
+0xc7, 0xff, 0x00, 0x00, 0x00, 0xff, 0x8f, 0xff, 0xe3, 0xff, 0x01, 0x00, 0xf0, 0xff, 0x1f,
+0x7c, 0xf0, 0xff, 0x1f, 0x00, 0xf8, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x3f, 0x00, 0x18, 0xff,
+0xff, 0x83, 0xff, 0xff, 0x31, 0x00, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0x31, 0x00, 0x18,
+0xff, 0xff, 0xff, 0xff, 0xff, 0x31, 0x00, 0xf8, 0x03, 0xc0, 0xff, 0x07, 0x80, 0x3f, 0x00,
+0xf0, 0x01, 0x80, 0xff, 0x03, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c64o.bm b/bitmaps/c64o.bm
new file mode 100644
index 0000000..4de2fac
--- /dev/null
+++ b/bitmaps/c64o.bm
@@ -0,0 +1,39 @@
+#define c64o_width 64
+#define c64o_height 64
+static char c64o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
+0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+0x80, 0x01, 0x00, 0x18, 0x18, 0x00, 0x80, 0x01, 0xe0, 0x07, 0x00, 0x0c, 0x30, 0x00, 0xe0,
+0x07, 0x70, 0x0e, 0x00, 0x06, 0x60, 0x00, 0x70, 0x0e, 0x30, 0xfc, 0xff, 0x07, 0xe0, 0xff,
+0x3f, 0x0c, 0x30, 0xfc, 0xff, 0x03, 0xc0, 0xff, 0x3f, 0x0c, 0x70, 0x0e, 0x00, 0xc0, 0x03,
+0x00, 0x70, 0x0e, 0xe0, 0x07, 0x00, 0xfc, 0x3f, 0x00, 0xe0, 0x07, 0xc0, 0x03, 0x00, 0x3e,
+0x7c, 0x00, 0xc0, 0x03, 0x00, 0x06, 0x80, 0x07, 0xe0, 0x01, 0x60, 0x00, 0x00, 0x0c, 0xc0,
+0x01, 0x80, 0x03, 0x30, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x18,
+0x60, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x30, 0x70, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00,
+0x30, 0x30, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x0c, 0x06, 0x00,
+0x00, 0x60, 0x10, 0x00, 0x00, 0x08, 0x06, 0x00, 0x00, 0xc0, 0x18, 0x00, 0x00, 0x18, 0x03,
+0x00, 0x00, 0x80, 0x19, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x80, 0x1b, 0x00, 0x00, 0xd8,
+0x01, 0x00, 0x00, 0x80, 0x19, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0xc0, 0x10, 0x00, 0x00,
+0x08, 0x03, 0x00, 0x00, 0xc0, 0x30, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x60, 0x30, 0x00,
+0x00, 0x0c, 0x06, 0x00, 0x00, 0x30, 0x70, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x30, 0x60,
+0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x18, 0xc0, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x18,
+0xc0, 0x01, 0x80, 0x03, 0x18, 0x00, 0x80, 0x0d, 0x80, 0x07, 0xe0, 0x01, 0xb0, 0x01, 0xe0,
+0x07, 0x00, 0x3e, 0x7c, 0x00, 0xe0, 0x07, 0x70, 0x0e, 0x00, 0xfc, 0x3f, 0x00, 0x70, 0x0e,
+0x30, 0xfc, 0xff, 0xc1, 0x83, 0xff, 0x3f, 0x0c, 0x30, 0xfc, 0xff, 0x03, 0xc0, 0xff, 0x3f,
+0x0c, 0x70, 0x0e, 0x00, 0x03, 0xc0, 0x00, 0x70, 0x0e, 0xe0, 0x07, 0x00, 0x06, 0x60, 0x00,
+0xe0, 0x07, 0xc0, 0x03, 0x00, 0x06, 0x60, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x30,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00
+};
diff --git a/bitmaps/c64s.bm b/bitmaps/c64s.bm
new file mode 100644
index 0000000..9d1e4f7
--- /dev/null
+++ b/bitmaps/c64s.bm
@@ -0,0 +1,39 @@
+#define c64s_width 64
+#define c64s_height 64
+static char c64s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
+0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00,
+0x80, 0x01, 0x00, 0xf8, 0x1f, 0x00, 0x80, 0x01, 0xe0, 0x07, 0x00, 0xfc, 0x3f, 0x00, 0xe0,
+0x07, 0x70, 0x0e, 0x00, 0xfe, 0x7f, 0x00, 0x70, 0x0e, 0x30, 0xfc, 0xff, 0xff, 0xff, 0xff,
+0x3f, 0x0c, 0x30, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x0c, 0x70, 0xfe, 0xff, 0x3f, 0xfc,
+0xff, 0x7f, 0x0e, 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x07, 0xc0, 0xff, 0xff, 0xc1,
+0x83, 0xff, 0xff, 0x03, 0x00, 0xfe, 0x7f, 0xf8, 0x1f, 0xfe, 0x7f, 0x00, 0x00, 0xfc, 0x3f,
+0xfe, 0x7f, 0xfc, 0x3f, 0x00, 0x00, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0x00, 0x00, 0xf8,
+0x9f, 0xff, 0xff, 0xf9, 0x1f, 0x00, 0x00, 0xf0, 0x8f, 0xff, 0xff, 0xf1, 0x0f, 0x00, 0x00,
+0xf0, 0xcf, 0xff, 0xff, 0xf3, 0x0f, 0x00, 0x00, 0xe0, 0xcf, 0xff, 0xff, 0xf3, 0x07, 0x00,
+0x00, 0xe0, 0xef, 0xff, 0xff, 0xf7, 0x07, 0x00, 0x00, 0xc0, 0xe7, 0xff, 0xff, 0xe7, 0x03,
+0x00, 0x00, 0x80, 0xe7, 0xff, 0xff, 0xe7, 0x01, 0x00, 0x00, 0x80, 0xe7, 0xff, 0xff, 0xe7,
+0x01, 0x00, 0x00, 0x80, 0xe7, 0xff, 0xff, 0xe7, 0x01, 0x00, 0x00, 0xc0, 0xef, 0xff, 0xff,
+0xf7, 0x03, 0x00, 0x00, 0xc0, 0xcf, 0xff, 0xff, 0xf3, 0x03, 0x00, 0x00, 0xe0, 0xcf, 0xff,
+0xff, 0xf3, 0x07, 0x00, 0x00, 0xf0, 0x8f, 0xff, 0xff, 0xf1, 0x0f, 0x00, 0x00, 0xf0, 0x9f,
+0xff, 0xff, 0xf9, 0x0f, 0x00, 0x00, 0xf8, 0x3f, 0xff, 0xff, 0xfc, 0x1f, 0x00, 0x00, 0xf8,
+0x3f, 0xfe, 0x7f, 0xfc, 0x1f, 0x00, 0x80, 0xfd, 0x7f, 0xf8, 0x1f, 0xfe, 0xbf, 0x01, 0xe0,
+0xff, 0xff, 0xc1, 0x83, 0xff, 0xff, 0x07, 0x70, 0xfe, 0xff, 0x03, 0xc0, 0xff, 0x7f, 0x0e,
+0x30, 0xfc, 0xff, 0x3f, 0xfc, 0xff, 0x3f, 0x0c, 0x30, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f,
+0x0c, 0x70, 0x0e, 0x00, 0xff, 0xff, 0x00, 0x70, 0x0e, 0xe0, 0x07, 0x00, 0xfe, 0x7f, 0x00,
+0xe0, 0x07, 0xc0, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0xfc, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00
+};
diff --git a/bitmaps/c72o.bm b/bitmaps/c72o.bm
new file mode 100644
index 0000000..13d9bb7
--- /dev/null
+++ b/bitmaps/c72o.bm
@@ -0,0 +1,48 @@
+#define c72o_width 72
+#define c72o_height 72
+static char c72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x83, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x83, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xc0, 0x01, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xc0, 0x00, 0x06, 0x00, 0x7c, 0x00, 0x80, 0xe3, 0x00,
+0xe0, 0x00, 0x06, 0x00, 0xfe, 0x00, 0x80, 0xc1, 0x00, 0x70, 0x00, 0x0c, 0x00, 0xc7, 0x01,
+0x80, 0xc1, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x83, 0x01, 0x80, 0xc1, 0xff, 0x3f, 0x00, 0xf8,
+0xff, 0x83, 0x01, 0x80, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc7, 0x01, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00,
+0x00, 0xc0, 0x00, 0x80, 0xff, 0x03, 0x00, 0x7f, 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x83, 0x07,
+0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0xe0, 0x00, 0x0e, 0x80, 0x03, 0x00, 0x00, 0x80, 0x03,
+0x70, 0x00, 0x1c, 0x80, 0x01, 0x00, 0x00, 0x00, 0x03, 0x38, 0x00, 0x38, 0xc0, 0x01, 0x00,
+0x00, 0x00, 0x07, 0x38, 0x00, 0x70, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x60,
+0xe0, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x0c,
+0x0e, 0x00, 0xc0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x00, 0xc0, 0x30, 0x00, 0x00,
+0x00, 0x00, 0x38, 0x06, 0x00, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x06, 0x00, 0xc0,
+0x18, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x00, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0c,
+0x0e, 0x00, 0xe0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x60, 0x60, 0x00, 0x00,
+0x00, 0x00, 0x06, 0x0c, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x00, 0x30,
+0xc0, 0x00, 0x00, 0x00, 0x80, 0x03, 0x38, 0x00, 0x38, 0xc0, 0x00, 0x00, 0x00, 0x80, 0x03,
+0x70, 0x00, 0x1c, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0xe0, 0x00, 0x0e, 0x80, 0x01, 0x00,
+0x00, 0xfe, 0x01, 0xc0, 0x83, 0x03, 0x80, 0x1f, 0x00, 0x00, 0xff, 0x00, 0x80, 0xff, 0x03,
+0x80, 0x3f, 0x00, 0x80, 0xe3, 0x00, 0x00, 0xfe, 0x00, 0xc0, 0x71, 0x00, 0x80, 0xc1, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0x60, 0x00, 0x80, 0xc1, 0xff, 0x1f, 0x00, 0xf8, 0xff, 0x60, 0x00,
+0x80, 0xc1, 0xff, 0x1f, 0x00, 0xfc, 0xff, 0x60, 0x00, 0x80, 0xe3, 0x00, 0x38, 0x00, 0x0c,
+0xc0, 0x71, 0x00, 0x00, 0x7f, 0x00, 0x30, 0x00, 0x0e, 0x80, 0x3f, 0x00, 0x00, 0x3e, 0x00,
+0x70, 0x00, 0x06, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x80, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc3, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/c72s.bm b/bitmaps/c72s.bm
new file mode 100644
index 0000000..e079cc1
--- /dev/null
+++ b/bitmaps/c72s.bm
@@ -0,0 +1,48 @@
+#define c72s_width 72
+#define c72s_height 72
+static char c72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x83, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xc0, 0xff, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xc0, 0xff, 0x07, 0x00, 0x7c, 0x00, 0x80, 0xe3, 0x00,
+0xe0, 0xff, 0x07, 0x00, 0xfe, 0x00, 0x80, 0xc1, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0xc7, 0x01,
+0x80, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0x01, 0x80, 0xc1, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x83, 0x01, 0x80, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0x01, 0x00, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xc7, 0x01, 0x00, 0xfe, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x00,
+0x00, 0xc0, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0xc0, 0xff, 0x3f, 0x7c, 0xf8,
+0xff, 0x03, 0x00, 0x00, 0x80, 0xff, 0x1f, 0xff, 0xf1, 0xff, 0x03, 0x00, 0x00, 0x80, 0xff,
+0x8f, 0xff, 0xe3, 0xff, 0x01, 0x00, 0x00, 0x00, 0xff, 0xc7, 0xff, 0xc7, 0xff, 0x01, 0x00,
+0x00, 0x00, 0xff, 0xc7, 0xff, 0x8f, 0xff, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xe3, 0xff, 0x9f,
+0xff, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xf3, 0xff, 0x1f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0xf1, 0xff, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xf9, 0xff, 0x3f, 0x3f, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xf9, 0xff, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf9, 0xff, 0x3f,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xf9, 0xff, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0xf1, 0xff, 0x1f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xf3, 0xff, 0x9f, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xf3, 0xff, 0x9f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe7, 0xff, 0xcf,
+0xff, 0x00, 0x00, 0x00, 0x80, 0xff, 0xc7, 0xff, 0xc7, 0xff, 0x00, 0x00, 0x00, 0x80, 0xff,
+0x8f, 0xff, 0xe3, 0xff, 0x01, 0x00, 0x00, 0xc0, 0xff, 0x1f, 0xff, 0xf1, 0xff, 0x01, 0x00,
+0x00, 0xfe, 0xff, 0x3f, 0x7c, 0xfc, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x00, 0xfc,
+0xff, 0x3f, 0x00, 0x80, 0xe3, 0xff, 0xff, 0x01, 0xff, 0xff, 0x71, 0x00, 0x80, 0xc1, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x60, 0x00, 0x80, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x00,
+0x80, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x00, 0x80, 0xe3, 0x00, 0xf8, 0xff, 0x0f,
+0xc0, 0x71, 0x00, 0x00, 0x7f, 0x00, 0xf0, 0xff, 0x0f, 0x80, 0x3f, 0x00, 0x00, 0x3e, 0x00,
+0xf0, 0xff, 0x07, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/convert.c b/bitmaps/convert.c
new file mode 100644
index 0000000..e1d080a
--- /dev/null
+++ b/bitmaps/convert.c
@@ -0,0 +1,73 @@
+#include <stdio.h>
+
+// [HGM] This program converts a WinBoard monochrome .bmp piece-symbol bitmap file
+//       to a .bm C-source file suitable for inclusion in xboard as buit-in bitmap.
+//       You will have to convert the bitmaps one by one, and re-direct the output to the desired file!
+
+main(int argc, char **argv)
+{
+	int i, j, k, d, cnt; char c, h, w, *p, data[10000], *name;
+	FILE *f;
+
+	if(argc<2) { printf("usage is: convert <bmp filename>\n"); exit(0); }
+	f = fopen(argv[1], "rb");
+	if(f == NULL) { printf("file %s not found\n", argv[1]); exit(0); }
+
+	if(fscanf(f, "BM%c", &i) != 1) { printf("%s does not have bitmap format\n"); exit(0); }
+	for(i=0; i<15; i++) fgetc(f); fscanf(f, "%c%c%c%c%c", &h, &i, &i, &i, &w);
+	for(i=0; i<39; i++) fgetc(f);
+
+// printf("h=%d, w=%d\n", h, w);
+
+	p = data;
+	for(i=0; i<h; i++) {
+		for(j=0; j<w; j+=32) {
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+				d = (d>>1) | (c&0x80);
+				c <<= 1;
+			}
+			*p++ = d;
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+				d = (d>>1) | (c&0x80);
+				c <<= 1;
+			}
+			*p++ = d;
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+				d = (d>>1) | (c&0x80);
+				c <<= 1;
+			}
+			*p++ = d;
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+				d = (d>>1) | (c&0x80);
+				c <<= 1;
+			}
+			*p++ = d;
+		}
+	}
+
+	name = argv[1];
+	for(i=0; argv[1][i]; i++) if(argv[1][i] == '\\') name = argv[1]+i+1;
+	for(i=0; name[i]; i++) if(name[i] == '.') name[i] = 0;
+	printf("#define %s_width %d\n", name, w);
+	printf("#define %s_height %d\n", name, h);
+	printf("static unsigned char %s_bits[] = {\n", name);
+	cnt = 0;
+	for(i=h-1; i>=0; i--) {
+		for(j=0; j<w; j+=8) {
+			c = ~data[i*((w+31)/8&~3)+j/8];
+			if(w-j<8) c &= 255>>(8+j-w);
+//			for(k=0; k<8; k++) {
+//				printf("%c", c&1 ? 'X' : '.');
+//				c >>= 1;
+//			}
+			if(cnt!=0) printf(",");
+			printf("0x%02x", c&255);
+			if(++cnt % 15 == 0) { printf("\n"); }
+		}
+	}
+	printf("\n};\n");
+}
diff --git a/bitmaps/cv33o.bm b/bitmaps/cv33o.bm
new file mode 100644
index 0000000..d40b57a
--- /dev/null
+++ b/bitmaps/cv33o.bm
@@ -0,0 +1,16 @@
+#define cv33o_width 33
+#define cv33o_height 33
+static char cv33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00,
+0x00, 0xc0, 0x5b, 0x00, 0x00, 0x00, 0x30, 0xa2, 0x00, 0x00, 0x00, 0x18, 0xe0, 0x00, 0x00,
+0x00, 0x0c, 0xa0, 0x01, 0x00, 0x00, 0x06, 0xc0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x02, 0x00,
+0x00, 0x03, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x04, 0x00, 0x80, 0x01, 0x03, 0x04, 0x00,
+0x80, 0x01, 0x1d, 0x0e, 0x00, 0x80, 0x01, 0x21, 0x0c, 0x00, 0x80, 0x00, 0x42, 0x09, 0x00,
+0xc0, 0x00, 0x84, 0x07, 0x00, 0xc0, 0x00, 0x88, 0x01, 0x00, 0xc0, 0x00, 0x10, 0x00, 0x00,
+0xc0, 0x00, 0x10, 0x00, 0x00, 0xc0, 0x00, 0x20, 0x00, 0x00, 0xc0, 0x00, 0x20, 0x00, 0x00,
+0xc0, 0x00, 0x20, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
+0x20, 0x00, 0x80, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x01, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00,
+0x10, 0x00, 0x00, 0x01, 0x00, 0x10, 0x1f, 0x1f, 0x01, 0x00, 0x10, 0x11, 0x11, 0x01, 0x00,
+0xf0, 0xf1, 0xf1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/cv33s.bm b/bitmaps/cv33s.bm
new file mode 100644
index 0000000..15614e0
--- /dev/null
+++ b/bitmaps/cv33s.bm
@@ -0,0 +1,16 @@
+#define cv33s_width 33
+#define cv33s_height 33
+static char cv33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00,
+0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x60, 0x9c, 0x01, 0x00,
+0x00, 0x98, 0x3f, 0x01, 0x00, 0x00, 0xc8, 0xbf, 0x02, 0x00, 0x00, 0xe4, 0x7f, 0x02, 0x00,
+0x00, 0xf6, 0xff, 0x07, 0x00, 0x00, 0xf6, 0xfd, 0x07, 0x00, 0x00, 0xf2, 0xff, 0x0f, 0x00,
+0x00, 0xfb, 0xff, 0x0f, 0x00, 0x00, 0xfb, 0xf3, 0x13, 0x00, 0x00, 0xf9, 0xc3, 0x17, 0x00,
+0x00, 0xf9, 0x87, 0x1f, 0x00, 0x80, 0xfd, 0x0f, 0x0f, 0x00, 0x80, 0xfd, 0x1f, 0x03, 0x00,
+0x80, 0xfc, 0x3f, 0x00, 0x00, 0x80, 0xfc, 0x3f, 0x00, 0x00, 0x80, 0xfc, 0x7f, 0x00, 0x00,
+0x80, 0xff, 0x7f, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00,
+0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0x00, 0x60, 0x00, 0x00, 0x03, 0x00,
+0xe0, 0xff, 0xff, 0x03, 0x00, 0xe0, 0xff, 0xff, 0x03, 0x00, 0xe0, 0xe3, 0xe3, 0x03, 0x00,
+0xe0, 0xe3, 0xe3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/cv37o.bm b/bitmaps/cv37o.bm
new file mode 100644
index 0000000..3924010
--- /dev/null
+++ b/bitmaps/cv37o.bm
@@ -0,0 +1,17 @@
+#define cv37o_width 37
+#define cv37o_height 37
+static char cv37o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00,
+0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0xa8, 0x02, 0x00, 0x00, 0x80, 0x6f, 0x02, 0x00,
+0x00, 0x60, 0x80, 0x03, 0x00, 0x00, 0x30, 0x00, 0x04, 0x00, 0x00, 0x18, 0x80, 0x05, 0x00,
+0x00, 0x08, 0x00, 0x0a, 0x00, 0x00, 0x0c, 0x04, 0x0a, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00,
+0x00, 0x06, 0x04, 0x10, 0x00, 0x00, 0x06, 0x0c, 0x20, 0x00, 0x00, 0x03, 0x34, 0x20, 0x00,
+0x00, 0x03, 0x44, 0x40, 0x00, 0x00, 0x03, 0x84, 0x70, 0x00, 0x00, 0x03, 0x08, 0x61, 0x00,
+0x00, 0x01, 0x10, 0x4a, 0x00, 0x80, 0x01, 0x10, 0x3c, 0x00, 0x80, 0x01, 0x20, 0x00, 0x00,
+0x80, 0x01, 0x40, 0x00, 0x00, 0x80, 0x01, 0x80, 0x00, 0x00, 0x80, 0x01, 0x00, 0x01, 0x00,
+0x80, 0x01, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00,
+0x80, 0x00, 0x00, 0x04, 0x00, 0xe0, 0xff, 0xff, 0x1f, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00,
+0x20, 0x00, 0x00, 0x10, 0x00, 0x20, 0x7e, 0xf8, 0x11, 0x00, 0x20, 0x42, 0x08, 0x11, 0x00,
+0x20, 0x42, 0x08, 0x11, 0x00, 0xe0, 0xc3, 0x0f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv37s.bm b/bitmaps/cv37s.bm
new file mode 100644
index 0000000..3108f56
--- /dev/null
+++ b/bitmaps/cv37s.bm
@@ -0,0 +1,17 @@
+#define cv37s_width 37
+#define cv37s_height 37
+static char cv37s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x70, 0x06, 0x00,
+0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0x80, 0x71, 0x06, 0x00,
+0x00, 0xc0, 0xfe, 0x0f, 0x00, 0x00, 0x60, 0xff, 0x0c, 0x00, 0x00, 0xb0, 0xff, 0x1b, 0x00,
+0x00, 0x90, 0xff, 0x1b, 0x00, 0x00, 0xd8, 0xff, 0x3f, 0x00, 0x00, 0xc8, 0xf7, 0x3f, 0x00,
+0x00, 0xe8, 0xff, 0x7f, 0x00, 0x00, 0xe4, 0xff, 0x7f, 0x00, 0x00, 0xe4, 0xcf, 0xff, 0x00,
+0x00, 0xf4, 0x0f, 0x9f, 0x00, 0x00, 0xf0, 0x1f, 0xbe, 0x00, 0x00, 0xf2, 0x3f, 0xec, 0x00,
+0x00, 0xf2, 0x3f, 0x78, 0x00, 0x00, 0xf2, 0x7f, 0x00, 0x00, 0x00, 0xf2, 0xff, 0x00, 0x00,
+0x00, 0xf2, 0xff, 0x01, 0x00, 0x00, 0xf2, 0xff, 0x03, 0x00, 0x00, 0xfa, 0xff, 0x03, 0x00,
+0x00, 0xfe, 0xff, 0x03, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0xfe, 0xff, 0x07, 0x00,
+0x00, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x3f, 0x00,
+0xc0, 0xff, 0xff, 0x3f, 0x00, 0xc0, 0xff, 0xff, 0x3f, 0x00, 0xc0, 0x87, 0x1f, 0x3e, 0x00,
+0xc0, 0x87, 0x1f, 0x3e, 0x00, 0xc0, 0x87, 0x1f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv40o.bm b/bitmaps/cv40o.bm
new file mode 100644
index 0000000..187aa18
--- /dev/null
+++ b/bitmaps/cv40o.bm
@@ -0,0 +1,18 @@
+#define cv40o_width 40
+#define cv40o_height 40
+static char cv40o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x00, 0x60, 0x0c, 0x00, 0x00, 0x00, 0xa0, 0x0a, 0x00,
+0x00, 0x00, 0xbe, 0x09, 0x00, 0x00, 0x80, 0x01, 0x0e, 0x00, 0x00, 0xc0, 0x00, 0x10, 0x00,
+0x00, 0x60, 0x00, 0x16, 0x00, 0x00, 0x30, 0x00, 0x28, 0x00, 0x00, 0x30, 0x10, 0x28, 0x00,
+0x00, 0x18, 0x10, 0x40, 0x00, 0x00, 0x18, 0x10, 0x40, 0x00, 0x00, 0x1c, 0x30, 0x80, 0x00,
+0x00, 0x0c, 0xd0, 0x80, 0x00, 0x00, 0x0c, 0x10, 0x01, 0x01, 0x00, 0x0e, 0x10, 0xc2, 0x01,
+0x00, 0x0e, 0x20, 0x84, 0x01, 0x00, 0x06, 0x40, 0x28, 0x01, 0x00, 0x07, 0x40, 0xf0, 0x00,
+0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x02, 0x00,
+0x00, 0x07, 0x00, 0x02, 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x07, 0x00, 0x08, 0x00,
+0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00,
+0x00, 0x01, 0x00, 0x20, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00,
+0x40, 0x00, 0x00, 0x80, 0x00, 0x40, 0xf8, 0xe1, 0x87, 0x00, 0x40, 0x08, 0x21, 0x84, 0x00,
+0x40, 0x08, 0x21, 0x84, 0x00, 0xc0, 0x0f, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv40s.bm b/bitmaps/cv40s.bm
new file mode 100644
index 0000000..aa072e9
--- /dev/null
+++ b/bitmaps/cv40s.bm
@@ -0,0 +1,18 @@
+#define cv40s_width 40
+#define cv40s_height 40
+static char cv40s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00,
+0x00, 0x00, 0xe0, 0x0c, 0x00, 0x00, 0x00, 0xe0, 0x0e, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0x00,
+0x00, 0x00, 0xe3, 0x0c, 0x00, 0x00, 0x80, 0xfc, 0x1f, 0x00, 0x00, 0x60, 0xfe, 0x19, 0x00,
+0x00, 0x30, 0xff, 0x37, 0x00, 0x00, 0x90, 0xff, 0x37, 0x00, 0x00, 0xd8, 0xff, 0x7f, 0x00,
+0x00, 0xc8, 0xef, 0x7f, 0x00, 0x00, 0xe8, 0xff, 0xff, 0x00, 0x00, 0xe4, 0xff, 0xff, 0x00,
+0x00, 0xe4, 0x9f, 0xff, 0x01, 0x00, 0xf4, 0x1f, 0x3e, 0x01, 0x00, 0xf4, 0x3f, 0x7c, 0x01,
+0x00, 0xf2, 0x7f, 0xd8, 0x01, 0x00, 0xf2, 0xff, 0xf0, 0x00, 0x00, 0xf2, 0xff, 0x01, 0x00,
+0x00, 0xf2, 0xff, 0x03, 0x00, 0x00, 0xf2, 0xff, 0x07, 0x00, 0x00, 0xf2, 0xff, 0x07, 0x00,
+0x00, 0xf2, 0xff, 0x0f, 0x00, 0x00, 0xf2, 0xff, 0x0f, 0x00, 0x00, 0xf2, 0xff, 0x0f, 0x00,
+0x00, 0xfe, 0xff, 0x07, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00, 0xfe, 0xff, 0x1f, 0x00,
+0x00, 0xff, 0xff, 0x3f, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x00,
+0xc0, 0xff, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x00, 0xc0, 0x0f, 0x3f, 0xfc, 0x00,
+0xc0, 0x0f, 0x3f, 0xfc, 0x00, 0xc0, 0x0f, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv45o.bm b/bitmaps/cv45o.bm
new file mode 100644
index 0000000..3947a3e
--- /dev/null
+++ b/bitmaps/cv45o.bm
@@ -0,0 +1,23 @@
+#define cv45o_width 45
+#define cv45o_height 45
+static char cv45o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00,
+0x00, 0x00, 0xe0, 0x19, 0x01, 0x00, 0x00, 0x00, 0x18, 0x29, 0x01, 0x00, 0x00, 0x00, 0x06,
+0x40, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x80, 0x01, 0x40, 0x04, 0x00,
+0x00, 0xc0, 0x00, 0xc0, 0x04, 0x00, 0x00, 0x40, 0x00, 0x80, 0x05, 0x00, 0x00, 0x60, 0x40,
+0x00, 0x08, 0x00, 0x00, 0x20, 0x40, 0x00, 0x08, 0x00, 0x00, 0x30, 0x40, 0x00, 0x08, 0x00,
+0x00, 0x10, 0x40, 0x00, 0x10, 0x00, 0x00, 0x18, 0x80, 0x00, 0x10, 0x00, 0x00, 0x18, 0x80,
+0x01, 0x20, 0x00, 0x00, 0x08, 0x80, 0x06, 0x40, 0x00, 0x00, 0x0c, 0x80, 0x18, 0x70, 0x00,
+0x00, 0x0c, 0x00, 0x21, 0x60, 0x00, 0x00, 0x0c, 0x00, 0x41, 0x40, 0x00, 0x00, 0x0c, 0x00,
+0x82, 0x44, 0x00, 0x00, 0x04, 0x00, 0x04, 0x3d, 0x00, 0x00, 0x06, 0x00, 0x04, 0x02, 0x00,
+0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00,
+0x20, 0x00, 0x00, 0x00, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x06, 0x00, 0x40, 0x00, 0x00,
+0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x02, 0x00,
+0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00,
+0xc0, 0xff, 0xff, 0xff, 0x07, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00,
+0x00, 0x04, 0x00, 0x40, 0xf0, 0x87, 0x3f, 0x04, 0x00, 0x40, 0x10, 0x84, 0x20, 0x04, 0x00,
+0x40, 0x10, 0x84, 0x20, 0x04, 0x00, 0xc0, 0x1f, 0xfc, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/cv45s.bm b/bitmaps/cv45s.bm
new file mode 100644
index 0000000..828b327
--- /dev/null
+++ b/bitmaps/cv45s.bm
@@ -0,0 +1,23 @@
+#define cv45s_width 45
+#define cv45s_height 45
+static char cv45s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x01, 0x00, 0x00, 0x00, 0x00, 0xef, 0x01, 0x00,
+0x00, 0x00, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x18, 0xcf, 0x01, 0x00, 0x00, 0x00, 0xe6,
+0xbf, 0x03, 0x00, 0x00, 0x00, 0xfb, 0xff, 0x03, 0x00, 0x00, 0x80, 0xfd, 0xbf, 0x07, 0x00,
+0x00, 0xc0, 0xfe, 0x3f, 0x07, 0x00, 0x00, 0x40, 0xfe, 0x7f, 0x06, 0x00, 0x00, 0x60, 0xff,
+0xff, 0x0f, 0x00, 0x00, 0x20, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xb0, 0xff, 0xff, 0x0f, 0x00,
+0x00, 0x90, 0x7f, 0xff, 0x1f, 0x00, 0x00, 0xd0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff,
+0xfe, 0x3f, 0x00, 0x00, 0xc8, 0xff, 0xfc, 0x7f, 0x00, 0x00, 0xc8, 0xff, 0xf0, 0x4f, 0x00,
+0x00, 0xe8, 0xff, 0xc1, 0x5f, 0x00, 0x00, 0xe0, 0xff, 0x81, 0x7f, 0x00, 0x00, 0xe0, 0xff,
+0x03, 0x7b, 0x00, 0x00, 0xe4, 0xff, 0x07, 0x3f, 0x00, 0x00, 0xe4, 0xff, 0x07, 0x02, 0x00,
+0x00, 0xe4, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xe4, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xe4, 0xff,
+0x3f, 0x00, 0x00, 0x00, 0xe4, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe4, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0xf4, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x04, 0x00,
+0x40, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x00,
+0x80, 0xff, 0xff, 0xff, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x06, 0x00, 0xc0, 0xff, 0xff,
+0xff, 0x07, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x07, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x07, 0x00,
+0xc0, 0x1f, 0xfc, 0xe0, 0x07, 0x00, 0xc0, 0x1f, 0xfc, 0xe0, 0x07, 0x00, 0xc0, 0x1f, 0xfc,
+0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/cv49o.bm b/bitmaps/cv49o.bm
new file mode 100644
index 0000000..f18087d
--- /dev/null
+++ b/bitmaps/cv49o.bm
@@ -0,0 +1,27 @@
+#define cv49o_width 49
+#define cv49o_height 49
+static char cv49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x09, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xe4, 0x08, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xa7, 0x04, 0x00, 0x00, 0x00, 0x00, 0x18,
+0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+0x10, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x23, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x26,
+0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x01, 0x28, 0x00,
+0x00, 0x00, 0x60, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x40, 0x00, 0x00,
+0x00, 0x30, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x18, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00,
+0x18, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x18, 0x00, 0x0e, 0x00, 0x02, 0x00, 0x00, 0x08,
+0x00, 0x12, 0x00, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x62, 0x80, 0x05, 0x00, 0x00, 0x0c, 0x00,
+0x82, 0x81, 0x05, 0x00, 0x00, 0x0c, 0x00, 0x04, 0x02, 0x05, 0x00, 0x00, 0x0c, 0x00, 0x04,
+0x24, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x28, 0x02, 0x00, 0x00, 0x04, 0x00, 0x10, 0xd0,
+0x01, 0x00, 0x00, 0x06, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x06, 0x00, 0x40, 0x00, 0x00,
+0x00, 0x00, 0x06, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x00, 0x00, 0x00,
+0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x04,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xfc, 0xff,
+0xff, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x1f,
+0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00,
+0x00, 0x40, 0xf0, 0x07, 0x7f, 0x10, 0x00, 0x00, 0x40, 0x10, 0x04, 0x41, 0x10, 0x00, 0x00,
+0x40, 0x10, 0x04, 0x41, 0x10, 0x00, 0x00, 0x40, 0x10, 0x04, 0x41, 0x10, 0x00, 0x00, 0xc0,
+0x1f, 0xfc, 0xc1, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv49s.bm b/bitmaps/cv49s.bm
new file mode 100644
index 0000000..6aa449d
--- /dev/null
+++ b/bitmaps/cv49s.bm
@@ -0,0 +1,27 @@
+#define cv49s_width 49
+#define cv49s_height 49
+static char cv49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xbc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x38,
+0x3e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xff,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0xfb, 0xff, 0x3c, 0x00, 0x00, 0x00, 0x80, 0xfd, 0xff, 0x39,
+0x00, 0x00, 0x00, 0x80, 0xfc, 0xff, 0x33, 0x00, 0x00, 0x00, 0x40, 0xfe, 0xff, 0x37, 0x00,
+0x00, 0x00, 0x40, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x20, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x20, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xb0, 0xff, 0xfd, 0xff, 0x01, 0x00, 0x00,
+0x90, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x90, 0xff, 0xfb, 0xff, 0x03, 0x00, 0x00, 0xd0,
+0xff, 0xf3, 0xff, 0x03, 0x00, 0x00, 0xc8, 0xff, 0xc3, 0x7f, 0x06, 0x00, 0x00, 0xc8, 0xff,
+0x07, 0x7f, 0x06, 0x00, 0x00, 0xc8, 0xff, 0x07, 0xfe, 0x06, 0x00, 0x00, 0xe8, 0xff, 0x0f,
+0xdc, 0x07, 0x00, 0x00, 0xe8, 0xff, 0x0f, 0xf8, 0x03, 0x00, 0x00, 0xe0, 0xff, 0x1f, 0xf0,
+0x01, 0x00, 0x00, 0xe4, 0xff, 0x3f, 0x20, 0x00, 0x00, 0x00, 0xe4, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0xe4, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xe4, 0xff, 0xff, 0x00, 0x00, 0x00,
+0x00, 0xe4, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xe4, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+0xc4, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8,
+0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00,
+0x00, 0x02, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff,
+0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x20,
+0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00,
+0x00, 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xf8, 0x83, 0x3f, 0x00, 0x00,
+0x80, 0x3f, 0xf8, 0x83, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xf8, 0x83, 0x3f, 0x00, 0x00, 0x80,
+0x3f, 0xf8, 0x83, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv54o.bm b/bitmaps/cv54o.bm
new file mode 100644
index 0000000..295536b
--- /dev/null
+++ b/bitmaps/cv54o.bm
@@ -0,0 +1,30 @@
+#define cv54o_width 54
+#define cv54o_height 54
+static char cv54o_bits[] = {
+0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x60, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x90, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x13, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
+0x36, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x60,
+0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xd8, 0x00,
+0x00, 0x00, 0x80, 0x07, 0x00, 0xb0, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x04, 0xa0, 0x01, 0x00,
+0x00, 0xc0, 0x03, 0x06, 0x80, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x06, 0x00, 0x01, 0x00, 0x00,
+0xe0, 0x01, 0x06, 0x00, 0x03, 0x00, 0x00, 0xe0, 0x01, 0x0c, 0x00, 0x06, 0x00, 0x00, 0xf0,
+0x00, 0x38, 0x00, 0x04, 0x00, 0x00, 0xf0, 0x00, 0x7c, 0x00, 0x0c, 0x00, 0x00, 0xf0, 0x00,
+0xcc, 0x01, 0x08, 0x00, 0x00, 0x70, 0x00, 0x8c, 0x07, 0x1e, 0x00, 0x00, 0x78, 0x00, 0x08,
+0x0e, 0x16, 0x00, 0x00, 0x78, 0x00, 0x18, 0x98, 0x14, 0x00, 0x00, 0x78, 0x00, 0x10, 0xb0,
+0x19, 0x00, 0x00, 0x78, 0x00, 0x30, 0x60, 0x0f, 0x00, 0x00, 0x78, 0x00, 0x60, 0xc0, 0x07,
+0x00, 0x00, 0x3c, 0x00, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x01, 0x00, 0x00,
+0x00, 0x3c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+0x3c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c,
+0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3c, 0x00,
+0x00, 0x08, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
+0x1f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x38, 0x40, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x70,
+0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x01,
+0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00,
+0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x80, 0xe1, 0x3f, 0xfc, 0x83, 0x01, 0x00, 0x80,
+0xe1, 0x3f, 0xfc, 0x83, 0x01, 0x00, 0x80, 0x61, 0x30, 0x0c, 0x83, 0x01, 0x00, 0x80, 0x61,
+0x30, 0x0c, 0x83, 0x01, 0x00, 0x80, 0x7f, 0xf0, 0x0f, 0xff, 0x01, 0x00, 0x80, 0x7f, 0xf0,
+0x0f, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv54s.bm b/bitmaps/cv54s.bm
new file mode 100644
index 0000000..6300bb6
--- /dev/null
+++ b/bitmaps/cv54s.bm
@@ -0,0 +1,30 @@
+#define cv54s_width 54
+#define cv54s_height 54
+static char cv54s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x70, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xe0, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf1, 0x71, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf8,
+0xff, 0x00, 0x00, 0x00, 0x00, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xff, 0xe7,
+0x01, 0x00, 0x00, 0x00, 0xc6, 0xff, 0xcf, 0x01, 0x00, 0x00, 0x00, 0xe6, 0xff, 0x9f, 0x01,
+0x00, 0x00, 0x00, 0xe3, 0xff, 0xbf, 0x01, 0x00, 0x00, 0x00, 0xf3, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0xf1, 0xff, 0xff, 0x03, 0x00, 0x00, 0x80, 0xf9, 0xe7, 0xff, 0x07, 0x00, 0x00,
+0x80, 0xf9, 0xef, 0xff, 0x0f, 0x00, 0x00, 0x80, 0xfc, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0,
+0xfc, 0xdf, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xfc, 0x9f, 0xff, 0x1f, 0x00, 0x00, 0x40, 0xfe,
+0x1f, 0xfe, 0x33, 0x00, 0x00, 0x60, 0xfe, 0x3f, 0xf8, 0x33, 0x00, 0x00, 0x60, 0xfe, 0x3f,
+0xf0, 0x37, 0x00, 0x00, 0x60, 0xfe, 0x7f, 0xe0, 0x3e, 0x00, 0x00, 0x60, 0xfe, 0x7f, 0xc0,
+0x1c, 0x00, 0x00, 0x60, 0xff, 0xff, 0x80, 0x0f, 0x00, 0x00, 0x20, 0xff, 0xff, 0x01, 0x01,
+0x00, 0x00, 0x30, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0x07, 0x00, 0x00,
+0x00, 0x30, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00,
+0x30, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x30,
+0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0xff,
+0xff, 0x1f, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00,
+0x38, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff,
+0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x80, 0x03,
+0x00, 0x00, 0x07, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00,
+0xff, 0xe0, 0x1f, 0xfc, 0x03, 0x00, 0x00, 0xff, 0xe0, 0x1f, 0xfc, 0x03, 0x00, 0x00, 0xff,
+0xe0, 0x1f, 0xfc, 0x03, 0x00, 0x00, 0xff, 0xe0, 0x1f, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv58o.bm b/bitmaps/cv58o.bm
new file mode 100644
index 0000000..51a3c6b
--- /dev/null
+++ b/bitmaps/cv58o.bm
@@ -0,0 +1,35 @@
+#define cv58o_width 58
+#define cv58o_height 58
+static char cv58o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x66,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x3c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f,
+0x3c, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x23, 0x64, 0x02, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
+0x1c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x40, 0x18, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x00, 0xc0, 0x19, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x80, 0x19, 0x00, 0x00,
+0x00, 0x80, 0x03, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x08, 0x00, 0x30, 0x00,
+0x00, 0x00, 0xc0, 0x01, 0x18, 0x00, 0x30, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x18, 0x00, 0x20,
+0x00, 0x00, 0x00, 0xe0, 0x00, 0x18, 0x00, 0x60, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x30, 0x00,
+0x40, 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, 0xd8,
+0x00, 0x80, 0x01, 0x00, 0x00, 0x70, 0x00, 0x98, 0x01, 0x00, 0x01, 0x00, 0x00, 0x78, 0x00,
+0x18, 0x07, 0x00, 0x03, 0x00, 0x00, 0x38, 0x00, 0x18, 0x0c, 0x00, 0x02, 0x00, 0x00, 0x38,
+0x00, 0x30, 0x38, 0xc0, 0x06, 0x00, 0x00, 0x3c, 0x00, 0x30, 0x60, 0xc0, 0x06, 0x00, 0x00,
+0x3c, 0x00, 0x60, 0xc0, 0x00, 0x06, 0x00, 0x00, 0x1c, 0x00, 0xc0, 0x80, 0x19, 0x06, 0x00,
+0x00, 0x1c, 0x00, 0x80, 0x01, 0x33, 0x06, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x03, 0x36, 0x03,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x06, 0xfc, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x0c, 0x00,
+0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x18,
+0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x60, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
+0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
+0x07, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+0xc0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00,
+0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0c,
+0x00, 0x00, 0xc0, 0xe0, 0x3f, 0xf0, 0x1f, 0x0c, 0x00, 0x00, 0xc0, 0xe0, 0x3f, 0xf0, 0x1f,
+0x0c, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x30,
+0x18, 0x0c, 0x00, 0x00, 0xc0, 0x7f, 0xf0, 0x3f, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x7f, 0xf0,
+0x3f, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv58s.bm b/bitmaps/cv58s.bm
new file mode 100644
index 0000000..fbb1c71
--- /dev/null
+++ b/bitmaps/cv58s.bm
@@ -0,0 +1,35 @@
+#define cv58s_width 58
+#define cv58s_height 58
+static char cv58s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x87, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcf, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x8f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1,
+0x0f, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x60,
+0xfe, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00,
+0xd8, 0xff, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xff, 0x7f, 0x3c, 0x00, 0x00, 0x00,
+0x00, 0xe4, 0xff, 0xff, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe2, 0xff, 0xff, 0x39, 0x00, 0x00,
+0x00, 0x00, 0xf3, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xff, 0xff, 0x7f, 0x00,
+0x00, 0x00, 0x80, 0xf9, 0xef, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x80, 0xf8, 0xcf, 0xff, 0xff,
+0x00, 0x00, 0x00, 0x80, 0xfc, 0xdf, 0xff, 0xff, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0xff, 0xff,
+0xff, 0x01, 0x00, 0x00, 0x40, 0xfe, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x40, 0xfe, 0xbf,
+0xff, 0xff, 0x03, 0x00, 0x00, 0x60, 0xfe, 0x3f, 0xff, 0xff, 0x07, 0x00, 0x00, 0x60, 0xfe,
+0x3f, 0xfc, 0xff, 0x07, 0x00, 0x00, 0x20, 0xff, 0x7f, 0xf0, 0x7f, 0x0e, 0x00, 0x00, 0x30,
+0xff, 0x7f, 0xc0, 0x7f, 0x0e, 0x00, 0x00, 0x30, 0xff, 0xff, 0x80, 0xff, 0x0f, 0x00, 0x00,
+0x30, 0xff, 0xff, 0x01, 0xff, 0x0f, 0x00, 0x00, 0x30, 0xff, 0xff, 0x01, 0x9e, 0x0f, 0x00,
+0x00, 0x30, 0xff, 0xff, 0x03, 0x3c, 0x07, 0x00, 0x00, 0x30, 0xff, 0xff, 0x07, 0xf8, 0x03,
+0x00, 0x00, 0x18, 0xff, 0xff, 0x0f, 0x18, 0x00, 0x00, 0x00, 0x98, 0xff, 0xff, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x98, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x98, 0xff, 0xff, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x98, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x98, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0x98, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x78,
+0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
+0xf8, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00,
+0x00, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00,
+0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x1f,
+0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+0x1f, 0x00, 0x00, 0x80, 0x7f, 0xe0, 0x7f, 0xe0, 0x1f, 0x00, 0x00, 0x80, 0x7f, 0xe0, 0x7f,
+0xe0, 0x1f, 0x00, 0x00, 0x80, 0x7f, 0xe0, 0x7f, 0xe0, 0x1f, 0x00, 0x00, 0x80, 0x7f, 0xe0,
+0x7f, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv64o.bm b/bitmaps/cv64o.bm
new file mode 100644
index 0000000..4d92973
--- /dev/null
+++ b/bitmaps/cv64o.bm
@@ -0,0 +1,39 @@
+#define cv64o_width 64
+#define cv64o_height 64
+static char cv64o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c,
+0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0xc7, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xc7, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x3c, 0x42, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x00, 0x00, 0x00,
+0x00, 0xe0, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x9c, 0x01, 0x00,
+0x00, 0x00, 0x30, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x30, 0x01,
+0x00, 0x00, 0x00, 0x1c, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c, 0x80, 0x01, 0x00,
+0x03, 0x00, 0x00, 0x00, 0x0e, 0x80, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0e, 0x80, 0x01,
+0x00, 0x06, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00,
+0x07, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x07, 0x80, 0x0d, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07,
+0x80, 0x19, 0x00, 0x10, 0x00, 0x00, 0x80, 0x07, 0x80, 0x71, 0x00, 0x30, 0x00, 0x00, 0x80,
+0x07, 0x80, 0xc1, 0x00, 0x20, 0x00, 0x00, 0x80, 0x03, 0x80, 0x81, 0x03, 0x6c, 0x00, 0x00,
+0x80, 0x03, 0x00, 0x03, 0x06, 0x6c, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x03, 0x0c, 0x60, 0x00,
+0x00, 0xc0, 0x03, 0x00, 0x06, 0x98, 0x61, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x0c, 0x30, 0x63,
+0x00, 0x00, 0xc0, 0x01, 0x00, 0x18, 0x60, 0x33, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x30, 0xc0,
+0x1f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x60, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0xc0,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
+0x80, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xe0, 0x00,
+0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0xe0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x38, 0x00,
+0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff,
+0xff, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00,
+0x00, 0x80, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x06, 0xff,
+0x03, 0xff, 0x83, 0x01, 0x00, 0x00, 0x06, 0xff, 0x03, 0xff, 0x83, 0x01, 0x00, 0x00, 0x06,
+0x03, 0x03, 0x03, 0x83, 0x01, 0x00, 0x00, 0x06, 0x03, 0x03, 0x03, 0x83, 0x01, 0x00, 0x00,
+0x06, 0x03, 0x03, 0x03, 0x83, 0x01, 0x00, 0x00, 0xfe, 0x03, 0xff, 0x03, 0xff, 0x01, 0x00,
+0x00, 0xfe, 0x03, 0xff, 0x03, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00
+};
diff --git a/bitmaps/cv64s.bm b/bitmaps/cv64s.bm
new file mode 100644
index 0000000..2c5ed59
--- /dev/null
+++ b/bitmaps/cv64s.bm
@@ -0,0 +1,39 @@
+#define cv64s_width 64
+#define cv64s_height 64
+static char cv64s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e,
+0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x06, 0x3f, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xf9, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0x60, 0xff, 0xff, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0xf1, 0x00, 0x00,
+0x00, 0x00, 0x90, 0xff, 0xff, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x88, 0xff, 0xff, 0xe7, 0x00,
+0x00, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xc4, 0xff, 0xff, 0xff,
+0x01, 0x00, 0x00, 0x00, 0xe6, 0xbf, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xe2, 0x3f, 0xff,
+0xff, 0x03, 0x00, 0x00, 0x00, 0xf2, 0x7f, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xf3, 0xff,
+0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xf9, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xf9,
+0xff, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x80, 0xf9, 0xff, 0xfc, 0xff, 0x1f, 0x00, 0x00, 0x80,
+0xf9, 0xff, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xfd, 0xff, 0xc0, 0xff, 0x39, 0x00, 0x00,
+0x80, 0xfc, 0xff, 0x01, 0xff, 0x39, 0x00, 0x00, 0xc0, 0xfc, 0xff, 0x01, 0xfe, 0x3f, 0x00,
+0x00, 0xc0, 0xfc, 0xff, 0x03, 0xfc, 0x3f, 0x00, 0x00, 0xc0, 0xfc, 0xff, 0x07, 0x78, 0x3e,
+0x00, 0x00, 0xc0, 0xfc, 0xff, 0x07, 0xf0, 0x1c, 0x00, 0x00, 0xc0, 0xfc, 0xff, 0x0f, 0xe0,
+0x0f, 0x00, 0x00, 0xc0, 0xfc, 0xff, 0x1f, 0x60, 0x00, 0x00, 0x00, 0x60, 0xfc, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x60, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x60, 0xfe, 0xff,
+0xff, 0x00, 0x00, 0x00, 0x00, 0x60, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x60, 0xfe,
+0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x60, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x60,
+0xfe, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00,
+0xc0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x80, 0x03, 0x00, 0x00,
+0x00, 0xe0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x7f,
+0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+0xc0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff,
+0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff,
+0x01, 0xff, 0x80, 0xff, 0x00, 0x00, 0x00, 0xff, 0x01, 0xff, 0x80, 0xff, 0x00, 0x00, 0x00,
+0xff, 0x01, 0xff, 0x80, 0xff, 0x00, 0x00, 0x00, 0xff, 0x01, 0xff, 0x80, 0xff, 0x00, 0x00,
+0x00, 0xff, 0x01, 0xff, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00
+};
diff --git a/bitmaps/cv72o.bm b/bitmaps/cv72o.bm
new file mode 100644
index 0000000..ffca5d2
--- /dev/null
+++ b/bitmaps/cv72o.bm
@@ -0,0 +1,48 @@
+#define cv72o_width 72
+#define cv72o_height 72
+static char cv72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07,
+0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0x8f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xdc, 0x0d, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfc, 0xf8, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x78,
+0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc7, 0xf8, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0x41, 0xc0, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x39, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
+0x60, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x80, 0xe7, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0x03, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xcf, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x18, 0x00,
+0xc8, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x18, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x78,
+0x00, 0x18, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x18, 0x00, 0x80, 0x03, 0x00,
+0x00, 0x00, 0x3c, 0x00, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x00,
+0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x70, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1e,
+0x00, 0x70, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xf0, 0x00, 0x00, 0x18, 0x00,
+0x00, 0x00, 0x1e, 0x00, 0xf0, 0x03, 0x00, 0x38, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x30, 0x0f,
+0x00, 0x30, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x30, 0x3c, 0x00, 0x76, 0x00, 0x00, 0x00, 0x0f,
+0x00, 0x70, 0xf0, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x60, 0xc0, 0x01, 0x6e, 0x00,
+0x00, 0x80, 0x0f, 0x00, 0xe0, 0x80, 0x03, 0x6c, 0x00, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x00,
+0x67, 0x60, 0x00, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x01, 0xee, 0x60, 0x00, 0x00, 0x80, 0x07,
+0x00, 0x80, 0x03, 0xfc, 0x71, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x07, 0xd8, 0x3f, 0x00,
+0x00, 0x80, 0x07, 0x00, 0x00, 0x0e, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x1c,
+0x70, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03,
+0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0,
+0x01, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xc0, 0x03,
+0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xe0, 0x00,
+0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
+0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x06, 0x00,
+0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
+0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0xfc, 0x1f, 0xf8, 0x3f,
+0x60, 0x00, 0x00, 0x00, 0x06, 0xfc, 0x1f, 0xf8, 0x3f, 0x60, 0x00, 0x00, 0x00, 0x06, 0x0c,
+0x18, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x18, 0x30, 0x60, 0x00, 0x00,
+0x00, 0x06, 0x0c, 0x18, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0xf8, 0x1f, 0xf0,
+0x7f, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0xf8, 0x1f, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/cv72s.bm b/bitmaps/cv72s.bm
new file mode 100644
index 0000000..0496cf0
--- /dev/null
+++ b/bitmaps/cv72s.bm
@@ -0,0 +1,48 @@
+#define cv72s_width 72
+#define cv72s_height 72
+static char cv72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x1c, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x8f,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xcf, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0x87, 0xcf, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xc1, 0x0f,
+0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xf0, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x3e, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x87, 0xff, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc3, 0xff, 0xff,
+0xf0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe1, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xf1, 0xff, 0xff, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xff, 0xff, 0xf7, 0x01, 0x00,
+0x00, 0x00, 0x70, 0xf8, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x70, 0xf8, 0xff, 0xff,
+0xff, 0x01, 0x00, 0x00, 0x00, 0x38, 0xfc, 0xef, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x38,
+0xfc, 0xef, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x18, 0xfe, 0xcf, 0xff, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x1c, 0xfe, 0xdf, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x1c, 0xfe, 0xff, 0xff,
+0xff, 0x1f, 0x00, 0x00, 0x00, 0x0c, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x0e,
+0xff, 0xbf, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x0e, 0xff, 0x3f, 0xfe, 0xff, 0x3f, 0x00,
+0x00, 0x00, 0x86, 0xff, 0x3f, 0xf8, 0xff, 0x79, 0x00, 0x00, 0x00, 0x86, 0xff, 0x7f, 0xf0,
+0xff, 0x71, 0x00, 0x00, 0x00, 0x87, 0xff, 0x7f, 0xc0, 0xff, 0x71, 0x00, 0x00, 0x00, 0x87,
+0xff, 0xff, 0x80, 0xff, 0x73, 0x00, 0x00, 0x00, 0x83, 0xff, 0xff, 0x00, 0x9f, 0x7f, 0x00,
+0x00, 0x00, 0xc3, 0xff, 0xff, 0x01, 0xbe, 0x7f, 0x00, 0x00, 0x00, 0xc3, 0xff, 0xff, 0x03,
+0x3c, 0x7f, 0x00, 0x00, 0x00, 0xc3, 0xff, 0xff, 0x07, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0xc3,
+0xff, 0xff, 0x0f, 0xf8, 0x0f, 0x00, 0x00, 0x80, 0xc3, 0xff, 0xff, 0x1f, 0x70, 0x00, 0x00,
+0x00, 0x80, 0xc3, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc3, 0xff, 0xff, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x80, 0xc3, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc3,
+0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
+0x00, 0x80, 0xc1, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x80, 0xe1, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x80, 0xe1, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x80, 0xff,
+0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80,
+0x03, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xf8, 0xff,
+0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
+0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
+0x70, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0xf8, 0x1f, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0x0f,
+0xf8, 0x1f, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0xf8, 0x1f, 0xf0, 0x7f, 0x00, 0x00,
+0x00, 0xfe, 0x0f, 0xf8, 0x1f, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0xf8, 0x1f, 0xf0,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/d49o.bm b/bitmaps/d49o.bm
new file mode 100644
index 0000000..acba4a6
--- /dev/null
+++ b/bitmaps/d49o.bm
@@ -0,0 +1,26 @@
+#define d49o_width 49
+#define d49o_height 49
+static char d49o_bits[] = {
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
diff --git a/bitmaps/d49s.bm b/bitmaps/d49s.bm
new file mode 100644
index 0000000..7778615
--- /dev/null
+++ b/bitmaps/d49s.bm
@@ -0,0 +1,26 @@
+#define d49s_width 49
+#define d49s_height 49
+static char d49s_bits[] = {
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
diff --git a/bitmaps/d72o.bm b/bitmaps/d72o.bm
new file mode 100644
index 0000000..dbb9d25
--- /dev/null
+++ b/bitmaps/d72o.bm
@@ -0,0 +1,47 @@
+#define d72o_width 72
+#define d72o_height 72
+static char d72o_bits[] = {
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30};
diff --git a/bitmaps/d72s.bm b/bitmaps/d72s.bm
new file mode 100644
index 0000000..439b156
--- /dev/null
+++ b/bitmaps/d72s.bm
@@ -0,0 +1,47 @@
+#define d72s_width 72
+#define d72s_height 72
+static char d72s_bits[] = {
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30};
diff --git a/bitmaps/dk33o.bm b/bitmaps/dk33o.bm
new file mode 100644
index 0000000..f9f4530
--- /dev/null
+++ b/bitmaps/dk33o.bm
@@ -0,0 +1,16 @@
+#define dk33o_width 33
+#define dk33o_height 33
+static char dk33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00,
+0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,
+0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xc0, 0xc7, 0xc7, 0x07, 0x00,
+0x40, 0x44, 0x44, 0x04, 0x00, 0x40, 0x7c, 0x7c, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00,
+0xc0, 0xff, 0xff, 0x07, 0x00, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00,
+0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00,
+0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00,
+0x80, 0x00, 0x00, 0x02, 0x00, 0x80, 0x00, 0x00, 0x02, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00,
+0x20, 0x00, 0x00, 0x08, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/dk33s.bm b/bitmaps/dk33s.bm
new file mode 100644
index 0000000..5b146b1
--- /dev/null
+++ b/bitmaps/dk33s.bm
@@ -0,0 +1,16 @@
+#define dk33s_width 33
+#define dk33s_height 33
+static char dk33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00,
+0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00,
+0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0xc0, 0xd7, 0xd7, 0x07, 0x00,
+0xc0, 0xc7, 0xc7, 0x07, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00,
+0xc0, 0x00, 0x00, 0x06, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x03, 0x80, 0x01, 0x00,
+0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00,
+0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x80, 0x00, 0x00, 0x02, 0x00,
+0x80, 0xff, 0xff, 0x03, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0xe0, 0x00, 0x00, 0x0e, 0x00,
+0xe0, 0xff, 0xff, 0x0f, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/dk49o.bm b/bitmaps/dk49o.bm
new file mode 100644
index 0000000..0fe75ad
--- /dev/null
+++ b/bitmaps/dk49o.bm
@@ -0,0 +1,27 @@
+#define dk49o_width 49
+#define dk49o_height 49
+static char dk49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
+0xc0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
+0x04, 0x00, 0x00, 0x00, 0xfe, 0xe0, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x82, 0x20, 0x08, 0x82,
+0x00, 0x00, 0x00, 0x82, 0x20, 0x08, 0x82, 0x00, 0x00, 0x00, 0x82, 0x20, 0x08, 0x82, 0x00,
+0x00, 0x00, 0x82, 0x3f, 0xf8, 0x83, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00,
+0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10,
+0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x20, 0x00,
+0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
+0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00,
+0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00,
+0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08,
+0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x04, 0x00,
+0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/dk49s.bm b/bitmaps/dk49s.bm
new file mode 100644
index 0000000..f905105
--- /dev/null
+++ b/bitmaps/dk49s.bm
@@ -0,0 +1,27 @@
+#define dk49s_width 49
+#define dk49s_height 49
+static char dk49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+0xff, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff,
+0x07, 0x00, 0x00, 0x00, 0x7e, 0x0e, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0xfe, 0xee, 0xef, 0xfe,
+0x00, 0x00, 0x00, 0xfe, 0xee, 0xef, 0xfe, 0x00, 0x00, 0x00, 0xfe, 0xee, 0xef, 0xfe, 0x00,
+0x00, 0x00, 0xfe, 0xe0, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
+0xfc, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xf0,
+0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
+0x0f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xf8,
+0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfc, 0xff,
+0xff, 0x7f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0,
+0x03, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03,
+0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/dk72o.bm b/bitmaps/dk72o.bm
new file mode 100644
index 0000000..cea7632
--- /dev/null
+++ b/bitmaps/dk72o.bm
@@ -0,0 +1,48 @@
+#define dk72o_width 72
+#define dk72o_height 72
+static char dk72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xe7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x81, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x1c, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xf0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xe0, 0xff,
+0x80, 0xff, 0x01, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0x80, 0xff, 0x01, 0xff, 0x07, 0x00,
+0x00, 0x60, 0xc0, 0x80, 0x81, 0x01, 0x03, 0x06, 0x00, 0x00, 0x60, 0xc0, 0x80, 0x81, 0x01,
+0x03, 0x06, 0x00, 0x00, 0x60, 0xc0, 0x80, 0x81, 0x01, 0x03, 0x06, 0x00, 0x00, 0x60, 0xc0,
+0xff, 0x81, 0xff, 0x03, 0x06, 0x00, 0x00, 0x60, 0xc0, 0xff, 0x81, 0xff, 0x03, 0x06, 0x00,
+0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00,
+0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00,
+0xe0, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18,
+0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18,
+0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18,
+0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+0x18, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00,
+0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00,
+0xc0, 0x01, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xc0, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x03, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xc0, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x60, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x06, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/dk72s.bm b/bitmaps/dk72s.bm
new file mode 100644
index 0000000..41b4878
--- /dev/null
+++ b/bitmaps/dk72s.bm
@@ -0,0 +1,48 @@
+#define dk72s_width 72
+#define dk72s_height 72
+static char dk72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfc, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x38, 0x1c, 0x00, 0x00, 0x00, 0xe0, 0x1f,
+0x1c, 0x00, 0x38, 0xf8, 0x07, 0x00, 0x00, 0xe0, 0xff, 0x9c, 0xff, 0x39, 0xff, 0x07, 0x00,
+0x00, 0xe0, 0xff, 0x9c, 0xff, 0x39, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0x9c, 0xff, 0x39,
+0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0x80, 0xff, 0x01, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff,
+0x80, 0xff, 0x01, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
+0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x1c,
+0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8,
+0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8,
+0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8,
+0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x1c,
+0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x01,
+0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x03, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xc0, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00,
+0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/dopkbm.sh b/bitmaps/dopkbm.sh
old mode 100755
new mode 100644
diff --git a/bitmaps/dopkbm1.sh b/bitmaps/dopkbm1.sh
old mode 100755
new mode 100644
diff --git a/bitmaps/e33o.bm b/bitmaps/e33o.bm
new file mode 100644
index 0000000..375c973
--- /dev/null
+++ b/bitmaps/e33o.bm
@@ -0,0 +1,16 @@
+#define e33o_width 33
+#define e33o_height 33
+static char e33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0x01, 0x00,
+0x00, 0x70, 0x00, 0x06, 0x00, 0x00, 0x28, 0x00, 0x08, 0x00, 0x00, 0x14, 0x00, 0x30, 0x00,
+0x00, 0x14, 0x00, 0x4e, 0x00, 0x00, 0x14, 0x00, 0x81, 0x00, 0x00, 0x14, 0x00, 0x80, 0x00,
+0x00, 0x14, 0x00, 0x80, 0x00, 0x00, 0x14, 0x00, 0x80, 0x00, 0x00, 0x04, 0x00, 0x80, 0x00,
+0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x82, 0x01, 0x41, 0x00, 0x00, 0x0e, 0x00, 0x41, 0x00,
+0x3c, 0x02, 0x00, 0x41, 0x00, 0x24, 0x0e, 0x00, 0x21, 0x00, 0x14, 0x02, 0x80, 0x22, 0x00,
+0x0a, 0x2e, 0x70, 0x24, 0x00, 0x0a, 0x26, 0x08, 0x28, 0x00, 0x0a, 0xe5, 0x06, 0x28, 0x00,
+0x0a, 0x95, 0x01, 0x28, 0x00, 0x8a, 0x94, 0x00, 0x30, 0x00, 0x6a, 0xce, 0x00, 0x10, 0x00,
+0x12, 0xa5, 0x00, 0x00, 0x00, 0xa2, 0x93, 0x00, 0x00, 0x00, 0x77, 0x88, 0x00, 0x00, 0x00,
+0x0c, 0x47, 0x00, 0x00, 0x00, 0xfe, 0x44, 0x00, 0x00, 0x00, 0x10, 0x43, 0x00, 0x00, 0x00,
+0x20, 0x20, 0x00, 0x00, 0x00, 0xc0, 0x18, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/e33s.bm b/bitmaps/e33s.bm
new file mode 100644
index 0000000..0f346c8
--- /dev/null
+++ b/bitmaps/e33s.bm
@@ -0,0 +1,16 @@
+#define e33s_width 33
+#define e33s_height 33
+static char e33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x01, 0x00,
+0x00, 0xd0, 0xff, 0x07, 0x00, 0x00, 0xd8, 0xff, 0x0f, 0x00, 0x00, 0xec, 0xff, 0x3f, 0x00,
+0x00, 0xec, 0xff, 0x71, 0x00, 0x00, 0xec, 0xff, 0xfe, 0x00, 0x00, 0xec, 0xff, 0xff, 0x00,
+0x00, 0xec, 0xff, 0xff, 0x00, 0x00, 0xec, 0xff, 0xff, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x00,
+0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x7e, 0xfe, 0x7e, 0x00, 0x00, 0xf2, 0xff, 0x7e, 0x00,
+0x3c, 0xfe, 0xff, 0x7e, 0x00, 0x3c, 0xf2, 0xff, 0x3f, 0x00, 0x1c, 0xfe, 0xff, 0x3e, 0x00,
+0x0e, 0xd2, 0x7f, 0x3c, 0x00, 0x0e, 0xde, 0x0e, 0x38, 0x00, 0x0e, 0x7d, 0x07, 0x38, 0x00,
+0x0e, 0x9d, 0x01, 0x38, 0x00, 0x8e, 0x9c, 0x00, 0x30, 0x00, 0x6e, 0xce, 0x00, 0x10, 0x00,
+0x1e, 0xe5, 0x00, 0x00, 0x00, 0xbe, 0xf3, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00,
+0x0c, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0x7c, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00,
+0xe0, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/e49o.bm b/bitmaps/e49o.bm
new file mode 100644
index 0000000..1fae013
--- /dev/null
+++ b/bitmaps/e49o.bm
@@ -0,0 +1,26 @@
+#define e49o_width 49
+#define e49o_height 49
+static char e49o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfc,0x03,0x00,0x00,0x00,0x00,0xf0,0x03,0x3c,0x00,0x00,0x00,0x00,
+ 0x6c,0x00,0xc0,0x01,0x00,0x00,0x00,0x12,0x00,0x00,0x02,0x00,0x00,0x00,0x09,
+ 0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,
+ 0xc0,0x21,0x00,0x00,0x00,0x05,0x00,0x30,0x20,0x00,0x00,0x00,0x05,0x00,0x10,
+ 0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x40,
+ 0x00,0x00,0x00,0x05,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x40,0x00,
+ 0x00,0x00,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x40,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00,0x20,0x00,0x00,0x80,
+ 0x80,0x01,0x00,0x20,0x00,0x00,0x40,0x80,0x01,0x20,0x20,0x00,0x00,0xc0,0x03,
+ 0x00,0x20,0x20,0x00,0xe0,0x40,0x00,0x00,0x20,0x20,0x00,0x30,0x41,0x00,0x00,
+ 0x50,0x10,0x00,0x10,0xc1,0x03,0x00,0x90,0x10,0x00,0x90,0x40,0x00,0x00,0x8c,
+ 0x10,0x00,0xd0,0xc0,0x00,0x00,0x82,0x10,0x00,0x48,0x80,0x13,0x80,0x01,0x11,
+ 0x00,0x48,0xc0,0x08,0x60,0x00,0x11,0x00,0x48,0xa0,0x48,0x1c,0x00,0x11,0x00,
+ 0x48,0xa0,0x78,0x02,0x00,0x12,0x00,0x48,0x90,0x64,0x01,0x00,0x12,0x00,0x48,
+ 0x90,0xa5,0x00,0x00,0x14,0x00,0x48,0x48,0x53,0x00,0x00,0x1c,0x00,0x48,0x24,
+ 0x51,0x00,0x00,0x18,0x00,0x88,0x12,0x49,0x00,0x00,0x00,0x00,0x90,0x89,0x44,
+ 0x00,0x00,0x00,0x00,0x10,0x45,0x42,0x00,0x00,0x00,0x00,0x18,0x33,0x43,0x00,
+ 0x00,0x00,0x00,0x3e,0x8a,0x42,0x00,0x00,0x00,0x00,0x40,0x67,0x42,0x00,0x00,
+ 0x00,0x00,0xc0,0x1f,0x41,0x00,0x00,0x00,0x00,0x80,0xe0,0x20,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x06,0x08,0x00,0x00,0x00,0x00,
+ 0x00,0x18,0x06,0x00,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/e49s.bm b/bitmaps/e49s.bm
new file mode 100644
index 0000000..39bc01c
--- /dev/null
+++ b/bitmaps/e49s.bm
@@ -0,0 +1,26 @@
+#define e49s_width 49
+#define e49s_height 49
+static char e49s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfc,0x03,0x00,0x00,0x00,0x00,0xf0,0xff,0x3f,0x00,0x00,0x00,0x00,
+ 0x9c,0xff,0xff,0x01,0x00,0x00,0x00,0xee,0xff,0xff,0x03,0x00,0x00,0x00,0xf7,
+ 0xff,0xff,0x03,0x00,0x00,0x00,0xfb,0xff,0xff,0x3d,0x00,0x00,0x00,0xfb,0xff,
+ 0x3f,0x3e,0x00,0x00,0x00,0xfb,0xff,0xcf,0x3f,0x00,0x00,0x00,0xfb,0xff,0xef,
+ 0x7f,0x00,0x00,0x00,0xfb,0xff,0xff,0x7f,0x00,0x00,0x00,0xfb,0xff,0xff,0x7f,
+ 0x00,0x00,0x00,0xfb,0xff,0xff,0x7f,0x00,0x00,0x00,0xfb,0xff,0xff,0x7f,0x00,
+ 0x00,0x00,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xff,0xff,0xff,0x7f,0x00,0x00,
+ 0x00,0xff,0xff,0xff,0x7f,0x00,0x00,0x80,0xff,0xff,0xff,0x3f,0x00,0x00,0x80,
+ 0x7f,0xfe,0xff,0x3f,0x00,0x00,0xc0,0x7f,0xfe,0xff,0x3f,0x00,0x00,0x40,0xfc,
+ 0xff,0xff,0x3f,0x00,0xe0,0xc0,0xff,0xff,0xff,0x3f,0x00,0xf0,0xc1,0xff,0xff,
+ 0xdf,0x1f,0x00,0xf0,0x41,0xfc,0xff,0x9f,0x1f,0x00,0xf0,0xc0,0xff,0xff,0x8f,
+ 0x1f,0x00,0xf0,0xc0,0xff,0xff,0x83,0x1f,0x00,0x78,0x80,0xec,0xff,0x01,0x1f,
+ 0x00,0x78,0xc0,0xf7,0x7f,0x00,0x1f,0x00,0x78,0xa0,0xb7,0x1f,0x00,0x1f,0x00,
+ 0x78,0xa0,0xcf,0x03,0x00,0x1e,0x00,0x78,0x90,0xf7,0x01,0x00,0x1e,0x00,0x78,
+ 0x90,0xe7,0x00,0x00,0x1c,0x00,0x78,0x48,0x73,0x00,0x00,0x1c,0x00,0x78,0x24,
+ 0x71,0x00,0x00,0x18,0x00,0xf8,0x12,0x79,0x00,0x00,0x00,0x00,0xf0,0x89,0x7c,
+ 0x00,0x00,0x00,0x00,0xf0,0x45,0x7e,0x00,0x00,0x00,0x00,0xe8,0x33,0x7f,0x00,
+ 0x00,0x00,0x00,0xfe,0x8b,0x7e,0x00,0x00,0x00,0x00,0xc0,0x65,0x7e,0x00,0x00,
+ 0x00,0x00,0x40,0x10,0x7f,0x00,0x00,0x00,0x00,0x80,0xff,0x3f,0x00,0x00,0x00,
+ 0x00,0x00,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0x00,0x00,0x00,
+ 0x00,0xf8,0x07,0x00,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/e72o.bm b/bitmaps/e72o.bm
new file mode 100644
index 0000000..ec91f63
--- /dev/null
+++ b/bitmaps/e72o.bm
@@ -0,0 +1,47 @@
+#define e72o_width 72
+#define e72o_height 72
+static char e72o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x00,0xff,0x00,0x00,
+ 0x00,0x00,0x00,0xfc,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x6e,0x00,0x00,
+ 0x80,0x1f,0x00,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x80,
+ 0x3b,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xc0,0x19,0x00,0x00,0x00,0xe0,0x07,
+ 0x00,0x00,0xc0,0x1c,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00,0xc0,0x0c,0x00,0x00,
+ 0x00,0xfc,0x1c,0x00,0x00,0xc0,0x0c,0x00,0x00,0x80,0x0f,0x18,0x00,0x00,0xc0,
+ 0x0c,0x00,0x00,0xe0,0x03,0x18,0x00,0x00,0xc0,0x0c,0x00,0x00,0xe0,0x00,0x18,
+ 0x00,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0xc0,0x0c,0x00,0x00,
+ 0x00,0x00,0x38,0x00,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0xc0,
+ 0x0c,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x30,
+ 0x00,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0xc0,0x0c,0x00,0x00,
+ 0x00,0x00,0x30,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x30,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0xe0,0x00,0x00,0x00,
+ 0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x0e,0x00,0x00,0x00,0x18,0x00,0x00,0x30,
+ 0x00,0x0e,0x00,0x00,0x00,0x18,0x00,0x00,0x30,0x00,0x0e,0x00,0x80,0x01,0x1c,
+ 0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x03,0x1c,0x00,0x00,0xf0,0x03,0x00,0x00,
+ 0x00,0x03,0x1c,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x03,0x0c,0xe0,0x00,0x30,
+ 0x00,0x00,0x00,0x00,0x03,0x0c,0xe0,0x03,0x30,0x00,0x00,0x00,0x80,0x07,0x0c,
+ 0x30,0x07,0xf0,0x03,0x00,0x00,0xe0,0x06,0x0c,0x30,0x0e,0xf0,0x03,0x00,0x00,
+ 0x70,0x06,0x0c,0x30,0x07,0x30,0x00,0x00,0x00,0x3c,0x06,0x0c,0x38,0x03,0x30,
+ 0x00,0x00,0x00,0x1f,0x0c,0x0e,0x98,0x01,0xf0,0x01,0x00,0x80,0x07,0x0c,0x06,
+ 0x98,0x01,0xf0,0x01,0x00,0xe0,0x01,0x0c,0x06,0x98,0x01,0x60,0x10,0x00,0xfc,
+ 0x00,0x18,0x06,0x98,0x01,0x70,0x18,0x00,0x3f,0x00,0x18,0x06,0x9c,0x01,0x78,
+ 0x18,0x80,0x07,0x00,0x18,0x06,0x8c,0x01,0x6c,0x0c,0xe3,0x01,0x00,0x30,0x06,
+ 0x8c,0x01,0xe4,0xbc,0xf9,0x00,0x00,0x30,0x06,0x8c,0x01,0xe6,0xfc,0x3d,0x00,
+ 0x00,0x70,0x06,0x8c,0x01,0xc2,0xe4,0x0c,0x00,0x00,0xe0,0x06,0x8c,0x01,0xe3,
+ 0x46,0x06,0x00,0x00,0xc0,0x07,0x8c,0x81,0xb1,0x63,0x07,0x00,0x00,0x80,0x07,
+ 0x8c,0xc1,0x98,0x23,0x03,0x00,0x00,0x00,0x07,0x8c,0x61,0x8c,0x31,0x03,0x00,
+ 0x00,0x00,0x02,0x8c,0x33,0xc6,0x18,0x03,0x00,0x00,0x00,0x00,0x1c,0x1b,0x63,
+ 0x8c,0x01,0x00,0x00,0x00,0x00,0x18,0x8f,0x31,0x86,0x01,0x00,0x00,0x00,0x00,
+ 0x18,0xc7,0x18,0x83,0x01,0x00,0x00,0x00,0x00,0x18,0x66,0x8c,0x83,0x01,0x00,
+ 0x00,0x00,0x00,0x38,0x3c,0xc6,0x83,0x01,0x00,0x00,0x00,0x00,0x30,0x38,0xe3,
+ 0x81,0x01,0x00,0x00,0x00,0x00,0x78,0xf0,0xb1,0x81,0x01,0x00,0x00,0x00,0x00,
+ 0xfe,0x7c,0x9c,0x81,0x01,0x00,0x00,0x00,0x00,0xc0,0x07,0xc7,0xc1,0x01,0x00,
+ 0x00,0x00,0x00,0x80,0xf1,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0xe0,0x1f,0x7e,
+ 0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1c,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf0,0x01,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,
+ 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/e72s.bm b/bitmaps/e72s.bm
new file mode 100644
index 0000000..391b696
--- /dev/null
+++ b/bitmaps/e72s.bm
@@ -0,0 +1,47 @@
+#define e72s_width 72
+#define e72s_height 72
+static char e72s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x00,0x00,
+ 0x00,0x00,0x00,0x3c,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x9e,0xff,0xff,
+ 0xff,0x1f,0x00,0x00,0x00,0x00,0x8f,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x80,
+ 0xc7,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xc0,0xe7,0xff,0xff,0xff,0xff,0x07,
+ 0x00,0x00,0xc0,0xe3,0xff,0xff,0xff,0x07,0x0f,0x00,0x00,0xc0,0xf3,0xff,0xff,
+ 0xff,0x03,0x1f,0x00,0x00,0xc0,0xf3,0xff,0xff,0x7f,0xf0,0x1f,0x00,0x00,0xc0,
+ 0xf3,0xff,0xff,0x1f,0xfc,0x1f,0x00,0x00,0xc0,0xf3,0xff,0xff,0x1f,0xff,0x1f,
+ 0x00,0x00,0xc0,0xf3,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,0xf3,0xff,0xff,
+ 0xff,0xff,0x3f,0x00,0x00,0xc0,0xf3,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,
+ 0xf3,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,0xf3,0xff,0xff,0xff,0xff,0x3f,
+ 0x00,0x00,0xc0,0xf3,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,0xf3,0xff,0xff,
+ 0xff,0xff,0x3f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,
+ 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x3f,
+ 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xe0,0xff,0xff,0xff,
+ 0xff,0xff,0x3f,0x00,0x00,0xf0,0xff,0xf1,0xff,0xff,0xff,0x1f,0x00,0x00,0xf0,
+ 0xff,0xf1,0xff,0xff,0xff,0x1f,0x00,0x00,0xf0,0xff,0xf1,0xff,0x7f,0xfe,0x1f,
+ 0x00,0x00,0xf0,0xff,0xff,0xff,0x7f,0xfc,0x1f,0x00,0x00,0x30,0xfc,0xff,0xff,
+ 0xff,0xfc,0x1f,0x00,0x00,0x30,0xfc,0xff,0xff,0xff,0xfc,0x0f,0xe0,0x00,0xf0,
+ 0xff,0xff,0xff,0xff,0xfe,0x0f,0xe0,0x03,0xf0,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0xf0,0x07,0x30,0xfc,0xff,0xff,0xff,0xfe,0x0f,0xf0,0x0f,0x30,0xfc,0xff,0xff,
+ 0x7f,0xfe,0x0f,0xf0,0x07,0xf0,0xff,0xff,0xff,0x3f,0xfe,0x0f,0xf8,0x03,0xf0,
+ 0xff,0xff,0xff,0x1f,0xfc,0x0f,0xf8,0x01,0x30,0xfe,0xff,0xff,0x07,0xfc,0x07,
+ 0xf8,0x01,0x30,0xfe,0xff,0xff,0x01,0xfc,0x07,0xf8,0x01,0xe0,0xff,0xff,0xff,
+ 0x00,0xf8,0x07,0xf8,0x01,0xf0,0xcf,0xff,0x3f,0x00,0xf8,0x07,0xfc,0x01,0xf8,
+ 0xe7,0xff,0x07,0x00,0xf8,0x07,0xfc,0x01,0xec,0xf3,0xff,0x01,0x00,0xf0,0x07,
+ 0xfc,0x01,0xe4,0xc7,0xf9,0x00,0x00,0xf0,0x07,0xfc,0x01,0xe6,0x9f,0x3c,0x00,
+ 0x00,0xf0,0x07,0xfc,0x01,0xc2,0x37,0x0e,0x00,0x00,0xe0,0x07,0xfc,0x01,0xe3,
+ 0x67,0x07,0x00,0x00,0xc0,0x07,0xfc,0x81,0xb1,0xc3,0x07,0x00,0x00,0x80,0x07,
+ 0xfc,0xc1,0x98,0xe3,0x03,0x00,0x00,0x00,0x07,0xfc,0x61,0x8c,0xf1,0x03,0x00,
+ 0x00,0x00,0x02,0xfc,0x33,0xc6,0xf8,0x03,0x00,0x00,0x00,0x00,0xfc,0x1b,0x63,
+ 0xfc,0x01,0x00,0x00,0x00,0x00,0xf8,0x8f,0x31,0xfe,0x01,0x00,0x00,0x00,0x00,
+ 0xf8,0xc7,0x18,0xff,0x01,0x00,0x00,0x00,0x00,0xf8,0x67,0x8c,0xff,0x01,0x00,
+ 0x00,0x00,0x00,0xf8,0x3f,0xc6,0xff,0x01,0x00,0x00,0x00,0x00,0xf0,0x3f,0xe3,
+ 0xff,0x01,0x00,0x00,0x00,0x00,0xf8,0xff,0xb1,0xff,0x01,0x00,0x00,0x00,0x00,
+ 0xfe,0x7f,0x9c,0xff,0x01,0x00,0x00,0x00,0x00,0xc0,0x07,0xc7,0xff,0x01,0x00,
+ 0x00,0x00,0x00,0x80,0xf1,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,
+ 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xfc,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf0,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,
+ 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/f33o.bm b/bitmaps/f33o.bm
new file mode 100644
index 0000000..f0eb6e8
--- /dev/null
+++ b/bitmaps/f33o.bm
@@ -0,0 +1,16 @@
+#define f33o_width 33
+#define f33o_height 33
+static char f33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00,
+0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00,
+0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00,
+0x00, 0xa0, 0x08, 0x00, 0x00, 0x00, 0x90, 0x10, 0x00, 0x00, 0x00, 0x48, 0x20, 0x00, 0x00,
+0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x23, 0x80, 0x01, 0x00, 0xc0, 0xfc, 0x7f, 0x06, 0x00,
+0xf0, 0x03, 0x80, 0x1f, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x08, 0xf8, 0x1f, 0x20, 0x00,
+0x86, 0x03, 0xc0, 0x41, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x04, 0x00, 0x00, 0x10, 0x00,
+0x08, 0xfc, 0x7f, 0x10, 0x00, 0xc8, 0x03, 0x80, 0x27, 0x00, 0x34, 0x00, 0x00, 0x38, 0x00,
+0x0c, 0x00, 0x00, 0x60, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00,
+0x08, 0x00, 0x00, 0x20, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0xc0, 0x03, 0x80, 0x07, 0x00,
+0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/f33s.bm b/bitmaps/f33s.bm
new file mode 100644
index 0000000..113b0ab
--- /dev/null
+++ b/bitmaps/f33s.bm
@@ -0,0 +1,16 @@
+#define f33s_width 33
+#define f33s_height 33
+static char f33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00,
+0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00,
+0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00,
+0x00, 0x60, 0x0f, 0x00, 0x00, 0x00, 0x70, 0x1f, 0x00, 0x00, 0x00, 0xb8, 0x3f, 0x00, 0x00,
+0x00, 0xbc, 0x7f, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x01, 0x00, 0xc0, 0x03, 0x80, 0x07, 0x00,
+0x30, 0xfc, 0x7f, 0x18, 0x00, 0xc8, 0xff, 0xff, 0x27, 0x00, 0xf4, 0x07, 0xe0, 0x5f, 0x00,
+0x7e, 0xfc, 0x3f, 0x7e, 0x00, 0xdc, 0xff, 0xff, 0x3b, 0x00, 0xfc, 0xff, 0xff, 0x1f, 0x00,
+0xf8, 0x03, 0x80, 0x1f, 0x00, 0x38, 0xfc, 0x7f, 0x38, 0x00, 0xcc, 0xff, 0xff, 0x23, 0x00,
+0xf4, 0xff, 0xff, 0x5f, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00,
+0xf8, 0xff, 0xff, 0x3f, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00,
+0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/f49o.bm b/bitmaps/f49o.bm
new file mode 100644
index 0000000..05ce7e7
--- /dev/null
+++ b/bitmaps/f49o.bm
@@ -0,0 +1,26 @@
+#define f49o_width 49
+#define f49o_height 49
+static char f49o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0xc0,0x0c,
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x00,
+ 0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x00,
+ 0x00,0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x0f,0x00,0x00,0x00,0x00,0x00,0x40,0x09,0x00,0x00,0x00,0x00,
+ 0x00,0xa0,0x10,0x00,0x00,0x00,0x00,0x00,0x90,0x20,0x00,0x00,0x00,0x00,0x00,
+ 0x48,0x40,0x00,0x00,0x00,0x00,0x00,0x46,0x80,0x00,0x00,0x00,0x00,0x00,0x21,
+ 0x00,0x01,0x00,0x00,0x00,0xc0,0x10,0x00,0x06,0x00,0x00,0x00,0x20,0x08,0x00,
+ 0x08,0x00,0x00,0x00,0x18,0x04,0x00,0x30,0x00,0x00,0x00,0x04,0xff,0xff,0x41,
+ 0x00,0x00,0x00,0xff,0x00,0x00,0xfe,0x01,0x00,0x80,0x03,0x00,0x00,0x80,0x03,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x00,0x08,0x00,
+ 0x20,0x00,0x00,0x00,0x00,0x08,0x00,0x40,0x00,0xfc,0x7f,0x00,0x04,0x00,0x40,
+ 0xe0,0x01,0x00,0x07,0x04,0x00,0x80,0x0c,0x00,0x00,0x30,0x02,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x02,0x00,0x80,0x00,0x00,0x00,0x00,0x02,0x00,0x40,0x00,0xff,
+ 0xff,0x01,0x04,0x00,0x40,0xfc,0x00,0x00,0x7e,0x04,0x00,0xc0,0x03,0x00,0x00,
+ 0x80,0x07,0x00,0x60,0x00,0x00,0x00,0x00,0x0c,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x08,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x00,0x80,0x03,0x00,0x00,0x80,0x03,
+ 0x00,0x00,0xfc,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xff,0xff,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/f49s.bm b/bitmaps/f49s.bm
new file mode 100644
index 0000000..8b4cc1c
--- /dev/null
+++ b/bitmaps/f49s.bm
@@ -0,0 +1,26 @@
+#define f49s_width 49
+#define f49s_height 49
+static char f49s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0xc0,0x0f,
+ 0x00,0x00,0x00,0x00,0x00,0xe0,0x1f,0x00,0x00,0x00,0x00,0x00,0xe0,0x1f,0x00,
+ 0x00,0x00,0x00,0x00,0xf0,0x3f,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f,0x00,0x00,
+ 0x00,0x00,0x00,0xe0,0x1f,0x00,0x00,0x00,0x00,0x00,0xe0,0x1f,0x00,0x00,0x00,
+ 0x00,0x00,0x40,0x08,0x00,0x00,0x00,0x00,0x00,0xc0,0x0e,0x00,0x00,0x00,0x00,
+ 0x00,0x60,0x1f,0x00,0x00,0x00,0x00,0x00,0x70,0x3f,0x00,0x00,0x00,0x00,0x00,
+ 0xb8,0x7f,0x00,0x00,0x00,0x00,0x00,0xbe,0xff,0x00,0x00,0x00,0x00,0x00,0xdf,
+ 0xff,0x01,0x00,0x00,0x00,0xc0,0xef,0xff,0x07,0x00,0x00,0x00,0xe0,0xf7,0xff,
+ 0x0f,0x00,0x00,0x00,0xf8,0xfb,0xff,0x3f,0x00,0x00,0x00,0xfc,0x00,0x00,0x7e,
+ 0x00,0x00,0x00,0x03,0xff,0xff,0x81,0x01,0x00,0x80,0xfd,0xff,0xff,0x7f,0x03,
+ 0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0xe0,0xff,0xff,0xff,0xff,0x0f,0x00,
+ 0xe0,0xff,0xff,0xff,0xff,0x0f,0x00,0xc0,0xff,0x03,0x80,0xff,0x07,0x00,0xc0,
+ 0x1f,0xfe,0xff,0xf8,0x07,0x00,0x80,0xf3,0xff,0xff,0xcf,0x03,0x00,0x80,0xff,
+ 0xff,0xff,0xff,0x03,0x00,0x80,0xff,0xff,0xff,0xff,0x03,0x00,0xc0,0xff,0x00,
+ 0x00,0xfe,0x07,0x00,0xc0,0x03,0xff,0xff,0x81,0x07,0x00,0x40,0xfc,0xff,0xff,
+ 0x7f,0x04,0x00,0xa0,0xff,0xff,0xff,0xff,0x0b,0x00,0xe0,0xff,0xff,0xff,0xff,
+ 0x0f,0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0x80,0xff,0xff,0xff,0xff,0x03,
+ 0x00,0x00,0xfc,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/f72o.bm b/bitmaps/f72o.bm
new file mode 100644
index 0000000..939a953
--- /dev/null
+++ b/bitmaps/f72o.bm
@@ -0,0 +1,47 @@
+#define f72o_width 72
+#define f72o_height 72
+static char f72o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x81,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x06,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x81,0x03,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc3,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xc3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xe0,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x1e,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x3c,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0xf0,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0xe0,
+ 0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x1e,0x00,0x00,
+ 0x00,0x00,0x3c,0xfc,0xff,0x3f,0x38,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
+ 0xff,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0xc0,0xff,0x03,0x00,0x00,0xe0,0x0f,
+ 0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,
+ 0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,
+ 0x00,0x60,0x00,0x00,0x06,0x00,0xf0,0xff,0x1f,0x00,0x70,0x00,0x00,0x0e,0x00,
+ 0xfe,0xff,0xff,0x07,0x30,0x00,0x00,0x0c,0xf8,0x0f,0x00,0xe0,0x7f,0x38,0x00,
+ 0x00,0x9c,0xff,0x01,0x00,0x00,0xf8,0x19,0x00,0x00,0x98,0x0f,0x00,0x00,0x00,
+ 0xc0,0x1d,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x30,0x00,
+ 0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x18,0x00,0xfc,0xff,0x3f,0x00,0x1c,0x00,
+ 0x00,0x18,0xf0,0xff,0xff,0xff,0x0f,0x18,0x00,0x00,0x0c,0xff,0x03,0x00,0xc0,
+ 0xff,0x38,0x00,0x00,0xec,0x3f,0x00,0x00,0x00,0xf8,0x37,0x00,0x00,0xfe,0x01,
+ 0x00,0x00,0x00,0x80,0x7f,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,
+ 0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,
+ 0x00,0x70,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0xf8,0x01,
+ 0x00,0x00,0x00,0xc0,0x1f,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0xf0,0x07,0x00,
+ 0x00,0x00,0xff,0x03,0x00,0xc0,0xff,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,
+ 0x0f,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/f72s.bm b/bitmaps/f72s.bm
new file mode 100644
index 0000000..47ed468
--- /dev/null
+++ b/bitmaps/f72s.bm
@@ -0,0 +1,47 @@
+#define f72s_width 72
+#define f72s_height 72
+static char f72s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x07,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xe0,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x1f,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xe0,
+ 0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x1f,0x00,0x00,
+ 0x00,0x00,0xfc,0x03,0x00,0xc0,0x3f,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+ 0xf0,0x00,0x00,0x00,0xc0,0x03,0xfc,0xff,0x3f,0xc0,0x03,0x00,0x00,0xe0,0xf1,
+ 0xff,0xff,0xff,0x8f,0x0f,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,
+ 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0x00,0x00,0xfe,0xff,0x0f,0x00,0xe0,0xff,0x7f,0x00,0x00,0xfe,0xff,
+ 0x01,0x00,0x00,0xf8,0x3f,0x00,0x00,0xfc,0x07,0xf0,0xff,0x1f,0x80,0x3f,0x00,
+ 0x00,0x7c,0x00,0xfe,0xff,0xff,0x07,0x1e,0x00,0x00,0x78,0xf0,0xff,0xff,0xff,
+ 0x3f,0x1e,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xf0,0xff,
+ 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xf8,0xff,0x03,0x00,0xc0,0xff,0x1f,0x00,
+ 0x00,0xf8,0x0f,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0xfc,0x00,0xfc,0xff,0x3f,
+ 0x00,0x3f,0x00,0x00,0x1c,0xc0,0xff,0xff,0xff,0x07,0x30,0x00,0x00,0x0e,0xfe,
+ 0xff,0xff,0xff,0x7f,0x70,0x00,0x00,0xc6,0xff,0xff,0xff,0xff,0xff,0x63,0x00,
+ 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xf8,0xff,
+ 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x07,0x00,
+ 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,
+ 0x0f,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/g33o.bm b/bitmaps/g33o.bm
new file mode 100644
index 0000000..95bf4de
--- /dev/null
+++ b/bitmaps/g33o.bm
@@ -0,0 +1,16 @@
+#define g33o_width 33
+#define g33o_height 33
+static char g33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x24, 0x12, 0x00, 0x00,
+0x30, 0x24, 0x12, 0x06, 0x00, 0x48, 0x18, 0x0c, 0x09, 0x00, 0x48, 0x10, 0x04, 0x09, 0x00,
+0x30, 0x10, 0x04, 0x06, 0x00, 0x60, 0x28, 0x0a, 0x03, 0x00, 0x60, 0x28, 0x0a, 0x03, 0x00,
+0xc0, 0x28, 0x8a, 0x01, 0x00, 0x40, 0x49, 0x49, 0x01, 0x00, 0x40, 0x49, 0x49, 0x01, 0x00,
+0x40, 0x4a, 0x29, 0x01, 0x00, 0x40, 0xca, 0x29, 0x01, 0x00, 0x80, 0xac, 0x9a, 0x00, 0x00,
+0x80, 0xda, 0xad, 0x00, 0x00, 0x80, 0x0d, 0xd0, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
+0x00, 0xf1, 0x47, 0x00, 0x00, 0x00, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00,
+0x00, 0xf2, 0x27, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0xf2, 0x27, 0x00, 0x00,
+0x00, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x0f, 0x78, 0x00, 0x00,
+0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/g33s.bm b/bitmaps/g33s.bm
new file mode 100644
index 0000000..8468613
--- /dev/null
+++ b/bitmaps/g33s.bm
@@ -0,0 +1,16 @@
+#define g33s_width 33
+#define g33s_height 33
+static char g33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00,
+0x60, 0x78, 0x3c, 0x0c, 0x00, 0xf0, 0x30, 0x18, 0x1e, 0x00, 0xf0, 0x20, 0x08, 0x1e, 0x00,
+0x60, 0x30, 0x18, 0x0c, 0x00, 0xc0, 0x70, 0x1c, 0x06, 0x00, 0xc0, 0x70, 0x1c, 0x06, 0x00,
+0x80, 0x71, 0x1c, 0x03, 0x00, 0x80, 0xf3, 0x9e, 0x03, 0x00, 0x80, 0xf3, 0x9e, 0x03, 0x00,
+0x80, 0xf7, 0xde, 0x03, 0x00, 0x80, 0xf7, 0xdf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00,
+0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00,
+0x00, 0x1e, 0xf0, 0x00, 0x00, 0x00, 0xe6, 0xcf, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00,
+0x00, 0x1c, 0x70, 0x00, 0x00, 0x00, 0xc8, 0x27, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00,
+0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00,
+0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/g49o.bm b/bitmaps/g49o.bm
new file mode 100644
index 0000000..12721fa
--- /dev/null
+++ b/bitmaps/g49o.bm
@@ -0,0 +1,26 @@
+#define g49o_width 49
+#define g49o_height 49
+static char g49o_bits[] = {
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
diff --git a/bitmaps/g49s.bm b/bitmaps/g49s.bm
new file mode 100644
index 0000000..ab00ac5
--- /dev/null
+++ b/bitmaps/g49s.bm
@@ -0,0 +1,26 @@
+#define g49s_width 49
+#define g49s_height 49
+static char g49s_bits[] = {
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
diff --git a/bitmaps/g72o.bm b/bitmaps/g72o.bm
new file mode 100644
index 0000000..4a71f57
--- /dev/null
+++ b/bitmaps/g72o.bm
@@ -0,0 +1,47 @@
+#define g72o_width 72
+#define g72o_height 72
+static char g72o_bits[] = {
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30};
diff --git a/bitmaps/g72s.bm b/bitmaps/g72s.bm
new file mode 100644
index 0000000..700ada1
--- /dev/null
+++ b/bitmaps/g72s.bm
@@ -0,0 +1,47 @@
+#define g72s_width 72
+#define g72s_height 72
+static char g72s_bits[] = {
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x30,0x30,0x30};
diff --git a/bitmaps/h33o.bm b/bitmaps/h33o.bm
new file mode 100644
index 0000000..418fec2
--- /dev/null
+++ b/bitmaps/h33o.bm
@@ -0,0 +1,16 @@
+#define h33o_width 33
+#define h33o_height 33
+static char h33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x00, 0x32, 0x07, 0x00, 0x00,
+0x00, 0x3a, 0x19, 0x00, 0x00, 0x00, 0x0e, 0x60, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00,
+0x00, 0x1f, 0x80, 0x01, 0x00, 0x80, 0x39, 0x00, 0x03, 0x00, 0x80, 0x7d, 0x04, 0x03, 0x00,
+0xc0, 0x3f, 0x04, 0x06, 0x00, 0x40, 0x1f, 0x04, 0x06, 0x00, 0x20, 0x0e, 0x04, 0x0c, 0x00,
+0x20, 0x04, 0x02, 0x0c, 0x00, 0x10, 0x80, 0x03, 0x0c, 0x00, 0x10, 0x40, 0x02, 0x18, 0x00,
+0x28, 0x30, 0x02, 0x18, 0x00, 0x28, 0x08, 0x01, 0x18, 0x00, 0x88, 0x04, 0x01, 0x18, 0x00,
+0x88, 0x82, 0x00, 0x10, 0x00, 0xf0, 0x41, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x30, 0x00,
+0x00, 0x10, 0x00, 0x30, 0x00, 0x00, 0x08, 0x00, 0x30, 0x00, 0x00, 0x08, 0x00, 0x30, 0x00,
+0x00, 0x04, 0x00, 0x30, 0x00, 0x00, 0x04, 0x00, 0x30, 0x00, 0x00, 0xfc, 0xff, 0x3f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/h33s.bm b/bitmaps/h33s.bm
new file mode 100644
index 0000000..6d2ae80
--- /dev/null
+++ b/bitmaps/h33s.bm
@@ -0,0 +1,16 @@
+#define h33s_width 33
+#define h33s_height 33
+static char h33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0xce, 0x01, 0x00, 0x00,
+0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0xce, 0x19, 0x00, 0x00, 0x00, 0xf4, 0x67, 0x00, 0x00,
+0x00, 0xfb, 0xdf, 0x00, 0x00, 0x00, 0xe1, 0xbf, 0x01, 0x00, 0x80, 0xc6, 0x7f, 0x03, 0x00,
+0x80, 0x86, 0x7f, 0x02, 0x00, 0x40, 0xc0, 0xff, 0x06, 0x00, 0xc0, 0xe0, 0xff, 0x04, 0x00,
+0xe0, 0xf1, 0xfd, 0x0d, 0x00, 0xe0, 0xfb, 0xff, 0x09, 0x00, 0xf0, 0xff, 0xff, 0x09, 0x00,
+0xf0, 0x7f, 0xfe, 0x1b, 0x00, 0xd8, 0x1f, 0xfe, 0x13, 0x00, 0xd8, 0x0f, 0xff, 0x13, 0x00,
+0xf8, 0x07, 0xff, 0x13, 0x00, 0xf8, 0x83, 0xff, 0x17, 0x00, 0xf0, 0xc1, 0xff, 0x37, 0x00,
+0x00, 0xe0, 0xff, 0x27, 0x00, 0x00, 0xf0, 0xff, 0x27, 0x00, 0x00, 0xf8, 0xff, 0x27, 0x00,
+0x00, 0xf8, 0xff, 0x27, 0x00, 0x00, 0xfc, 0xff, 0x27, 0x00, 0x00, 0xfc, 0xff, 0x3f, 0x00,
+0x00, 0xfc, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/h49o.bm b/bitmaps/h49o.bm
new file mode 100644
index 0000000..5c3fe78
--- /dev/null
+++ b/bitmaps/h49o.bm
@@ -0,0 +1,26 @@
+#define h49o_width 49
+#define h49o_height 49
+static char h49o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
+ 0x20,0x00,0x00,0x00,0x00,0x00,0x70,0x50,0x00,0x00,0x00,0x00,0x00,0x90,0x90,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x89,0x00,0x00,0x00,0x00,0x00,0x10,0x8e,0x07,
+ 0x00,0x00,0x00,0x00,0x20,0x8b,0x38,0x00,0x00,0x00,0x00,0x90,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x06,0x00,
+ 0x00,0x00,0x04,0x00,0x80,0x0b,0x00,0x00,0x00,0x82,0x00,0x00,0x3c,0x00,0x00,
+ 0x00,0x62,0x00,0x00,0xe0,0x03,0x00,0x00,0x22,0x00,0x00,0x20,0x0c,0x00,0x00,
+ 0x12,0x00,0x00,0x78,0x00,0x00,0x00,0x01,0x00,0x02,0xc0,0x07,0x00,0x00,0x01,
+ 0x00,0x02,0x80,0x18,0x00,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x80,0x00,0x00,
+ 0x02,0x30,0x01,0x00,0x80,0x00,0x00,0x01,0xc0,0x03,0x00,0x40,0x00,0x00,0x01,
+ 0x00,0x1e,0x00,0x20,0x00,0x80,0x02,0x00,0x62,0x00,0x20,0x00,0x40,0x02,0xc0,
+ 0x02,0x00,0x10,0x00,0x30,0x02,0x00,0x07,0x00,0x10,0x00,0x08,0x02,0x00,0x3c,
+ 0x00,0xc8,0x00,0x06,0x02,0x00,0x44,0x00,0x48,0x00,0x01,0x01,0xc0,0x04,0x00,
+ 0x08,0x80,0x00,0x01,0x00,0x0f,0x00,0x08,0x44,0x80,0x00,0x00,0x78,0x00,0x08,
+ 0x22,0x40,0x00,0x00,0x88,0x00,0x10,0x12,0x20,0x00,0x00,0x08,0x00,0xe0,0x0b,
+ 0x10,0x00,0x80,0x0b,0x00,0x00,0x0c,0x08,0x00,0x00,0x3c,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,
+ 0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x3c,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0xd0,0x00,0x00,0x80,0x00,0x00,0x00,0x10,0x00,0x00,0x40,0x00,0x00,0x00,0x16,
+ 0x00,0x00,0x40,0x00,0x00,0x00,0x38,0x00,0x00,0x40,0x00,0x00,0x00,0xd0,0x00,
+ 0x00,0xc0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/h49s.bm b/bitmaps/h49s.bm
new file mode 100644
index 0000000..a8c3fe8
--- /dev/null
+++ b/bitmaps/h49s.bm
@@ -0,0 +1,26 @@
+#define h49s_width 49
+#define h49s_height 49
+static char h49s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
+ 0x20,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0xf0,0xf0,
+ 0x00,0x00,0x00,0x00,0x00,0xf0,0xf9,0x00,0x00,0x00,0x00,0x00,0xf0,0x77,0x07,
+ 0x00,0x00,0x00,0x00,0xe0,0x74,0x3f,0x00,0x00,0x00,0x00,0x70,0xff,0xff,0x00,
+ 0x00,0x00,0x00,0xf8,0xff,0xff,0x01,0x00,0x00,0x00,0xfc,0xff,0xff,0x07,0x00,
+ 0x00,0x00,0xfc,0xff,0x7f,0x0c,0x00,0x00,0x00,0x7e,0xff,0xff,0x33,0x00,0x00,
+ 0x00,0x9e,0xff,0xff,0xff,0x03,0x00,0x00,0xde,0xff,0xff,0x3f,0x0c,0x00,0x00,
+ 0xee,0xff,0xff,0x47,0x00,0x00,0x00,0xff,0xff,0xff,0xbf,0x07,0x00,0x00,0xff,
+ 0xff,0xff,0xff,0x18,0x00,0x00,0xff,0xff,0xff,0xff,0x01,0x00,0x80,0xff,0xff,
+ 0xff,0xcf,0x01,0x00,0x80,0xff,0xff,0xff,0x3f,0x02,0x00,0xc0,0xff,0xff,0xff,
+ 0xff,0x1d,0x00,0xe0,0xff,0xff,0xfe,0xff,0x63,0x00,0xe0,0xff,0x7f,0xfe,0x3f,
+ 0x03,0x00,0xf0,0xff,0x3f,0xfe,0xff,0x04,0x00,0xf0,0xff,0x0f,0xfe,0xff,0x3b,
+ 0x00,0x38,0xff,0x07,0xfe,0xff,0x47,0x00,0xb8,0xff,0x01,0xff,0x3f,0x07,0x00,
+ 0xf8,0xff,0x00,0xff,0xff,0x08,0x00,0xf8,0x7b,0x80,0xff,0xff,0x77,0x00,0xf8,
+ 0x3d,0xc0,0xff,0xff,0x8f,0x00,0xf0,0x1d,0xe0,0xff,0xff,0x0f,0x00,0xe0,0x0d,
+ 0xf0,0xff,0x7f,0x0c,0x00,0x00,0x0c,0xf8,0xff,0xff,0x23,0x00,0x00,0x00,0xfc,
+ 0xff,0xff,0xdf,0x00,0x00,0x00,0xfc,0xff,0xff,0x1f,0x00,0x00,0x00,0xfe,0xff,
+ 0xff,0x1c,0x00,0x00,0x00,0xff,0xff,0xff,0x23,0x00,0x00,0x80,0xff,0xff,0xff,
+ 0xdf,0x00,0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0xc0,0xff,0xff,0xff,0x19,
+ 0x00,0x00,0xc0,0xff,0xff,0xff,0x27,0x00,0x00,0xc0,0xff,0xff,0xff,0xdf,0x00,
+ 0x00,0xc0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/h72o.bm b/bitmaps/h72o.bm
new file mode 100644
index 0000000..961b190
--- /dev/null
+++ b/bitmaps/h72o.bm
@@ -0,0 +1,47 @@
+#define h72o_width 72
+#define h72o_height 72
+static char h72o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x0e,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0xc0,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x7c,0xe0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xec,
+ 0x60,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0x71,0x0e,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x8c,0x33,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x3f,0xfc,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x0c,0x3e,0xfc,0x0f,0x00,0x00,0x00,0x00,0x00,0x1c,
+ 0x37,0x18,0x7e,0x00,0x00,0x00,0x00,0x00,0x9c,0x03,0x18,0xf0,0x01,0x00,0x00,
+ 0x00,0x00,0xce,0x01,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+ 0x0f,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc0,0x01,
+ 0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
+ 0x00,0xe0,0xc0,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x60,0x70,0x00,0x00,0x00,
+ 0xc0,0x3f,0x00,0x00,0x60,0x78,0x00,0x00,0x00,0x80,0xf9,0x01,0x00,0x60,0x7c,
+ 0x00,0x00,0x00,0x70,0xc3,0x01,0x00,0x60,0x3c,0x00,0x00,0x00,0xf0,0x07,0x00,
+ 0x00,0x70,0x04,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,0x30,0x00,0x00,0x60,0x00,
+ 0x00,0x7e,0x00,0x00,0x30,0x00,0x00,0x60,0x00,0x00,0xfc,0x03,0x00,0x38,0x00,
+ 0x00,0x60,0x00,0x00,0x9c,0x0f,0x00,0x18,0x00,0x00,0x60,0x00,0xc0,0x19,0x0c,
+ 0x00,0x1c,0x00,0x00,0x60,0x00,0xc0,0x3f,0x00,0x00,0x0c,0x00,0x00,0x70,0x00,
+ 0x00,0x7e,0x00,0x00,0x0e,0x00,0x00,0x30,0x00,0x00,0xf0,0x03,0x00,0x07,0x00,
+ 0x00,0x30,0x00,0x00,0xf0,0x1f,0x00,0x03,0x00,0x00,0x38,0x00,0x00,0x60,0x1c,
+ 0x80,0x03,0x00,0x00,0x3c,0x00,0x00,0x67,0x00,0xc0,0x01,0x00,0x00,0x3e,0x00,
+ 0x00,0xff,0x00,0xc0,0x00,0x00,0x80,0x37,0x00,0x00,0xf8,0x00,0xe0,0x00,0x00,
+ 0xe0,0x31,0x00,0x00,0xe0,0x07,0x60,0x00,0x00,0x78,0x30,0x00,0x00,0xc0,0x1f,
+ 0x60,0x06,0x00,0x1e,0x30,0x00,0x00,0xc0,0x19,0x70,0x0f,0x80,0x07,0x38,0x00,
+ 0x00,0x8e,0x01,0x30,0x0f,0xc0,0x01,0x18,0x00,0x00,0xfe,0x01,0x30,0x07,0xe0,
+ 0x00,0x1c,0x00,0x00,0xf0,0x01,0x30,0x07,0x70,0x00,0x0c,0x00,0x00,0x80,0x0f,
+ 0x30,0xc0,0x38,0x00,0x0e,0x00,0x00,0x80,0x3f,0x30,0xc0,0x1c,0x00,0x07,0x00,
+ 0x00,0x1c,0x33,0x70,0xe0,0x0c,0x00,0x03,0x00,0x00,0x7c,0x03,0xe0,0x70,0x0e,
+ 0x80,0x03,0x00,0x00,0xe0,0x03,0xc0,0x7f,0x07,0xc0,0x01,0x00,0x00,0x80,0x0f,
+ 0x00,0xef,0x03,0xe0,0x00,0x00,0x00,0x00,0x3f,0x00,0xc0,0x01,0x70,0x00,0x00,
+ 0x00,0x00,0x33,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x00,
+ 0x18,0x00,0x00,0x00,0xfc,0x07,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xe0,0x07,
+ 0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x07,0x00,0x00,
+ 0x00,0x00,0x7e,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x66,0x00,0x00,0x80,
+ 0x03,0x00,0x00,0x00,0x1c,0x06,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x7c,0x06,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x80,0x0f,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x60,
+ 0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x06,
+ 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xe0,0xff,0xff,0xff,
+ 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/h72s.bm b/bitmaps/h72s.bm
new file mode 100644
index 0000000..2f90e1e
--- /dev/null
+++ b/bitmaps/h72s.bm
@@ -0,0 +1,47 @@
+#define h72s_width 72
+#define h72s_height 72
+static char h72s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x0e,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0xc0,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x7c,0xe0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,
+ 0xe0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xf1,0x0f,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfc,0xf3,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xef,0xe7,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0xfc,0xe9,0xe7,0x0f,0x00,0x00,0x00,0x00,0x00,0xfc,
+ 0xe0,0xcf,0x7f,0x00,0x00,0x00,0x00,0x00,0x7c,0xfc,0xcf,0xff,0x01,0x00,0x00,
+ 0x00,0x00,0x3e,0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xbf,0xff,0xff,0xff,
+ 0x0f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xc0,0xff,
+ 0xff,0xff,0x7f,0x30,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,
+ 0x00,0xe0,0x3f,0xff,0xff,0xff,0x0f,0x07,0x00,0x00,0xe0,0x8f,0xff,0xff,0xff,
+ 0x7f,0x3f,0x00,0x00,0xe0,0x87,0xff,0xff,0xff,0xff,0xf9,0x01,0x00,0xe0,0x83,
+ 0xff,0xff,0xff,0x8f,0xc3,0x01,0x00,0xe0,0xc3,0xff,0xff,0xff,0x0f,0x06,0x00,
+ 0x00,0xf0,0xfb,0xff,0xff,0xff,0x7f,0x08,0x00,0x00,0xf0,0xff,0xff,0x9f,0xff,
+ 0xff,0x71,0x00,0x00,0xf0,0xff,0xff,0x9f,0xff,0xff,0xe7,0x03,0x00,0xf8,0xff,
+ 0xff,0x9f,0xff,0xff,0x9f,0x0f,0x00,0xf8,0xff,0xff,0x9f,0xff,0x3f,0x1e,0x0c,
+ 0x00,0xfc,0xff,0xff,0x9f,0xff,0x3f,0x30,0x00,0x00,0xfc,0xff,0xff,0x8f,0xff,
+ 0xff,0x41,0x00,0x00,0xfe,0xff,0xff,0xcf,0xff,0xff,0xcf,0x03,0x00,0xff,0xff,
+ 0xff,0xcf,0xff,0xff,0xff,0x1f,0x00,0xff,0xff,0xff,0xcf,0xff,0xff,0x7f,0x1c,
+ 0x80,0xff,0xff,0xff,0xcf,0xff,0xff,0x78,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xe0,0x00,0xc0,0xff,0xff,0xff,0xf7,0xff,0xff,0x87,0x00,0xe0,0xff,0xff,
+ 0xff,0xf1,0xff,0xff,0x3f,0x07,0xe0,0xff,0xff,0x7f,0xf0,0xff,0xff,0xff,0x1f,
+ 0xe0,0xf9,0xff,0x1f,0xf0,0xff,0xff,0xff,0x19,0xf0,0xf0,0xff,0x07,0xf8,0xff,
+ 0xff,0xf1,0x01,0xf0,0xf0,0xff,0x01,0xf8,0xff,0xff,0x81,0x01,0xf0,0xf8,0xff,
+ 0x00,0xfc,0xff,0xff,0x0f,0x01,0xf0,0xf8,0x7f,0x00,0xfc,0xff,0xff,0x7f,0x0e,
+ 0xf0,0x3f,0x3f,0x00,0xfe,0xff,0xff,0xff,0x3c,0xf0,0x3f,0x1f,0x00,0xff,0xff,
+ 0xff,0xe3,0x33,0xf0,0x1f,0x0f,0x00,0xff,0xff,0xff,0x83,0x03,0xe0,0x9f,0x0f,
+ 0x80,0xff,0xff,0xff,0x1f,0x02,0xc0,0x8f,0x07,0xc0,0xff,0xff,0xff,0x7f,0x0c,
+ 0x00,0xef,0x03,0xe0,0xff,0xff,0xff,0xff,0x3d,0x00,0xc0,0x01,0xf0,0xff,0xff,
+ 0xff,0xff,0x33,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xe3,0x03,0x00,0x00,0x00,
+ 0xf8,0xff,0xff,0xff,0x03,0x07,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x1f,0x04,
+ 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x18,0x00,0x00,0x00,0xff,0xff,0xff,
+ 0xff,0xff,0x79,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x67,0x00,0x00,0x80,
+ 0xff,0xff,0xff,0xff,0xe3,0x07,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x83,0x07,
+ 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x1f,0x04,0x00,0x00,0xc0,0xff,0xff,0xff,
+ 0xff,0x7f,0x08,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x3b,0x00,0x00,0xe0,
+ 0xff,0xff,0xff,0xff,0xff,0x37,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x07,
+ 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xe0,0xff,0xff,0xff,
+ 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/l33o.bm b/bitmaps/l33o.bm
new file mode 100644
index 0000000..6cfc660
--- /dev/null
+++ b/bitmaps/l33o.bm
@@ -0,0 +1,16 @@
+#define l33o_width 33
+#define l33o_height 33
+static char l33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00,
+0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00,
+0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x20, 0x22, 0x00, 0x00,
+0x00, 0x20, 0x22, 0x00, 0x00, 0x00, 0x10, 0x42, 0x00, 0x00, 0x00, 0x10, 0x42, 0x00, 0x00,
+0x00, 0x90, 0x4f, 0x00, 0x00, 0x00, 0x08, 0x82, 0x00, 0x00, 0x00, 0x08, 0x82, 0x00, 0x00,
+0x00, 0x08, 0x82, 0x00, 0x00, 0x00, 0x10, 0x42, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
+0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/l33s.bm b/bitmaps/l33s.bm
new file mode 100644
index 0000000..43ad4d6
--- /dev/null
+++ b/bitmaps/l33s.bm
@@ -0,0 +1,16 @@
+#define l33s_width 33
+#define l33s_height 33
+static char l33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00,
+0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00,
+0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x3d, 0x00, 0x00,
+0x00, 0xe0, 0x3d, 0x00, 0x00, 0x00, 0xf0, 0x7d, 0x00, 0x00, 0x00, 0xf0, 0x7d, 0x00, 0x00,
+0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0xf8, 0xfd, 0x00, 0x00, 0x00, 0xf8, 0xfd, 0x00, 0x00,
+0x00, 0xf8, 0xfd, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00,
+0x00, 0xc0, 0x1d, 0x00, 0x00, 0x00, 0x80, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/l37o.bm b/bitmaps/l37o.bm
new file mode 100644
index 0000000..c1259af
--- /dev/null
+++ b/bitmaps/l37o.bm
@@ -0,0 +1,17 @@
+#define l37o_width 37
+#define l37o_height 37
+static char l37o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00,
+0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00,
+0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00,
+0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x20, 0x84, 0x00, 0x00, 0x00, 0x20, 0x84, 0x00, 0x00,
+0x00, 0x20, 0x84, 0x00, 0x00, 0x00, 0x10, 0x04, 0x01, 0x00, 0x00, 0x10, 0x04, 0x01, 0x00,
+0x00, 0x10, 0x1f, 0x01, 0x00, 0x00, 0x08, 0x04, 0x02, 0x00, 0x00, 0x08, 0x04, 0x02, 0x00,
+0x00, 0x08, 0x04, 0x02, 0x00, 0x00, 0x10, 0x04, 0x01, 0x00, 0x00, 0x20, 0x80, 0x00, 0x00,
+0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00,
+0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l37s.bm b/bitmaps/l37s.bm
new file mode 100644
index 0000000..4e4b2bf
--- /dev/null
+++ b/bitmaps/l37s.bm
@@ -0,0 +1,17 @@
+#define l37s_width 37
+#define l37s_height 37
+static char l37s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00,
+0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00,
+0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0xe0, 0xfb, 0x00, 0x00, 0x00, 0xe0, 0xfb, 0x00, 0x00,
+0x00, 0xe0, 0xfb, 0x00, 0x00, 0x00, 0xf0, 0xfb, 0x01, 0x00, 0x00, 0xf0, 0xe0, 0x01, 0x00,
+0x00, 0xf0, 0xfb, 0x01, 0x00, 0x00, 0xf8, 0xfb, 0x03, 0x00, 0x00, 0xf8, 0xfb, 0x03, 0x00,
+0x00, 0xf8, 0xfb, 0x03, 0x00, 0x00, 0xf0, 0xff, 0x01, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00,
+0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x80, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00,
+0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l40o.bm b/bitmaps/l40o.bm
new file mode 100644
index 0000000..9696f6e
--- /dev/null
+++ b/bitmaps/l40o.bm
@@ -0,0 +1,18 @@
+#define l40o_width 40
+#define l40o_height 40
+static char l40o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00,
+0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00,
+0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
+0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00,
+0x00, 0x40, 0x00, 0x01, 0x00, 0x00, 0x20, 0x08, 0x02, 0x00, 0x00, 0x20, 0x08, 0x02, 0x00,
+0x00, 0x20, 0x08, 0x02, 0x00, 0x00, 0x10, 0x08, 0x04, 0x00, 0x00, 0x10, 0x08, 0x04, 0x00,
+0x00, 0x10, 0x7f, 0x04, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00,
+0x00, 0x04, 0x08, 0x10, 0x00, 0x00, 0x04, 0x08, 0x10, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00,
+0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x02, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00,
+0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l40s.bm b/bitmaps/l40s.bm
new file mode 100644
index 0000000..b231c57
--- /dev/null
+++ b/bitmaps/l40s.bm
@@ -0,0 +1,18 @@
+#define l40s_width 40
+#define l40s_height 40
+static char l40s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00,
+0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00,
+0x00, 0xc0, 0xff, 0x01, 0x00, 0x00, 0xe0, 0xf7, 0x03, 0x00, 0x00, 0xe0, 0xf7, 0x03, 0x00,
+0x00, 0xe0, 0xf7, 0x03, 0x00, 0x00, 0xf0, 0xf7, 0x07, 0x00, 0x00, 0xf0, 0xf7, 0x07, 0x00,
+0x00, 0xf0, 0x80, 0x07, 0x00, 0x00, 0xf8, 0xf7, 0x0f, 0x00, 0x00, 0xf8, 0xf7, 0x0f, 0x00,
+0x00, 0xfc, 0xf7, 0x1f, 0x00, 0x00, 0xfc, 0xf7, 0x1f, 0x00, 0x00, 0xf8, 0xf7, 0x0f, 0x00,
+0x00, 0xf0, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00,
+0x00, 0x80, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l45o.bm b/bitmaps/l45o.bm
new file mode 100644
index 0000000..4c6411b
--- /dev/null
+++ b/bitmaps/l45o.bm
@@ -0,0 +1,23 @@
+#define l45o_width 45
+#define l45o_height 45
+static char l45o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08,
+0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00,
+0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x41, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x41, 0x10, 0x00, 0x00, 0x00, 0x00, 0x41, 0x10, 0x00, 0x00, 0x00, 0x80, 0x40,
+0x20, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x00, 0x00,
+0x00, 0x40, 0xf8, 0x43, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x40, 0x40,
+0x40, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x00, 0x00,
+0x00, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x10, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00,
+0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/l45s.bm b/bitmaps/l45s.bm
new file mode 100644
index 0000000..5289b68
--- /dev/null
+++ b/bitmaps/l45s.bm
@@ -0,0 +1,23 @@
+#define l45s_width 45
+#define l45s_height 45
+static char l45s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0x01, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf8,
+0x03, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfe,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0xbf, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x1f, 0x00, 0x00, 0x00, 0x80, 0xbf,
+0x3f, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x07, 0x3c, 0x00, 0x00,
+0x00, 0xc0, 0xbf, 0x7f, 0x00, 0x00, 0x00, 0xc0, 0xbf, 0x7f, 0x00, 0x00, 0x00, 0xc0, 0xbf,
+0x7f, 0x00, 0x00, 0x00, 0xe0, 0xbf, 0xff, 0x00, 0x00, 0x00, 0xe0, 0xbf, 0xff, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/l49o.bm b/bitmaps/l49o.bm
new file mode 100644
index 0000000..289a1b5
--- /dev/null
+++ b/bitmaps/l49o.bm
@@ -0,0 +1,27 @@
+#define l49o_width 49
+#define l49o_height 49
+static char l49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x80, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x0f, 0x02, 0x00,
+0x00, 0x00, 0x40, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x04, 0x00, 0x00,
+0x00, 0x20, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x60, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x00,
+0xc0, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
+0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l49s.bm b/bitmaps/l49s.bm
new file mode 100644
index 0000000..90857e7
--- /dev/null
+++ b/bitmaps/l49s.bm
@@ -0,0 +1,27 @@
+#define l49s_width 49
+#define l49s_height 49
+static char l49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe,
+0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x01,
+0x00, 0x00, 0x00, 0x80, 0xff, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x80, 0x1f, 0xf0, 0x03, 0x00,
+0x00, 0x00, 0xc0, 0xff, 0xfe, 0x07, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfe, 0x07, 0x00, 0x00,
+0x00, 0xe0, 0xff, 0xfe, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xfe, 0x0f, 0x00, 0x00, 0x00,
+0xc0, 0xff, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l54o.bm b/bitmaps/l54o.bm
new file mode 100644
index 0000000..bfb2428
--- /dev/null
+++ b/bitmaps/l54o.bm
@@ -0,0 +1,30 @@
+#define l54o_width 54
+#define l54o_height 54
+static char l54o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x61, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x61, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x80, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x60, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x60, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x30, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x30,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c,
+0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0c,
+0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x00,
+0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x00, 0x00,
+0x00, 0x00, 0xc6, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xff, 0x30, 0x00, 0x00, 0x00,
+0x00, 0x03, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x80,
+0x01, 0x0c, 0x60, 0x00, 0x00, 0x00, 0x80, 0x01, 0x0c, 0x60, 0x00, 0x00, 0x00, 0x80, 0x03,
+0x0c, 0x70, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
+0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xcc, 0x01, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l54s.bm b/bitmaps/l54s.bm
new file mode 100644
index 0000000..c95c8ce
--- /dev/null
+++ b/bitmaps/l54s.bm
@@ -0,0 +1,30 @@
+#define l54s_width 54
+#define l54s_height 54
+static char l54s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00,
+0x00, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf3,
+0x07, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf3, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xf3, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0xfc, 0xf3, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xf3, 0x0f, 0x00,
+0x00, 0x00, 0x00, 0xfe, 0xf3, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xf3, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0x7e, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x3f, 0x00, 0x00, 0x00,
+0x00, 0xff, 0xf3, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf3, 0x3f, 0x00, 0x00, 0x00, 0x80,
+0xff, 0xf3, 0x7f, 0x00, 0x00, 0x00, 0x80, 0xff, 0xf3, 0x7f, 0x00, 0x00, 0x00, 0x80, 0xff,
+0xf3, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf3, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x07,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf3, 0x01, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x6d, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l58o.bm b/bitmaps/l58o.bm
new file mode 100644
index 0000000..9b62db5
--- /dev/null
+++ b/bitmaps/l58o.bm
@@ -0,0 +1,35 @@
+#define l58o_width 58
+#define l58o_height 58
+static char l58o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x06, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x06, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x0c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
+0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
+0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0xc0, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x0c, 0xff, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0xc3, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x06, 0x30, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x30, 0x80,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x30, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0e,
+0x30, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x38, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xe0, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x0e, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x33, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l58s.bm b/bitmaps/l58s.bm
new file mode 100644
index 0000000..10bae53
--- /dev/null
+++ b/bitmaps/l58s.bm
@@ -0,0 +1,35 @@
+#define l58s_width 58
+#define l58s_height 58
+static char l58s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xf8, 0xcf, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xcf, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xcf, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xcf, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xcf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcf, 0xff,
+0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcf, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xcf,
+0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0xcf, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xfe,
+0xcf, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xcf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xe0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x0f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0xcf, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xb6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l64o.bm b/bitmaps/l64o.bm
new file mode 100644
index 0000000..0416302
--- /dev/null
+++ b/bitmaps/l64o.bm
@@ -0,0 +1,39 @@
+#define l64o_width 64
+#define l64o_height 64
+static char l64o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
+0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x81, 0x01, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0x80, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x80, 0x01, 0x03, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x80, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x60, 0x80, 0x01, 0x06, 0x00,
+0x00, 0x00, 0x00, 0x60, 0x80, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0x80, 0x01, 0x06,
+0x00, 0x00, 0x00, 0x00, 0x30, 0x80, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x30, 0xf8, 0x1f,
+0x0c, 0x00, 0x00, 0x00, 0x00, 0x30, 0xf8, 0x1f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80,
+0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18,
+0x80, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00,
+0x0c, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x80, 0x01, 0x38, 0x00, 0x00, 0x00,
+0x00, 0x38, 0x80, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x03, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x39,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00
+};
diff --git a/bitmaps/l64s.bm b/bitmaps/l64s.bm
new file mode 100644
index 0000000..cbbc5e9
--- /dev/null
+++ b/bitmaps/l64s.bm
@@ -0,0 +1,39 @@
+#define l64s_width 64
+#define l64s_height 64
+static char l64s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0xfe, 0x01, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0x7f, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0xfe, 0x03, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x7f, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0xfe, 0x07, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0x7f, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0xfe, 0x07,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0xfe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xe0,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f,
+0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8,
+0x7f, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0xfc, 0x7f, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0xfe, 0x3f, 0x00, 0x00, 0x00,
+0x00, 0xf8, 0x7f, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00
+};
diff --git a/bitmaps/l72o.bm b/bitmaps/l72o.bm
new file mode 100644
index 0000000..4ddc418
--- /dev/null
+++ b/bitmaps/l72o.bm
@@ -0,0 +1,48 @@
+#define l72o_width 72
+#define l72o_height 72
+static char l72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x83, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x06, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x40, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x0c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x30, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x18, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x30,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x0c, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x60, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0xc0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x38, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x03, 0x38, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x38, 0x80, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x38, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x38, 0x00,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x38, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0x00, 0x38, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x38, 0x00, 0x06, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0xc0, 0xff, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0xff, 0x07,
+0x0c, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0xff, 0x07, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x30,
+0x00, 0x38, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x38, 0x00, 0x18, 0x00, 0x00,
+0x00, 0x00, 0x30, 0x00, 0x38, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x38, 0x00,
+0x30, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x38, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x38,
+0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x38, 0x00,
+0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x38, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x07, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xe0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x10, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x10, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x39, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xbb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/l72s.bm b/bitmaps/l72s.bm
new file mode 100644
index 0000000..32419b9
--- /dev/null
+++ b/bitmaps/l72s.bm
@@ -0,0 +1,48 @@
+#define l72s_width 72
+#define l72s_height 72
+static char l72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc7, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0xc7, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc7, 0xff, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xff, 0xc7, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xc7, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xc7, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0xff, 0xc7, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xc7, 0xff, 0x07, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x3f, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0xf8,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0xff, 0xc7, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xc7, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0xff, 0xc7, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xc7, 0xff,
+0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xc7, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8,
+0xff, 0xc7, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xc7, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0xff, 0xc7, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xc7, 0xff,
+0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xc7, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/m33o.bm b/bitmaps/m33o.bm
new file mode 100644
index 0000000..b70145e
--- /dev/null
+++ b/bitmaps/m33o.bm
@@ -0,0 +1,16 @@
+#define m33o_width 33
+#define m33o_height 33
+static char m33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00,
+0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00,
+0x00, 0x07, 0xc0, 0x01, 0x00, 0x80, 0x00, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00,
+0x40, 0x00, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
+0x20, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00,
+0x10, 0x00, 0x00, 0x10, 0x00, 0x10, 0xfc, 0x7f, 0x10, 0x00, 0xe8, 0x03, 0x80, 0x2f, 0x00,
+0x18, 0x00, 0x00, 0x30, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00,
+0x18, 0x00, 0x00, 0x30, 0x00, 0xe0, 0x03, 0x80, 0x0f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/m33s.bm b/bitmaps/m33s.bm
new file mode 100644
index 0000000..049d725
--- /dev/null
+++ b/bitmaps/m33s.bm
@@ -0,0 +1,16 @@
+#define m33s_width 33
+#define m33s_height 33
+static char m33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/m49o.bm b/bitmaps/m49o.bm
new file mode 100644
index 0000000..6f36c88
--- /dev/null
+++ b/bitmaps/m49o.bm
@@ -0,0 +1,26 @@
+#define m49o_width 49
+#define m49o_height 49
+static char m49o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x40,
+ 0x04,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x08,
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x00,
+ 0x00,0x00,0x00,0x00,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x40,0x04,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x01,0x00,0x00,
+ 0x00,0x80,0x01,0x00,0x03,0x00,0x00,0x00,0x70,0x00,0x00,0x1c,0x00,0x00,0x00,
+ 0x0c,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x02,
+ 0x00,0x00,0x80,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x01,0x00,
+ 0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x01,0x00,0x80,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0x00,0xf8,0x3f,0x00,0x02,
+ 0x00,0x80,0xe0,0x01,0x00,0x0f,0x02,0x00,0x80,0x0c,0x00,0x00,0x60,0x02,0x00,
+ 0x40,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x00,0x40,
+ 0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x80,0xff,0xff,0x03,0x08,0x00,0x10,0x7e,
+ 0x00,0x00,0xfc,0x10,0x00,0xc8,0x01,0x00,0x00,0x00,0x27,0x00,0x3c,0x03,0x00,
+ 0x00,0x80,0x79,0x00,0x06,0xfc,0x00,0x00,0x7e,0xc0,0x00,0x02,0x00,0xff,0xff,
+ 0x01,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x00,0x00,0x00,
+ 0x40,0x00,0x38,0x00,0x00,0x00,0x00,0x38,0x00,0xc0,0x01,0x00,0x00,0x00,0x07,
+ 0x00,0x00,0x7e,0x00,0x00,0xfc,0x00,0x00,0x00,0x80,0xff,0xff,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/m49s.bm b/bitmaps/m49s.bm
new file mode 100644
index 0000000..54c6c7b
--- /dev/null
+++ b/bitmaps/m49s.bm
@@ -0,0 +1,26 @@
+#define m49s_width 49
+#define m49s_height 49
+static char m49s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x07,0x00,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0x00,0xe0,0x0f,
+ 0x00,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,
+ 0x00,0x00,0x00,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x01,0x00,0x00,
+ 0x00,0x80,0xff,0xff,0x03,0x00,0x00,0x00,0xf0,0xff,0xff,0x1f,0x00,0x00,0x00,
+ 0xfc,0xff,0xff,0x7f,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x00,0x00,0x00,0xfe,
+ 0xff,0xff,0xff,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,
+ 0xff,0xff,0x01,0x00,0x00,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xff,0xff,0xff,
+ 0xff,0x01,0x00,0x00,0xff,0xff,0xff,0xff,0x01,0x00,0x80,0xff,0xff,0xff,0xff,
+ 0x01,0x00,0x80,0xff,0xff,0xff,0xff,0x03,0x00,0x80,0xff,0x07,0xc0,0xff,0x03,
+ 0x00,0x80,0x1f,0xfe,0xff,0xf0,0x03,0x00,0x80,0xf3,0xff,0xff,0x9f,0x03,0x00,
+ 0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0xc0,
+ 0xff,0xff,0xff,0xff,0x07,0x00,0xe0,0x7f,0x00,0x00,0xfc,0x0f,0x00,0xf0,0x81,
+ 0xff,0xff,0x03,0x1f,0x00,0x38,0xfe,0xff,0xff,0xff,0x38,0x00,0xcc,0xfc,0xff,
+ 0xff,0x3f,0x67,0x00,0xf6,0x03,0xff,0xff,0xc1,0xdf,0x00,0xfe,0xff,0x00,0x00,
+ 0xfe,0xff,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x00,0xfc,0xff,0xff,0xff,0xff,
+ 0x7f,0x00,0xf8,0xff,0xff,0xff,0xff,0x3f,0x00,0xc0,0xff,0xff,0xff,0xff,0x07,
+ 0x00,0x00,0xfe,0xff,0xff,0xff,0x00,0x00,0x00,0x80,0xff,0xff,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/m72o.bm b/bitmaps/m72o.bm
new file mode 100644
index 0000000..8da3304
--- /dev/null
+++ b/bitmaps/m72o.bm
@@ -0,0 +1,47 @@
+#define m72o_width 72
+#define m72o_height 72
+static char m72o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x83,0x03,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,
+ 0x03,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0xc0,0x0f,0x00,0x00,0x00,0x00,0xfc,
+ 0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x70,0x00,0x00,
+ 0x00,0x00,0x07,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,
+ 0xc0,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,
+ 0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x03,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x03,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x60,0x00,
+ 0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x06,0x00,
+ 0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x60,0x00,0x00,0x00,0x00,
+ 0x00,0x06,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x30,0x00,
+ 0xf8,0xff,0x7f,0x00,0x0c,0x00,0x00,0x30,0xf0,0xfb,0xff,0x7f,0x1f,0x0c,0x00,
+ 0x00,0x30,0xff,0x03,0x00,0x00,0xff,0x0c,0x00,0x00,0x30,0x0f,0x00,0x00,0x00,
+ 0xe0,0x0c,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,
+ 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x18,0x00,
+ 0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,
+ 0x00,0x70,0x00,0x00,0x07,0x80,0xff,0xff,0xff,0x01,0xe0,0x00,0x80,0x03,0xff,
+ 0xff,0xff,0xff,0xff,0xc0,0x01,0xc0,0xf9,0x7f,0x00,0x00,0x00,0xfc,0x9f,0x03,
+ 0xe0,0xff,0x00,0x00,0x00,0x00,0x80,0xff,0x07,0xf0,0xe3,0xff,0x03,0x00,0xc0,
+ 0xff,0xe7,0x0f,0x78,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x1e,0x38,0x00,0x00,
+ 0xfc,0xff,0x7f,0x00,0x00,0x1c,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,
+ 0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xe0,0x0f,0x00,0x00,0x00,0x00,
+ 0x00,0xf8,0x07,0x80,0xff,0x00,0x00,0x00,0x00,0xc0,0xff,0x01,0x00,0xf8,0xff,
+ 0x01,0x00,0xc0,0xff,0x1f,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
+ 0x00,0x00,0x80,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/m72s.bm b/bitmaps/m72s.bm
new file mode 100644
index 0000000..c4b1469
--- /dev/null
+++ b/bitmaps/m72s.bm
@@ -0,0 +1,47 @@
+#define m72s_width 72
+#define m72s_height 72
+static char m72s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,
+ 0x03,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xfc,
+ 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x7f,0x00,0x00,
+ 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,
+ 0xff,0x01,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x80,0xff,
+ 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x03,0x00,
+ 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,
+ 0xff,0x03,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xe0,0xff,
+ 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x07,0x00,
+ 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,
+ 0xff,0x07,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xf0,0xff,
+ 0x07,0x00,0x80,0xff,0x0f,0x00,0x00,0xf0,0x0f,0x04,0x00,0x80,0xe0,0x0f,0x00,
+ 0x00,0xf0,0x00,0xfc,0xff,0xff,0x00,0x0f,0x00,0x00,0xf0,0xf0,0xff,0xff,0xff,
+ 0x1f,0x0f,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xf8,0xff,
+ 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,
+ 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0x00,0x00,0xff,0x7f,0x00,0x00,0x00,0xfe,0xff,0x00,0x80,0xff,0x00,
+ 0x00,0x00,0x00,0x00,0xff,0x01,0xc0,0x07,0x80,0xff,0xff,0xff,0x03,0xe0,0x03,
+ 0xe0,0x01,0xff,0xff,0xff,0xff,0x7f,0x80,0x07,0xf0,0x18,0x00,0xfc,0xff,0x3f,
+ 0x00,0x18,0x0f,0xf8,0xff,0x00,0x00,0x00,0x00,0x00,0xff,0x1f,0xf8,0xff,0xff,
+ 0x03,0x00,0x80,0xff,0xff,0x1f,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,
+ 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xe0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x07,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xf8,0xff,
+ 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
+ 0x00,0x00,0x80,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/o33o.bm b/bitmaps/o33o.bm
new file mode 100644
index 0000000..c036a30
--- /dev/null
+++ b/bitmaps/o33o.bm
@@ -0,0 +1,16 @@
+#define o33o_width 33
+#define o33o_height 33
+static char o33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
+0x90, 0x07, 0x00, 0x00, 0x00, 0x10, 0x38, 0x00, 0x00, 0x00, 0x08, 0xc0, 0x03, 0x00, 0x00,
+0x1c, 0x00, 0x3c, 0x00, 0x00, 0x64, 0x00, 0xc0, 0x01, 0x00, 0x80, 0x01, 0x00, 0x1e, 0x00,
+0x00, 0x06, 0x00, 0x60, 0x00, 0x00, 0xf8, 0x3f, 0x40, 0x00, 0x00, 0x10, 0x20, 0x40, 0x00,
+0x00, 0x10, 0x20, 0xa0, 0x00, 0xf0, 0x1f, 0xe0, 0xbf, 0x00, 0x10, 0x00, 0x00, 0x70, 0x00,
+0x10, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00,
+0x10, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00,
+0x10, 0x07, 0xe0, 0x10, 0x00, 0x90, 0x08, 0x10, 0x11, 0x00, 0xf0, 0xf8, 0x1f, 0x1f, 0x00,
+0x80, 0x08, 0x10, 0x01, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/o33s.bm b/bitmaps/o33s.bm
new file mode 100644
index 0000000..d8e599c
--- /dev/null
+++ b/bitmaps/o33s.bm
@@ -0,0 +1,16 @@
+#define o33s_width 33
+#define o33s_height 33
+static char o33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0x07, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00,
+0xfc, 0xff, 0x3f, 0x00, 0x00, 0xe4, 0xff, 0xff, 0x01, 0x00, 0x80, 0xff, 0xff, 0x1f, 0x00,
+0x00, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x08, 0xc0, 0x7f, 0x00, 0x00, 0xf0, 0xdf, 0x7f, 0x00,
+0x00, 0xf0, 0xdf, 0xbf, 0x00, 0xf0, 0xff, 0x1f, 0xa0, 0x00, 0xf0, 0xff, 0xff, 0x6f, 0x00,
+0xf0, 0xff, 0xff, 0x1f, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00,
+0xf0, 0xff, 0xff, 0x1f, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00, 0xf0, 0xf8, 0x1f, 0x1f, 0x00,
+0x70, 0xf7, 0xef, 0x1e, 0x00, 0xb0, 0xef, 0xf7, 0x1d, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00,
+0x80, 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/o49o.bm b/bitmaps/o49o.bm
new file mode 100644
index 0000000..c323135
--- /dev/null
+++ b/bitmaps/o49o.bm
@@ -0,0 +1,26 @@
+#define o49o_width 49
+#define o49o_height 49
+static char o49o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0x0e,0x00,0x00,0x00,0x00,0x00,0x20,0xf0,0x00,0x00,0x00,0x00,
+ 0x00,0x20,0x00,0x07,0x00,0x00,0x00,0x00,0x10,0x00,0x38,0x00,0x00,0x00,0x00,
+ 0x10,0x00,0xc0,0x03,0x00,0x00,0x00,0x70,0x00,0x00,0x1c,0x00,0x00,0x00,0x80,
+ 0x01,0x00,0xe0,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x07,0x00,0x00,0x00,0x18,
+ 0x00,0x00,0x78,0x00,0x00,0x00,0x60,0x00,0x00,0x80,0x03,0x00,0x00,0x80,0x01,
+ 0x00,0x00,0x0c,0x00,0x00,0x00,0xfe,0xff,0x03,0x10,0x00,0x00,0x00,0x02,0x00,
+ 0x02,0x10,0x00,0x00,0x00,0x02,0x00,0x02,0x18,0x00,0xc0,0xff,0x03,0x00,0xfe,
+ 0x0f,0x00,0x40,0x00,0x00,0x00,0x00,0x1c,0x00,0x40,0x00,0x00,0x00,0x00,0x14,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x1c,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x00,
+ 0x40,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x00,0x40,
+ 0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x00,
+ 0x00,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x00,0x00,
+ 0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x30,0x00,0x00,
+ 0x18,0x04,0x00,0x40,0xcc,0x00,0x00,0x66,0x04,0x00,0x40,0x84,0x00,0x00,0x42,
+ 0x04,0x00,0xc0,0x03,0xff,0xff,0x83,0x07,0x00,0x00,0x02,0x01,0x00,0x81,0x00,
+ 0x00,0x00,0x84,0x00,0x00,0x42,0x00,0x00,0x00,0xcc,0x00,0x00,0x66,0x00,0x00,
+ 0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/o49s.bm b/bitmaps/o49s.bm
new file mode 100644
index 0000000..477dce4
--- /dev/null
+++ b/bitmaps/o49s.bm
@@ -0,0 +1,26 @@
+#define o49s_width 49
+#define o49s_height 49
+static char o49s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x00,0x00,0x00,0x00,
+ 0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0x00,0xf0,0xff,0x3f,0x00,0x00,0x00,0x00,
+ 0xf0,0xff,0xff,0x03,0x00,0x00,0x00,0xf0,0xff,0xff,0x1f,0x00,0x00,0x00,0x80,
+ 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0xf8,
+ 0xff,0xff,0x7f,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x03,0x00,0x00,0x80,0xff,
+ 0xff,0xff,0x0f,0x00,0x00,0x00,0x02,0x00,0xfc,0x1f,0x00,0x00,0x00,0xfe,0xff,
+ 0xfd,0x1f,0x00,0x00,0x00,0xfe,0xff,0xfd,0x1f,0x00,0xc0,0xff,0xff,0xff,0x01,
+ 0x08,0x00,0xc0,0xff,0xff,0xff,0xff,0x1b,0x00,0xc0,0xff,0xff,0xff,0xff,0x1b,
+ 0x00,0xc0,0xff,0xff,0xff,0xff,0x1b,0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,
+ 0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0xc0,
+ 0xff,0xff,0xff,0xff,0x07,0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0xc0,0xff,
+ 0xff,0xff,0xff,0x07,0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0xc0,0xff,0xff,
+ 0xff,0xff,0x07,0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0xc0,0xcf,0xff,0xff,
+ 0xe7,0x07,0x00,0xc0,0x87,0xff,0xff,0xc3,0x07,0x00,0xc0,0x03,0xff,0xff,0x81,
+ 0x07,0x00,0xc0,0x03,0xff,0xff,0x81,0x07,0x00,0x00,0x02,0x01,0x00,0x81,0x00,
+ 0x00,0x00,0x84,0x00,0x00,0x42,0x00,0x00,0x00,0xcc,0x00,0x00,0x66,0x00,0x00,
+ 0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/o72o.bm b/bitmaps/o72o.bm
new file mode 100644
index 0000000..e9c671f
--- /dev/null
+++ b/bitmaps/o72o.bm
@@ -0,0 +1,47 @@
+#define o72o_width 72
+#define o72o_height 72
+static char o72o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1f,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xf1,0x0f,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0xf8,0x03,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0xc0,0x1f,0x00,0x00,
+ 0x00,0x00,0x00,0xe0,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,
+ 0xf0,0x07,0x00,0x00,0x00,0x00,0xf0,0x07,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,
+ 0x30,0x1f,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xc0,0x1f,
+ 0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x80,0x0f,
+ 0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,
+ 0x00,0x00,0xf8,0x01,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,
+ 0xc0,0x1f,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x03,0xfe,0x01,0x00,0x00,0xe0,
+ 0xff,0xff,0xff,0x03,0xe0,0x07,0x00,0x00,0x60,0x00,0x00,0x00,0x03,0x00,0x07,
+ 0x00,0x00,0x60,0x00,0x00,0x00,0x03,0x00,0x06,0x00,0xff,0x7f,0x00,0x00,0x00,
+ 0xff,0x7f,0x06,0x00,0xff,0x7f,0x00,0x00,0x00,0xff,0x7f,0x03,0x00,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x60,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x07,
+ 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x03,0x00,0x00,0x00,0x00,
+ 0x00,0xe0,0x0c,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0xe0,0x0c,0x00,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0xe0,0x03,
+ 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
+ 0x00,0x60,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x00,
+ 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
+ 0x00,0x60,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x00,
+ 0x00,0x03,0xfc,0x00,0x00,0xc0,0x0f,0x60,0x00,0x00,0x03,0xfe,0x01,0x00,0xe0,
+ 0x1f,0x60,0x00,0x00,0x03,0x87,0x03,0x00,0x70,0x38,0x60,0x00,0x00,0x83,0x03,
+ 0x07,0x00,0x38,0x70,0x60,0x00,0x00,0xff,0x01,0xfe,0xff,0x1f,0xe0,0x7f,0x00,
+ 0x00,0xff,0x01,0xfe,0xff,0x1f,0xe0,0x7f,0x00,0x00,0x80,0x01,0x06,0x00,0x18,
+ 0x60,0x00,0x00,0x00,0x80,0x01,0x06,0x00,0x18,0x60,0x00,0x00,0x00,0x00,0x03,
+ 0x07,0x00,0x30,0x70,0x00,0x00,0x00,0x00,0x87,0x03,0x00,0x70,0x38,0x00,0x00,
+ 0x00,0x00,0xfe,0x01,0x00,0xe0,0x1f,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xc0,
+ 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/o72s.bm b/bitmaps/o72s.bm
new file mode 100644
index 0000000..901ff59
--- /dev/null
+++ b/bitmaps/o72s.bm
@@ -0,0 +1,47 @@
+#define o72s_width 72
+#define o72s_height 72
+static char o72s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1f,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x0f,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x1f,0x00,0x00,
+ 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,
+ 0xff,0x07,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,
+ 0x30,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x1f,
+ 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x80,0xff,
+ 0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x7f,0x00,0x00,
+ 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,
+ 0xff,0x1f,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xfc,0xff,0x01,0x00,0x00,0x60,
+ 0x00,0x00,0x00,0xfc,0xff,0x07,0x00,0x00,0xe0,0xff,0xff,0xff,0xfc,0xff,0x07,
+ 0x00,0x00,0xe0,0xff,0xff,0xff,0xfc,0xff,0x07,0x00,0xff,0xff,0xff,0xff,0xff,
+ 0x00,0x80,0x07,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x80,0x03,0x00,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9f,0x03,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x07,
+ 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x0f,0x00,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x9f,0x0f,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x0f,0x00,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9f,0x07,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,
+ 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,
+ 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,
+ 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xff,0x87,0xff,0xff,0xff,
+ 0xf0,0x7f,0x00,0x00,0xff,0x03,0xff,0xff,0x7f,0xe0,0x7f,0x00,0x00,0xff,0x01,
+ 0xfe,0xff,0x3f,0xc0,0x7f,0x00,0x00,0xff,0x01,0xfe,0xff,0x3f,0xc0,0x7f,0x00,
+ 0x00,0xff,0x01,0xfe,0xff,0x3f,0xc0,0x7f,0x00,0x00,0x80,0x01,0x06,0x00,0x30,
+ 0xc0,0x00,0x00,0x00,0x80,0x01,0x06,0x00,0x30,0xc0,0x00,0x00,0x00,0x00,0x03,
+ 0x07,0x00,0x60,0xe0,0x00,0x00,0x00,0x00,0x87,0x03,0x00,0xe0,0x70,0x00,0x00,
+ 0x00,0x00,0xfe,0x01,0x00,0xc0,0x3f,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x80,
+ 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/s49o.bm b/bitmaps/s49o.bm
new file mode 100644
index 0000000..f8ad738
--- /dev/null
+++ b/bitmaps/s49o.bm
@@ -0,0 +1,27 @@
+#define s49o_width 49
+#define s49o_height 49
+static char s49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x41,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00,
+0x00, 0x00, 0xfe, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x30, 0x00, 0x00,
+0x00, 0x01, 0x38, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x80,
+0x00, 0x00, 0x03, 0xc0, 0x01, 0x00, 0x40, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x40, 0x00,
+0x00, 0x08, 0x06, 0x02, 0x00, 0x40, 0x00, 0x00, 0x30, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00,
+0xd0, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x08, 0x07, 0x03, 0x00, 0x40, 0x00, 0x00, 0x08,
+0xf8, 0x02, 0x00, 0x80, 0x00, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x80, 0x00, 0x00, 0x04, 0x00,
+0x70, 0x00, 0x80, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x02, 0x00, 0x20,
+0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/s49s.bm b/bitmaps/s49s.bm
new file mode 100644
index 0000000..5ced2c2
--- /dev/null
+++ b/bitmaps/s49s.bm
@@ -0,0 +1,27 @@
+#define s49s_width 49
+#define s49s_height 49
+static char s49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x01,
+0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x02, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0xff, 0xf8, 0xff, 0x3f, 0x00, 0x00,
+0x00, 0xff, 0xc7, 0xff, 0x7f, 0x00, 0x00, 0x80, 0xff, 0x3f, 0xff, 0xbf, 0x00, 0x00, 0x80,
+0xff, 0xff, 0xfc, 0x3f, 0x01, 0x00, 0xc0, 0xff, 0xff, 0xfb, 0xf9, 0x01, 0x00, 0xc0, 0xff,
+0xff, 0xf7, 0xf9, 0x03, 0x00, 0xc0, 0xff, 0xff, 0xef, 0xff, 0x03, 0x00, 0xc0, 0xff, 0xff,
+0xdf, 0xff, 0x03, 0x00, 0xc0, 0xff, 0xff, 0x0f, 0xff, 0x03, 0x00, 0xc0, 0xff, 0xff, 0x0f,
+0xf8, 0x02, 0x00, 0x80, 0xff, 0xff, 0x07, 0x00, 0x0c, 0x00, 0x80, 0xff, 0xff, 0x07, 0x00,
+0x70, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x10, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x20,
+0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/s72o.bm b/bitmaps/s72o.bm
new file mode 100644
index 0000000..aeadd43
--- /dev/null
+++ b/bitmaps/s72o.bm
@@ -0,0 +1,48 @@
+#define s72o_width 72
+#define s72o_height 72
+static char s72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x60, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0xc0,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x01,
+0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00,
+0x00, 0xe0, 0xff, 0x07, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x70, 0x00, 0x3f, 0x00, 0x00,
+0xe0, 0x00, 0x00, 0x00, 0x18, 0x00, 0xf8, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x18, 0x00,
+0xe0, 0x07, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x07, 0x00,
+0x00, 0x0c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0xe0, 0x80,
+0x07, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0xc0, 0x01, 0x07, 0x18, 0x00, 0x00, 0x06, 0x00,
+0x00, 0x00, 0x03, 0x0f, 0x30, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x30, 0x00,
+0x00, 0x06, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x30, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x73,
+0x00, 0x30, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xe3, 0x07, 0x38, 0x00, 0x00, 0x06, 0x00,
+0x00, 0x80, 0x81, 0xff, 0x3f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x80, 0x01, 0xf8, 0x77, 0x00,
+0x00, 0x06, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0x06, 0x00, 0x00, 0xc0, 0x00,
+0x00, 0xc0, 0x1f, 0x00, 0x0c, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x0c, 0x00,
+0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x07,
+0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
+0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x06, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
+0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
+0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x06, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/s72s.bm b/bitmaps/s72s.bm
new file mode 100644
index 0000000..acf8c0f
--- /dev/null
+++ b/bitmaps/s72s.bm
@@ -0,0 +1,48 @@
+#define s72s_width 72
+#define s72s_height 72
+static char s72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff,
+0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x80, 0xff,
+0xff, 0xff, 0x3f, 0x06, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xfe, 0xff, 0x1f, 0x1c, 0x00, 0x00,
+0x00, 0x60, 0x00, 0xf8, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xc0, 0xff, 0xff,
+0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x07, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff,
+0x3f, 0xf0, 0xff, 0x3f, 0x02, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xc1, 0xff, 0x7f, 0x04, 0x00,
+0x00, 0xfc, 0xff, 0xff, 0x87, 0xff, 0xff, 0x0c, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x1f, 0x7f,
+0xf8, 0x1f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0xfe, 0xf8, 0x1f, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0x7f, 0xfc, 0xf0, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x3f, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xf3,
+0xff, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xe3, 0xff, 0x3f, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0xff, 0x81, 0xff, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x01, 0xfc, 0x77, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0xff, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00,
+0x00, 0xc0, 0x1f, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x00, 0xfc, 0xff,
+0xff, 0x7f, 0x00, 0x00, 0x00, 0x03, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x07,
+0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xfc, 0xff, 0xff, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xf8, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/test.c b/bitmaps/test.c
new file mode 100644
index 0000000..23f144c
--- /dev/null
+++ b/bitmaps/test.c
@@ -0,0 +1,13 @@
+#define NULL 0
+#define BlackPawn 22
+#include "bitmaps.h"
+
+/*
+ * This is a program that you can compile to test if the include tree 
+ * of bitmaps is complete, and if all the bitmaps are without syntax errors
+ */
+
+main()
+{
+	printf("Hi\n");
+}
diff --git a/bitmaps/u49o.bm b/bitmaps/u49o.bm
new file mode 100644
index 0000000..f6635d2
--- /dev/null
+++ b/bitmaps/u49o.bm
@@ -0,0 +1,27 @@
+#define u49o_width 49
+#define u49o_height 49
+static char u49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x10,
+0x20, 0x00, 0x00, 0x00, 0x00, 0x50, 0x70, 0x50, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90,
+0x00, 0x00, 0x00, 0x00, 0x20, 0x11, 0x89, 0x00, 0x00, 0x00, 0x00, 0x40, 0x12, 0x8e, 0x07,
+0x00, 0x00, 0x00, 0x80, 0x24, 0x8b, 0x38, 0x00, 0x00, 0x00, 0x80, 0x98, 0x00, 0xc0, 0x00,
+0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x06, 0x00,
+0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x18, 0x00, 0x00,
+0x00, 0x62, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+0x12, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x80, 0x01, 0x00, 0x80, 0x00, 0x00,
+0x02, 0x80, 0x01, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x00, 0x00, 0x01,
+0x00, 0x03, 0x00, 0x20, 0x00, 0x80, 0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x40, 0x02, 0x00,
+0x02, 0x00, 0x10, 0x00, 0x30, 0x02, 0x00, 0x06, 0x00, 0x10, 0x00, 0x08, 0x02, 0x00, 0x06,
+0x00, 0xc8, 0x00, 0x06, 0x02, 0x00, 0x06, 0x00, 0x48, 0x00, 0x01, 0x01, 0x00, 0x04, 0x00,
+0x08, 0x80, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x08, 0xc4, 0x80, 0x00, 0x00, 0x0c, 0x00, 0x08,
+0x22, 0x41, 0x00, 0x00, 0x0c, 0x00, 0x10, 0x12, 0x21, 0x00, 0x00, 0x0c, 0x00, 0xe0, 0x9b,
+0x12, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xac, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x04,
+0x00, 0x00, 0x18, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00,
+0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+0x18, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x18,
+0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x18, 0x00,
+0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/u49s.bm b/bitmaps/u49s.bm
new file mode 100644
index 0000000..a713050
--- /dev/null
+++ b/bitmaps/u49s.bm
@@ -0,0 +1,27 @@
+#define u49s_width 49
+#define u49s_height 49
+static char u49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x10,
+0x20, 0x00, 0x00, 0x00, 0x00, 0x50, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x90, 0xf0, 0xf0,
+0x00, 0x00, 0x00, 0x00, 0x20, 0xf1, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x40, 0xf2, 0x77, 0x07,
+0x00, 0x00, 0x00, 0x80, 0xe4, 0x74, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x78, 0xff, 0xff, 0x00,
+0x00, 0x00, 0x00, 0xf1, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf2, 0xff, 0xff, 0x07, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x7e, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x9e, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xde, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
+0xee, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfd, 0xff, 0x00, 0x00, 0x00, 0xff,
+0xff, 0xfd, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfd, 0xff, 0x01, 0x00, 0x80, 0xff, 0xff,
+0xfd, 0xff, 0x01, 0x00, 0x80, 0xff, 0xff, 0xfe, 0xff, 0x01, 0x00, 0xc0, 0xff, 0xff, 0xff,
+0xff, 0x03, 0x00, 0xe0, 0xff, 0xff, 0xfe, 0xff, 0x03, 0x00, 0xe0, 0xff, 0x7f, 0xfe, 0xff,
+0x03, 0x00, 0xf0, 0xff, 0x3f, 0xfe, 0xff, 0x07, 0x00, 0xf0, 0xff, 0x0f, 0xfe, 0xff, 0x07,
+0x00, 0x38, 0xff, 0x07, 0xfe, 0xff, 0x07, 0x00, 0xb8, 0xff, 0x01, 0xff, 0xff, 0x07, 0x00,
+0xf8, 0xff, 0x00, 0xff, 0xff, 0x0f, 0x00, 0xf8, 0xfb, 0x80, 0xff, 0xff, 0x0f, 0x00, 0xf8,
+0xbd, 0xc1, 0xff, 0xff, 0x0f, 0x00, 0xf0, 0xdd, 0xe1, 0xff, 0xff, 0x0f, 0x00, 0xe0, 0xfd,
+0xf2, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xec, 0xf8, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x40, 0xfc,
+0xff, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
+0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x1f,
+0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x1f, 0x00,
+0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/u72o.bm b/bitmaps/u72o.bm
new file mode 100644
index 0000000..1e85b1f
--- /dev/null
+++ b/bitmaps/u72o.bm
@@ -0,0 +1,48 @@
+#define u72o_width 72
+#define u72o_height 72
+static char u72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x3c, 0x00, 0x0e, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x1c, 0xc0, 0x03, 0x00,
+0x00, 0x00, 0x00, 0xd8, 0x00, 0x7c, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x03, 0xec,
+0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0xcc, 0x71, 0x0e, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0x0c, 0x8c, 0x33, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x80, 0x39, 0x0c, 0x3f, 0xfc, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x73, 0x0c, 0x3e, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x1c,
+0x37, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x9d, 0x03, 0x18, 0xf0, 0x01, 0x00, 0x00,
+0x00, 0x18, 0xcf, 0x01, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x30, 0x4e, 0x00, 0x00, 0x80,
+0x0f, 0x00, 0x00, 0x00, 0x60, 0x0c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xc0, 0x0e,
+0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00,
+0x00, 0xe0, 0xc3, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x60, 0x70, 0x00, 0x00, 0x00,
+0xf0, 0x01, 0x00, 0x00, 0x60, 0x78, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x60, 0x7c,
+0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x60, 0x3c, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00,
+0x00, 0x70, 0x04, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00,
+0x00, 0x0f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x38, 0x00,
+0x00, 0x60, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x1e, 0x00,
+0x00, 0x1c, 0x00, 0x00, 0x60, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x70, 0x00,
+0x00, 0x3c, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x30, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x07, 0x00,
+0x00, 0x30, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x38, 0x00, 0x00, 0x78, 0x00,
+0x80, 0x03, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x78, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x3e, 0x00,
+0x00, 0xf8, 0x00, 0xc0, 0x00, 0x00, 0x80, 0x37, 0x00, 0x00, 0xf0, 0x00, 0xe0, 0x00, 0x00,
+0xe0, 0x31, 0x00, 0x00, 0xf0, 0x00, 0x60, 0x00, 0x00, 0x78, 0x30, 0x00, 0x00, 0xf0, 0x00,
+0x60, 0x06, 0x00, 0x1e, 0x30, 0x00, 0x00, 0xf0, 0x01, 0x70, 0x0f, 0x80, 0x07, 0x38, 0x00,
+0x00, 0xe0, 0x01, 0x30, 0x0f, 0xc0, 0x01, 0x18, 0x00, 0x00, 0xe0, 0x01, 0x30, 0x07, 0xe0,
+0x00, 0x1c, 0x00, 0x00, 0xe0, 0x01, 0x30, 0x07, 0x70, 0x00, 0x0c, 0x00, 0x00, 0xe0, 0x01,
+0x30, 0xc0, 0x38, 0x00, 0x0e, 0x00, 0x00, 0xe0, 0x03, 0x30, 0xc0, 0x7c, 0x00, 0x07, 0x00,
+0x00, 0xc0, 0x03, 0x70, 0xe0, 0xec, 0x01, 0x03, 0x00, 0x00, 0xc0, 0x03, 0xe0, 0x70, 0x8e,
+0x81, 0x03, 0x00, 0x00, 0xc0, 0x03, 0xc0, 0x7f, 0xe7, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x03,
+0x00, 0xef, 0xcf, 0xe0, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x5d, 0x70, 0x00, 0x00,
+0x00, 0xc0, 0x03, 0x00, 0x00, 0xf8, 0x38, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xf0,
+0x18, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xc0, 0x07,
+0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x80,
+0x03, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x80, 0x07,
+0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x07, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x60,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/u72s.bm b/bitmaps/u72s.bm
new file mode 100644
index 0000000..24e4215
--- /dev/null
+++ b/bitmaps/u72s.bm
@@ -0,0 +1,48 @@
+#define u72s_width 72
+#define u72s_height 72
+static char u72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x3c, 0x00, 0x0e, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x1c, 0xc0, 0x03, 0x00,
+0x00, 0x00, 0x00, 0xd8, 0x00, 0x7c, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x03, 0xfc,
+0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0xfc, 0xf1, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0x0c, 0xfc, 0xf3, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0x39, 0xfc, 0xef, 0xf7, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x73, 0xfc, 0xe5, 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xfc,
+0xf4, 0xe7, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x7d, 0xfc, 0xef, 0xff, 0x01, 0x00, 0x00,
+0x00, 0x18, 0x3f, 0xfe, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x30, 0xbe, 0xff, 0xff, 0xff,
+0x0f, 0x00, 0x00, 0x00, 0x60, 0xfc, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xfe,
+0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0xe0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xe0, 0x8f, 0xff, 0xff, 0xff,
+0xff, 0x01, 0x00, 0x00, 0xe0, 0x87, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xe0, 0x83,
+0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xe0, 0xc3, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00,
+0x00, 0xf0, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xf8, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
+0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
+0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff,
+0xff, 0xf1, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0x7f, 0xf0, 0xff, 0xff, 0xff, 0x00,
+0xe0, 0xf9, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0x01, 0xf0, 0xf0, 0xff, 0x07, 0xf8, 0xff,
+0xff, 0xff, 0x01, 0xf0, 0xf0, 0xff, 0x01, 0xf8, 0xff, 0xff, 0xff, 0x01, 0xf0, 0xf8, 0xff,
+0x00, 0xfc, 0xff, 0xff, 0xff, 0x01, 0xf0, 0xf8, 0x7f, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x01,
+0xf0, 0xff, 0x3f, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x03, 0xf0, 0xff, 0x7f, 0x00, 0xff, 0xff,
+0xff, 0xff, 0x03, 0xf0, 0xff, 0xef, 0x01, 0xff, 0xff, 0xff, 0xff, 0x03, 0xe0, 0xff, 0x8f,
+0x81, 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xe7, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x03,
+0x00, 0xef, 0xcf, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0xc0, 0x5d, 0xf0, 0xff, 0xff,
+0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf0,
+0xf8, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x07,
+0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x80,
+0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
+0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0,
+0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/unsigned.sh b/bitmaps/unsigned.sh
old mode 100755
new mode 100644
diff --git a/bitmaps/v49o.bm b/bitmaps/v49o.bm
new file mode 100644
index 0000000..a58687b
--- /dev/null
+++ b/bitmaps/v49o.bm
@@ -0,0 +1,27 @@
+#define v49o_width 49
+#define v49o_height 49
+static char v49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x38, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0,
+0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04,
+0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0f, 0x10, 0x00,
+0x00, 0x00, 0x08, 0xc0, 0x10, 0x10, 0x00, 0x00, 0x00, 0x04, 0x30, 0x26, 0x20, 0x00, 0x00,
+0x00, 0x04, 0x1c, 0x26, 0xd8, 0x00, 0x00, 0x00, 0x04, 0x60, 0x10, 0x58, 0x03, 0x00, 0x00,
+0x02, 0x80, 0x0f, 0x20, 0x0c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x1c, 0x10, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01, 0x00,
+0xe0, 0x1f, 0x20, 0x00, 0x00, 0x01, 0x00, 0x30, 0xe0, 0x23, 0x00, 0x00, 0x01, 0x00, 0x40,
+0xc0, 0x25, 0x00, 0x00, 0x01, 0x00, 0x80, 0x7f, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x18, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x40, 0x00, 0x00,
+0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
+0x80, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x80,
+0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x80, 0x00,
+0x00, 0x00, 0x27, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x48, 0x00, 0x00, 0x80, 0x00, 0x00,
+0x20, 0xb0, 0x00, 0x00, 0x80, 0x00, 0x00, 0x10, 0x40, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x08,
+0x80, 0x03, 0x00, 0x90, 0x00, 0x00, 0x08, 0x00, 0x06, 0x00, 0x88, 0x00, 0x00, 0x04, 0x00,
+0x08, 0x00, 0x08, 0x01, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x01, 0x00, 0x08, 0x00, 0x20,
+0x00, 0x08, 0x01, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x02, 0x00, 0x10, 0x00, 0x20, 0x00,
+0x10, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/v49s.bm b/bitmaps/v49s.bm
new file mode 100644
index 0000000..5b0cc55
--- /dev/null
+++ b/bitmaps/v49s.bm
@@ -0,0 +1,27 @@
+#define v49s_width 49
+#define v49s_height 49
+static char v49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
+0x01, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07,
+0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xf0, 0x1f, 0x00,
+0x00, 0x00, 0xf8, 0x3f, 0xef, 0x1f, 0x00, 0x00, 0x00, 0xfc, 0xcf, 0xd9, 0x3f, 0x00, 0x00,
+0x00, 0xfc, 0xe3, 0xd9, 0xe7, 0x00, 0x00, 0x00, 0xfc, 0x9f, 0xef, 0xa7, 0x03, 0x00, 0x00,
+0xfe, 0x7f, 0xf0, 0xdf, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xe3, 0x1f, 0x00, 0x00, 0xfe,
+0xff, 0xff, 0xfd, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0x00, 0x00, 0xff, 0xff,
+0x1f, 0xe0, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xcf, 0x1f, 0x3e, 0x00, 0x00, 0xff, 0xff, 0xbf,
+0xff, 0x3d, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x18, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01,
+0x18, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x08, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x80, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xbf, 0x00, 0x00, 0x00,
+0x80, 0xff, 0xff, 0xcf, 0x03, 0x00, 0x00, 0x80, 0xff, 0xff, 0xf9, 0x07, 0x00, 0x00, 0x80,
+0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff,
+0xff, 0xff, 0x38, 0x00, 0x00, 0x80, 0xff, 0xff, 0x3f, 0x77, 0x00, 0x00, 0x80, 0xff, 0xff,
+0xdf, 0xcf, 0x00, 0x00, 0x80, 0xff, 0xff, 0xef, 0xbf, 0x01, 0x00, 0x60, 0xff, 0xff, 0xf7,
+0x7f, 0x02, 0x00, 0x70, 0xff, 0xff, 0xf7, 0xff, 0x05, 0x00, 0x78, 0xff, 0xff, 0xfb, 0xff,
+0x0f, 0x00, 0xf8, 0xfe, 0xff, 0xf7, 0xff, 0x1f, 0x00, 0xf8, 0xfe, 0xff, 0xf7, 0xff, 0x3f,
+0x00, 0xf8, 0xfe, 0xff, 0xef, 0xff, 0x3f, 0x00, 0xf0, 0xfd, 0xff, 0xef, 0xff, 0x3f, 0x00,
+0xf0, 0xfd, 0xff, 0xdf, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/v72o.bm b/bitmaps/v72o.bm
new file mode 100644
index 0000000..ec9c2c0
--- /dev/null
+++ b/bitmaps/v72o.bm
@@ -0,0 +1,48 @@
+#define v72o_width 72
+#define v72o_height 72
+static char v72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x3f, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x78,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0xfc, 0x00,
+0x0c, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x8f, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x06,
+0x80, 0x33, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x79, 0x06, 0x36, 0x00, 0x00,
+0x00, 0x00, 0x03, 0x78, 0x78, 0x06, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x31, 0x03,
+0xef, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x87, 0x01, 0xf6, 0x07, 0x00, 0x00, 0x80, 0x01,
+0x00, 0xfe, 0x00, 0x18, 0x1f, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x38, 0x00,
+0x00, 0xc0, 0x00, 0x00, 0x00, 0x80, 0x03, 0x30, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0,
+0x00, 0x30, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x00,
+0x00, 0x00, 0xfe, 0x0f, 0x60, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x87, 0xff, 0x67, 0x00,
+0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0xf0, 0x6f, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfc,
+0xff, 0x79, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x70, 0x00, 0x00, 0x60, 0x00,
+0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x18, 0x00, 0x20, 0x00,
+0x00, 0x60, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x0c,
+0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
+0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x80, 0x1b, 0x00, 0x00, 0x00,
+0x00, 0x30, 0x00, 0x00, 0x1c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x0e, 0xe0,
+0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30, 0x00,
+0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
+0x00, 0x30, 0x00, 0x00, 0x00, 0xe0, 0x19, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xfc,
+0x37, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x1e, 0x6e, 0x00, 0x00, 0x00, 0x30, 0x00,
+0x00, 0x00, 0x07, 0xd8, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x80, 0x03, 0xf0, 0x01, 0x00,
+0x00, 0x3c, 0x00, 0x00, 0x80, 0x01, 0xe0, 0x03, 0x00, 0x00, 0x3e, 0x00, 0x00, 0xc0, 0x00,
+0x80, 0x07, 0x00, 0x00, 0x37, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x63, 0x00,
+0x00, 0x60, 0x00, 0x00, 0x18, 0x00, 0x80, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x70, 0x00,
+0x80, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x70, 0x00, 0x80, 0xe1, 0x00, 0x00, 0x60, 0x00,
+0x00, 0xc0, 0x00, 0x80, 0xc1, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc3, 0x00,
+0x00, 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x83, 0x01, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x00,
+0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/v72s.bm b/bitmaps/v72s.bm
new file mode 100644
index 0000000..b12d1ac
--- /dev/null
+++ b/bitmaps/v72s.bm
@@ -0,0 +1,48 @@
+#define v72s_width 72
+#define v72s_height 72
+static char v72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0xff,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x78, 0xfe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfe,
+0x7f, 0xcc, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x87, 0xf9, 0x39, 0x00, 0x00,
+0x00, 0x00, 0xff, 0x87, 0x87, 0xf9, 0x78, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0xcf, 0xfc,
+0xdc, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x7c, 0xfe, 0xcf, 0x07, 0x00, 0x00, 0x80, 0xff,
+0xff, 0x01, 0xff, 0xe7, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0x00,
+0x00, 0xc0, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0x3f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x3f,
+0xff, 0x7f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x87, 0xff, 0x7f, 0x00, 0x00, 0xc0, 0xff,
+0xff, 0xff, 0x01, 0xfc, 0x7f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xf8, 0x80, 0x7f, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0xff, 0xf9, 0x1f, 0x7e, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xf3,
+0xff, 0x79, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xf7, 0x1d, 0x30, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0xff, 0x1f, 0x00, 0x30, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x10, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
+0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x7f, 0x1e, 0x00, 0x00, 0x00,
+0x00, 0xf0, 0xff, 0xff, 0xe7, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xf1, 0xff,
+0x01, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xf0, 0xff,
+0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0xf0, 0xff, 0xff, 0xff, 0x1f, 0x1e, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x03,
+0x38, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xe1, 0x71, 0x00, 0x00, 0x00, 0xf0, 0xff,
+0xff, 0xff, 0xf8, 0xe7, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x7f, 0xfc, 0x8f, 0x01, 0x00,
+0x00, 0xdc, 0xff, 0xff, 0x7f, 0xfe, 0x1f, 0x03, 0x00, 0x00, 0xce, 0xff, 0xff, 0x3f, 0xff,
+0x7f, 0x04, 0x00, 0x00, 0xcf, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x0d, 0x00, 0x80, 0x9f, 0xff,
+0xff, 0x9f, 0xff, 0xff, 0x1f, 0x00, 0x80, 0x9f, 0xff, 0xff, 0x9f, 0xff, 0xff, 0x7f, 0x00,
+0x80, 0x9f, 0xff, 0xff, 0x9f, 0xff, 0xff, 0x7f, 0x00, 0x80, 0x1f, 0xff, 0xff, 0x9f, 0xff,
+0xff, 0xff, 0x00, 0x80, 0x3f, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff,
+0xff, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xfe, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x00,
+0x00, 0x7f, 0xfe, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/w33o.bm b/bitmaps/w33o.bm
new file mode 100644
index 0000000..84118b5
--- /dev/null
+++ b/bitmaps/w33o.bm
@@ -0,0 +1,16 @@
+#define w33o_width 33
+#define w33o_height 33
+static char w33o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00,
+0x00, 0x38, 0x78, 0x00, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x0f, 0x00, 0x02, 0x00,
+0x80, 0xf0, 0x00, 0x04, 0x00, 0x40, 0x00, 0x0f, 0x08, 0x00, 0x20, 0x00, 0x30, 0x10, 0x00,
+0x20, 0x00, 0xc0, 0x10, 0x00, 0x20, 0x00, 0x07, 0x23, 0x00, 0x10, 0x80, 0x0f, 0x22, 0x00,
+0x10, 0x80, 0x0f, 0x2c, 0x00, 0x10, 0x00, 0x07, 0x10, 0x00, 0xe0, 0x01, 0x07, 0x10, 0x00,
+0x10, 0x3e, 0x02, 0x20, 0x00, 0x10, 0xc0, 0x00, 0x20, 0x00, 0x10, 0x00, 0x07, 0x20, 0x00,
+0x10, 0xc0, 0x39, 0x20, 0x00, 0x10, 0x3c, 0xc0, 0x20, 0x00, 0x90, 0x03, 0x00, 0x17, 0x00,
+0x50, 0x00, 0x00, 0x14, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
+0xc0, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x03, 0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/w33s.bm b/bitmaps/w33s.bm
new file mode 100644
index 0000000..db5b4f2
--- /dev/null
+++ b/bitmaps/w33s.bm
@@ -0,0 +1,16 @@
+#define w33s_width 33
+#define w33s_height 33
+static char w33s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00,
+0x00, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0xf3, 0xff, 0x03, 0x00,
+0x80, 0x0f, 0xff, 0x07, 0x00, 0xc0, 0xff, 0xf0, 0x0f, 0x00, 0xe0, 0xff, 0xcf, 0x1f, 0x00,
+0xe0, 0xff, 0x3f, 0x1f, 0x00, 0xe0, 0xff, 0xf8, 0x3c, 0x00, 0xf0, 0x7f, 0xf0, 0x3d, 0x00,
+0xf0, 0x7f, 0xf0, 0x33, 0x00, 0xf0, 0xff, 0xf8, 0x1f, 0x00, 0x20, 0xfe, 0xf8, 0x1f, 0x00,
+0xf0, 0xc1, 0xfd, 0x3f, 0x00, 0xf0, 0x3f, 0xff, 0x3f, 0x00, 0xf0, 0xff, 0xf8, 0x3f, 0x00,
+0xf0, 0x3f, 0xc6, 0x3f, 0x00, 0xf0, 0xc3, 0x3f, 0x3f, 0x00, 0x70, 0xfc, 0xff, 0x18, 0x00,
+0xb0, 0xff, 0xff, 0x1b, 0x00, 0xe0, 0xff, 0xff, 0x17, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00,
+0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+};
diff --git a/bitmaps/w49o.bm b/bitmaps/w49o.bm
new file mode 100644
index 0000000..47411c3
--- /dev/null
+++ b/bitmaps/w49o.bm
@@ -0,0 +1,26 @@
+#define w49o_width 49
+#define w49o_height 49
+static char w49o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x00,0x00,
+ 0x00,0x00,0x00,0x0c,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0x1c,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0x20,0x00,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0x80,0x00,0x00,0x00,0xf8,0x7f,0x00,0x00,0x01,0x00,0x00,0x04,
+ 0x80,0x0f,0x00,0x02,0x00,0x00,0x02,0x00,0xf0,0x00,0x02,0x00,0x00,0x02,0x00,
+ 0x00,0x0f,0x04,0x00,0x00,0x01,0x00,0x00,0x30,0x04,0x00,0x80,0x00,0x00,0x1f,
+ 0xc0,0x04,0x00,0x80,0x00,0x80,0x3f,0x00,0x05,0x00,0x80,0x00,0x80,0x3f,0x00,
+ 0x06,0x00,0x80,0x00,0x80,0x3f,0x00,0x04,0x00,0x80,0x00,0x80,0x3f,0x00,0x08,
+ 0x00,0x80,0x00,0x00,0x1f,0x00,0x08,0x00,0x80,0x00,0x00,0x1f,0x00,0x10,0x00,
+ 0x80,0x00,0x00,0x0e,0x00,0x10,0x00,0x80,0x00,0x00,0x0e,0x00,0x10,0x00,0x00,
+ 0xff,0x03,0x00,0x00,0x10,0x00,0x80,0x00,0x7c,0x00,0x00,0x10,0x00,0x80,0x00,
+ 0x80,0x1f,0x00,0x10,0x00,0x80,0x80,0x7f,0xe0,0x03,0x10,0x00,0x80,0x60,0x00,
+ 0x00,0x1c,0x10,0x00,0x80,0x18,0x00,0x00,0xe0,0x08,0x00,0x80,0x04,0x00,0x00,
+ 0x00,0x09,0x00,0x80,0x02,0x00,0x00,0x00,0x06,0x00,0x80,0x01,0x00,0x00,0x00,
+ 0x04,0x00,0x00,0x01,0x00,0x00,0x80,0x07,0x00,0x00,0x02,0x00,0x00,0xe0,0x00,
+ 0x00,0x00,0x1c,0x00,0x00,0x38,0x00,0x00,0x00,0xe0,0x03,0x00,0x0e,0x00,0x00,
+ 0x00,0x00,0xfc,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/w49s.bm b/bitmaps/w49s.bm
new file mode 100644
index 0000000..2a8a5e7
--- /dev/null
+++ b/bitmaps/w49s.bm
@@ -0,0 +1,26 @@
+#define w49s_width 49
+#define w49s_height 49
+static char w49s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x00,0x00,
+ 0x00,0x00,0x00,0xfc,0xff,0x03,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0x00,0x00,
+ 0x00,0x80,0xff,0xff,0x3f,0x00,0x00,0x00,0xe0,0xff,0xff,0x7f,0x00,0x00,0x00,
+ 0xf0,0xff,0xff,0xff,0x00,0x00,0x00,0x08,0x80,0xff,0xff,0x01,0x00,0x00,0xfc,
+ 0x7f,0xf0,0xff,0x03,0x00,0x00,0xfe,0xff,0x0f,0xff,0x03,0x00,0x00,0xfe,0xff,
+ 0xff,0xf0,0x07,0x00,0x00,0xff,0xff,0xff,0xcf,0x07,0x00,0x80,0xff,0xff,0xe0,
+ 0x3f,0x07,0x00,0x80,0xff,0x7f,0xc0,0xff,0x06,0x00,0x80,0xff,0x7f,0xc0,0xff,
+ 0x05,0x00,0x80,0xff,0x7f,0xc0,0xff,0x07,0x00,0x80,0xff,0x7f,0xc0,0xff,0x0f,
+ 0x00,0x80,0xff,0xff,0xe0,0xff,0x0f,0x00,0x80,0xff,0xff,0xe0,0xff,0x1f,0x00,
+ 0x80,0xff,0xff,0xf1,0xff,0x1f,0x00,0x80,0xff,0xff,0xf1,0xff,0x1f,0x00,0x00,
+ 0x01,0xfc,0xff,0xff,0x1f,0x00,0x80,0xff,0x83,0xff,0xff,0x1f,0x00,0x80,0xff,
+ 0x7f,0xe0,0xff,0x1f,0x00,0x80,0x7f,0x80,0x1f,0xfc,0x1f,0x00,0x80,0x9f,0xff,
+ 0xff,0xe3,0x1f,0x00,0x80,0xe7,0xff,0xff,0x1f,0x0f,0x00,0x80,0xfb,0xff,0xff,
+ 0xff,0x0e,0x00,0x80,0xfd,0xff,0xff,0xff,0x05,0x00,0x80,0xfe,0xff,0xff,0xff,
+ 0x07,0x00,0x00,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xfe,0xff,0xff,0xff,0x00,
+ 0x00,0x00,0xfc,0xff,0xff,0x3f,0x00,0x00,0x00,0xe0,0xff,0xff,0x0f,0x00,0x00,
+ 0x00,0x00,0xfc,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/bitmaps/w72o.bm b/bitmaps/w72o.bm
new file mode 100644
index 0000000..6c687e4
--- /dev/null
+++ b/bitmaps/w72o.bm
@@ -0,0 +1,47 @@
+#define w72o_width 72
+#define w72o_height 72
+static char w72o_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xf0,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x03,0xfc,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x3e,0x00,0xc0,0x1f,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,
+ 0x7e,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0xe0,
+ 0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x03,0x00,
+ 0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+ 0x00,0x07,0x00,0x00,0x80,0xff,0x7f,0x00,0x00,0x00,0x0e,0x00,0x00,0xc0,0xf1,
+ 0xff,0x3f,0x00,0x00,0x1c,0x00,0x00,0xc0,0x00,0xe0,0xff,0x03,0x00,0x18,0x00,
+ 0x00,0xe0,0x00,0x00,0xe0,0x7f,0x00,0x38,0x00,0x00,0x60,0x00,0x00,0x00,0xfe,
+ 0x07,0x30,0x00,0x00,0x70,0x00,0x00,0x00,0xc0,0x3f,0x30,0x00,0x00,0x30,0x00,
+ 0x00,0x00,0x00,0xfc,0x30,0x00,0x00,0x38,0x00,0x00,0xf0,0x03,0xe0,0x61,0x00,
+ 0x00,0x18,0x00,0x00,0xf0,0x03,0x80,0x67,0x00,0x00,0x1c,0x00,0x00,0xf8,0x07,
+ 0x00,0x7f,0x00,0x00,0x0c,0x00,0x00,0xf8,0x07,0x00,0xfc,0x00,0x00,0x0c,0x00,
+ 0x00,0xfc,0x0f,0x00,0xf0,0x01,0x00,0x0c,0x00,0x00,0xfc,0x0f,0x00,0x80,0x01,
+ 0x00,0x0c,0x00,0x00,0xf8,0x07,0x00,0x80,0x01,0x00,0x0c,0x00,0x00,0xf8,0x07,
+ 0x00,0x80,0x01,0x00,0x0c,0x00,0x00,0xf0,0x03,0x00,0x80,0x01,0x00,0x0c,0x00,
+ 0x00,0xf0,0x03,0x00,0x80,0x01,0x00,0x0c,0x00,0x00,0xe0,0x01,0x00,0x80,0x01,
+ 0x00,0x18,0x00,0x00,0xe0,0x01,0x00,0x80,0x01,0x00,0x18,0x00,0x00,0xc0,0x00,
+ 0x00,0x80,0x03,0x00,0x18,0xfe,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0xf8,0xff,
+ 0xff,0x00,0x00,0x00,0x00,0x03,0x00,0xf8,0x03,0xfe,0x3f,0x00,0x00,0x00,0x03,
+ 0x00,0x1c,0x00,0x00,0xfe,0x0f,0x00,0x00,0x03,0x00,0x0c,0x00,0xf8,0xff,0xff,
+ 0x00,0x80,0x03,0x00,0x0c,0xc0,0xff,0x03,0xf8,0x07,0x80,0x03,0x00,0x0c,0xf8,
+ 0x0f,0x00,0x80,0x3f,0x80,0x01,0x00,0x0c,0x7e,0x00,0x00,0x00,0xfc,0xc1,0x01,
+ 0x00,0x1c,0x0f,0x00,0x00,0x00,0xe0,0xcf,0x00,0x00,0xd8,0x03,0x00,0x00,0x00,
+ 0x00,0xfe,0x00,0x00,0xf8,0x01,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x78,0x00,
+ 0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x60,0x00,
+ 0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
+ 0x00,0x3e,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,0xc0,0x0f,
+ 0x00,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x7e,0x00,0x00,
+ 0x00,0x00,0xf0,0x0f,0x00,0xc0,0x0f,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/w72s.bm b/bitmaps/w72s.bm
new file mode 100644
index 0000000..bcbc883
--- /dev/null
+++ b/bitmaps/w72s.bm
@@ -0,0 +1,47 @@
+#define w72s_width 72
+#define w72s_height 72
+static char w72s_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xf0,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0xfe,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,
+ 0x7f,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xe0,
+ 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03,0x00,
+ 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
+ 0xff,0x07,0x00,0x00,0x80,0x07,0x80,0xff,0xff,0xff,0x0f,0x00,0x00,0xc0,0x0f,
+ 0x00,0xc0,0xff,0xff,0x1f,0x00,0x00,0xc0,0xff,0x1f,0x00,0xfc,0xff,0x1f,0x00,
+ 0x00,0xe0,0xff,0xff,0x1f,0x80,0xff,0x3f,0x00,0x00,0xe0,0xff,0xff,0xff,0x01,
+ 0xf8,0x3f,0x00,0x00,0xf0,0xff,0xff,0xff,0x3f,0xc0,0x3f,0x00,0x00,0xf0,0xff,
+ 0xff,0xff,0xff,0x03,0x3f,0x00,0x00,0xf8,0xff,0xff,0x0f,0xfc,0x1f,0x7e,0x00,
+ 0x00,0xf8,0xff,0xff,0x0f,0xfc,0x7f,0x78,0x00,0x00,0xfc,0xff,0xff,0x07,0xf8,
+ 0xff,0x60,0x00,0x00,0xfc,0xff,0xff,0x07,0xf8,0xff,0xe3,0x00,0x00,0xfc,0xff,
+ 0xff,0x03,0xf0,0xff,0xcf,0x01,0x00,0xfc,0xff,0xff,0x03,0xf0,0xff,0xff,0x01,
+ 0x00,0xfc,0xff,0xff,0x07,0xf8,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0x07,0xf8,
+ 0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0x0f,0xfc,0xff,0xff,0x01,0x00,0xfc,0xff,
+ 0xff,0x0f,0xfc,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0x1f,0xfe,0xff,0xff,0x01,
+ 0x00,0xf8,0xff,0xff,0x1f,0xfe,0xff,0xff,0x01,0x00,0xf8,0xff,0xff,0x3f,0xff,
+ 0xff,0xff,0x03,0x00,0xf8,0x01,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0x18,0x00,
+ 0x00,0xff,0xff,0xff,0xff,0x03,0x00,0x18,0xfc,0x01,0xc0,0xff,0xff,0xff,0x03,
+ 0x00,0xfc,0xff,0xff,0x01,0xf0,0xff,0xff,0x03,0x00,0xfc,0xff,0x07,0x00,0x00,
+ 0xff,0xff,0x03,0x00,0xfc,0x3f,0x00,0xfc,0x07,0xf8,0xff,0x03,0x00,0xfc,0x07,
+ 0xf0,0xff,0x7f,0xc0,0xff,0x01,0x00,0xfc,0x81,0xff,0xff,0xff,0x03,0xfe,0x01,
+ 0x00,0xfc,0xf0,0xff,0xff,0xff,0x1f,0xf0,0x00,0x00,0x38,0xfc,0xff,0xff,0xff,
+ 0xff,0xe1,0x00,0x00,0x38,0xfe,0xff,0xff,0xff,0xff,0xe7,0x00,0x00,0xb8,0xff,
+ 0xff,0xff,0xff,0xff,0x6f,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,
+ 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,
+ 0xff,0x3f,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xc0,0xff,
+ 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,
+ 0x00,0x00,0xf0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00};
diff --git a/bitmaps/wl49o.bm b/bitmaps/wl49o.bm
new file mode 100644
index 0000000..9c5a5e0
--- /dev/null
+++ b/bitmaps/wl49o.bm
@@ -0,0 +1,27 @@
+#define wl49o_width 49
+#define wl49o_height 49
+static char wl49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x80, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04,
+0x80, 0x0f, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0xf0, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00,
+0x00, 0x0f, 0x04, 0x00, 0x00, 0x01, 0x00, 0x0e, 0x30, 0x04, 0x00, 0x80, 0x00, 0x80, 0x31,
+0xc0, 0x04, 0x00, 0x80, 0x00, 0x40, 0x40, 0x00, 0x05, 0x00, 0x80, 0x00, 0x40, 0x40, 0x00,
+0x06, 0x00, 0x80, 0x00, 0x20, 0x80, 0x00, 0x04, 0x00, 0x80, 0x00, 0x20, 0x80, 0x00, 0x08,
+0x00, 0x80, 0x00, 0x40, 0x40, 0x00, 0x08, 0x00, 0x80, 0x00, 0x40, 0x40, 0x00, 0x10, 0x00,
+0x80, 0x00, 0x80, 0x31, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x0e, 0x00, 0x10, 0x00, 0x00,
+0xff, 0x03, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x7c, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00,
+0x80, 0x1f, 0x00, 0x10, 0x00, 0x80, 0x80, 0x7f, 0xe0, 0x03, 0x10, 0x00, 0x80, 0x60, 0x00,
+0x00, 0x1c, 0x10, 0x00, 0x80, 0x18, 0x00, 0x00, 0xe0, 0x08, 0x00, 0x80, 0x04, 0x00, 0x00,
+0x00, 0x09, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
+0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0xe0, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wl49s.bm b/bitmaps/wl49s.bm
new file mode 100644
index 0000000..bfe02b5
--- /dev/null
+++ b/bitmaps/wl49s.bm
@@ -0,0 +1,27 @@
+#define wl49s_width 49
+#define wl49s_height 49
+static char wl49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x08, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc,
+0x7f, 0xf0, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0xf0, 0x07, 0x00, 0x00, 0xff, 0xff, 0xf1, 0xcf, 0x07, 0x00, 0x80, 0xff, 0x7f, 0xce,
+0x3f, 0x07, 0x00, 0x80, 0xff, 0xbf, 0xbf, 0xff, 0x06, 0x00, 0x80, 0xff, 0xbf, 0xbf, 0xff,
+0x05, 0x00, 0x80, 0xff, 0xdf, 0x7f, 0xff, 0x07, 0x00, 0x80, 0xff, 0xdf, 0x7f, 0xff, 0x0f,
+0x00, 0x80, 0xff, 0xbf, 0xbf, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xbf, 0xbf, 0xff, 0x1f, 0x00,
+0x80, 0xff, 0x7f, 0xce, 0xff, 0x1f, 0x00, 0x80, 0xff, 0xff, 0xf1, 0xff, 0x1f, 0x00, 0x00,
+0x01, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff, 0x83, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff,
+0x7f, 0xe0, 0xff, 0x1f, 0x00, 0x80, 0x7f, 0x80, 0x1f, 0xfc, 0x1f, 0x00, 0x80, 0x9f, 0xff,
+0xff, 0xe3, 0x1f, 0x00, 0x80, 0xe7, 0xff, 0xff, 0x1f, 0x0f, 0x00, 0x80, 0xfb, 0xff, 0xff,
+0xff, 0x0e, 0x00, 0x80, 0xfd, 0xff, 0xff, 0xff, 0x05, 0x00, 0x80, 0xfe, 0xff, 0xff, 0xff,
+0x07, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wl72o.bm b/bitmaps/wl72o.bm
new file mode 100644
index 0000000..56170b3
--- /dev/null
+++ b/bitmaps/wl72o.bm
@@ -0,0 +1,48 @@
+#define wl72o_width 72
+#define wl72o_height 72
+static char wl72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0xfc, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x3e, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+0x7e, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00,
+0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xc0, 0xf1,
+0xff, 0x3f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xc0, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x18, 0x00,
+0x00, 0xe0, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x38, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfe,
+0x07, 0x30, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x30, 0x00, 0x00, 0x30, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0x30, 0x00, 0x00, 0x38, 0x00, 0x00, 0xf0, 0x01, 0xe0, 0x61, 0x00,
+0x00, 0x18, 0x00, 0x00, 0xf8, 0x03, 0x80, 0x67, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x07,
+0x00, 0x7f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0xfc, 0x00, 0x00, 0x0c, 0x00,
+0x00, 0x06, 0x0c, 0x00, 0xf0, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x03, 0x18, 0x00, 0x80, 0x01,
+0x00, 0x0c, 0x00, 0x00, 0x03, 0x18, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x03, 0x18,
+0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00,
+0x00, 0x06, 0x0c, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x1c, 0x07, 0x00, 0x80, 0x01,
+0x00, 0x18, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x80, 0x01, 0x00, 0x18, 0x00, 0x00, 0xf0, 0x01,
+0x00, 0x80, 0x03, 0x00, 0x18, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff,
+0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0x03, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x03,
+0x00, 0x1c, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x0c, 0x00, 0xf8, 0xff, 0xff,
+0x00, 0x80, 0x03, 0x00, 0x0c, 0xc0, 0xff, 0x03, 0xf8, 0x07, 0x80, 0x03, 0x00, 0x0c, 0xf8,
+0x0f, 0x00, 0x80, 0x3f, 0x80, 0x01, 0x00, 0x0c, 0x7e, 0x00, 0x00, 0x00, 0xfc, 0xc1, 0x01,
+0x00, 0x1c, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xcf, 0x00, 0x00, 0xd8, 0x03, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x78, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
+0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x3e, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xc0, 0x0f,
+0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wl72s.bm b/bitmaps/wl72s.bm
new file mode 100644
index 0000000..e6485be
--- /dev/null
+++ b/bitmaps/wl72s.bm
@@ -0,0 +1,48 @@
+#define wl72s_width 72
+#define wl72s_height 72
+static char wl72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xff, 0xff,
+0xff, 0x07, 0x00, 0x00, 0x80, 0x03, 0x80, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0x0f,
+0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0x1f, 0x00, 0xfc, 0xff, 0x1f, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0x1f, 0x80, 0xff, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x01,
+0xf8, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0x3f, 0x00, 0x00, 0xf0, 0xff,
+0xff, 0xff, 0xff, 0x03, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x0f, 0xfe, 0x1f, 0x7e, 0x00,
+0x00, 0xf8, 0xff, 0xff, 0x07, 0xfc, 0x7f, 0x78, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xe3, 0xf8,
+0xff, 0x60, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xf9, 0xf3, 0xff, 0xe3, 0x00, 0x00, 0xfc, 0xff,
+0xff, 0xf9, 0xf3, 0xff, 0xcf, 0x01, 0x00, 0xfc, 0xff, 0xff, 0xfc, 0xe7, 0xff, 0xff, 0x01,
+0x00, 0xfc, 0xff, 0xff, 0xfc, 0xe7, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0xfc, 0xe7,
+0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0xf9, 0xf3, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff,
+0xff, 0xf9, 0xf3, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0xe3, 0xf8, 0xff, 0xff, 0x01,
+0x00, 0xf8, 0xff, 0xff, 0x07, 0xfc, 0xff, 0xff, 0x01, 0x00, 0xf8, 0xff, 0xff, 0x0f, 0xfe,
+0xff, 0xff, 0x03, 0x00, 0xf8, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x18, 0x00,
+0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x18, 0xfc, 0x01, 0xc0, 0xff, 0xff, 0xff, 0x03,
+0x00, 0xfc, 0xff, 0xff, 0x01, 0xf0, 0xff, 0xff, 0x03, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00,
+0xff, 0xff, 0x03, 0x00, 0xfc, 0x3f, 0x00, 0xfc, 0x07, 0xf8, 0xff, 0x03, 0x00, 0xfc, 0x07,
+0xf0, 0xff, 0x7f, 0xc0, 0xff, 0x01, 0x00, 0xfc, 0x81, 0xff, 0xff, 0xff, 0x03, 0xfe, 0x01,
+0x00, 0xfc, 0xf0, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0x00, 0x00, 0x38, 0xfc, 0xff, 0xff, 0xff,
+0xff, 0xc1, 0x00, 0x00, 0x18, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x00, 0x00, 0x98, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x6f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
+0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wn49o.bm b/bitmaps/wn49o.bm
new file mode 100644
index 0000000..3fa8f48
--- /dev/null
+++ b/bitmaps/wn49o.bm
@@ -0,0 +1,27 @@
+#define wn49o_width 49
+#define wn49o_height 49
+static char wn49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x80, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04,
+0x80, 0x0f, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0xf0, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00,
+0x00, 0x0f, 0x04, 0x00, 0x00, 0x01, 0x00, 0x3c, 0x30, 0x04, 0x00, 0x80, 0x00, 0x00, 0x7f,
+0xc0, 0x04, 0x00, 0x80, 0x00, 0x80, 0x1f, 0x00, 0x05, 0x00, 0x80, 0x00, 0x80, 0x0f, 0x00,
+0x06, 0x00, 0x80, 0x00, 0xc0, 0x07, 0x00, 0x04, 0x00, 0x80, 0x00, 0xc0, 0x07, 0x00, 0x08,
+0x00, 0x80, 0x00, 0xc0, 0x07, 0x00, 0x08, 0x00, 0x80, 0x00, 0x80, 0x0f, 0x00, 0x10, 0x00,
+0x80, 0x00, 0x80, 0x1f, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x7f, 0x00, 0x10, 0x00, 0x00,
+0xff, 0x03, 0x3c, 0x00, 0x10, 0x00, 0x80, 0x00, 0x7c, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00,
+0x80, 0x1f, 0x00, 0x10, 0x00, 0x80, 0x80, 0x7f, 0xe0, 0x03, 0x10, 0x00, 0x80, 0x60, 0x00,
+0x00, 0x1c, 0x10, 0x00, 0x80, 0x18, 0x00, 0x00, 0xe0, 0x08, 0x00, 0x80, 0x04, 0x00, 0x00,
+0x00, 0x09, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
+0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0xe0, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wn49s.bm b/bitmaps/wn49s.bm
new file mode 100644
index 0000000..9b18fb3
--- /dev/null
+++ b/bitmaps/wn49s.bm
@@ -0,0 +1,27 @@
+#define wn49s_width 49
+#define wn49s_height 49
+static char wn49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x08, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc,
+0x7f, 0xf0, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0xf0, 0x07, 0x00, 0x00, 0xff, 0xff, 0xc3, 0xcf, 0x07, 0x00, 0x80, 0xff, 0xff, 0x80,
+0x3f, 0x07, 0x00, 0x80, 0xff, 0x7f, 0xe0, 0xff, 0x06, 0x00, 0x80, 0xff, 0x7f, 0xf0, 0xff,
+0x05, 0x00, 0x80, 0xff, 0x3f, 0xf8, 0xff, 0x07, 0x00, 0x80, 0xff, 0x3f, 0xf8, 0xff, 0x0f,
+0x00, 0x80, 0xff, 0x3f, 0xf8, 0xff, 0x0f, 0x00, 0x80, 0xff, 0x7f, 0xf0, 0xff, 0x1f, 0x00,
+0x80, 0xff, 0x7f, 0xe0, 0xff, 0x1f, 0x00, 0x80, 0xff, 0xff, 0x80, 0xff, 0x1f, 0x00, 0x00,
+0x01, 0xfc, 0xc3, 0xff, 0x1f, 0x00, 0x80, 0xff, 0x83, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff,
+0x7f, 0xe0, 0xff, 0x1f, 0x00, 0x80, 0x7f, 0x80, 0x1f, 0xfc, 0x1f, 0x00, 0x80, 0x9f, 0xff,
+0xff, 0xe3, 0x1f, 0x00, 0x80, 0xe7, 0xff, 0xff, 0x1f, 0x0f, 0x00, 0x80, 0xfb, 0xff, 0xff,
+0xff, 0x0e, 0x00, 0x80, 0xfd, 0xff, 0xff, 0xff, 0x05, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+0x07, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wn72o.bm b/bitmaps/wn72o.bm
new file mode 100644
index 0000000..d7bb45b
--- /dev/null
+++ b/bitmaps/wn72o.bm
@@ -0,0 +1,48 @@
+#define wn72o_width 72
+#define wn72o_height 72
+static char wn72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0xfc, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x3e, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+0x7e, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00,
+0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xc0, 0xf1,
+0xff, 0x3f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xc0, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x18, 0x00,
+0x00, 0xe0, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x38, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfe,
+0x07, 0x30, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x30, 0x00, 0x00, 0x30, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0x30, 0x00, 0x00, 0x38, 0x00, 0x00, 0xc0, 0x0f, 0xe0, 0x61, 0x00,
+0x00, 0x18, 0x00, 0x00, 0xf0, 0x1f, 0x80, 0x67, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xf8, 0x07,
+0x00, 0x7f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x00, 0x00, 0x0c, 0x00,
+0x00, 0xfc, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x80, 0x01,
+0x00, 0x0c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x7e, 0x00,
+0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00,
+0x00, 0xfc, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x80, 0x01,
+0x00, 0x18, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x80, 0x01, 0x00, 0x18, 0x00, 0x00, 0xf0, 0x1f,
+0x00, 0x80, 0x03, 0x00, 0x18, 0xfe, 0x03, 0xc0, 0x0f, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff,
+0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0x03, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x03,
+0x00, 0x1c, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x0c, 0x00, 0xf8, 0xff, 0xff,
+0x00, 0x80, 0x03, 0x00, 0x0c, 0xc0, 0xff, 0x03, 0xf8, 0x07, 0x80, 0x03, 0x00, 0x0c, 0xf8,
+0x0f, 0x00, 0x80, 0x3f, 0x80, 0x01, 0x00, 0x0c, 0x7e, 0x00, 0x00, 0x00, 0xfc, 0xc1, 0x01,
+0x00, 0x1c, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xcf, 0x00, 0x00, 0xd8, 0x03, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x78, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
+0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x3e, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xc0, 0x0f,
+0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wn72s.bm b/bitmaps/wn72s.bm
new file mode 100644
index 0000000..8eb6525
--- /dev/null
+++ b/bitmaps/wn72s.bm
@@ -0,0 +1,48 @@
+#define wn72s_width 72
+#define wn72s_height 72
+static char wn72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xff, 0xff,
+0xff, 0x07, 0x00, 0x00, 0x80, 0x03, 0x80, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0x0f,
+0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0x1f, 0x00, 0xfc, 0xff, 0x1f, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0x1f, 0x80, 0xff, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x01,
+0xf8, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0x3f, 0x00, 0x00, 0xf0, 0xff,
+0xff, 0xff, 0xff, 0x03, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x3f, 0xf0, 0x1f, 0x7e, 0x00,
+0x00, 0xf8, 0xff, 0xff, 0x0f, 0xe0, 0x7f, 0x78, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0xf8,
+0xff, 0x60, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xe3, 0x00, 0x00, 0xfc, 0xff,
+0xff, 0x03, 0xff, 0xff, 0xcf, 0x01, 0x00, 0xfc, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0x01,
+0x00, 0xfc, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0x81, 0xff,
+0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff,
+0xff, 0x03, 0xff, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, 0x01,
+0x00, 0xf8, 0xff, 0xff, 0x07, 0xf8, 0xff, 0xff, 0x01, 0x00, 0xf8, 0xff, 0xff, 0x0f, 0xe0,
+0xff, 0xff, 0x03, 0x00, 0xf8, 0x01, 0xfc, 0x3f, 0xf0, 0xff, 0xff, 0x03, 0x00, 0x18, 0x00,
+0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x18, 0xfc, 0x01, 0xc0, 0xff, 0xff, 0xff, 0x03,
+0x00, 0xfc, 0xff, 0xff, 0x01, 0xf0, 0xff, 0xff, 0x03, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00,
+0xff, 0xff, 0x03, 0x00, 0xfc, 0x3f, 0x00, 0xfc, 0x07, 0xf8, 0xff, 0x03, 0x00, 0xfc, 0x07,
+0xf0, 0xff, 0x7f, 0xc0, 0xff, 0x01, 0x00, 0xfc, 0x81, 0xff, 0xff, 0xff, 0x03, 0xfe, 0x01,
+0x00, 0xfc, 0xf0, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0x00, 0x00, 0x38, 0xfc, 0xff, 0xff, 0xff,
+0xff, 0xc1, 0x00, 0x00, 0x18, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x98, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x6f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
+0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wp49o.bm b/bitmaps/wp49o.bm
new file mode 100644
index 0000000..b092b46
--- /dev/null
+++ b/bitmaps/wp49o.bm
@@ -0,0 +1,27 @@
+#define wp49o_width 49
+#define wp49o_height 49
+static char wp49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x80, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04,
+0x80, 0x0f, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0xf0, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00,
+0x00, 0x0f, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x30, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00,
+0xc0, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x06, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08,
+0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+0xff, 0x03, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x7c, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00,
+0x80, 0x1f, 0x00, 0x10, 0x00, 0x80, 0x80, 0x7f, 0xe0, 0x03, 0x10, 0x00, 0x80, 0x60, 0x00,
+0x00, 0x1c, 0x10, 0x00, 0x80, 0x18, 0x00, 0x00, 0xe0, 0x08, 0x00, 0x80, 0x04, 0x00, 0x00,
+0x00, 0x09, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
+0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0xe0, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wp49s.bm b/bitmaps/wp49s.bm
new file mode 100644
index 0000000..e315903
--- /dev/null
+++ b/bitmaps/wp49s.bm
@@ -0,0 +1,27 @@
+#define wp49s_width 49
+#define wp49s_height 49
+static char wp49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x08, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc,
+0x7f, 0xf0, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0xf0, 0x07, 0x00, 0x00, 0xff, 0xff, 0xff, 0xcf, 0x07, 0x00, 0x80, 0xff, 0xff, 0xff,
+0x3f, 0x07, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x06, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+0x05, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x0f,
+0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
+0x80, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x01, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff, 0x83, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff,
+0x7f, 0xe0, 0xff, 0x1f, 0x00, 0x80, 0x7f, 0x80, 0x1f, 0xfc, 0x1f, 0x00, 0x80, 0x9f, 0xff,
+0xff, 0xe3, 0x1f, 0x00, 0x80, 0xe7, 0xff, 0xff, 0x1f, 0x0f, 0x00, 0x80, 0xfb, 0xff, 0xff,
+0xff, 0x0e, 0x00, 0x80, 0xfd, 0xff, 0xff, 0xff, 0x05, 0x00, 0x80, 0xfe, 0xff, 0xff, 0xff,
+0x07, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wp72o.bm b/bitmaps/wp72o.bm
new file mode 100644
index 0000000..0b8e2b5
--- /dev/null
+++ b/bitmaps/wp72o.bm
@@ -0,0 +1,48 @@
+#define wp72o_width 72
+#define wp72o_height 72
+static char wp72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0xfc, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x3e, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+0x7e, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00,
+0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xc0, 0xf1,
+0xff, 0x3f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xc0, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x18, 0x00,
+0x00, 0xe0, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x38, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfe,
+0x07, 0x30, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x30, 0x00, 0x00, 0x30, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0x30, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x61, 0x00,
+0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x80, 0x67, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x0c, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
+0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
+0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x03, 0x00, 0x18, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff,
+0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0x03, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x03,
+0x00, 0x1c, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x0c, 0x00, 0xf8, 0xff, 0xff,
+0x00, 0x80, 0x03, 0x00, 0x0c, 0xc0, 0xff, 0x03, 0xf8, 0x07, 0x80, 0x03, 0x00, 0x0c, 0xf8,
+0x0f, 0x00, 0x80, 0x3f, 0x80, 0x01, 0x00, 0x0c, 0x7e, 0x00, 0x00, 0x00, 0xfc, 0xc1, 0x01,
+0x00, 0x1c, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xcf, 0x00, 0x00, 0xd8, 0x03, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x78, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
+0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x3e, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xc0, 0x0f,
+0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/wp72s.bm b/bitmaps/wp72s.bm
new file mode 100644
index 0000000..960a04d
--- /dev/null
+++ b/bitmaps/wp72s.bm
@@ -0,0 +1,48 @@
+#define wp72s_width 72
+#define wp72s_height 72
+static char wp72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xcf, 0xff, 0xff, 0xff,
+0xff, 0x07, 0x00, 0x00, 0x80, 0x07, 0x80, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0x0f,
+0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0x1f, 0x00, 0xfc, 0xff, 0x1f, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0x1f, 0x80, 0xff, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x01,
+0xf8, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0x3f, 0x00, 0x00, 0xf0, 0xff,
+0xff, 0xff, 0xff, 0x03, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x7e, 0x00,
+0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x78, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x60, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x00, 0xfc, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xcf, 0x01, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
+0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
+0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x03, 0x00, 0xf8, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x18, 0x00,
+0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x18, 0xfc, 0x01, 0xc0, 0xff, 0xff, 0xff, 0x03,
+0x00, 0xfc, 0xff, 0xff, 0x01, 0xf0, 0xff, 0xff, 0x03, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00,
+0xff, 0xff, 0x03, 0x00, 0xfc, 0x3f, 0x00, 0xfc, 0x07, 0xf8, 0xff, 0x03, 0x00, 0xfc, 0x07,
+0xf0, 0xff, 0x7f, 0xc0, 0xff, 0x01, 0x00, 0xfc, 0x81, 0xff, 0xff, 0xff, 0x03, 0xfe, 0x01,
+0x00, 0xfc, 0xf0, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0x00, 0x00, 0x38, 0xfc, 0xff, 0xff, 0xff,
+0xff, 0xc1, 0x00, 0x00, 0x18, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x00, 0x00, 0x98, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x6f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
+0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/ws49o.bm b/bitmaps/ws49o.bm
new file mode 100644
index 0000000..ad0cc6d
--- /dev/null
+++ b/bitmaps/ws49o.bm
@@ -0,0 +1,27 @@
+#define ws49o_width 49
+#define ws49o_height 49
+static char ws49o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x80, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04,
+0x80, 0x0f, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0xf0, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00,
+0x04, 0x0f, 0x04, 0x00, 0x00, 0x01, 0x00, 0x04, 0x30, 0x04, 0x00, 0x80, 0x00, 0x00, 0x0e,
+0xc0, 0x04, 0x00, 0x80, 0x00, 0x00, 0x0e, 0x00, 0x05, 0x00, 0x80, 0x00, 0xf0, 0xff, 0x00,
+0x06, 0x00, 0x80, 0x00, 0xe0, 0x7f, 0x00, 0x04, 0x00, 0x80, 0x00, 0x80, 0x1f, 0x00, 0x08,
+0x00, 0x80, 0x00, 0x80, 0x1f, 0x00, 0x08, 0x00, 0x80, 0x00, 0x80, 0x1f, 0x00, 0x10, 0x00,
+0x80, 0x00, 0xc0, 0x39, 0x00, 0x10, 0x00, 0x80, 0x00, 0x40, 0x20, 0x00, 0x10, 0x00, 0x00,
+0xff, 0x03, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x7c, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00,
+0x80, 0x1f, 0x00, 0x10, 0x00, 0x80, 0x80, 0x7f, 0xe0, 0x03, 0x10, 0x00, 0x80, 0x60, 0x00,
+0x00, 0x1c, 0x10, 0x00, 0x80, 0x18, 0x00, 0x00, 0xe0, 0x08, 0x00, 0x80, 0x04, 0x00, 0x00,
+0x00, 0x09, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
+0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0xe0, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/ws49s.bm b/bitmaps/ws49s.bm
new file mode 100644
index 0000000..fd7e464
--- /dev/null
+++ b/bitmaps/ws49s.bm
@@ -0,0 +1,27 @@
+#define ws49s_width 49
+#define ws49s_height 49
+static char ws49s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x08, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc,
+0x7f, 0xf0, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff,
+0xfb, 0xf0, 0x07, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xcf, 0x07, 0x00, 0x80, 0xff, 0xff, 0xf1,
+0x3f, 0x07, 0x00, 0x80, 0xff, 0xff, 0xf1, 0xff, 0x06, 0x00, 0x80, 0xff, 0x0f, 0x00, 0xff,
+0x05, 0x00, 0x80, 0xff, 0x1f, 0x80, 0xff, 0x07, 0x00, 0x80, 0xff, 0x7f, 0xe0, 0xff, 0x0f,
+0x00, 0x80, 0xff, 0x7f, 0xe0, 0xff, 0x0f, 0x00, 0x80, 0xff, 0x7f, 0xe0, 0xff, 0x1f, 0x00,
+0x80, 0xff, 0x3f, 0xc6, 0xff, 0x1f, 0x00, 0x80, 0xff, 0xbf, 0xdf, 0xff, 0x1f, 0x00, 0x00,
+0x01, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff, 0x83, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff,
+0x7f, 0xe0, 0xff, 0x1f, 0x00, 0x80, 0x7f, 0x80, 0x1f, 0xfc, 0x1f, 0x00, 0x80, 0x9f, 0xff,
+0xff, 0xe3, 0x1f, 0x00, 0x80, 0xe7, 0xff, 0xff, 0x1f, 0x0f, 0x00, 0x80, 0xfb, 0xff, 0xff,
+0xff, 0x0e, 0x00, 0x80, 0xfd, 0xff, 0xff, 0xff, 0x05, 0x00, 0x80, 0xfe, 0xff, 0xff, 0xff,
+0x07, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/bitmaps/ws72o.bm b/bitmaps/ws72o.bm
new file mode 100644
index 0000000..eddde41
--- /dev/null
+++ b/bitmaps/ws72o.bm
@@ -0,0 +1,48 @@
+#define ws72o_width 72
+#define ws72o_height 72
+static char ws72o_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0xfc, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x3e, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+0x7e, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00,
+0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xc0, 0xf1,
+0xff, 0x3f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xc0, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x18, 0x00,
+0x00, 0xe0, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x38, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfe,
+0x07, 0x30, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x30, 0x00, 0x00, 0x30, 0x00,
+0x00, 0x20, 0x00, 0xfc, 0x30, 0x00, 0x00, 0x38, 0x00, 0x00, 0x20, 0x00, 0xe0, 0x61, 0x00,
+0x00, 0x18, 0x00, 0x00, 0x70, 0x00, 0x80, 0x67, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x70, 0x00,
+0x00, 0x7f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x0c, 0x00,
+0xc0, 0xff, 0x1f, 0x00, 0xf0, 0x01, 0x00, 0x0c, 0x00, 0x80, 0xff, 0x07, 0x00, 0x80, 0x01,
+0x00, 0x0c, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xfc, 0x01,
+0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00,
+0x00, 0xfe, 0x03, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x80, 0x01,
+0x00, 0x18, 0x00, 0x00, 0x07, 0x07, 0x00, 0x80, 0x01, 0x00, 0x18, 0x00, 0x00, 0x01, 0x04,
+0x00, 0x80, 0x03, 0x00, 0x18, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff,
+0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0x03, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x03,
+0x00, 0x1c, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x0c, 0x00, 0xf8, 0xff, 0xff,
+0x00, 0x80, 0x03, 0x00, 0x0c, 0xc0, 0xff, 0x03, 0xf8, 0x07, 0x80, 0x03, 0x00, 0x0c, 0xf8,
+0x0f, 0x00, 0x80, 0x3f, 0x80, 0x01, 0x00, 0x0c, 0x7e, 0x00, 0x00, 0x00, 0xfc, 0xc1, 0x01,
+0x00, 0x1c, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xcf, 0x00, 0x00, 0xd8, 0x03, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x78, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
+0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x3e, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xc0, 0x0f,
+0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/bitmaps/ws72s.bm b/bitmaps/ws72s.bm
new file mode 100644
index 0000000..4e165bd
--- /dev/null
+++ b/bitmaps/ws72s.bm
@@ -0,0 +1,48 @@
+#define ws72s_width 72
+#define ws72s_height 72
+static char ws72s_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xff, 0xff,
+0xff, 0x07, 0x00, 0x00, 0x80, 0x03, 0x80, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0x0f,
+0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0x1f, 0x00, 0xfc, 0xff, 0x1f, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0x1f, 0x80, 0xff, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x01,
+0xf8, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0x3f, 0x00, 0x00, 0xf0, 0xff,
+0xff, 0xdf, 0xff, 0x03, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xdf, 0xff, 0x1f, 0x7e, 0x00,
+0x00, 0xf8, 0xff, 0xff, 0x8f, 0xff, 0x7f, 0x78, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x8f, 0xff,
+0xff, 0x60, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0xff, 0xff, 0xe3, 0x00, 0x00, 0xfc, 0xff,
+0x3f, 0x00, 0xe0, 0xff, 0xcf, 0x01, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0xf8, 0xff, 0xff, 0x01,
+0x00, 0xfc, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0x03, 0xfe,
+0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff,
+0xff, 0x01, 0xfc, 0xff, 0xff, 0x01, 0x00, 0xfc, 0xff, 0xff, 0x71, 0xfc, 0xff, 0xff, 0x01,
+0x00, 0xf8, 0xff, 0xff, 0xf8, 0xf8, 0xff, 0xff, 0x01, 0x00, 0xf8, 0xff, 0xff, 0xfe, 0xfb,
+0xff, 0xff, 0x03, 0x00, 0xf8, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x18, 0x00,
+0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x18, 0xfc, 0x01, 0xc0, 0xff, 0xff, 0xff, 0x03,
+0x00, 0xfc, 0xff, 0xff, 0x01, 0xf0, 0xff, 0xff, 0x03, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00,
+0xff, 0xff, 0x03, 0x00, 0xfc, 0x3f, 0x00, 0xfc, 0x07, 0xf8, 0xff, 0x03, 0x00, 0xfc, 0x07,
+0xf0, 0xff, 0x7f, 0xc0, 0xff, 0x01, 0x00, 0xfc, 0x81, 0xff, 0xff, 0xff, 0x03, 0xfe, 0x01,
+0x00, 0xfc, 0xf0, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0x00, 0x00, 0x38, 0xfc, 0xff, 0xff, 0xff,
+0xff, 0xc1, 0x00, 0x00, 0x18, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x00, 0x00, 0x98, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x6f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
+0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00
+};
diff --git a/book.c b/book.c
new file mode 100644
index 0000000..2ec8546
--- /dev/null
+++ b/book.c
@@ -0,0 +1,514 @@
+/*
+ * book.c -- code for probing Polyglot opening books
+ *
+ * This code was first released in the public domain by Michel Van den Bergh.
+ * The array Random64 is taken from the Polyglot source code. 
+ * I am pretty sure that a table of random numbers is never protected
+ * by copyright.
+ *
+ * It s adapted by H.G. Muller for working with xboard / Winboard
+ *
+ * The following terms apply to the enhanced version of XBoard distributed
+ * by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ * ------------------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <stdlib.h>
+
+#include "common.h"
+#include "backend.h"
+
+#ifdef _MSC_VER
+  typedef unsigned __int64 uint64;
+#else
+  typedef unsigned long long int uint64;
+#endif
+
+
+#ifdef _MSC_VER
+#  define U64(u) (u##ui64)
+#else
+#  define U64(u) (u##ULL)
+#endif
+
+typedef unsigned char uint8;
+typedef unsigned short uint16;
+typedef unsigned int uint32;
+
+typedef struct {
+    uint64 key;	
+    uint16 move;
+    uint16 weight;
+    uint32 learn;
+} entry_t;
+
+entry_t entry_none = {
+    0, 0, 0, 0
+};
+
+char *promote_pieces=" nbrqac=";
+extern char castlingRights[][BOARD_SIZE];
+extern char epStatus[];
+
+uint64 Random64[781] = {
+   U64(0x9D39247E33776D41), U64(0x2AF7398005AAA5C7), U64(0x44DB015024623547), U64(0x9C15F73E62A76AE2),
+   U64(0x75834465489C0C89), U64(0x3290AC3A203001BF), U64(0x0FBBAD1F61042279), U64(0xE83A908FF2FB60CA),
+   U64(0x0D7E765D58755C10), U64(0x1A083822CEAFE02D), U64(0x9605D5F0E25EC3B0), U64(0xD021FF5CD13A2ED5),
+   U64(0x40BDF15D4A672E32), U64(0x011355146FD56395), U64(0x5DB4832046F3D9E5), U64(0x239F8B2D7FF719CC),
+   U64(0x05D1A1AE85B49AA1), U64(0x679F848F6E8FC971), U64(0x7449BBFF801FED0B), U64(0x7D11CDB1C3B7ADF0),
+   U64(0x82C7709E781EB7CC), U64(0xF3218F1C9510786C), U64(0x331478F3AF51BBE6), U64(0x4BB38DE5E7219443),
+   U64(0xAA649C6EBCFD50FC), U64(0x8DBD98A352AFD40B), U64(0x87D2074B81D79217), U64(0x19F3C751D3E92AE1),
+   U64(0xB4AB30F062B19ABF), U64(0x7B0500AC42047AC4), U64(0xC9452CA81A09D85D), U64(0x24AA6C514DA27500),
+   U64(0x4C9F34427501B447), U64(0x14A68FD73C910841), U64(0xA71B9B83461CBD93), U64(0x03488B95B0F1850F),
+   U64(0x637B2B34FF93C040), U64(0x09D1BC9A3DD90A94), U64(0x3575668334A1DD3B), U64(0x735E2B97A4C45A23),
+   U64(0x18727070F1BD400B), U64(0x1FCBACD259BF02E7), U64(0xD310A7C2CE9B6555), U64(0xBF983FE0FE5D8244),
+   U64(0x9F74D14F7454A824), U64(0x51EBDC4AB9BA3035), U64(0x5C82C505DB9AB0FA), U64(0xFCF7FE8A3430B241),
+   U64(0x3253A729B9BA3DDE), U64(0x8C74C368081B3075), U64(0xB9BC6C87167C33E7), U64(0x7EF48F2B83024E20),
+   U64(0x11D505D4C351BD7F), U64(0x6568FCA92C76A243), U64(0x4DE0B0F40F32A7B8), U64(0x96D693460CC37E5D),
+   U64(0x42E240CB63689F2F), U64(0x6D2BDCDAE2919661), U64(0x42880B0236E4D951), U64(0x5F0F4A5898171BB6),
+   U64(0x39F890F579F92F88), U64(0x93C5B5F47356388B), U64(0x63DC359D8D231B78), U64(0xEC16CA8AEA98AD76),
+   U64(0x5355F900C2A82DC7), U64(0x07FB9F855A997142), U64(0x5093417AA8A7ED5E), U64(0x7BCBC38DA25A7F3C),
+   U64(0x19FC8A768CF4B6D4), U64(0x637A7780DECFC0D9), U64(0x8249A47AEE0E41F7), U64(0x79AD695501E7D1E8),
+   U64(0x14ACBAF4777D5776), U64(0xF145B6BECCDEA195), U64(0xDABF2AC8201752FC), U64(0x24C3C94DF9C8D3F6),
+   U64(0xBB6E2924F03912EA), U64(0x0CE26C0B95C980D9), U64(0xA49CD132BFBF7CC4), U64(0xE99D662AF4243939),
+   U64(0x27E6AD7891165C3F), U64(0x8535F040B9744FF1), U64(0x54B3F4FA5F40D873), U64(0x72B12C32127FED2B),
+   U64(0xEE954D3C7B411F47), U64(0x9A85AC909A24EAA1), U64(0x70AC4CD9F04F21F5), U64(0xF9B89D3E99A075C2),
+   U64(0x87B3E2B2B5C907B1), U64(0xA366E5B8C54F48B8), U64(0xAE4A9346CC3F7CF2), U64(0x1920C04D47267BBD),
+   U64(0x87BF02C6B49E2AE9), U64(0x092237AC237F3859), U64(0xFF07F64EF8ED14D0), U64(0x8DE8DCA9F03CC54E),
+   U64(0x9C1633264DB49C89), U64(0xB3F22C3D0B0B38ED), U64(0x390E5FB44D01144B), U64(0x5BFEA5B4712768E9),
+   U64(0x1E1032911FA78984), U64(0x9A74ACB964E78CB3), U64(0x4F80F7A035DAFB04), U64(0x6304D09A0B3738C4),
+   U64(0x2171E64683023A08), U64(0x5B9B63EB9CEFF80C), U64(0x506AACF489889342), U64(0x1881AFC9A3A701D6),
+   U64(0x6503080440750644), U64(0xDFD395339CDBF4A7), U64(0xEF927DBCF00C20F2), U64(0x7B32F7D1E03680EC),
+   U64(0xB9FD7620E7316243), U64(0x05A7E8A57DB91B77), U64(0xB5889C6E15630A75), U64(0x4A750A09CE9573F7),
+   U64(0xCF464CEC899A2F8A), U64(0xF538639CE705B824), U64(0x3C79A0FF5580EF7F), U64(0xEDE6C87F8477609D),
+   U64(0x799E81F05BC93F31), U64(0x86536B8CF3428A8C), U64(0x97D7374C60087B73), U64(0xA246637CFF328532),
+   U64(0x043FCAE60CC0EBA0), U64(0x920E449535DD359E), U64(0x70EB093B15B290CC), U64(0x73A1921916591CBD),
+   U64(0x56436C9FE1A1AA8D), U64(0xEFAC4B70633B8F81), U64(0xBB215798D45DF7AF), U64(0x45F20042F24F1768),
+   U64(0x930F80F4E8EB7462), U64(0xFF6712FFCFD75EA1), U64(0xAE623FD67468AA70), U64(0xDD2C5BC84BC8D8FC),
+   U64(0x7EED120D54CF2DD9), U64(0x22FE545401165F1C), U64(0xC91800E98FB99929), U64(0x808BD68E6AC10365),
+   U64(0xDEC468145B7605F6), U64(0x1BEDE3A3AEF53302), U64(0x43539603D6C55602), U64(0xAA969B5C691CCB7A),
+   U64(0xA87832D392EFEE56), U64(0x65942C7B3C7E11AE), U64(0xDED2D633CAD004F6), U64(0x21F08570F420E565),
+   U64(0xB415938D7DA94E3C), U64(0x91B859E59ECB6350), U64(0x10CFF333E0ED804A), U64(0x28AED140BE0BB7DD),
+   U64(0xC5CC1D89724FA456), U64(0x5648F680F11A2741), U64(0x2D255069F0B7DAB3), U64(0x9BC5A38EF729ABD4),
+   U64(0xEF2F054308F6A2BC), U64(0xAF2042F5CC5C2858), U64(0x480412BAB7F5BE2A), U64(0xAEF3AF4A563DFE43),
+   U64(0x19AFE59AE451497F), U64(0x52593803DFF1E840), U64(0xF4F076E65F2CE6F0), U64(0x11379625747D5AF3),
+   U64(0xBCE5D2248682C115), U64(0x9DA4243DE836994F), U64(0x066F70B33FE09017), U64(0x4DC4DE189B671A1C),
+   U64(0x51039AB7712457C3), U64(0xC07A3F80C31FB4B4), U64(0xB46EE9C5E64A6E7C), U64(0xB3819A42ABE61C87),
+   U64(0x21A007933A522A20), U64(0x2DF16F761598AA4F), U64(0x763C4A1371B368FD), U64(0xF793C46702E086A0),
+   U64(0xD7288E012AEB8D31), U64(0xDE336A2A4BC1C44B), U64(0x0BF692B38D079F23), U64(0x2C604A7A177326B3),
+   U64(0x4850E73E03EB6064), U64(0xCFC447F1E53C8E1B), U64(0xB05CA3F564268D99), U64(0x9AE182C8BC9474E8),
+   U64(0xA4FC4BD4FC5558CA), U64(0xE755178D58FC4E76), U64(0x69B97DB1A4C03DFE), U64(0xF9B5B7C4ACC67C96),
+   U64(0xFC6A82D64B8655FB), U64(0x9C684CB6C4D24417), U64(0x8EC97D2917456ED0), U64(0x6703DF9D2924E97E),
+   U64(0xC547F57E42A7444E), U64(0x78E37644E7CAD29E), U64(0xFE9A44E9362F05FA), U64(0x08BD35CC38336615),
+   U64(0x9315E5EB3A129ACE), U64(0x94061B871E04DF75), U64(0xDF1D9F9D784BA010), U64(0x3BBA57B68871B59D),
+   U64(0xD2B7ADEEDED1F73F), U64(0xF7A255D83BC373F8), U64(0xD7F4F2448C0CEB81), U64(0xD95BE88CD210FFA7),
+   U64(0x336F52F8FF4728E7), U64(0xA74049DAC312AC71), U64(0xA2F61BB6E437FDB5), U64(0x4F2A5CB07F6A35B3),
+   U64(0x87D380BDA5BF7859), U64(0x16B9F7E06C453A21), U64(0x7BA2484C8A0FD54E), U64(0xF3A678CAD9A2E38C),
+   U64(0x39B0BF7DDE437BA2), U64(0xFCAF55C1BF8A4424), U64(0x18FCF680573FA594), U64(0x4C0563B89F495AC3),
+   U64(0x40E087931A00930D), U64(0x8CFFA9412EB642C1), U64(0x68CA39053261169F), U64(0x7A1EE967D27579E2),
+   U64(0x9D1D60E5076F5B6F), U64(0x3810E399B6F65BA2), U64(0x32095B6D4AB5F9B1), U64(0x35CAB62109DD038A),
+   U64(0xA90B24499FCFAFB1), U64(0x77A225A07CC2C6BD), U64(0x513E5E634C70E331), U64(0x4361C0CA3F692F12),
+   U64(0xD941ACA44B20A45B), U64(0x528F7C8602C5807B), U64(0x52AB92BEB9613989), U64(0x9D1DFA2EFC557F73),
+   U64(0x722FF175F572C348), U64(0x1D1260A51107FE97), U64(0x7A249A57EC0C9BA2), U64(0x04208FE9E8F7F2D6),
+   U64(0x5A110C6058B920A0), U64(0x0CD9A497658A5698), U64(0x56FD23C8F9715A4C), U64(0x284C847B9D887AAE),
+   U64(0x04FEABFBBDB619CB), U64(0x742E1E651C60BA83), U64(0x9A9632E65904AD3C), U64(0x881B82A13B51B9E2),
+   U64(0x506E6744CD974924), U64(0xB0183DB56FFC6A79), U64(0x0ED9B915C66ED37E), U64(0x5E11E86D5873D484),
+   U64(0xF678647E3519AC6E), U64(0x1B85D488D0F20CC5), U64(0xDAB9FE6525D89021), U64(0x0D151D86ADB73615),
+   U64(0xA865A54EDCC0F019), U64(0x93C42566AEF98FFB), U64(0x99E7AFEABE000731), U64(0x48CBFF086DDF285A),
+   U64(0x7F9B6AF1EBF78BAF), U64(0x58627E1A149BBA21), U64(0x2CD16E2ABD791E33), U64(0xD363EFF5F0977996),
+   U64(0x0CE2A38C344A6EED), U64(0x1A804AADB9CFA741), U64(0x907F30421D78C5DE), U64(0x501F65EDB3034D07),
+   U64(0x37624AE5A48FA6E9), U64(0x957BAF61700CFF4E), U64(0x3A6C27934E31188A), U64(0xD49503536ABCA345),
+   U64(0x088E049589C432E0), U64(0xF943AEE7FEBF21B8), U64(0x6C3B8E3E336139D3), U64(0x364F6FFA464EE52E),
+   U64(0xD60F6DCEDC314222), U64(0x56963B0DCA418FC0), U64(0x16F50EDF91E513AF), U64(0xEF1955914B609F93),
+   U64(0x565601C0364E3228), U64(0xECB53939887E8175), U64(0xBAC7A9A18531294B), U64(0xB344C470397BBA52),
+   U64(0x65D34954DAF3CEBD), U64(0xB4B81B3FA97511E2), U64(0xB422061193D6F6A7), U64(0x071582401C38434D),
+   U64(0x7A13F18BBEDC4FF5), U64(0xBC4097B116C524D2), U64(0x59B97885E2F2EA28), U64(0x99170A5DC3115544),
+   U64(0x6F423357E7C6A9F9), U64(0x325928EE6E6F8794), U64(0xD0E4366228B03343), U64(0x565C31F7DE89EA27),
+   U64(0x30F5611484119414), U64(0xD873DB391292ED4F), U64(0x7BD94E1D8E17DEBC), U64(0xC7D9F16864A76E94),
+   U64(0x947AE053EE56E63C), U64(0xC8C93882F9475F5F), U64(0x3A9BF55BA91F81CA), U64(0xD9A11FBB3D9808E4),
+   U64(0x0FD22063EDC29FCA), U64(0xB3F256D8ACA0B0B9), U64(0xB03031A8B4516E84), U64(0x35DD37D5871448AF),
+   U64(0xE9F6082B05542E4E), U64(0xEBFAFA33D7254B59), U64(0x9255ABB50D532280), U64(0xB9AB4CE57F2D34F3),
+   U64(0x693501D628297551), U64(0xC62C58F97DD949BF), U64(0xCD454F8F19C5126A), U64(0xBBE83F4ECC2BDECB),
+   U64(0xDC842B7E2819E230), U64(0xBA89142E007503B8), U64(0xA3BC941D0A5061CB), U64(0xE9F6760E32CD8021),
+   U64(0x09C7E552BC76492F), U64(0x852F54934DA55CC9), U64(0x8107FCCF064FCF56), U64(0x098954D51FFF6580),
+   U64(0x23B70EDB1955C4BF), U64(0xC330DE426430F69D), U64(0x4715ED43E8A45C0A), U64(0xA8D7E4DAB780A08D),
+   U64(0x0572B974F03CE0BB), U64(0xB57D2E985E1419C7), U64(0xE8D9ECBE2CF3D73F), U64(0x2FE4B17170E59750),
+   U64(0x11317BA87905E790), U64(0x7FBF21EC8A1F45EC), U64(0x1725CABFCB045B00), U64(0x964E915CD5E2B207),
+   U64(0x3E2B8BCBF016D66D), U64(0xBE7444E39328A0AC), U64(0xF85B2B4FBCDE44B7), U64(0x49353FEA39BA63B1),
+   U64(0x1DD01AAFCD53486A), U64(0x1FCA8A92FD719F85), U64(0xFC7C95D827357AFA), U64(0x18A6A990C8B35EBD),
+   U64(0xCCCB7005C6B9C28D), U64(0x3BDBB92C43B17F26), U64(0xAA70B5B4F89695A2), U64(0xE94C39A54A98307F),
+   U64(0xB7A0B174CFF6F36E), U64(0xD4DBA84729AF48AD), U64(0x2E18BC1AD9704A68), U64(0x2DE0966DAF2F8B1C),
+   U64(0xB9C11D5B1E43A07E), U64(0x64972D68DEE33360), U64(0x94628D38D0C20584), U64(0xDBC0D2B6AB90A559),
+   U64(0xD2733C4335C6A72F), U64(0x7E75D99D94A70F4D), U64(0x6CED1983376FA72B), U64(0x97FCAACBF030BC24),
+   U64(0x7B77497B32503B12), U64(0x8547EDDFB81CCB94), U64(0x79999CDFF70902CB), U64(0xCFFE1939438E9B24),
+   U64(0x829626E3892D95D7), U64(0x92FAE24291F2B3F1), U64(0x63E22C147B9C3403), U64(0xC678B6D860284A1C),
+   U64(0x5873888850659AE7), U64(0x0981DCD296A8736D), U64(0x9F65789A6509A440), U64(0x9FF38FED72E9052F),
+   U64(0xE479EE5B9930578C), U64(0xE7F28ECD2D49EECD), U64(0x56C074A581EA17FE), U64(0x5544F7D774B14AEF),
+   U64(0x7B3F0195FC6F290F), U64(0x12153635B2C0CF57), U64(0x7F5126DBBA5E0CA7), U64(0x7A76956C3EAFB413),
+   U64(0x3D5774A11D31AB39), U64(0x8A1B083821F40CB4), U64(0x7B4A38E32537DF62), U64(0x950113646D1D6E03),
+   U64(0x4DA8979A0041E8A9), U64(0x3BC36E078F7515D7), U64(0x5D0A12F27AD310D1), U64(0x7F9D1A2E1EBE1327),
+   U64(0xDA3A361B1C5157B1), U64(0xDCDD7D20903D0C25), U64(0x36833336D068F707), U64(0xCE68341F79893389),
+   U64(0xAB9090168DD05F34), U64(0x43954B3252DC25E5), U64(0xB438C2B67F98E5E9), U64(0x10DCD78E3851A492),
+   U64(0xDBC27AB5447822BF), U64(0x9B3CDB65F82CA382), U64(0xB67B7896167B4C84), U64(0xBFCED1B0048EAC50),
+   U64(0xA9119B60369FFEBD), U64(0x1FFF7AC80904BF45), U64(0xAC12FB171817EEE7), U64(0xAF08DA9177DDA93D),
+   U64(0x1B0CAB936E65C744), U64(0xB559EB1D04E5E932), U64(0xC37B45B3F8D6F2BA), U64(0xC3A9DC228CAAC9E9),
+   U64(0xF3B8B6675A6507FF), U64(0x9FC477DE4ED681DA), U64(0x67378D8ECCEF96CB), U64(0x6DD856D94D259236),
+   U64(0xA319CE15B0B4DB31), U64(0x073973751F12DD5E), U64(0x8A8E849EB32781A5), U64(0xE1925C71285279F5),
+   U64(0x74C04BF1790C0EFE), U64(0x4DDA48153C94938A), U64(0x9D266D6A1CC0542C), U64(0x7440FB816508C4FE),
+   U64(0x13328503DF48229F), U64(0xD6BF7BAEE43CAC40), U64(0x4838D65F6EF6748F), U64(0x1E152328F3318DEA),
+   U64(0x8F8419A348F296BF), U64(0x72C8834A5957B511), U64(0xD7A023A73260B45C), U64(0x94EBC8ABCFB56DAE),
+   U64(0x9FC10D0F989993E0), U64(0xDE68A2355B93CAE6), U64(0xA44CFE79AE538BBE), U64(0x9D1D84FCCE371425),
+   U64(0x51D2B1AB2DDFB636), U64(0x2FD7E4B9E72CD38C), U64(0x65CA5B96B7552210), U64(0xDD69A0D8AB3B546D),
+   U64(0x604D51B25FBF70E2), U64(0x73AA8A564FB7AC9E), U64(0x1A8C1E992B941148), U64(0xAAC40A2703D9BEA0),
+   U64(0x764DBEAE7FA4F3A6), U64(0x1E99B96E70A9BE8B), U64(0x2C5E9DEB57EF4743), U64(0x3A938FEE32D29981),
+   U64(0x26E6DB8FFDF5ADFE), U64(0x469356C504EC9F9D), U64(0xC8763C5B08D1908C), U64(0x3F6C6AF859D80055),
+   U64(0x7F7CC39420A3A545), U64(0x9BFB227EBDF4C5CE), U64(0x89039D79D6FC5C5C), U64(0x8FE88B57305E2AB6),
+   U64(0xA09E8C8C35AB96DE), U64(0xFA7E393983325753), U64(0xD6B6D0ECC617C699), U64(0xDFEA21EA9E7557E3),
+   U64(0xB67C1FA481680AF8), U64(0xCA1E3785A9E724E5), U64(0x1CFC8BED0D681639), U64(0xD18D8549D140CAEA),
+   U64(0x4ED0FE7E9DC91335), U64(0xE4DBF0634473F5D2), U64(0x1761F93A44D5AEFE), U64(0x53898E4C3910DA55),
+   U64(0x734DE8181F6EC39A), U64(0x2680B122BAA28D97), U64(0x298AF231C85BAFAB), U64(0x7983EED3740847D5),
+   U64(0x66C1A2A1A60CD889), U64(0x9E17E49642A3E4C1), U64(0xEDB454E7BADC0805), U64(0x50B704CAB602C329),
+   U64(0x4CC317FB9CDDD023), U64(0x66B4835D9EAFEA22), U64(0x219B97E26FFC81BD), U64(0x261E4E4C0A333A9D),
+   U64(0x1FE2CCA76517DB90), U64(0xD7504DFA8816EDBB), U64(0xB9571FA04DC089C8), U64(0x1DDC0325259B27DE),
+   U64(0xCF3F4688801EB9AA), U64(0xF4F5D05C10CAB243), U64(0x38B6525C21A42B0E), U64(0x36F60E2BA4FA6800),
+   U64(0xEB3593803173E0CE), U64(0x9C4CD6257C5A3603), U64(0xAF0C317D32ADAA8A), U64(0x258E5A80C7204C4B),
+   U64(0x8B889D624D44885D), U64(0xF4D14597E660F855), U64(0xD4347F66EC8941C3), U64(0xE699ED85B0DFB40D),
+   U64(0x2472F6207C2D0484), U64(0xC2A1E7B5B459AEB5), U64(0xAB4F6451CC1D45EC), U64(0x63767572AE3D6174),
+   U64(0xA59E0BD101731A28), U64(0x116D0016CB948F09), U64(0x2CF9C8CA052F6E9F), U64(0x0B090A7560A968E3),
+   U64(0xABEEDDB2DDE06FF1), U64(0x58EFC10B06A2068D), U64(0xC6E57A78FBD986E0), U64(0x2EAB8CA63CE802D7),
+   U64(0x14A195640116F336), U64(0x7C0828DD624EC390), U64(0xD74BBE77E6116AC7), U64(0x804456AF10F5FB53),
+   U64(0xEBE9EA2ADF4321C7), U64(0x03219A39EE587A30), U64(0x49787FEF17AF9924), U64(0xA1E9300CD8520548),
+   U64(0x5B45E522E4B1B4EF), U64(0xB49C3B3995091A36), U64(0xD4490AD526F14431), U64(0x12A8F216AF9418C2),
+   U64(0x001F837CC7350524), U64(0x1877B51E57A764D5), U64(0xA2853B80F17F58EE), U64(0x993E1DE72D36D310),
+   U64(0xB3598080CE64A656), U64(0x252F59CF0D9F04BB), U64(0xD23C8E176D113600), U64(0x1BDA0492E7E4586E),
+   U64(0x21E0BD5026C619BF), U64(0x3B097ADAF088F94E), U64(0x8D14DEDB30BE846E), U64(0xF95CFFA23AF5F6F4),
+   U64(0x3871700761B3F743), U64(0xCA672B91E9E4FA16), U64(0x64C8E531BFF53B55), U64(0x241260ED4AD1E87D),
+   U64(0x106C09B972D2E822), U64(0x7FBA195410E5CA30), U64(0x7884D9BC6CB569D8), U64(0x0647DFEDCD894A29),
+   U64(0x63573FF03E224774), U64(0x4FC8E9560F91B123), U64(0x1DB956E450275779), U64(0xB8D91274B9E9D4FB),
+   U64(0xA2EBEE47E2FBFCE1), U64(0xD9F1F30CCD97FB09), U64(0xEFED53D75FD64E6B), U64(0x2E6D02C36017F67F),
+   U64(0xA9AA4D20DB084E9B), U64(0xB64BE8D8B25396C1), U64(0x70CB6AF7C2D5BCF0), U64(0x98F076A4F7A2322E),
+   U64(0xBF84470805E69B5F), U64(0x94C3251F06F90CF3), U64(0x3E003E616A6591E9), U64(0xB925A6CD0421AFF3),
+   U64(0x61BDD1307C66E300), U64(0xBF8D5108E27E0D48), U64(0x240AB57A8B888B20), U64(0xFC87614BAF287E07),
+   U64(0xEF02CDD06FFDB432), U64(0xA1082C0466DF6C0A), U64(0x8215E577001332C8), U64(0xD39BB9C3A48DB6CF),
+   U64(0x2738259634305C14), U64(0x61CF4F94C97DF93D), U64(0x1B6BACA2AE4E125B), U64(0x758F450C88572E0B),
+   U64(0x959F587D507A8359), U64(0xB063E962E045F54D), U64(0x60E8ED72C0DFF5D1), U64(0x7B64978555326F9F),
+   U64(0xFD080D236DA814BA), U64(0x8C90FD9B083F4558), U64(0x106F72FE81E2C590), U64(0x7976033A39F7D952),
+   U64(0xA4EC0132764CA04B), U64(0x733EA705FAE4FA77), U64(0xB4D8F77BC3E56167), U64(0x9E21F4F903B33FD9),
+   U64(0x9D765E419FB69F6D), U64(0xD30C088BA61EA5EF), U64(0x5D94337FBFAF7F5B), U64(0x1A4E4822EB4D7A59),
+   U64(0x6FFE73E81B637FB3), U64(0xDDF957BC36D8B9CA), U64(0x64D0E29EEA8838B3), U64(0x08DD9BDFD96B9F63),
+   U64(0x087E79E5A57D1D13), U64(0xE328E230E3E2B3FB), U64(0x1C2559E30F0946BE), U64(0x720BF5F26F4D2EAA),
+   U64(0xB0774D261CC609DB), U64(0x443F64EC5A371195), U64(0x4112CF68649A260E), U64(0xD813F2FAB7F5C5CA),
+   U64(0x660D3257380841EE), U64(0x59AC2C7873F910A3), U64(0xE846963877671A17), U64(0x93B633ABFA3469F8),
+   U64(0xC0C0F5A60EF4CDCF), U64(0xCAF21ECD4377B28C), U64(0x57277707199B8175), U64(0x506C11B9D90E8B1D),
+   U64(0xD83CC2687A19255F), U64(0x4A29C6465A314CD1), U64(0xED2DF21216235097), U64(0xB5635C95FF7296E2),
+   U64(0x22AF003AB672E811), U64(0x52E762596BF68235), U64(0x9AEBA33AC6ECC6B0), U64(0x944F6DE09134DFB6),
+   U64(0x6C47BEC883A7DE39), U64(0x6AD047C430A12104), U64(0xA5B1CFDBA0AB4067), U64(0x7C45D833AFF07862),
+   U64(0x5092EF950A16DA0B), U64(0x9338E69C052B8E7B), U64(0x455A4B4CFE30E3F5), U64(0x6B02E63195AD0CF8),
+   U64(0x6B17B224BAD6BF27), U64(0xD1E0CCD25BB9C169), U64(0xDE0C89A556B9AE70), U64(0x50065E535A213CF6),
+   U64(0x9C1169FA2777B874), U64(0x78EDEFD694AF1EED), U64(0x6DC93D9526A50E68), U64(0xEE97F453F06791ED),
+   U64(0x32AB0EDB696703D3), U64(0x3A6853C7E70757A7), U64(0x31865CED6120F37D), U64(0x67FEF95D92607890),
+   U64(0x1F2B1D1F15F6DC9C), U64(0xB69E38A8965C6B65), U64(0xAA9119FF184CCCF4), U64(0xF43C732873F24C13),
+   U64(0xFB4A3D794A9A80D2), U64(0x3550C2321FD6109C), U64(0x371F77E76BB8417E), U64(0x6BFA9AAE5EC05779),
+   U64(0xCD04F3FF001A4778), U64(0xE3273522064480CA), U64(0x9F91508BFFCFC14A), U64(0x049A7F41061A9E60),
+   U64(0xFCB6BE43A9F2FE9B), U64(0x08DE8A1C7797DA9B), U64(0x8F9887E6078735A1), U64(0xB5B4071DBFC73A66),
+   U64(0x230E343DFBA08D33), U64(0x43ED7F5A0FAE657D), U64(0x3A88A0FBBCB05C63), U64(0x21874B8B4D2DBC4F),
+   U64(0x1BDEA12E35F6A8C9), U64(0x53C065C6C8E63528), U64(0xE34A1D250E7A8D6B), U64(0xD6B04D3B7651DD7E),
+   U64(0x5E90277E7CB39E2D), U64(0x2C046F22062DC67D), U64(0xB10BB459132D0A26), U64(0x3FA9DDFB67E2F199),
+   U64(0x0E09B88E1914F7AF), U64(0x10E8B35AF3EEAB37), U64(0x9EEDECA8E272B933), U64(0xD4C718BC4AE8AE5F),
+   U64(0x81536D601170FC20), U64(0x91B534F885818A06), U64(0xEC8177F83F900978), U64(0x190E714FADA5156E),
+   U64(0xB592BF39B0364963), U64(0x89C350C893AE7DC1), U64(0xAC042E70F8B383F2), U64(0xB49B52E587A1EE60),
+   U64(0xFB152FE3FF26DA89), U64(0x3E666E6F69AE2C15), U64(0x3B544EBE544C19F9), U64(0xE805A1E290CF2456),
+   U64(0x24B33C9D7ED25117), U64(0xE74733427B72F0C1), U64(0x0A804D18B7097475), U64(0x57E3306D881EDB4F),
+   U64(0x4AE7D6A36EB5DBCB), U64(0x2D8D5432157064C8), U64(0xD1E649DE1E7F268B), U64(0x8A328A1CEDFE552C),
+   U64(0x07A3AEC79624C7DA), U64(0x84547DDC3E203C94), U64(0x990A98FD5071D263), U64(0x1A4FF12616EEFC89),
+   U64(0xF6F7FD1431714200), U64(0x30C05B1BA332F41C), U64(0x8D2636B81555A786), U64(0x46C9FEB55D120902),
+   U64(0xCCEC0A73B49C9921), U64(0x4E9D2827355FC492), U64(0x19EBB029435DCB0F), U64(0x4659D2B743848A2C),
+   U64(0x963EF2C96B33BE31), U64(0x74F85198B05A2E7D), U64(0x5A0F544DD2B1FB18), U64(0x03727073C2E134B1),
+   U64(0xC7F6AA2DE59AEA61), U64(0x352787BAA0D7C22F), U64(0x9853EAB63B5E0B35), U64(0xABBDCDD7ED5C0860),
+   U64(0xCF05DAF5AC8D77B0), U64(0x49CAD48CEBF4A71E), U64(0x7A4C10EC2158C4A6), U64(0xD9E92AA246BF719E),
+   U64(0x13AE978D09FE5557), U64(0x730499AF921549FF), U64(0x4E4B705B92903BA4), U64(0xFF577222C14F0A3A),
+   U64(0x55B6344CF97AAFAE), U64(0xB862225B055B6960), U64(0xCAC09AFBDDD2CDB4), U64(0xDAF8E9829FE96B5F),
+   U64(0xB5FDFC5D3132C498), U64(0x310CB380DB6F7503), U64(0xE87FBB46217A360E), U64(0x2102AE466EBB1148),
+   U64(0xF8549E1A3AA5E00D), U64(0x07A69AFDCC42261A), U64(0xC4C118BFE78FEAAE), U64(0xF9F4892ED96BD438),
+   U64(0x1AF3DBE25D8F45DA), U64(0xF5B4B0B0D2DEEEB4), U64(0x962ACEEFA82E1C84), U64(0x046E3ECAAF453CE9),
+   U64(0xF05D129681949A4C), U64(0x964781CE734B3C84), U64(0x9C2ED44081CE5FBD), U64(0x522E23F3925E319E),
+   U64(0x177E00F9FC32F791), U64(0x2BC60A63A6F3B3F2), U64(0x222BBFAE61725606), U64(0x486289DDCC3D6780),
+   U64(0x7DC7785B8EFDFC80), U64(0x8AF38731C02BA980), U64(0x1FAB64EA29A2DDF7), U64(0xE4D9429322CD065A),
+   U64(0x9DA058C67844F20C), U64(0x24C0E332B70019B0), U64(0x233003B5A6CFE6AD), U64(0xD586BD01C5C217F6),
+   U64(0x5E5637885F29BC2B), U64(0x7EBA726D8C94094B), U64(0x0A56A5F0BFE39272), U64(0xD79476A84EE20D06),
+   U64(0x9E4C1269BAA4BF37), U64(0x17EFEE45B0DEE640), U64(0x1D95B0A5FCF90BC6), U64(0x93CBE0B699C2585D),
+   U64(0x65FA4F227A2B6D79), U64(0xD5F9E858292504D5), U64(0xC2B5A03F71471A6F), U64(0x59300222B4561E00),
+   U64(0xCE2F8642CA0712DC), U64(0x7CA9723FBB2E8988), U64(0x2785338347F2BA08), U64(0xC61BB3A141E50E8C),
+   U64(0x150F361DAB9DEC26), U64(0x9F6A419D382595F4), U64(0x64A53DC924FE7AC9), U64(0x142DE49FFF7A7C3D),
+   U64(0x0C335248857FA9E7), U64(0x0A9C32D5EAE45305), U64(0xE6C42178C4BBB92E), U64(0x71F1CE2490D20B07),
+   U64(0xF1BCC3D275AFE51A), U64(0xE728E8C83C334074), U64(0x96FBF83A12884624), U64(0x81A1549FD6573DA5),
+   U64(0x5FA7867CAF35E149), U64(0x56986E2EF3ED091B), U64(0x917F1DD5F8886C61), U64(0xD20D8C88C8FFE65F),
+   U64(0x31D71DCE64B2C310), U64(0xF165B587DF898190), U64(0xA57E6339DD2CF3A0), U64(0x1EF6E6DBB1961EC9),
+   U64(0x70CC73D90BC26E24), U64(0xE21A6B35DF0C3AD7), U64(0x003A93D8B2806962), U64(0x1C99DED33CB890A1),
+   U64(0xCF3145DE0ADD4289), U64(0xD0E4427A5514FB72), U64(0x77C621CC9FB3A483), U64(0x67A34DAC4356550B),
+   U64(0xF8D626AAAF278509),
+};
+
+uint64 *RandomPiece     =Random64;
+uint64 *RandomCastle    =Random64+768;
+uint64 *RandomEnPassant =Random64+772;
+uint64 *RandomTurn      =Random64+780;
+
+
+uint64 hash(int moveNr)
+{
+    int r, f, p_enc, squareNr, pieceGroup;
+    uint64 key=0, Zobrist;
+
+    for(f=BOARD_LEFT; f<BOARD_RGHT; f++){
+        for(r=0; r<BOARD_HEIGHT;r++){
+            ChessSquare p = boards[moveNr][r][f];
+            if(p != EmptySquare){
+		    int j = (int)p;
+		    j -= (j >= (int)BlackPawn) ? (int)BlackPawn :(int)WhitePawn;
+		    if(j > (int)WhiteQueen) j++;  // make space for King
+		    if(j > (int) WhiteKing) j = (int)WhiteQueen + 1;
+		    p_enc = 2*j + ((int)p < (int)BlackPawn);
+		    squareNr = (BOARD_RGHT - BOARD_LEFT)*r + (f - BOARD_LEFT);
+		    // note that in normal Chess squareNr < 64 and p_enc < 12. The following code
+		    // maps other pieces and squares in this range, and then modify the corresponding
+		    // Zobrist random by rotating its bitpattern according to what the piece really was.
+		    pieceGroup = p_enc / 12;
+		    p_enc      = p_enc % 12;
+		    Zobrist = RandomPiece[64*p_enc + (squareNr & 63)];
+		    switch(pieceGroup) {
+			case 1: // pieces 5-10 (FEACWM)
+				Zobrist = (Zobrist << 16) ^ (Zobrist >> 48);
+				break;
+			case 2: // pieces 11-16 (OHIJGD)
+				Zobrist = (Zobrist << 32) ^ (Zobrist >> 32);
+				break;
+			case 3: // pieces 17-20 (VLSU)
+				Zobrist = (Zobrist << 48) ^ (Zobrist >> 16);
+				break;
+		    }
+		    if(squareNr >= 64) Zobrist = (Zobrist << 8) ^ (Zobrist >> 56);
+                key ^= Zobrist;
+            }
+        }
+    }
+    // Holdings not implemented yet!
+
+    if(castlingRights[moveNr][2] >= 0) {
+	if(castlingRights[moveNr][0] >= 0) key^=RandomCastle[0];
+	if(castlingRights[moveNr][1] >= 0) key^=RandomCastle[1];
+    }
+    if(castlingRights[moveNr][5] >= 0) {
+	if(castlingRights[moveNr][3] >= 0) key^=RandomCastle[2];
+	if(castlingRights[moveNr][4] >= 0) key^=RandomCastle[3];
+    }
+
+    f = epStatus[moveNr];
+    if(f >= 0 && f < 8){
+        if(!WhiteOnMove(moveNr)){
+	    // the test for neighboring Pawns might not be needed, 
+	    // as epStatus already kept track of it, but better safe than sorry.
+            if((f>0 && boards[moveNr][3][f-1]==BlackPawn)||
+               (f<7 && boards[moveNr][3][f+1]==BlackPawn)){
+                key^=RandomEnPassant[f];
+            }
+        }else{
+            if((f>0 && boards[moveNr][4][f-1]==WhitePawn)||
+               (f<7 && boards[moveNr][4][f+1]==WhitePawn)){
+                key^=RandomEnPassant[f];
+            }
+        }
+    }
+
+    if(WhiteOnMove(moveNr)){
+        key^=RandomTurn[0];
+    }
+    return key;
+}
+
+#define MOVE_BUF 100
+
+int int_from_file(FILE *f, int l, uint64 *r)
+{
+    int i,c;
+    for(i=0;i<l;i++){
+        c=fgetc(f);
+        if(c==EOF){
+            return 1;
+        }
+        (*r)=((*r)<<8)+c;
+    }
+    return 0;
+}
+
+int entry_from_file(FILE *f, entry_t *entry)
+{
+    int ret;
+    uint64 r;
+    ret=int_from_file(f,8,&r);
+    if(ret) return 1;
+    entry->key=r;
+    ret=int_from_file(f,2,&r);
+    if(ret) return 1;
+    entry->move=r;
+    ret=int_from_file(f,2,&r);
+    if(ret) return 1;
+    entry->weight=r;
+    ret=int_from_file(f,4,&r);
+    if(ret) return 1;
+    entry->learn=r;
+    return 0;
+}
+
+int find_key(FILE *f, uint64 key, entry_t *entry)
+{
+    int first, last, middle;
+    entry_t first_entry=entry_none, last_entry,middle_entry;
+    first=-1;
+    if(fseek(f,-16,SEEK_END)){
+        *entry=entry_none;
+        entry->key=key+1; //hack
+        return -1;
+    }
+    last=ftell(f)/16;
+    entry_from_file(f,&last_entry);
+    while(1){
+        if(last-first==1){
+            *entry=last_entry;
+            return last;
+        }
+        middle=(first+last)/2;
+        fseek(f,16*middle,SEEK_SET);
+        entry_from_file(f,&middle_entry);
+        if(key<=middle_entry.key){
+            last=middle;
+            last_entry=middle_entry;
+        }else{
+            first=middle;
+            first_entry=middle_entry;
+        }
+    }
+}
+
+void move_to_string(char move_s[6], uint16 move)
+{
+    int f,fr,ff,t,tr,tf,p;
+    int width = BOARD_RGHT - BOARD_LEFT, size; // allow for alternative board formats
+
+    size = width * BOARD_HEIGHT;
+    f  = move / size;
+    fr = f / width;
+    ff = f % width;
+    t  = move % size;
+    tr = t / width;
+    tf = t % width;
+    p = move / (size*size);
+    move_s[0] = ff + 'a';
+    move_s[1] = fr + '1' - (BOARD_HEIGHT > 9);
+    move_s[2] = tf + 'a';
+    move_s[3] = tr + '1' - (BOARD_HEIGHT > 9);
+
+    // kludge: encode drops as special promotion code
+    if(gameInfo.holdingsSize && p == 8) {
+	move_s[0] = f + '@'; // from square encodes piece type
+	move_s[1] = '@';     // drop symbol
+	p = 0;
+    }
+
+    // add promotion piece, if any
+    if(p){
+        move_s[4] = promote_pieces[p];
+        move_s[5] = '\0';
+    }else{
+        move_s[4] = '\0';
+    }
+
+    if(gameInfo.variant != VariantNormal) return;
+
+    // correct FRC-style castlings in variant normal. 
+    // [HGM] This is buggy code! e1h1 could very well be a normal R or Q move.
+    if(!strcmp(move_s,"e1h1")){
+        strcpy(move_s,"e1g1");
+    }else  if(!strcmp(move_s,"e1a1")){
+        strcpy(move_s,"e1c1");
+    }else  if(!strcmp(move_s,"e8h8")){
+        strcpy(move_s,"e8g8");
+    }else  if(!strcmp(move_s,"e8a8")){
+        strcpy(move_s,"e8c8");
+    }
+}
+
+char *ProbeBook(int moveNr, char *book)
+{
+    FILE *f;
+    entry_t entry;
+    int offset;
+    uint64 key;
+    entry_t entries[MOVE_BUF];
+    int count=0;
+    int ret, i, j;
+    static char move_s[6];
+    int total_weight;
+
+    if(book == NULL) return NULL; 
+//    if(gameInfo.variant != VariantNormal) return NULL; // Zobrist scheme only works for normal Chess, so far
+    f=fopen(book,"rb");
+    if(!f){
+        DisplayError("Polyglot book not valid", 0);
+	appData.usePolyglotBook = FALSE;
+        return NULL;
+    }
+
+    key = hash(moveNr);
+    if(appData.debugMode) fprintf(debugFP, "book key = %08x%08x\n", (unsigned int)(key>>32), (unsigned int)key);
+
+    offset=find_key(f, key, &entry);
+    if(entry.key != key) return NULL;
+    entries[0] = entry;
+    count=1;
+    fseek(f, 16*(offset+1), SEEK_SET);
+    while(1){
+        ret=entry_from_file(f, &entry);
+        if(ret){
+            break;
+        }
+        if(entry.key != key){
+            break;
+        }
+        if(count == MOVE_BUF) break;
+        entries[count++] = entry;
+    }
+    total_weight = 0;
+    for(i=0; i<count; i++){
+        total_weight += entries[i].weight;
+    }
+    j = (random() & 0x7FFF) * total_weight >> 15; // create random < total_weight
+    total_weight = 0;
+    for(i=0; i<count; i++){
+        total_weight += entries[i].weight;
+	if(total_weight > j) break;
+    }
+    if(i >= count) DisplayFatalError("Book Fault", 0, 1); // safety catch, cannot happen
+    move_to_string(move_s, entries[i].move);
+    if(appData.debugMode) fprintf(debugFP, "book move field = %d\n", entries[i].move);
+
+    return move_s;
+}
diff --git a/childio.c b/childio.c
index 7fd3d14..0ea90ec 100644
--- a/childio.c
+++ b/childio.c
@@ -2,8 +2,10 @@
  * childio.c -- set up communication with child processes $Id:
  * childio.c,v 1.2 1994/11/12 19:31:41 mann Exp mann $
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
@@ -27,25 +29,25 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
  *
- * See the file ChangeLog for a revision history.  */
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 /* This file splits into two entirely different pieces of code
    depending on whether USE_PTYS is 1.  The whole reason for all
diff --git a/childio.h b/childio.h
index 3406dff..4b47da3 100644
--- a/childio.h
+++ b/childio.h
@@ -2,8 +2,10 @@
  * childio.h -- set up communication with child processes
  * $Id: childio.h,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
@@ -27,25 +29,24 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
  *
- * See the file ChangeLog for a revision history.
- */
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 void SetUpChildIO P((int to_prog[2], int from_prog[2]));
diff --git a/cmail.in b/cmail.in
index 158ef15..39afffa 100644
--- a/cmail.in
+++ b/cmail.in
@@ -2,21 +2,20 @@
 ## (configure will change the top line to the location of perl on your system)
 #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
 ## cmail $Revision: 2.1 $: a tool to aid playing chess by email
-## Copyright (C) 1993  Free Software Foundation, Inc.
-##
-## cmail 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.
-##
-## cmail 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 cmail; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+## Copyright (C) 1993,2009  Free Software Foundation, Inc.
+## 
+##  cmail is free software: you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation, either version 3 of the License, or (at
+##  your option) any later version.
+## 
+##  cmail is distributed in the hope that it will be useful, but
+##  WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+##  General Public License for more details.
+## 
+##  You should have received a copy of the GNU General Public License
+##  along with this program. If not, see http://www.gnu.org/licenses/.  *
 ##
 ## Modified:  $Date: 2003/10/27 19:21:00 $
 ## Revision:  $Revision: 2.1 $
diff --git a/common.h b/common.h
index 556e542..fc3da45 100644
--- a/common.h
+++ b/common.h
@@ -2,8 +2,10 @@
  * common.h -- Common definitions for X and Windows NT versions of XBoard
  * $Id: common.h,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
@@ -27,28 +29,30 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #ifndef _COMMON
 #define _COMMON
 
+
 /* Begin compatibility grunge  */
 
 #if defined(__STDC__) || defined(WIN32) || defined(_amigados)
@@ -85,6 +89,8 @@ int pclose(FILE *);
 #define FALSE 0
 #endif
 
+#define UNKNOWN -1 /* [HGM] nps */
+
 #if !HAVE_RANDOM
 # if HAVE_RAND48
 #  define srandom srand48
@@ -99,7 +105,31 @@ int pclose(FILE *);
 
 #define PROTOVER                2       /* engine protocol version */
 
-#define BOARD_SIZE		8
+// [HGM] license: Messages that engines must print to satisfy their license requirements for patented variants
+#define GOTHIC "Gothic Chess (see www.GothicChess.com) is licensed under U.S. Patent #6,481,716 by Ed Trice"
+#define NOFALCON "Falcon Chess (see www.chessvariants.com) is licensed under U.S. Patent #5,690,334 by George W. Duke"
+
+/* [HGM] Some notes about board sizes:
+   In games that allow piece drops, the holdings are considered part of the
+   board, in the leftmost and rightmost two files. This way they are
+   automatically part of the game-history states, and enjoy all display
+   functions (including drag-drop and click-click moves to the regular part
+   of the board). The drawback of this is that the internal numbering of
+   files starts at 2 for the a-file if holdings are displayed. To ensure
+   consistency, this shifted numbering system is used _everywhere_ in the
+   code, and conversion to the 'normal' system only takes place when the
+   file number is converted to or from ASCII (by redefining the character
+   constant 'a'). This works because Winboard only communicates with the
+   outside world in ASCII. In a similar way, the different rank numbering
+   systems (starting at rank 0 or 1) are implemented by redefining '1'.
+*/
+#define BOARD_SIZE              16            /* [HGM] for in declarations */
+#define BOARD_HEIGHT (gameInfo.boardHeight)   // [HGM] made user adjustable 
+#define BOARD_WIDTH  (gameInfo.boardWidth + 2*gameInfo.holdingsWidth)   
+#define BOARD_LEFT   (gameInfo.holdingsWidth) // [HGM] play-board edges     
+#define BOARD_RGHT   (gameInfo.boardWidth + gameInfo.holdingsWidth)
+#define ONE          ('1'-(BOARD_HEIGHT>9))   // [HGM] foremost board rank  
+#define AAA          ('a'-BOARD_LEFT)         // [HGM] leftmost board file  
 #define DROP_RANK               -3
 #define MAX_MOVES		1000
 #define MSG_SIZ			512
@@ -151,7 +181,7 @@ int pclose(FILE *);
 #define ZIPPY_GAME_START ""
 #define ZIPPY_ADJOURN FALSE
 #define ZIPPY_ABORT FALSE
-#define ZIPPY_VARIANTS "normal"
+#define ZIPPY_VARIANTS "normal,fischerandom,crazyhouse,losers,suicide,3checks,twokings,bughouse,shatranj"
 #define ZIPPY_MAX_GAMES 0
 #define ZIPPY_REPLAY_TIMEOUT 120
 
@@ -164,12 +194,29 @@ typedef enum {
   } GameMode;
 
 typedef enum {
-    WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen, WhiteKing,
-    BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen, BlackKing,
+    /* [HGM] the order here is crucial for Crazyhouse & Shogi: */
+    /* only the first N pieces can go into the holdings, and   */
+    /* promotions in those variants shift P-W to U-S           */
+    WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen, 
+    WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan, 
+    WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,
+    WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing,
+    BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,
+    BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan, 
+    BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
+    BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,
     EmptySquare, 
-    ClearBoard, WhitePlay, BlackPlay /*for use on EditPosition menus*/
+    ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/
   } ChessSquare;
 
+/* [HGM] some macros that can be used as prefixes to convert piece types */
+#define WHITE_TO_BLACK (int)BlackPawn - (int)WhitePawn + (int)
+#define BLACK_TO_WHITE (int)WhitePawn - (int)BlackPawn + (int)
+#define PROMOTED       (int)WhiteDragon - (int)WhiteRook + (int)
+#define DEMOTED        (int)WhiteRook - (int)WhiteDragon + (int)
+#define SHOGI          (int)EmptySquare + (int)
+
+
 typedef ChessSquare Board[BOARD_SIZE][BOARD_SIZE];
 
 typedef enum {
@@ -181,8 +228,10 @@ typedef enum {
     BlackHSideCastleFR, BlackASideCastleFR, 
     WhitePromotionKnight, WhitePromotionBishop,
     WhitePromotionRook, WhitePromotionQueen, WhitePromotionKing,
+    WhitePromotionChancellor, WhitePromotionArchbishop, WhitePromotionCentaur,
     BlackPromotionKnight, BlackPromotionBishop,
     BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing,
+    BlackPromotionChancellor, BlackPromotionArchbishop, BlackPromotionCentaur,
     WhiteCapturesEnPassant, BlackCapturesEnPassant,
     WhiteDrop, BlackDrop, 
     NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,
@@ -227,6 +276,21 @@ typedef enum {
     Variant34,           /* Temporary name for possible future ICC wild 34 */
     Variant35,           /* Temporary name for possible future ICC wild 35 */
     Variant36,           /* Temporary name for possible future ICC wild 36 */
+    VariantShogi,        /* [HGM] added variants */
+    VariantXiangqi,
+    VariantCourier,
+    VariantGothic,
+    VariantCapablanca,
+    VariantKnightmate,
+    VariantFairy,        
+    VariantCylinder,
+    VariantFalcon,
+    VariantCapaRandom,
+    VariantBerolina,
+    VariantJanus,
+    VariantSuper,
+    VariantGreat,
+    VariantTwilight,
     VariantUnknown       /* Catchall for other unknown variants */
 } VariantClass;
 
@@ -254,6 +318,21 @@ typedef enum {
   "wild34", \
   "wild35", \
   "wild36", \
+  "shogi", \
+  "xiangqi", \
+  "courier", \
+  "gothic", \
+  "capablanca", \
+  "knightmate", \
+  "fairy", \
+  "cylinder", \
+  "falcon",\
+  "caparandom",\
+  "berolina",\
+  "janus",\
+  "super",\
+  "great",\
+  "twilight",\
   "unknown" \
 }
 
@@ -407,6 +486,69 @@ typedef struct {
     int firstProtocolVersion;
     int secondProtocolVersion;
     Boolean showButtonBar;
+    Boolean icsEngineAnalyze; 
+
+    /* [AS] New properties (down to the "ZIPPY" part) */
+    Boolean firstScoreIsAbsolute;  /* If true, engine score is always from white side */
+    Boolean secondScoreIsAbsolute; /* If true, engine score is always from white side */
+    Boolean saveExtendedInfoInPGN; /* If true, saved PGN games contain extended info */
+    Boolean hideThinkingFromHuman; /* If true, program thinking is generated but not displayed in human/computer matches */
+    char * liteBackTextureFile; /* Name of texture bitmap for lite squares */
+    char * darkBackTextureFile; /* Name of texture bitmap for dark squares */
+    int liteBackTextureMode;
+    int darkBackTextureMode;
+    char * renderPiecesWithFont; /* Name of font for rendering chess pieces */
+    char * fontToPieceTable; /* Map to translate font character to chess pieces */
+    int fontBackColorWhite;
+    int fontForeColorWhite;
+    int fontBackColorBlack;
+    int fontForeColorBlack;
+    int fontPieceSize; /* Size of font relative to square (percentage) */
+    int overrideLineGap; /* If >= 0 overrides the lineGap value of the board size properties */
+    int adjudicateLossThreshold; /* Adjudicate a two-machine game if both engines agree the score is below this for 6 plies */
+    int delayBeforeQuit;
+    int delayAfterQuit;
+    char * nameOfDebugFile;
+    char * pgnEventHeader;
+    int defaultFrcPosition;
+    char * gameListTags;
+    Boolean saveOutOfBookInfo;
+    Boolean showEvalInMoveHistory;
+    int evalHistColorWhite;
+    int evalHistColorBlack;
+    Boolean highlightMoveWithArrow;
+    int highlightArrowColor;
+    Boolean useStickyWindows;
+    int adjudicateDrawMoves;
+    Boolean autoDisplayComment;
+    Boolean autoDisplayTags;
+    Boolean firstIsUCI;
+    Boolean secondIsUCI;
+    Boolean firstHasOwnBookUCI;
+    Boolean secondHasOwnBookUCI;
+    char * polyglotDir;
+    Boolean usePolyglotBook;
+    char * polyglotBook;
+    int defaultHashSize;
+    int defaultCacheSizeEGTB;
+    char * defaultPathEGTB;
+
+    /* [HGM] Board size */
+    int NrFiles;
+    int NrRanks;
+    int holdingsSize;
+    int matchPause;
+    char * pieceToCharTable;
+    Boolean allWhite;
+    Boolean upsideDown;
+    Boolean alphaRank;
+    Boolean testClaims;
+    Boolean checkMates;
+    Boolean materialDraws;
+    Boolean trivialDraws;
+    int ruleMoves;
+    int drawRepeats;
+
 #if ZIPPY
     char *zippyLines;
     char *zippyPinhead;
@@ -425,8 +567,54 @@ typedef struct {
     int zippyMaxGames;
     int zippyReplayTimeout; /*seconds*/
 #endif
+
+    char *serverMovesName;
+    Boolean suppressLoadMoves;
+    int serverPause;
+    int firstTimeOdds;
+    int secondTimeOdds;
+    int timeOddsMode;
+    int firstAccumulateTC;
+    int secondAccumulateTC;
+    int firstNPS;
+    int secondNPS;
+    Boolean autoKibitz;
+    int engineComments;
+    char *userName;
+    int rewindIndex;    /* [HGM] autoinc   */
+    int sameColorGames; /* [HGM] alternate */
+    int smpCores;       /* [HGM] SMP       */
+    char *egtFormats;
+    int niceEngines;    /* [HGM] nice      */
+    char *firstLogo;    /* [HGM] logo      */
+    char *secondLogo;
+    Boolean autoLogo;
+    Boolean noGUI;      /* [HGM] fast: suppress all display updates */
+    char *firstOptions; /* [HGM] options   */
+    char *secondOptions;
+    char *fenOverride1;
+    char *fenOverride2;
 } AppData, *AppDataPtr;
 
+/* [AS] PGN tags (for showing in the game list) */
+#define GLT_EVENT           'e'
+#define GLT_SITE            's'
+#define GLT_DATE            'd'
+#define GLT_ROUND           'o'
+#define GLT_PLAYERS         'p'     /* I.e. white "-" black */
+#define GLT_RESULT          'r'
+#define GLT_WHITE_ELO       'w'
+#define GLT_BLACK_ELO       'b'
+#define GLT_TIME_CONTROL    't'
+#define GLT_VARIANT         'v'
+#define GLT_OUT_OF_BOOK     'a'
+
+#define GLT_DEFAULT_TAGS    "eprd"  /* Event, players, result, date */
+
+#define GLT_ALL_TAGS        "esdoprwbtva"
+
+#define PGN_OUT_OF_BOOK     "Annotator"
+
 extern AppData appData;
 
 typedef struct {
@@ -446,7 +634,14 @@ typedef struct {
     int whiteRating;    /* -1 if unknown */
     int blackRating;    /* -1 if unknown */
     VariantClass variant;
+    char *outOfBook;    /* [AS] Move and score when engine went out of book */
+    int boardWidth;     /* [HGM] adjustable board size */
+    int boardHeight;
+/* [HGM] For Shogi and Crazyhouse: */
+    int holdingsSize;  /* number of different piece types in holdings       */
+    int holdingsWidth; /* number of files left and right of board, 0 or 2   */
 } GameInfo;
 
 
 #endif
+
diff --git a/config.guess b/config.guess
old mode 100755
new mode 100644
diff --git a/config.h.in b/config.h.in
deleted file mode 100644
index 5f518f1..0000000
--- a/config.h.in
+++ /dev/null
@@ -1,135 +0,0 @@
-/* config.h.in.  Generated automatically from configure.in by autoheader.  */
-
-/* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */
-#undef HAVE_SYS_WAIT_H
-
-/* Define if you need to in order for stat and other things to work.  */
-#undef _POSIX_SOURCE
-
-/* Define as the return type of signal handlers (int or void).  */
-#undef RETSIGTYPE
-
-/* Define if you have the ANSI C header files.  */
-#undef STDC_HEADERS
-
-/* Define if you can safely include both <sys/time.h> and <time.h>.  */
-#undef TIME_WITH_SYS_TIME
-
-/* Define if the X Window System is missing or not being used.  */
-#undef X_DISPLAY_MISSING
-
-/* Define if lex declares yytext as a char * by default, not a char[].  */
-#undef YYTEXT_POINTER
-
-#define FIRST_PTY_LETTER 'p'
-
-#undef IBMRTAIX
-
-#define LAST_PTY_LETTER 'q'
-
-#define PATCHLEVEL "0"
-
-#define PRODUCT "xboard"
-
-#undef PTY_ITERATION
-
-#undef PTY_NAME_SPRINTF
-
-#undef PTY_TTY_NAME_SPRINTF
-
-#define REMOTE_SHELL "rsh"
-
-#undef RTU
-
-#undef UNIPLUS
-
-#define USE_PTYS 0
-
-#define VERSION "x.y"
-
-#undef X_WCHAR
-
-#undef ZIPPY
-
-#undef ATTENTION 
-
-#undef DEFINED_SYS_ERRLIST
-
-#undef HAVE_LIBXPM
-
-#undef USE_XAW3D
-
-/* Define if you have the _getpty function.  */
-#undef HAVE__GETPTY
-
-/* Define if you have the ftime function.  */
-#undef HAVE_FTIME
-
-/* Define if you have the gethostname function.  */
-#undef HAVE_GETHOSTNAME
-
-/* Define if you have the gettimeofday function.  */
-#undef HAVE_GETTIMEOFDAY
-
-/* Define if you have the grantpt function.  */
-#undef HAVE_GRANTPT
-
-/* Define if you have the rand48 function.  */
-#undef HAVE_RAND48
-
-/* Define if you have the random function.  */
-#undef HAVE_RANDOM
-
-/* Define if you have the sysinfo function.  */
-#undef HAVE_SYSINFO
-
-/* Define if you have the usleep function.  */
-#undef HAVE_USLEEP
-
-/* Define if you have the <X11/xpm.h> header file.  */
-#undef HAVE_X11_XPM_H
-
-/* Define if you have the <dirent.h> header file.  */
-#undef HAVE_DIRENT_H
-
-/* Define if you have the <fcntl.h> header file.  */
-#undef HAVE_FCNTL_H
-
-/* Define if you have the <lan/socket.h> header file.  */
-#undef HAVE_LAN_SOCKET_H
-
-/* Define if you have the <ndir.h> header file.  */
-#undef HAVE_NDIR_H
-
-/* Define if you have the <string.h> header file.  */
-#undef HAVE_STRING_H
-
-/* Define if you have the <stropts.h> header file.  */
-#undef HAVE_STROPTS_H
-
-/* Define if you have the <sys/dir.h> header file.  */
-#undef HAVE_SYS_DIR_H
-
-/* Define if you have the <sys/fcntl.h> header file.  */
-#undef HAVE_SYS_FCNTL_H
-
-/* Define if you have the <sys/ndir.h> header file.  */
-#undef HAVE_SYS_NDIR_H
-
-/* Define if you have the <sys/socket.h> header file.  */
-#undef HAVE_SYS_SOCKET_H
-
-/* Define if you have the <sys/systeminfo.h> header file.  */
-#undef HAVE_SYS_SYSTEMINFO_H
-
-/* Define if you have the <sys/time.h> header file.  */
-#undef HAVE_SYS_TIME_H
-
-/* Define if you have the <unistd.h> header file.  */
-#undef HAVE_UNISTD_H
-
-/* Define if you have the i library (-li).  */
-#undef HAVE_LIBI
-
-/* Define if you have the seq library (-lseq).  */
-#undef HAVE_LIBSEQ
diff --git a/config.rpath b/config.rpath
new file mode 100755
index 0000000..fa24bfc
--- /dev/null
+++ b/config.rpath
@@ -0,0 +1,548 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+#   Copyright 1996-2003 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+#   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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#   As a special exception to the GNU General Public License, if you
+#   distribute this file as part of a program that contains a
+#   configuration script generated by Autoconf, you may include it under
+#   the same distribution terms that you use for the rest of that program.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+#   than 256 bytes, otherwise the compiler driver will dump core. The only
+#   known workaround is to choose shorter directory names for the build
+#   directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix*)
+      wl='-Wl,'
+      ;;
+    mingw* | pw32* | os2*)
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6* | nonstopux*)
+      wl='-Wl,'
+      ;;
+    newsos6)
+      ;;
+    linux*)
+      case $CC in
+        icc|ecc)
+          wl='-Wl,'
+          ;;
+        ccc)
+          wl='-Wl,'
+          ;;
+      esac
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    sco3.2v5*)
+      ;;
+    solaris*)
+      wl='-Wl,'
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      wl='-Wl,'
+      ;;
+    sysv4*MP*)
+      ;;
+    uts4*)
+      ;;
+  esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  case "$host_os" in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+        ld_shlibs=no
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can use
+      # them.
+      ld_shlibs=no
+      ;;
+    beos*)
+      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    cygwin* | mingw* | pw32*)
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    netbsd*)
+      ;;
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = yes; then
+    # Unlike libtool, we use -rpath here, not --rpath, since the documented
+    # option of GNU ld is called -rpath, not --rpath.
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  fi
+else
+  case "$host_os" in
+    aix3*)
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes; then
+        # Neither direct hardcoding nor static linking is supported with a
+        # broken collect2.
+        hardcode_direct=unsupported
+      fi
+      ;;
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+        # On IA64, the linker does run time linking by default, so we don't
+        # have to do anything special.
+        aix_use_runtimelinking=no
+      else
+        aix_use_runtimelinking=no
+        # Test if we are trying to use run time linking or normal
+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+        # need to do runtime linking.
+        case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+          for ld_flag in $LDFLAGS; do
+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+              aix_use_runtimelinking=yes
+              break
+            fi
+          done
+        esac
+      fi
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      if test "$GCC" = yes; then
+        case $host_os in aix4.[012]|aix4.[012].*)
+          collect2name=`${CC} -print-prog-name=collect2`
+          if test -f "$collect2name" && \
+            strings "$collect2name" | grep resolve_lib_name >/dev/null
+          then
+            # We have reworked collect2
+            hardcode_direct=yes
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+        esac
+      fi
+      # Begin _LT_AC_SYS_LIBPATH_AIX.
+      echo 'int main () { return 0; }' > conftest.c
+      ${CC} ${LDFLAGS} conftest.c -o conftest
+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      if test -z "$aix_libpath"; then
+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      fi
+      if test -z "$aix_libpath"; then
+        aix_libpath="/usr/lib:/lib"
+      fi
+      rm -f conftest.c conftest
+      # End _LT_AC_SYS_LIBPATH_AIX.
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        fi
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+    bsdi4*)
+      ;;
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      libext=lib
+      ;;
+    darwin* | rhapsody*)
+      if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+        hardcode_direct=no
+      fi
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+    freebsd2.2*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    freebsd2*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      ;;
+    hpux10* | hpux11*)
+      if test "$with_gnu_ld" = no; then
+        case "$host_cpu" in
+          hppa*64*)
+            hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+            hardcode_libdir_separator=:
+            hardcode_direct=no
+            ;;
+          ia64*)
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_direct=no
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+          *)
+            hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+            hardcode_libdir_separator=:
+            hardcode_direct=yes
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+        esac
+      fi
+      ;;
+    irix5* | irix6* | nonstopux*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    netbsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    newsos6)
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    openbsd*)
+      hardcode_direct=yes
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      else
+        case "$host_os" in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+        esac
+      fi
+      ;;
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      ;;
+    osf3*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    osf4* | osf5*)
+      if test "$GCC" = yes; then
+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+        # Both cc and cxx compiler support -rpath directly
+        hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+    sco3.2v5*)
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      case $host_vendor in
+        sni)
+          hardcode_direct=yes # is this really true???
+          ;;
+        siemens)
+          hardcode_direct=no
+          ;;
+        motorola)
+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+          ;;
+      esac
+      ;;
+    sysv4.3*)
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4.2uw2*)
+      hardcode_direct=yes
+      hardcode_minus_L=no
+      ;;
+    sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      ;;
+    sysv5*)
+      hardcode_libdir_flag_spec=
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+libname_spec='lib$name'
+case "$host_os" in
+  aix3*)
+    ;;
+  aix4* | aix5*)
+    ;;
+  amigaos*)
+    ;;
+  beos*)
+    ;;
+  bsdi4*)
+    ;;
+  cygwin* | mingw* | pw32*)
+    shrext=.dll
+    ;;
+  darwin* | rhapsody*)
+    shrext=.dylib
+    ;;
+  dgux*)
+    ;;
+  freebsd1*)
+    ;;
+  freebsd*)
+    ;;
+  gnu*)
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case "$host_cpu" in
+      ia64*)
+        shrext=.so
+        ;;
+      hppa*64*)
+        shrext=.sl
+        ;;
+      *)
+        shrext=.sl
+        ;;
+    esac
+    ;;
+  irix5* | irix6* | nonstopux*)
+    case "$host_os" in
+      irix5* | nonstopux*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux*)
+    ;;
+  netbsd*)
+    ;;
+  newsos6)
+    ;;
+  nto-qnx)
+    ;;
+  openbsd*)
+    ;;
+  os2*)
+    libname_spec='$name'
+    shrext=.dll
+    ;;
+  osf3* | osf4* | osf5*)
+    ;;
+  sco3.2v5*)
+    ;;
+  solaris*)
+    ;;
+  sunos4*)
+    ;;
+  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+    ;;
+  sysv4*MP*)
+    ;;
+  uts4*)
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
old mode 100755
new mode 100644
diff --git a/configure b/configure
deleted file mode 100755
index cf0fa51..0000000
--- a/configure
+++ /dev/null
@@ -1,7824 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.57.
-#
-# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
-# Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_config_libobj_dir=.
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete.  It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_unique_file="xboard.c"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# if HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#if HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-#  include <stdint.h>
-# endif
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LEX LEXLIB LEX_OUTPUT_ROOT RSH NROFF NROFFFLAGS AWKPATH PERLPATH XAW_LIBS EGREP X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os PRE_XMULIB POST_XMULIB CONF_CFLAGS CONF_LDFLAGS ZIPPY_O ZIPPY_H PRODUCT VERSION PATCHLEVEL LIBOBJS LTLIBOBJS'
-ac_subst_files=''
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-ac_prev=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
-    ac_prev=
-    continue
-  fi
-
-  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_option in
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
-    datadir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    eval "enable_$ac_feature=no" ;;
-
-  -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "enable_$ac_feature='$ac_optarg'" ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "with_$ac_package='$ac_optarg'" ;;
-
-  -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
-    eval "with_$ac_package=no" ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
-    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
-    eval "$ac_envvar='$ac_optarg'"
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-              localstatedir libdir includedir oldincludedir infodir mandir
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then its parent.
-  ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$0" : 'X\(//\)[^/]' \| \
-         X"$0" : 'X\(//\)$' \| \
-         X"$0" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$0" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
-   { (exit 1); exit 1; }; }
-  else
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
-  fi
-fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
-   { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-_ACEOF
-
-  cat <<_ACEOF
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --infodir=DIR          info documentation [PREFIX/info]
-  --mandir=DIR           man documentation [PREFIX/man]
-_ACEOF
-
-  cat <<\_ACEOF
-
-X features:
-  --x-includes=DIR    X include files are in DIR
-  --x-libraries=DIR   X library files are in DIR
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-xpm            libXpm will be used if found (default)
-  --disable-xpm           libXpm will not be used
-  --enable-ptys           force use of pseudo-ttys with child processes
-  --disable-ptys          force use of pipes with child processes
-  --enable-zippy          support interfacing a chess program to ICS (default)
-  --disable-zippy         do not support interfacing a chess program to ICS
-  --enable-sigint         sending SIGINT (^C) wakes up GNU Chess (default)
-  --disable-sigint        typing a command wakes up GNU Chess
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-Xaw3d            use Xaw3d instead of Xaw
-  --with-x                use the X Window System
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
-              headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  ac_popdir=`pwd`
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d $ac_dir || continue
-    ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
-# absolute.
-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
-
-    cd $ac_dir
-    # Check for guested configure; otherwise get Cygnus style configure.
-    if test -f $ac_srcdir/configure.gnu; then
-      echo
-      $SHELL $ac_srcdir/configure.gnu  --help=recursive
-    elif test -f $ac_srcdir/configure; then
-      echo
-      $SHELL $ac_srcdir/configure  --help=recursive
-    elif test -f $ac_srcdir/configure.ac ||
-           test -f $ac_srcdir/configure.in; then
-      echo
-      $ac_configure --help
-    else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi
-    cd $ac_popdir
-  done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
-  cat <<\_ACEOF
-
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
-Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit 0
-fi
-exec 5>config.log
-cat >&5 <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.57.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
-done
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-    2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-        ac_must_keep_next=false # Got value, back to normal.
-      else
-        case $ac_arg in
-          *=* | --config-cache | -C | -disable-* | --disable-* \
-          | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-          | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-          | -with-* | --with-* | -without-* | --without-* | --x)
-            case "$ac_configure_args0 " in
-              "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-            esac
-            ;;
-          -* ) ac_must_keep_next=true ;;
-        esac
-      fi
-      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-      # Get rid of the leading space.
-      ac_sep=" "
-      ;;
-    esac
-  done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-{
-  (set) 2>&1 |
-    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      sed -n \
-        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
-      ;;
-    *)
-      sed -n \
-        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-}
-    echo
-
-    cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=$`echo $ac_var`
-      echo "$ac_var='"'"'$ac_val'"'"'"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=$`echo $ac_var`
-        echo "$ac_var='"'"'$ac_val'"'"'"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
-      echo
-      sed "/^$/d" confdefs.h | sort
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core core.* *.core &&
-  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-     ' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
-fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . $cache_file;;
-      *)                      . ./$cache_file;;
-    esac
-  fi
-else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
-               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
-  eval ac_new_val="\$ac_env_${ac_var}_value"
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-        { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-        { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-        { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-        ac_cache_corrupted=:
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-          ac_config_headers="$ac_config_headers config.h"
-
-
-PRODUCT=xboard
-VERSION=4.2
-PATCHLEVEL=7
-
-if test -z "$CFLAGS" ; then
-  CFLAGS=" "
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output" >&5
-echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
-  (eval $ac_link_default) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # Find the output, starting from the most likely.  This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-        ;;
-    conftest.$ac_ext )
-        # This is the source file.
-        ;;
-    [ab].out )
-        # We found the default executable, but exeext='' is most
-        # certainly right.
-        break;;
-    *.* )
-        ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-        # FIXME: I believe we export ac_cv_exeext for Libtool,
-        # but it would be cool to find out if it's true.  Does anybody
-        # maintain Libtool? --akim.
-        export ac_cv_exeext
-        break;;
-    * )
-        break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-          export ac_cv_exeext
-          break;;
-    * ) break;;
-  esac
-done
-else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   ''\
-   '#include <stdlib.h>' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-echo "$as_me:$LINENO: checking for library containing strerror" >&5
-echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6
-if test "${ac_cv_search_strerror+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-ac_cv_search_strerror=no
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char strerror ();
-int
-main ()
-{
-strerror ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_search_strerror="none required"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-if test "$ac_cv_search_strerror" = no; then
-  for ac_lib in cposix; do
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-    cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char strerror ();
-int
-main ()
-{
-strerror ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_search_strerror="-l$ac_lib"
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-  done
-fi
-LIBS=$ac_func_search_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
-echo "${ECHO_T}$ac_cv_search_strerror" >&6
-if test "$ac_cv_search_strerror" != no; then
-  test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
-
-fi
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-  if test -f $ac_dir/install-sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f $ac_dir/install.sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f $ac_dir/shtool; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
-  ./ | .// | /cC/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-        if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-          if test $ac_prog = install &&
-            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-            # AIX install.  It has an incompatible calling convention.
-            :
-          elif test $ac_prog = install &&
-            grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-            # program-specific install script used by HP pwplus--don't use.
-            :
-          else
-            ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-            break 3
-          fi
-        fi
-      done
-    done
-    ;;
-esac
-done
-
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  We don't cache a
-    # path for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the path is relative.
-    INSTALL=$ac_install_sh
-  fi
-fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-for ac_prog in lex flex
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_LEX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$LEX"; then
-  ac_cv_prog_LEX="$LEX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_LEX="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-LEX=$ac_cv_prog_LEX
-if test -n "$LEX"; then
-  echo "$as_me:$LINENO: result: $LEX" >&5
-echo "${ECHO_T}$LEX" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$LEX" && break
-done
-test -n "$LEX" || LEX="lex_not_found"
-
-if test "$LEX" != lex_not_found ; then
-  for ac_prog in flex lex
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_LEX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$LEX"; then
-  ac_cv_prog_LEX="$LEX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_LEX="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-LEX=$ac_cv_prog_LEX
-if test -n "$LEX"; then
-  echo "$as_me:$LINENO: result: $LEX" >&5
-echo "${ECHO_T}$LEX" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$LEX" && break
-done
-test -n "$LEX" || LEX=":"
-
-if test -z "$LEXLIB"
-then
-  echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5
-echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6
-if test "${ac_cv_lib_fl_yywrap+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char yywrap ();
-int
-main ()
-{
-yywrap ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_fl_yywrap=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_fl_yywrap=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5
-echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6
-if test $ac_cv_lib_fl_yywrap = yes; then
-  LEXLIB="-lfl"
-else
-  echo "$as_me:$LINENO: checking for yywrap in -ll" >&5
-echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6
-if test "${ac_cv_lib_l_yywrap+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ll  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char yywrap ();
-int
-main ()
-{
-yywrap ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_l_yywrap=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_l_yywrap=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5
-echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6
-if test $ac_cv_lib_l_yywrap = yes; then
-  LEXLIB="-ll"
-fi
-
-fi
-
-fi
-
-if test "x$LEX" != "x:"; then
-  echo "$as_me:$LINENO: checking lex output file root" >&5
-echo $ECHO_N "checking lex output file root... $ECHO_C" >&6
-if test "${ac_cv_prog_lex_root+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # The minimal lex program is just a single line: %%.  But some broken lexes
-# (Solaris, I think it was) want two %% lines, so accommodate them.
-cat >conftest.l <<_ACEOF
-%%
-%%
-_ACEOF
-{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5
-  (eval $LEX conftest.l) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-if test -f lex.yy.c; then
-  ac_cv_prog_lex_root=lex.yy
-elif test -f lexyy.c; then
-  ac_cv_prog_lex_root=lexyy
-else
-  { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5
-echo "$as_me: error: cannot find output from $LEX; giving up" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5
-echo "${ECHO_T}$ac_cv_prog_lex_root" >&6
-rm -f conftest.l
-LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
-
-echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5
-echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6
-if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # POSIX says lex can declare yytext either as a pointer or an array; the
-# default is implementation-dependent. Figure out which it is, since
-# not all implementations provide the %pointer and %array declarations.
-ac_cv_prog_lex_yytext_pointer=no
-echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c
-ac_save_LIBS=$LIBS
-LIBS="$LIBS $LEXLIB"
-cat >conftest.$ac_ext <<_ACEOF
-`cat $LEX_OUTPUT_ROOT.c`
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_lex_yytext_pointer=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_save_LIBS
-rm -f "${LEX_OUTPUT_ROOT}.c"
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5
-echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6
-if test $ac_cv_prog_lex_yytext_pointer = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define YYTEXT_POINTER 1
-_ACEOF
-
-fi
-
-fi
-fi
-for ac_prog in remsh rsh
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_RSH+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$RSH"; then
-  ac_cv_prog_RSH="$RSH" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RSH="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-RSH=$ac_cv_prog_RSH
-if test -n "$RSH"; then
-  echo "$as_me:$LINENO: result: $RSH" >&5
-echo "${ECHO_T}$RSH" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$RSH" && break
-done
-test -n "$RSH" || RSH="rsh"
-
-cat >>confdefs.h <<_ACEOF
-#define REMOTE_SHELL "$RSH"
-_ACEOF
-
-# Extract the first word of "nroff", so it can be a program name with args.
-set dummy nroff; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_NROFF+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$NROFF"; then
-  ac_cv_prog_NROFF="$NROFF" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_NROFF="nroff -man"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_NROFF" && ac_cv_prog_NROFF="cat"
-fi
-fi
-NROFF=$ac_cv_prog_NROFF
-if test -n "$NROFF"; then
-  echo "$as_me:$LINENO: result: $NROFF" >&5
-echo "${ECHO_T}$NROFF" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-
-for ac_prog in awk mawk gawk nawk
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_AWKPATH+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $AWKPATH in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_AWKPATH="$AWKPATH" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_AWKPATH="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  ;;
-esac
-fi
-AWKPATH=$ac_cv_path_AWKPATH
-
-if test -n "$AWKPATH"; then
-  echo "$as_me:$LINENO: result: $AWKPATH" >&5
-echo "${ECHO_T}$AWKPATH" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$AWKPATH" && break
-done
-
-for ac_prog in perl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_PERLPATH+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $PERLPATH in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PERLPATH="$PERLPATH" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PERLPATH="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  ;;
-esac
-fi
-PERLPATH=$ac_cv_path_PERLPATH
-
-if test -n "$PERLPATH"; then
-  echo "$as_me:$LINENO: result: $PERLPATH" >&5
-echo "${ECHO_T}$PERLPATH" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$PERLPATH" && break
-done
-
-
-
-# Check whether --with-Xaw3d or --without-Xaw3d was given.
-if test "${with_Xaw3d+set}" = set; then
-  withval="$with_Xaw3d"
-  cat >>confdefs.h <<\_ACEOF
-#define USE_XAW3D 1
-_ACEOF
-
-   XAW_LIBS="-lXaw3d"
-else
-  XAW_LIBS="-lXaw"
-fi;
-
-
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
-    fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-                   (('a' <= (c) && (c) <= 'i') \
-                     || ('j' <= (c) && (c) <= 'r') \
-                     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-        || toupper (i) != TOUPPER (i))
-      exit(2);
-  exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
-echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
-if test "${ac_cv_header_time+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_time=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_time=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
-echo "${ECHO_T}$ac_cv_header_time" >&6
-if test $ac_cv_header_time = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define TIME_WITH_SYS_TIME 1
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
-echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6
-if test "${ac_cv_header_sys_wait_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/wait.h>
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
-
-int
-main ()
-{
-  int s;
-  wait (&s);
-  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_sys_wait_h=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_sys_wait_h=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6
-if test $ac_cv_header_sys_wait_h = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SYS_WAIT_H 1
-_ACEOF
-
-fi
-
-
-
-
-
-
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
-  as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
-echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <$ac_hdr>
-
-int
-main ()
-{
-if ((DIR *) 0)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
-_ACEOF
-
-ac_header_dirent=$ac_hdr; break
-fi
-
-done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
-  echo "$as_me:$LINENO: checking for library containing opendir" >&5
-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
-if test "${ac_cv_search_opendir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-ac_cv_search_opendir=no
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char opendir ();
-int
-main ()
-{
-opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_search_opendir="none required"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-if test "$ac_cv_search_opendir" = no; then
-  for ac_lib in dir; do
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-    cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char opendir ();
-int
-main ()
-{
-opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_search_opendir="-l$ac_lib"
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-  done
-fi
-LIBS=$ac_func_search_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
-echo "${ECHO_T}$ac_cv_search_opendir" >&6
-if test "$ac_cv_search_opendir" != no; then
-  test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
-
-fi
-
-else
-  echo "$as_me:$LINENO: checking for library containing opendir" >&5
-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
-if test "${ac_cv_search_opendir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-ac_cv_search_opendir=no
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char opendir ();
-int
-main ()
-{
-opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_search_opendir="none required"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-if test "$ac_cv_search_opendir" = no; then
-  for ac_lib in x; do
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-    cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char opendir ();
-int
-main ()
-{
-opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_search_opendir="-l$ac_lib"
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-  done
-fi
-LIBS=$ac_func_search_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
-echo "${ECHO_T}$ac_cv_search_opendir" >&6
-if test "$ac_cv_search_opendir" != no; then
-  test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
-
-fi
-
-fi
-
-echo "$as_me:$LINENO: checking return type of signal handlers" >&5
-echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
-if test "${ac_cv_type_signal+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-# undef signal
-#endif
-#ifdef __cplusplus
-extern "C" void (*signal (int, void (*)(int)))(int);
-#else
-void (*signal ()) ();
-#endif
-
-int
-main ()
-{
-int i;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_signal=void
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_signal=int
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
-echo "${ECHO_T}$ac_cv_type_signal" >&6
-
-cat >>confdefs.h <<_ACEOF
-#define RETSIGTYPE $ac_cv_type_signal
-_ACEOF
-
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-                  inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
-
-for ac_header in stropts.h sys/time.h string.h unistd.h sys/systeminfo.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf at gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-  no:yes )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf at gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_header in fcntl.h sys/fcntl.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf at gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-  no:yes )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf at gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
- break
-fi
-
-done
-
-
-
-for ac_header in sys/socket.h lan/socket.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf at gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-  no:yes )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf at gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
- break
-fi
-
-done
-
-if test "${ac_cv_header_stddef_h+set}" = set; then
-  echo "$as_me:$LINENO: checking for stddef.h" >&5
-echo $ECHO_N "checking for stddef.h... $ECHO_C" >&6
-if test "${ac_cv_header_stddef_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stddef_h" >&5
-echo "${ECHO_T}$ac_cv_header_stddef_h" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking stddef.h usability" >&5
-echo $ECHO_N "checking stddef.h usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <stddef.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking stddef.h presence" >&5
-echo $ECHO_N "checking stddef.h presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
-    { echo "$as_me:$LINENO: WARNING: stddef.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: stddef.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stddef.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: stddef.h: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf at gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-  no:yes )
-    { echo "$as_me:$LINENO: WARNING: stddef.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: stddef.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stddef.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: stddef.h: check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stddef.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: stddef.h: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf at gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for stddef.h" >&5
-echo $ECHO_N "checking for stddef.h... $ECHO_C" >&6
-if test "${ac_cv_header_stddef_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_stddef_h=$ac_header_preproc
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stddef_h" >&5
-echo "${ECHO_T}$ac_cv_header_stddef_h" >&6
-
-fi
-if test $ac_cv_header_stddef_h = yes; then
-  :
-else
-  cat >>confdefs.h <<\_ACEOF
-#define X_WCHAR 1
-_ACEOF
-
-fi
-
-
-
-
-
-
-
-for ac_func in _getpty grantpt setitimer usleep
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-for ac_func in gettimeofday ftime
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
- break
-fi
-done
-
-
-
-for ac_func in random rand48
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
- break
-fi
-done
-
-
-
-for ac_func in gethostname sysinfo
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
- break
-fi
-done
-
-echo "$as_me:$LINENO: checking for setlocale" >&5
-echo $ECHO_N "checking for setlocale... $ECHO_C" >&6
-if test "${ac_cv_func_setlocale+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char setlocale (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char setlocale ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_setlocale) || defined (__stub___setlocale)
-choke me
-#else
-char (*f) () = setlocale;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != setlocale;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_setlocale=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_setlocale=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_setlocale" >&5
-echo "${ECHO_T}$ac_cv_func_setlocale" >&6
-if test $ac_cv_func_setlocale = yes; then
-  :
-else
-
-echo "$as_me:$LINENO: checking for setlocale in -li" >&5
-echo $ECHO_N "checking for setlocale in -li... $ECHO_C" >&6
-if test "${ac_cv_lib_i_setlocale+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-li  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char setlocale ();
-int
-main ()
-{
-setlocale ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_i_setlocale=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_i_setlocale=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_i_setlocale" >&5
-echo "${ECHO_T}$ac_cv_lib_i_setlocale" >&6
-if test $ac_cv_lib_i_setlocale = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBI 1
-_ACEOF
-
-  LIBS="-li $LIBS"
-
-else
-  cat >>confdefs.h <<\_ACEOF
-#define X_LOCALE 1
-_ACEOF
-
-fi
-
-fi
-
-
-
-echo "$as_me:$LINENO: checking for getpseudotty in -lseq" >&5
-echo $ECHO_N "checking for getpseudotty in -lseq... $ECHO_C" >&6
-if test "${ac_cv_lib_seq_getpseudotty+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lseq  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char getpseudotty ();
-int
-main ()
-{
-getpseudotty ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_seq_getpseudotty=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_seq_getpseudotty=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_seq_getpseudotty" >&5
-echo "${ECHO_T}$ac_cv_lib_seq_getpseudotty" >&6
-if test $ac_cv_lib_seq_getpseudotty = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSEQ 1
-_ACEOF
-
-  LIBS="-lseq $LIBS"
-
-fi
-
-
-echo "$as_me:$LINENO: checking for X" >&5
-echo $ECHO_N "checking for X... $ECHO_C" >&6
-
-
-# Check whether --with-x or --without-x was given.
-if test "${with_x+set}" = set; then
-  withval="$with_x"
-
-fi;
-# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
-if test "x$with_x" = xno; then
-  # The user explicitly disabled X.
-  have_x=disabled
-else
-  if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
-    # Both variables are already set.
-    have_x=yes
-  else
-    if test "${ac_cv_have_x+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # One or both of the vars are not set, and there is no cached value.
-ac_x_includes=no ac_x_libraries=no
-rm -fr conftest.dir
-if mkdir conftest.dir; then
-  cd conftest.dir
-  # Make sure to not put "make" in the Imakefile rules, since we grep it out.
-  cat >Imakefile <<'_ACEOF'
-acfindx:
-	@echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
-_ACEOF
-  if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
-    # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-    eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
-    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
-    for ac_extension in a so sl; do
-      if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
-         test -f $ac_im_libdir/libX11.$ac_extension; then
-        ac_im_usrlibdir=$ac_im_libdir; break
-      fi
-    done
-    # Screen out bogus values from the imake configuration.  They are
-    # bogus both because they are the default anyway, and because
-    # using them would break gcc on systems where it needs fixed includes.
-    case $ac_im_incroot in
-	/usr/include) ;;
-	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
-    esac
-    case $ac_im_usrlibdir in
-	/usr/lib | /lib) ;;
-	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
-    esac
-  fi
-  cd ..
-  rm -fr conftest.dir
-fi
-
-# Standard set of common directories for X headers.
-# Check X11 before X11Rn because it is often a symlink to the current release.
-ac_x_header_dirs='
-/usr/X11/include
-/usr/X11R6/include
-/usr/X11R5/include
-/usr/X11R4/include
-
-/usr/include/X11
-/usr/include/X11R6
-/usr/include/X11R5
-/usr/include/X11R4
-
-/usr/local/X11/include
-/usr/local/X11R6/include
-/usr/local/X11R5/include
-/usr/local/X11R4/include
-
-/usr/local/include/X11
-/usr/local/include/X11R6
-/usr/local/include/X11R5
-/usr/local/include/X11R4
-
-/usr/X386/include
-/usr/x386/include
-/usr/XFree86/include/X11
-
-/usr/include
-/usr/local/include
-/usr/unsupported/include
-/usr/athena/include
-/usr/local/x11r5/include
-/usr/lpp/Xamples/include
-
-/usr/openwin/include
-/usr/openwin/share/include'
-
-if test "$ac_x_includes" = no; then
-  # Guess where to find include files, by looking for Intrinsic.h.
-  # First, try using that file with no special directory specified.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <X11/Intrinsic.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # We can compile using X headers with no special include directory.
-ac_x_includes=
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  for ac_dir in $ac_x_header_dirs; do
-  if test -r "$ac_dir/X11/Intrinsic.h"; then
-    ac_x_includes=$ac_dir
-    break
-  fi
-done
-fi
-rm -f conftest.err conftest.$ac_ext
-fi # $ac_x_includes = no
-
-if test "$ac_x_libraries" = no; then
-  # Check for the libraries.
-  # See if we find them without any special options.
-  # Don't add to $LIBS permanently.
-  ac_save_LIBS=$LIBS
-  LIBS="-lXt $LIBS"
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <X11/Intrinsic.h>
-int
-main ()
-{
-XtMalloc (0)
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  LIBS=$ac_save_LIBS
-# We can link X programs with no special library path.
-ac_x_libraries=
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-LIBS=$ac_save_LIBS
-for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
-do
-  # Don't even attempt the hair of trying to link an X program!
-  for ac_extension in a so sl; do
-    if test -r $ac_dir/libXt.$ac_extension; then
-      ac_x_libraries=$ac_dir
-      break 2
-    fi
-  done
-done
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi # $ac_x_libraries = no
-
-if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
-  # Didn't find X anywhere.  Cache the known absence of X.
-  ac_cv_have_x="have_x=no"
-else
-  # Record where we found X for the cache.
-  ac_cv_have_x="have_x=yes \
-	        ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
-fi
-fi
-
-  fi
-  eval "$ac_cv_have_x"
-fi # $with_x != no
-
-if test "$have_x" != yes; then
-  echo "$as_me:$LINENO: result: $have_x" >&5
-echo "${ECHO_T}$have_x" >&6
-  no_x=yes
-else
-  # If each of the values was on the command line, it overrides each guess.
-  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
-  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
-  # Update the cache value to reflect the command line values.
-  ac_cv_have_x="have_x=yes \
-		ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
-  echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
-echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
-fi
-
-if test "$no_x" = yes; then
-  # Not all programs may use this symbol, but it does not hurt to define it.
-
-cat >>confdefs.h <<\_ACEOF
-#define X_DISPLAY_MISSING 1
-_ACEOF
-
-  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
-else
-  if test -n "$x_includes"; then
-    X_CFLAGS="$X_CFLAGS -I$x_includes"
-  fi
-
-  # It would also be nice to do this for all -L options, not just this one.
-  if test -n "$x_libraries"; then
-    X_LIBS="$X_LIBS -L$x_libraries"
-    # For Solaris; some versions of Sun CC require a space after -R and
-    # others require no space.  Words are not sufficient . . . .
-    case `(uname -sr) 2>/dev/null` in
-    "SunOS 5"*)
-      echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
-echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6
-      ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
-      cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_R_nospace=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_R_nospace=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-      if test $ac_R_nospace = yes; then
-	echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-	X_LIBS="$X_LIBS -R$x_libraries"
-      else
-	LIBS="$ac_xsave_LIBS -R $x_libraries"
-	cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_R_space=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_R_space=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-	if test $ac_R_space = yes; then
-	  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-	  X_LIBS="$X_LIBS -R $x_libraries"
-	else
-	  echo "$as_me:$LINENO: result: neither works" >&5
-echo "${ECHO_T}neither works" >&6
-	fi
-      fi
-      LIBS=$ac_xsave_LIBS
-    esac
-  fi
-
-  # Check for system-dependent libraries X programs must link with.
-  # Do this before checking for the system-independent R6 libraries
-  # (-lICE), since we may need -lsocket or whatever for X linking.
-
-  if test "$ISC" = yes; then
-    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
-  else
-    # Martyn Johnson says this is needed for Ultrix, if the X
-    # libraries were built with DECnet support.  And Karl Berry says
-    # the Alpha needs dnet_stub (dnet does not exist).
-    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
-    cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char XOpenDisplay ();
-int
-main ()
-{
-XOpenDisplay ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
-echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6
-if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dnet_ntoa ();
-int
-main ()
-{
-dnet_ntoa ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dnet_dnet_ntoa=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dnet_dnet_ntoa=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
-echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6
-if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
-fi
-
-    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
-      echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
-echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6
-if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet_stub  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dnet_ntoa ();
-int
-main ()
-{
-dnet_ntoa ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dnet_stub_dnet_ntoa=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dnet_stub_dnet_ntoa=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
-echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6
-if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
-fi
-
-    fi
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-    LIBS="$ac_xsave_LIBS"
-
-    # msh at cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
-    # to get the SysV transport functions.
-    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
-    # needs -lnsl.
-    # The nsl library prevents programs from opening the X display
-    # on Irix 5.2, according to T.E. Dickey.
-    # The functions gethostbyname, getservbyname, and inet_addr are
-    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
-    echo "$as_me:$LINENO: checking for gethostbyname" >&5
-echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
-if test "${ac_cv_func_gethostbyname+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char gethostbyname (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char gethostbyname ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
-choke me
-#else
-char (*f) () = gethostbyname;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != gethostbyname;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_gethostbyname=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_gethostbyname=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
-
-    if test $ac_cv_func_gethostbyname = no; then
-      echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
-echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
-if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char gethostbyname ();
-int
-main ()
-{
-gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_nsl_gethostbyname=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_nsl_gethostbyname=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
-if test $ac_cv_lib_nsl_gethostbyname = yes; then
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
-fi
-
-      if test $ac_cv_lib_nsl_gethostbyname = no; then
-        echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
-echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6
-if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char gethostbyname ();
-int
-main ()
-{
-gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_bsd_gethostbyname=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_bsd_gethostbyname=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6
-if test $ac_cv_lib_bsd_gethostbyname = yes; then
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
-fi
-
-      fi
-    fi
-
-    # lieder at skyler.mavd.honeywell.com says without -lsocket,
-    # socket/setsockopt and other routines are undefined under SCO ODT
-    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
-    # on later versions), says Simon Leinen: it contains gethostby*
-    # variants that don't use the name server (or something).  -lsocket
-    # must be given before -lnsl if both are needed.  We assume that
-    # if connect needs -lnsl, so does gethostbyname.
-    echo "$as_me:$LINENO: checking for connect" >&5
-echo $ECHO_N "checking for connect... $ECHO_C" >&6
-if test "${ac_cv_func_connect+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char connect (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char connect ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_connect) || defined (__stub___connect)
-choke me
-#else
-char (*f) () = connect;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != connect;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_connect=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_connect=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
-echo "${ECHO_T}$ac_cv_func_connect" >&6
-
-    if test $ac_cv_func_connect = no; then
-      echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
-echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
-if test "${ac_cv_lib_socket_connect+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char connect ();
-int
-main ()
-{
-connect ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_socket_connect=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_socket_connect=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
-echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
-if test $ac_cv_lib_socket_connect = yes; then
-  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
-fi
-
-    fi
-
-    # Guillermo Gomez says -lposix is necessary on A/UX.
-    echo "$as_me:$LINENO: checking for remove" >&5
-echo $ECHO_N "checking for remove... $ECHO_C" >&6
-if test "${ac_cv_func_remove+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char remove (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char remove ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_remove) || defined (__stub___remove)
-choke me
-#else
-char (*f) () = remove;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != remove;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_remove=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_remove=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
-echo "${ECHO_T}$ac_cv_func_remove" >&6
-
-    if test $ac_cv_func_remove = no; then
-      echo "$as_me:$LINENO: checking for remove in -lposix" >&5
-echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6
-if test "${ac_cv_lib_posix_remove+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lposix  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char remove ();
-int
-main ()
-{
-remove ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_posix_remove=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_posix_remove=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
-echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6
-if test $ac_cv_lib_posix_remove = yes; then
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
-fi
-
-    fi
-
-    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
-    echo "$as_me:$LINENO: checking for shmat" >&5
-echo $ECHO_N "checking for shmat... $ECHO_C" >&6
-if test "${ac_cv_func_shmat+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shmat (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char shmat ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_shmat) || defined (__stub___shmat)
-choke me
-#else
-char (*f) () = shmat;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != shmat;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_shmat=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_shmat=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
-echo "${ECHO_T}$ac_cv_func_shmat" >&6
-
-    if test $ac_cv_func_shmat = no; then
-      echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
-echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6
-if test "${ac_cv_lib_ipc_shmat+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lipc  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char shmat ();
-int
-main ()
-{
-shmat ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_ipc_shmat=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_ipc_shmat=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
-echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6
-if test $ac_cv_lib_ipc_shmat = yes; then
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
-fi
-
-    fi
-  fi
-
-  # Check for libraries that X11R6 Xt/Xaw programs need.
-  ac_save_LDFLAGS=$LDFLAGS
-  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
-  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
-  # check for ICE first), but we must link in the order -lSM -lICE or
-  # we get undefined symbols.  So assume we have SM if we have ICE.
-  # These have to be linked with before -lX11, unlike the other
-  # libraries we check for below, so use a different variable.
-  # John Interrante, Karl Berry
-  echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
-echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6
-if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lICE $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char IceConnectionNumber ();
-int
-main ()
-{
-IceConnectionNumber ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_ICE_IceConnectionNumber=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_ICE_IceConnectionNumber=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
-echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6
-if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
-  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
-fi
-
-  LDFLAGS=$ac_save_LDFLAGS
-
-fi
-
-if test -n "$no_x" ; then
-  echo $PRODUCT requires the X Window System header files and libraries!
-  echo They were not found on your system.  See FAQ topic C.2.
-  echo configure failed
-  exit 1
-fi
-
-# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
-   { (exit 1); exit 1; }; }
-
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
-if test "${ac_cv_build+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
-  ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
-  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-   { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
-build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
-if test "${ac_cv_host+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
-  ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
-host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-
-
-
-USE_PTYS=0
-case "$host" in
-  *-*-hpux* )
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_TTY_NAME_SPRINTF sprintf (pty_name, "/dev/pty/tty%c%x", c, i);
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_NAME_SPRINTF sprintf (pty_name, "/dev/ptym/pty%c%x", c, i);
-_ACEOF
-
-    if test "$GCC" = yes; then
-      CONF_CFLAGS="-fwritable-strings"
-    else
-
-
-      CONF_CFLAGS="-Aa -D_HPUX_SOURCE"
-    fi
-
-
-    if test -d /opt/hppd/include/X11; then
-      X_CFLAGS="$X_CFLAGS -I/opt/hppd/include"
-      X_LIBS="$X_LIBS -L/opt/hppd/lib"
-    elif test -d /usr/contrib/X11R5/include; then
-      X_CFLAGS="$X_CFLAGS -I/usr/contrib/X11R5/include"
-      X_LIBS="$X_LIBS -L/usr/contrib/X11R5/lib"
-    elif test -d /usr/contrib/mitX11R5/include; then
-      X_CFLAGS="$X_CFLAGS -I/usr/contrib/mitX11R5/include"
-      X_LIBS="$X_LIBS -L/usr/contrib/mitX11R5/lib"
-    elif test -d /MIT/X11R5/include; then
-      X_CFLAGS="$X_CFLAGS -I/MIT/X11R5/include"
-      X_LIBS="$X_LIBS -L/MIT/X11R5/lib"
-    elif test -d /usr/local/include/X11R5; then
-      X_CFLAGS="$X_CFLAGS -I/usr/local/include/X11R5"
-      X_LIBS="$X_LIBS -L/usr/local/lib/X11R5"
-    fi
-    if test -d /usr/include/X11R5; then
-      X_CFLAGS="$X_CFLAGS -I/usr/include/X11R5"
-      X_LIBS="$X_LIBS -L/usr/lib/X11R5 -L/usr/lib/X11R4"
-    elif test -d /usr/include/X11R4; then
-      X_CFLAGS="$X_CFLAGS -I/usr/include/X11R4"
-      X_LIBS="$X_LIBS -L/usr/lib/X11R4"
-    fi
-  ;;
-
-  romp-ibm-aix* )
-    cat >>confdefs.h <<\_ACEOF
-#define IBMRTAIX 1
-_ACEOF
-
-  ;;
-
-  i386-ibm-aix )
-    if test "$GCC" = yes; then
-      CONF_CFLAGS="-fwritable-strings"
-    fi
-  ;;
-
-  *-*-aix3* | *-*-bosx* )
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_ITERATION for (c = 0; !c; c++)
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_NAME_SPRINTF strcpy (pty_name, "/dev/ptc");
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_TTY_NAME_SPRINTF strcpy (pty_name, ttyname (fd));
-_ACEOF
-
-  ;;
-
-  *-*-cxux* )
-    cat >>confdefs.h <<\_ACEOF
-#define FIRST_PTY_LETTER 'A'
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define LAST_PTY_LETTER 'P'
-_ACEOF
-
-  ;;
-
-  *-*-uniplus* )
-    cat >>confdefs.h <<\_ACEOF
-#define UNIPLUS 1
-_ACEOF
-
-  ;;
-
-  *-*-rtu* )
-    cat >>confdefs.h <<\_ACEOF
-#define FIRST_PTY_LETTER 'z'
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_TTY_NAME_SPRINTF sprintf (pty_name, "/dev/ttyp%x", i);
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_NAME_SPRINTF sprintf (pty_name, "/dev/pty%x", i);
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define RTU 1
-_ACEOF
-
-  ;;
-
-  *-*-iris* | *-*-irix3* )
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_ITERATION for (c = 0; !c; c++)
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_NAME_SPRINTF strcpy (pty_name, "/dev/ptc");
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_TTY_NAME_SPRINTF sprintf (pty_name, "/dev/ttyq%d", minor(stb.st_rdev));
-_ACEOF
-
-  ;;
-
-  *-*-irix* )
-  ;;
-
-  *-*-sunos4* | *-*-solaris1* )
-
-
-    if test "$GCC" = yes; then
-      PRE_XMULIB="-static"
-      POST_XMULIB="-dynamic"
-    else
-      PRE_XMULIB="-Bstatic"
-      POST_XMULIB="-Bdynamic"
-    fi
-  ;;
-
-  *-*-sunos5* | *-*-solaris2* )
-
-
-    X_LIBS="$X_LIBS -lelf"
-  ;;
-
-  *-*-sco* )
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_ITERATION for (i = 0; ; i++)
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_NAME_SPRINTF sprintf (pty_name, "/dev/ptyp%d", i);
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define PTY_TTY_NAME_SPRINTF sprintf (pty_name, "/dev/ttyp%d", i);
-_ACEOF
-
-  ;;
-
-  *-*-dynix* | *-*-ptx* )
-  ;;
-
-  *-*-esix* )
-  ;;
-
-  *-*-usg5-4* | *-*-sysvr4* )
-  ;;
-
-  *-*-usg* | *-*-sysv* | *-*-aix* )
-  ;;
-
-  vax-*-ultrix )
-    if test "$GCC" = yes; then
-      CONF_CFLAGS="-fwritable-strings"
-    fi
-  ;;
-esac
-
-# Check whether --enable-xpm or --disable-xpm was given.
-if test "${enable_xpm+set}" = set; then
-  enableval="$enable_xpm"
-  enable_xpm="$enableval"
-else
-  enable_xpm="yes"
-fi;
-
-if test "$enable_xpm" = "yes"; then
-  save_cflags="$CFLAGS"
-  CFLAGS="$CFLAGS $X_CFLAGS"
-  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-
-for ac_header in X11/xpm.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf at gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-  no:yes )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf at gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-  CFLAGS="$save_cflags"
-  if test "$ac_cv_header_X11_xpm_h" = "yes"; then
-    save_ldflags="$LDFLAGS"
-    LDFLAGS="$LDFLAGS $X_LIBS"
-    echo "$as_me:$LINENO: checking for XpmReadFileToPixmap in -lXpm" >&5
-echo $ECHO_N "checking for XpmReadFileToPixmap in -lXpm... $ECHO_C" >&6
-if test "${ac_cv_lib_Xpm_XpmReadFileToPixmap+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXpm $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char XpmReadFileToPixmap ();
-int
-main ()
-{
-XpmReadFileToPixmap ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_Xpm_XpmReadFileToPixmap=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_Xpm_XpmReadFileToPixmap=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_Xpm_XpmReadFileToPixmap" >&5
-echo "${ECHO_T}$ac_cv_lib_Xpm_XpmReadFileToPixmap" >&6
-if test $ac_cv_lib_Xpm_XpmReadFileToPixmap = yes; then
-  X_PRE_LIBS="-lXpm $X_PRE_LIBS"; cat >>confdefs.h <<\_ACEOF
-#define HAVE_LIBXPM 1
-_ACEOF
-
-fi
-
-    LDFLAGS="$save_ldflags"
-  fi
-fi
-
-
-
-
-
-
-echo "$as_me:$LINENO: checking whether ptys or pipes should be used" >&5
-echo $ECHO_N "checking whether ptys or pipes should be used... $ECHO_C" >&6
-# Check whether --enable-ptys or --disable-ptys was given.
-if test "${enable_ptys+set}" = set; then
-  enableval="$enable_ptys"
-  if test "$enableval" = yes; then
-  USE_PTYS=1
-  echo "$as_me:$LINENO: result: ptys (user override)" >&5
-echo "${ECHO_T}ptys (user override)" >&6
-fi
-if test "$enableval" = no; then
-  USE_PTYS=0
-  echo "$as_me:$LINENO: result: pipes (user override)" >&5
-echo "${ECHO_T}pipes (user override)" >&6
-fi
-else
-  if test "$USE_PTYS" = 1; then
-  echo "$as_me:$LINENO: result: ptys" >&5
-echo "${ECHO_T}ptys" >&6
-else
-  echo "$as_me:$LINENO: result: pipes" >&5
-echo "${ECHO_T}pipes" >&6
-fi
-fi;
-cat >>confdefs.h <<_ACEOF
-#define USE_PTYS $USE_PTYS
-_ACEOF
-
-
-# Check whether --enable-zippy or --disable-zippy was given.
-if test "${enable_zippy+set}" = set; then
-  enableval="$enable_zippy"
-  enable_zippy="$enableval"
-else
-  enable_zippy="yes"
-fi;
-if test "$enable_zippy" = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define ZIPPY 1
-_ACEOF
-
-  ZIPPY_O=zippy.o
-  ZIPPY_H=zippy.h
-fi
-
-
-
-# Check whether --enable-sigint or --disable-sigint was given.
-if test "${enable_sigint+set}" = set; then
-  enableval="$enable_sigint"
-  if test "$enableval" = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define ATTENTION 1
-_ACEOF
-
-fi
-else
-  cat >>confdefs.h <<\_ACEOF
-#define ATTENTION 1
-_ACEOF
-
-fi;
-
-cat >>confdefs.h <<_ACEOF
-#define PRODUCT "$PRODUCT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PATCHLEVEL "$PATCHLEVEL"
-_ACEOF
-
-
-
-
-
-                              ac_config_files="$ac_config_files Makefile cmail xboard.texinfo"
-          ac_config_commands="$ac_config_commands default"
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-{
-  (set) 2>&1 |
-    case `(ac_space=' '; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
-      sed -n \
-        "s/'/'\\\\''/g;
-    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;;
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n \
-        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-} |
-  sed '
-     t clear
-     : clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
-  if test -w $cache_file; then
-    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
-    cat confcache >$cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[ 	]*VPATH[ 	]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[ 	]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[ 	]*$//;
-}'
-fi
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_i=`echo "$ac_i" |
-         sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-  # 2. Add them.
-  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.57.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number, then exit
-  -q, --quiet      do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-  --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <bug-autoconf at gnu.org>."
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.57,
-  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=*)
-    ac_option=`expr "x$1" : 'x\([^=]*\)='`
-    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  -*)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  *) # This is not an option, so the user has probably given explicit
-     # arguments.
-     ac_option=$1
-     ac_need_defaults=false;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --vers* | -V )
-    echo "$ac_cs_version"; exit 0 ;;
-  --he | --h)
-    # Conflict between --help and --header
-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit 0 ;;
-  --debug | --d* | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
-    ac_need_defaults=false;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; } ;;
-
-  *) ac_config_targets="$ac_config_targets $1" ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
-  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
-  case "$ac_config_target" in
-  # Handling of arguments.
-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  "cmail" ) CONFIG_FILES="$CONFIG_FILES cmail" ;;
-  "xboard.texinfo" ) CONFIG_FILES="$CONFIG_FILES xboard.texinfo" ;;
-  "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
-  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=./confstat$$-$RANDOM
-  (umask 077 && mkdir $tmp)
-} ||
-{
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
-  # Protect against being on the right side of a sed subst in config.status.
-  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s, at SHELL@,$SHELL,;t t
-s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s, at exec_prefix@,$exec_prefix,;t t
-s, at prefix@,$prefix,;t t
-s, at program_transform_name@,$program_transform_name,;t t
-s, at bindir@,$bindir,;t t
-s, at sbindir@,$sbindir,;t t
-s, at libexecdir@,$libexecdir,;t t
-s, at datadir@,$datadir,;t t
-s, at sysconfdir@,$sysconfdir,;t t
-s, at sharedstatedir@,$sharedstatedir,;t t
-s, at localstatedir@,$localstatedir,;t t
-s, at libdir@,$libdir,;t t
-s, at includedir@,$includedir,;t t
-s, at oldincludedir@,$oldincludedir,;t t
-s, at infodir@,$infodir,;t t
-s, at mandir@,$mandir,;t t
-s, at build_alias@,$build_alias,;t t
-s, at host_alias@,$host_alias,;t t
-s, at target_alias@,$target_alias,;t t
-s, at DEFS@,$DEFS,;t t
-s, at ECHO_C@,$ECHO_C,;t t
-s, at ECHO_N@,$ECHO_N,;t t
-s, at ECHO_T@,$ECHO_T,;t t
-s, at LIBS@,$LIBS,;t t
-s, at CC@,$CC,;t t
-s, at CFLAGS@,$CFLAGS,;t t
-s, at LDFLAGS@,$LDFLAGS,;t t
-s, at CPPFLAGS@,$CPPFLAGS,;t t
-s, at ac_ct_CC@,$ac_ct_CC,;t t
-s, at EXEEXT@,$EXEEXT,;t t
-s, at OBJEXT@,$OBJEXT,;t t
-s, at CPP@,$CPP,;t t
-s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s, at INSTALL_DATA@,$INSTALL_DATA,;t t
-s, at LEX@,$LEX,;t t
-s, at LEXLIB@,$LEXLIB,;t t
-s, at LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t
-s, at RSH@,$RSH,;t t
-s, at NROFF@,$NROFF,;t t
-s, at NROFFFLAGS@,$NROFFFLAGS,;t t
-s, at AWKPATH@,$AWKPATH,;t t
-s, at PERLPATH@,$PERLPATH,;t t
-s, at XAW_LIBS@,$XAW_LIBS,;t t
-s, at EGREP@,$EGREP,;t t
-s, at X_CFLAGS@,$X_CFLAGS,;t t
-s, at X_PRE_LIBS@,$X_PRE_LIBS,;t t
-s, at X_LIBS@,$X_LIBS,;t t
-s, at X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
-s, at build@,$build,;t t
-s, at build_cpu@,$build_cpu,;t t
-s, at build_vendor@,$build_vendor,;t t
-s, at build_os@,$build_os,;t t
-s, at host@,$host,;t t
-s, at host_cpu@,$host_cpu,;t t
-s, at host_vendor@,$host_vendor,;t t
-s, at host_os@,$host_os,;t t
-s, at PRE_XMULIB@,$PRE_XMULIB,;t t
-s, at POST_XMULIB@,$POST_XMULIB,;t t
-s, at CONF_CFLAGS@,$CONF_CFLAGS,;t t
-s, at CONF_LDFLAGS@,$CONF_LDFLAGS,;t t
-s, at ZIPPY_O@,$ZIPPY_O,;t t
-s, at ZIPPY_H@,$ZIPPY_H,;t t
-s, at PRODUCT@,$PRODUCT,;t t
-s, at VERSION@,$VERSION,;t t
-s, at PATCHLEVEL@,$PATCHLEVEL,;t t
-s, at LIBOBJS@,$LIBOBJS,;t t
-s, at LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
-  cat >>$CONFIG_STATUS <<\_ACEOF
-  # Split the substitutions into bite-sized pieces for seds with
-  # small command number limits, like on Digital OSF/1 and HP-UX.
-  ac_max_sed_lines=48
-  ac_sed_frag=1 # Number of current file.
-  ac_beg=1 # First line for current file.
-  ac_end=$ac_max_sed_lines # Line after last line for current file.
-  ac_more_lines=:
-  ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    fi
-    if test ! -s $tmp/subs.frag; then
-      ac_more_lines=false
-    else
-      # The purpose of the label and of the branching condition is to
-      # speed up the sed processing (if there are no `@' at all, there
-      # is no need to browse any of the substitutions).
-      # These are the two extra sed commands mentioned above.
-      (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-  	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-  	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-      fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
-      ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
-    fi
-  done
-  if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
-  fi
-fi # test -n "$CONFIG_FILES"
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-        cat >$tmp/stdin
-        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$ac_file" : 'X\(//\)[^/]' \| \
-         X"$ac_file" : 'X\(//\)$' \| \
-         X"$ac_file" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$as_dir" : 'X\(//\)[^/]' \| \
-         X"$as_dir" : 'X\(//\)$' \| \
-         X"$as_dir" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
-# absolute.
-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
-
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
-  esac
-
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    configure_input=
-  else
-    configure_input="$ac_file.  "
-  fi
-  configure_input=$configure_input"Generated from `echo $ac_file_in |
-                                     sed 's,.*/,,'` by configure."
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-         # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-         echo $f;;
-      *) # Relative
-         if test -f "$f"; then
-           # Build tree
-           echo $f
-         elif test -f "$srcdir/$f"; then
-           # Source tree
-           echo $srcdir/$f
-         else
-           # /dev/null tree
-           { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-         fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s, at configure_input@,$configure_input,;t t
-s, at srcdir@,$ac_srcdir,;t t
-s, at abs_srcdir@,$ac_abs_srcdir,;t t
-s, at top_srcdir@,$ac_top_srcdir,;t t
-s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s, at builddir@,$ac_builddir,;t t
-s, at abs_builddir@,$ac_abs_builddir,;t t
-s, at top_builddir@,$ac_top_builddir,;t t
-s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
-s, at INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
-  if test x"$ac_file" != x-; then
-    mv $tmp/out $ac_file
-  else
-    cat $tmp/out
-    rm -f $tmp/out
-  fi
-
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
-ac_dB='[ 	].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-        cat >$tmp/stdin
-        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-         # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-         echo $f;;
-      *) # Relative
-         if test -f "$f"; then
-           # Build tree
-           echo $f
-         elif test -f "$srcdir/$f"; then
-           # Source tree
-           echo $srcdir/$f
-         else
-           # /dev/null tree
-           { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-         fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-  # Remove the trailing spaces.
-  sed 's/[ 	]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h.  The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status.  Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	(][^ 	(]*\)\(([^)]*)\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	][^ 	]*\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless.  Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo '  if grep "^[ 	]*#[ 	]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo '  :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
-  # Write a limited-size here document to $tmp/defines.sed.
-  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#define' lines.
-  echo '/^[ 	]*#[ 	]*define/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/defines.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
-  rm -f conftest.defines
-  mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo '  fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
-  # Write a limited-size here document to $tmp/undefs.sed.
-  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#undef'
-  echo '/^[ 	]*#[ 	]*undef/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
-  rm -f conftest.undefs
-  mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    echo "/* Generated by configure.  */" >$tmp/config.h
-  else
-    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
-  fi
-  cat $tmp/in >>$tmp/config.h
-  rm -f $tmp/in
-  if test x"$ac_file" != x-; then
-    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$ac_file" : 'X\(//\)[^/]' \| \
-         X"$ac_file" : 'X\(//\)$' \| \
-         X"$ac_file" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-      { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$as_dir" : 'X\(//\)[^/]' \| \
-         X"$as_dir" : 'X\(//\)$' \| \
-         X"$as_dir" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-      rm -f $ac_file
-      mv $tmp/config.h $ac_file
-    fi
-  else
-    cat $tmp/config.h
-    rm -f $tmp/config.h
-  fi
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_COMMANDS section.
-#
-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
-  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
-  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
-  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$ac_dest" : 'X\(//\)[^/]' \| \
-         X"$ac_dest" : 'X\(//\)$' \| \
-         X"$ac_dest" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_dest" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
-# absolute.
-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
-
-
-  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
-echo "$as_me: executing $ac_dest commands" >&6;}
-  case $ac_dest in
-    default ) test -z "$CONFIG_HEADERS" || date > stamp-h
-chmod 755 cmail
- ;;
-  esac
-done
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
-fi
-
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..c7bf530
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,421 @@
+dnl| configure.in
+dnl|
+dnl| Copyright 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+dnl| Foundation, Inc.
+dnl|
+dnl| GNU XBoard is free software: you can redistribute it and/or modify
+dnl| it under the terms of the GNU General Public License as published by
+dnl| the Free Software Foundation, either version 3 of the License, or (at
+dnl| your option) any later version.
+dnl| 
+dnl| GNU XBoard is distributed in the hope that it will be useful, but
+dnl| WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl| General Public License for more details.
+dnl| 
+dnl| You should have received a copy of the GNU General Public License
+dnl| along with this program. If not, see http://www.gnu.org/licenses/.  
+dnl| 
+dnl| --------------------------------------------------------------------
+dnl|
+dnl| You can process this file with autoconf to produce a configure script.
+dnl| However, normally the supplied configure script will work fine.
+dnl|
+dnl| If you do need to change the configure script, instead of editing
+dnl| it directly, try to edit configure.in (in a way that will keep
+dnl| it portable to sites and systems other than your own), and run autoconf 
+dnl| to regenerate configure.  Then submit your changes to be folded into
+dnl| the standard version of xboard.
+
+dnl| need to change these here and in AC_INIT
+PRODUCT=xboard
+VERSION=4.4  
+PATCHLEVEL=0j
+
+AC_INIT([xboard],[4.4.0j],[bug-xboard at gnu.org])
+AM_INIT_AUTOMAKE
+
+AC_CONFIG_HEADERS([config.h])
+
+dnl | a bunch of templates for defines used below
+AH_TEMPLATE([FIRST_PTY_LETTER],[template])
+AH_TEMPLATE([HAVE_FCNTL_H],[template])
+AH_TEMPLATE([HAVE_GETHOSTNAME],[template])
+AH_TEMPLATE([HAVE_GETTIMEOFDAY],[template])
+AH_TEMPLATE([HAVE_RANDOM],[template])
+AH_TEMPLATE([HAVE_SYS_SOCKET_H],[template])
+AH_TEMPLATE([IBMRTAIX],[template])
+AH_TEMPLATE([LAST_PTY_LETTER],[template])
+AH_TEMPLATE([PATCHLEVEL],[template])
+AH_TEMPLATE([PRODUCT],[template])
+AH_TEMPLATE([PTY_ITERATION],[template])
+AH_TEMPLATE([PTY_NAME_SPRINTF],[template])
+AH_TEMPLATE([PTY_OPEN],[template])
+AH_TEMPLATE([PTY_TTY_NAME_SPRINTF],[template])
+AH_TEMPLATE([REMOTE_SHELL],[template])
+AH_TEMPLATE([RTU],[template])
+AH_TEMPLATE([UNIPLUS],[template])
+AH_TEMPLATE([USE_PTYS],[template])
+AH_TEMPLATE([VERSION],[template])
+AH_TEMPLATE([X_WCHAR],[template])
+AH_TEMPLATE([ATTENTION],[template])
+AH_TEMPLATE([DEFINED_SYS_ERRLIST],[template])
+AH_TEMPLATE([HAVE_LIBXPM],[template])
+AH_TEMPLATE([USE_XAW3D],[template])
+AH_TEMPLATE([X_LOCALE],[template])
+
+
+
+if test -z "$CFLAGS" ; then
+dnl| Prevent the next macro from setting CFLAGS to -g
+  CFLAGS=" "
+fi
+AC_PROG_CC
+AC_PROG_CPP
+AC_ISC_POSIX
+AC_PROG_INSTALL
+
+AC_PROG_LEX
+if test "$LEX" != flex; then
+  LEX="$SHELL $missing_dir/missing flex"
+  AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
+  AC_SUBST([LEXLIB], [''])
+fi
+
+
+AC_CHECK_PROGS(RSH, remsh rsh, rsh)
+AC_CHECK_PROGS(MINFO, makeinfo, makeinfo_not_found)
+if test "$MINFO" == makeinfo_not_found ; then
+   echo Please install \"makeinfo\"
+   exit 1
+fi
+AC_DEFINE_UNQUOTED(REMOTE_SHELL, "$RSH")
+AC_CHECK_PROG(NROFF, nroff, [nroff -man], cat)
+AC_SUBST(NROFFFLAGS)
+AC_PATH_PROGS(AWKPATH, awk mawk gawk nawk)
+AC_PATH_PROGS(PERLPATH, perl)
+
+AC_HEADER_STDC
+AC_HEADER_TIME
+AC_HEADER_SYS_WAIT
+AC_HEADER_DIRENT
+AC_TYPE_SIGNAL
+AC_CHECK_HEADERS(stropts.h sys/time.h string.h unistd.h sys/systeminfo.h)
+AC_CHECK_HEADERS(fcntl.h sys/fcntl.h, break)
+AC_CHECK_HEADERS(sys/socket.h lan/socket.h, break)
+AC_CHECK_HEADER(stddef.h, [], AC_DEFINE(X_WCHAR, 1))
+
+AC_CHECK_FUNCS(_getpty grantpt setitimer usleep)
+AC_CHECK_FUNCS(gettimeofday ftime, break)
+AC_CHECK_FUNCS(random rand48, break)
+AC_CHECK_FUNCS(gethostname sysinfo, break)
+AC_CHECK_FUNC(setlocale, [],
+  AC_CHECK_LIB(i, setlocale, [], AC_DEFINE(X_LOCALE, 1)))
+
+AC_CHECK_LIB(seq, getpseudotty)
+
+AC_PATH_XTRA
+if test -n "$no_x" ; then
+  echo $PRODUCT requires the X Window System header files and libraries!
+  echo They were not found on your system.  See FAQ topic C.2.
+  echo configure failed
+  exit 1
+fi
+
+AC_CHECK_HEADER(X11/Intrinsic.h,xt="yes",xt="no")
+
+if test "$xt" == "no" ; then
+   echo Xt headers not found
+   exit 1
+fi
+
+AC_ARG_WITH(Xaw3d, [  --with-Xaw3d            use Xaw3d instead of Xaw],
+  with_xaw3d="yes", with_xaw3d="no")
+
+
+xaw_headers="no"
+if test "$with_xaw3d" == "yes" ; then
+   XAW_LIBS="-lXaw3d"
+   AC_CHECK_LIB([Xaw3d], [XawTextReplace], xaw3d_lib="yes", xaw3d_lib="no")
+   if test "$xaw3d_lib" == "no" ; then
+      echo Xaw3d libraries not found
+      exit 1
+   else
+      AC_CHECK_HEADER(X11/Xaw3d/Dialog.h,xaw3d_headers="yes",xaw3d_headers="no")	
+      if test "$xaw3d_headers" == "yes" ; then
+        AC_DEFINE(USE_XAW3D)
+        xaw_headers="yes"
+      else
+      	AC_CHECK_HEADER(X11/Xaw/Dialog.h,xaw_headers="yes")	
+      fi
+   fi
+else
+   XAW_LIBS="-lXaw"
+   AC_CHECK_HEADER(X11/Xaw/Dialog.h,xaw_headers="yes")
+fi
+
+AC_SUBST(XAW_LIBS)
+
+
+
+if test "$xaw_headers" == "no" ; then
+   echo Xaw headers not found 
+   exit 1
+
+fi
+
+
+AC_CANONICAL_HOST
+
+dnl| The following info is mostly gathered from GNU Emacs 19.24.  Basically,
+dnl| we are trying to find out whether this is a System-V derivative in
+dnl| which pipes don't work with select() and if so, whether there is anything
+dnl| strange about the way to open a pty.  Some of the work was done above
+dnl| by looking for _getpty, grantpt, and getpseudotty.  A few other strange
+dnl| properties of particular systems are also handled here.
+
+dnl| 4/6/97 I'm not sure there really are any systems where pipes
+dnl| don't work with select(), and ptys cause problems on many
+dnl| systems, so I'm changing the default to disable ptys in all
+dnl| cases.  I will change it back if I get bug reports that are fixed
+dnl| by doing a "configure --enable-ptys"
+
+USE_PTYS=0
+case "$host" in
+  *-*-hpux* )
+    AC_DEFINE(PTY_TTY_NAME_SPRINTF,
+	[sprintf (pty_name, "/dev/pty/tty%c%x", c, i);])
+    AC_DEFINE(PTY_NAME_SPRINTF,
+	[sprintf (pty_name, "/dev/ptym/pty%c%x", c, i);])
+dnl| USE_PTYS=1
+    if test "$GCC" = yes; then
+      CONF_CFLAGS="-fwritable-strings"
+    else
+
+dnl| Note: You might be able to build xboard even if your compiler does not
+dnl| support ANSI C (-Aa).  xboard itself does not require ANSI C.  I don't
+dnl| know whether the X header files on HP-UX require it.
+
+      CONF_CFLAGS="-Aa -D_HPUX_SOURCE"
+    fi
+
+dnl| HP doesn't supply a full set of X header files and libraries.  People
+dnl| often have some things installed in one place and some in another. 
+dnl| AC_PATH_XTRA will find only one place, so we try to add all the
+dnl| likely ones that might be missing here.  It might be better to
+dnl| change AC_PATH_XTRA to try to extract this information from imake,
+dnl| since folks who install the missing bits often configure their
+dnl| imake to find them, but I don't want to delve into autoconf and
+dnl| hack on its internals.
+
+    if test -d /opt/hppd/include/X11; then
+      X_CFLAGS="$X_CFLAGS -I/opt/hppd/include"
+      X_LIBS="$X_LIBS -L/opt/hppd/lib"
+    elif test -d /usr/contrib/X11R5/include; then
+      X_CFLAGS="$X_CFLAGS -I/usr/contrib/X11R5/include"
+      X_LIBS="$X_LIBS -L/usr/contrib/X11R5/lib"
+    elif test -d /usr/contrib/mitX11R5/include; then
+      X_CFLAGS="$X_CFLAGS -I/usr/contrib/mitX11R5/include"
+      X_LIBS="$X_LIBS -L/usr/contrib/mitX11R5/lib"
+    elif test -d /MIT/X11R5/include; then
+      X_CFLAGS="$X_CFLAGS -I/MIT/X11R5/include"
+      X_LIBS="$X_LIBS -L/MIT/X11R5/lib"
+    elif test -d /usr/local/include/X11R5; then
+      X_CFLAGS="$X_CFLAGS -I/usr/local/include/X11R5"
+      X_LIBS="$X_LIBS -L/usr/local/lib/X11R5"
+    fi
+    if test -d /usr/include/X11R5; then
+      X_CFLAGS="$X_CFLAGS -I/usr/include/X11R5"
+      X_LIBS="$X_LIBS -L/usr/lib/X11R5 -L/usr/lib/X11R4"
+    elif test -d /usr/include/X11R4; then
+      X_CFLAGS="$X_CFLAGS -I/usr/include/X11R4"
+      X_LIBS="$X_LIBS -L/usr/lib/X11R4"
+    fi
+  ;;
+
+  romp-ibm-aix* )
+    AC_DEFINE(IBMRTAIX, 1)
+dnl| USE_PTYS=1
+  ;;
+
+  i386-ibm-aix )
+dnl| USE_PTYS=1
+    if test "$GCC" = yes; then
+      CONF_CFLAGS="-fwritable-strings"
+    fi
+  ;;
+
+  *-*-aix3* | *-*-bosx* )
+    AC_DEFINE(PTY_ITERATION, [for (c = 0; !c; c++)])
+    AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptc");])
+    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [strcpy (pty_name, ttyname (fd));])
+dnl| USE_PTYS=1
+  ;;
+
+  *-*-cxux* )
+    AC_DEFINE(FIRST_PTY_LETTER, 'A')
+    AC_DEFINE(LAST_PTY_LETTER, 'P')
+dnl| USE_PTYS=1
+  ;;
+
+  *-*-uniplus* )
+    AC_DEFINE(UNIPLUS, 1)
+dnl| USE_PTYS=1
+  ;;
+
+  *-*-rtu* )
+    AC_DEFINE(FIRST_PTY_LETTER, 'z')
+    AC_DEFINE(PTY_TTY_NAME_SPRINTF,
+        [sprintf (pty_name, "/dev/ttyp%x", i);])
+    AC_DEFINE(PTY_NAME_SPRINTF,
+	[sprintf (pty_name, "/dev/pty%x", i);])
+    AC_DEFINE(RTU, 1)
+dnl| USE_PTYS=1
+  ;;
+
+  *-*-iris* | *-*-irix3* )
+    AC_DEFINE(PTY_ITERATION, [for (c = 0; !c; c++)])
+    AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptc");])
+    AC_DEFINE(PTY_TTY_NAME_SPRINTF,
+	[sprintf (pty_name, "/dev/ttyq%d", minor(stb.st_rdev));])
+dnl| USE_PTYS=1
+  ;;
+
+  *-*-irix* )
+dnl| USE_PTYS=1
+  ;;
+
+  *-*-sunos4* | *-*-solaris1* )
+
+dnl| Work around a bug in the SunOS 4.x linker.  Not needed if you have patches
+dnl|  100512-02 and 100573-03 from Sun.  The X FAQ says that the following is
+dnl|  "overkill," but doesn't explain what should be done instead.
+
+    if test "$GCC" = yes; then
+      PRE_XMULIB="-static"
+      POST_XMULIB="-dynamic"
+    else
+      PRE_XMULIB="-Bstatic"
+      POST_XMULIB="-Bdynamic"
+    fi
+  ;;
+
+  *-*-sunos5* | *-*-solaris2* )
+dnl| USE_PTYS=1
+
+dnl| I'm not sure -lelf is needed, but it was in the old Imakefile.
+dnl| The other libraries should all be found by Ac_PATH_XTRA or other
+dnl| code above.
+
+    X_LIBS="$X_LIBS -lelf"
+  ;;
+
+  *-*-sco* )
+    AC_DEFINE(PTY_ITERATION, [for (i = 0; ; i++)])
+    AC_DEFINE(PTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ptyp%d", i);])
+    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ttyp%d", i);])
+dnl| USE_PTYS=1
+  ;;
+	
+  *-*-dynix* | *-*-ptx* )
+dnl| USE_PTYS=1
+  ;;
+
+  *-*-esix* )
+dnl| USE_PTYS=1
+  ;;
+
+  *-*-usg5-4* | *-*-sysvr4* )
+dnl| USE_PTYS=1
+  ;;
+
+  *-*-usg* | *-*-sysv* | *-*-aix* )
+dnl| USE_PTYS=1
+  ;;
+
+  vax-*-ultrix )
+    if test "$GCC" = yes; then
+      CONF_CFLAGS="-fwritable-strings"
+    fi
+  ;;
+esac
+
+AC_ARG_ENABLE(xpm,
+[  --enable-xpm            libXpm will be used if found (default)
+  --disable-xpm           libXpm will not be used],
+[enable_xpm="$enableval"], [enable_xpm="yes"])
+
+if test "$enable_xpm" = "yes"; then
+  save_cflags="$CFLAGS"
+  CFLAGS="$CFLAGS $X_CFLAGS"
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  AC_CHECK_HEADERS(X11/xpm.h)
+  CFLAGS="$save_cflags"
+  if test "$ac_cv_header_X11_xpm_h" = "yes"; then
+    save_ldflags="$LDFLAGS"
+    LDFLAGS="$LDFLAGS $X_LIBS"
+    AC_CHECK_LIB(Xpm, XpmReadFileToPixmap,
+                 [X_PRE_LIBS="-lXpm $X_PRE_LIBS"; AC_DEFINE(HAVE_LIBXPM)], [],
+                 [$X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
+    LDFLAGS="$save_ldflags"
+  fi
+fi
+
+AC_SUBST(PRE_XMULIB)
+AC_SUBST(POST_XMULIB)
+AC_SUBST(CONF_CFLAGS)
+AC_SUBST(CONF_LDFLAGS)
+
+AC_MSG_CHECKING(whether ptys or pipes should be used)
+AC_ARG_ENABLE(ptys, 
+[  --enable-ptys           force use of pseudo-ttys with child processes
+  --disable-ptys          force use of pipes with child processes],
+[if test "$enableval" = yes; then
+  USE_PTYS=1
+  AC_MSG_RESULT([ptys (user override)])
+fi
+if test "$enableval" = no; then
+  USE_PTYS=0
+  AC_MSG_RESULT([pipes (user override)])
+fi],
+[if test "$USE_PTYS" = 1; then
+  AC_MSG_RESULT(ptys)
+else
+  AC_MSG_RESULT(pipes)
+fi])
+AC_DEFINE_UNQUOTED(USE_PTYS, $USE_PTYS)
+
+
+dnl | define not to build zippy as a default, so that autoheader is happy
+AC_DEFINE(ZIPPY, 0,[should zippy be enabled])
+AC_ARG_ENABLE(zippy, 
+[  --enable-zippy          support interfacing a chess program to ICS (default)
+  --disable-zippy         do not support interfacing a chess program to ICS],
+[enable_zippy="$enableval"], [enable_zippy="yes"])
+if test "$enable_zippy" = yes; then
+  AC_DEFINE(ZIPPY, 1,[should zippy be enabled])
+  ZIPPY_O=zippy.o
+  ZIPPY_H=zippy.h
+fi
+AC_SUBST(ZIPPY_O)  
+AC_SUBST(ZIPPY_H)  
+
+AC_ARG_ENABLE(sigint, 
+[  --enable-sigint         sending SIGINT (^C) wakes up GNU Chess (default)
+  --disable-sigint        typing a command wakes up GNU Chess],
+[if test "$enableval" = yes; then
+  AC_DEFINE(ATTENTION, 1)
+fi],
+[AC_DEFINE(ATTENTION, 1)])
+
+AC_DEFINE_UNQUOTED(PRODUCT, "$PRODUCT")
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
+AC_DEFINE_UNQUOTED(PATCHLEVEL, "$PATCHLEVEL")
+AC_SUBST(PRODUCT)
+AC_SUBST(VERSION)
+AC_SUBST(PATCHLEVEL)
+
+AC_CONFIG_FILES([Makefile cmail])
+AC_CONFIG_COMMANDS([test-stamp-h],[test -z "$CONFIG_HEADERS" || date > stamp-h])
+AC_CONFIG_COMMANDS([chmod-cmail],[chmod 755 cmail])
+AC_OUTPUT
diff --git a/configure.in b/configure.in
deleted file mode 100644
index c7f55f6..0000000
--- a/configure.in
+++ /dev/null
@@ -1,321 +0,0 @@
-dnl| configure.in
-dnl|
-dnl| You can process this file with autoconf to produce a configure script.
-dnl| However, normally the supplied configure script will work fine.
-dnl|
-dnl| If you do need to change the configure script, instead of editing
-dnl| it directly, try to edit configure.in (in a way that will keep
-dnl| it portable to sites and systems other than your own), and run autoconf 
-dnl| to regenerate configure.  Then submit your changes to be folded into
-dnl| the standard version of xboard.
-
-AC_INIT(xboard.c)
-AC_CONFIG_HEADER(config.h)
-
-PRODUCT=xboard
-VERSION=4.2
-PATCHLEVEL=7
-
-if test -z "$CFLAGS" ; then
-dnl| Prevent the next macro from setting CFLAGS to -g
-  CFLAGS=" "
-fi
-AC_PROG_CC
-AC_PROG_CPP
-AC_ISC_POSIX
-AC_PROG_INSTALL
-AC_CHECK_PROGS(LEX, lex flex, lex_not_found)
-if test "$LEX" != lex_not_found ; then
-  AC_DECL_YYTEXT
-fi
-AC_CHECK_PROGS(RSH, remsh rsh, rsh)
-AC_DEFINE_UNQUOTED(REMOTE_SHELL, "$RSH")
-AC_CHECK_PROG(NROFF, nroff, [nroff -man], cat)
-AC_SUBST(NROFFFLAGS)
-AC_PATH_PROGS(AWKPATH, awk mawk gawk nawk)
-AC_PATH_PROGS(PERLPATH, perl)
-
-AC_ARG_WITH(Xaw3d, [  --with-Xaw3d            use Xaw3d instead of Xaw],
-  [AC_DEFINE(USE_XAW3D)
-   XAW_LIBS="-lXaw3d"],
-  XAW_LIBS="-lXaw")
-AC_SUBST(XAW_LIBS)
-
-AC_HEADER_STDC
-AC_HEADER_TIME
-AC_HEADER_SYS_WAIT
-AC_HEADER_DIRENT
-AC_TYPE_SIGNAL
-AC_CHECK_HEADERS(stropts.h sys/time.h string.h unistd.h sys/systeminfo.h)
-AC_CHECK_HEADERS(fcntl.h sys/fcntl.h, break)
-AC_CHECK_HEADERS(sys/socket.h lan/socket.h, break)
-AC_CHECK_HEADER(stddef.h, [], AC_DEFINE(X_WCHAR, 1))
-
-AC_CHECK_FUNCS(_getpty grantpt setitimer usleep)
-AC_CHECK_FUNCS(gettimeofday ftime, break)
-AC_CHECK_FUNCS(random rand48, break)
-AC_CHECK_FUNCS(gethostname sysinfo, break)
-AC_CHECK_FUNC(setlocale, [],
-  AC_CHECK_LIB(i, setlocale, [], AC_DEFINE(X_LOCALE, 1)))
-
-AC_CHECK_LIB(seq, getpseudotty)
-
-AC_PATH_XTRA
-if test -n "$no_x" ; then
-  echo $PRODUCT requires the X Window System header files and libraries!
-  echo They were not found on your system.  See FAQ topic C.2.
-  echo configure failed
-  exit 1
-fi
-
-AC_CANONICAL_HOST
-
-dnl| The following info is mostly gathered from GNU Emacs 19.24.  Basically,
-dnl| we are trying to find out whether this is a System-V derivative in
-dnl| which pipes don't work with select() and if so, whether there is anything
-dnl| strange about the way to open a pty.  Some of the work was done above
-dnl| by looking for _getpty, grantpt, and getpseudotty.  A few other strange
-dnl| properties of particular systems are also handled here.
-
-dnl| 4/6/97 I'm not sure there really are any systems where pipes
-dnl| don't work with select(), and ptys cause problems on many
-dnl| systems, so I'm changing the default to disable ptys in all
-dnl| cases.  I will change it back if I get bug reports that are fixed
-dnl| by doing a "configure --enable-ptys"
-
-USE_PTYS=0
-case "$host" in
-  *-*-hpux* )
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF,
-	[sprintf (pty_name, "/dev/pty/tty%c%x", c, i);])
-    AC_DEFINE(PTY_NAME_SPRINTF,
-	[sprintf (pty_name, "/dev/ptym/pty%c%x", c, i);])
-dnl| USE_PTYS=1
-    if test "$GCC" = yes; then
-      CONF_CFLAGS="-fwritable-strings"
-    else
-
-dnl| Note: You might be able to build xboard even if your compiler does not
-dnl| support ANSI C (-Aa).  xboard itself does not require ANSI C.  I don't
-dnl| know whether the X header files on HP-UX require it.
-
-      CONF_CFLAGS="-Aa -D_HPUX_SOURCE"
-    fi
-
-dnl| HP doesn't supply a full set of X header files and libraries.  People
-dnl| often have some things installed in one place and some in another. 
-dnl| AC_PATH_XTRA will find only one place, so we try to add all the
-dnl| likely ones that might be missing here.  It might be better to
-dnl| change AC_PATH_XTRA to try to extract this information from imake,
-dnl| since folks who install the missing bits often configure their
-dnl| imake to find them, but I don't want to delve into autoconf and
-dnl| hack on its internals.
-
-    if test -d /opt/hppd/include/X11; then
-      X_CFLAGS="$X_CFLAGS -I/opt/hppd/include"
-      X_LIBS="$X_LIBS -L/opt/hppd/lib"
-    elif test -d /usr/contrib/X11R5/include; then
-      X_CFLAGS="$X_CFLAGS -I/usr/contrib/X11R5/include"
-      X_LIBS="$X_LIBS -L/usr/contrib/X11R5/lib"
-    elif test -d /usr/contrib/mitX11R5/include; then
-      X_CFLAGS="$X_CFLAGS -I/usr/contrib/mitX11R5/include"
-      X_LIBS="$X_LIBS -L/usr/contrib/mitX11R5/lib"
-    elif test -d /MIT/X11R5/include; then
-      X_CFLAGS="$X_CFLAGS -I/MIT/X11R5/include"
-      X_LIBS="$X_LIBS -L/MIT/X11R5/lib"
-    elif test -d /usr/local/include/X11R5; then
-      X_CFLAGS="$X_CFLAGS -I/usr/local/include/X11R5"
-      X_LIBS="$X_LIBS -L/usr/local/lib/X11R5"
-    fi
-    if test -d /usr/include/X11R5; then
-      X_CFLAGS="$X_CFLAGS -I/usr/include/X11R5"
-      X_LIBS="$X_LIBS -L/usr/lib/X11R5 -L/usr/lib/X11R4"
-    elif test -d /usr/include/X11R4; then
-      X_CFLAGS="$X_CFLAGS -I/usr/include/X11R4"
-      X_LIBS="$X_LIBS -L/usr/lib/X11R4"
-    fi
-  ;;
-
-  romp-ibm-aix* )
-    AC_DEFINE(IBMRTAIX, 1)
-dnl| USE_PTYS=1
-  ;;
-
-  i386-ibm-aix )
-dnl| USE_PTYS=1
-    if test "$GCC" = yes; then
-      CONF_CFLAGS="-fwritable-strings"
-    fi
-  ;;
-
-  *-*-aix3* | *-*-bosx* )
-    AC_DEFINE(PTY_ITERATION, [for (c = 0; !c; c++)])
-    AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptc");])
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [strcpy (pty_name, ttyname (fd));])
-dnl| USE_PTYS=1
-  ;;
-
-  *-*-cxux* )
-    AC_DEFINE(FIRST_PTY_LETTER, 'A')
-    AC_DEFINE(LAST_PTY_LETTER, 'P')
-dnl| USE_PTYS=1
-  ;;
-
-  *-*-uniplus* )
-    AC_DEFINE(UNIPLUS, 1)
-dnl| USE_PTYS=1
-  ;;
-
-  *-*-rtu* )
-    AC_DEFINE(FIRST_PTY_LETTER, 'z')
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF,
-        [sprintf (pty_name, "/dev/ttyp%x", i);])
-    AC_DEFINE(PTY_NAME_SPRINTF,
-	[sprintf (pty_name, "/dev/pty%x", i);])
-    AC_DEFINE(RTU, 1)
-dnl| USE_PTYS=1
-  ;;
-
-  *-*-iris* | *-*-irix3* )
-    AC_DEFINE(PTY_ITERATION, [for (c = 0; !c; c++)])
-    AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptc");])
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF,
-	[sprintf (pty_name, "/dev/ttyq%d", minor(stb.st_rdev));])
-dnl| USE_PTYS=1
-  ;;
-
-  *-*-irix* )
-dnl| USE_PTYS=1
-  ;;
-
-  *-*-sunos4* | *-*-solaris1* )
-
-dnl| Work around a bug in the SunOS 4.x linker.  Not needed if you have patches
-dnl|  100512-02 and 100573-03 from Sun.  The X FAQ says that the following is
-dnl|  "overkill," but doesn't explain what should be done instead.
-
-    if test "$GCC" = yes; then
-      PRE_XMULIB="-static"
-      POST_XMULIB="-dynamic"
-    else
-      PRE_XMULIB="-Bstatic"
-      POST_XMULIB="-Bdynamic"
-    fi
-  ;;
-
-  *-*-sunos5* | *-*-solaris2* )
-dnl| USE_PTYS=1
-
-dnl| I'm not sure -lelf is needed, but it was in the old Imakefile.
-dnl| The other libraries should all be found by Ac_PATH_XTRA or other
-dnl| code above.
-
-    X_LIBS="$X_LIBS -lelf"
-  ;;
-
-  *-*-sco* )
-    AC_DEFINE(PTY_ITERATION, [for (i = 0; ; i++)])
-    AC_DEFINE(PTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ptyp%d", i);])
-    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ttyp%d", i);])
-dnl| USE_PTYS=1
-  ;;
-	
-  *-*-dynix* | *-*-ptx* )
-dnl| USE_PTYS=1
-  ;;
-
-  *-*-esix* )
-dnl| USE_PTYS=1
-  ;;
-
-  *-*-usg5-4* | *-*-sysvr4* )
-dnl| USE_PTYS=1
-  ;;
-
-  *-*-usg* | *-*-sysv* | *-*-aix* )
-dnl| USE_PTYS=1
-  ;;
-
-  vax-*-ultrix )
-    if test "$GCC" = yes; then
-      CONF_CFLAGS="-fwritable-strings"
-    fi
-  ;;
-esac
-
-AC_ARG_ENABLE(xpm,
-[  --enable-xpm            libXpm will be used if found (default)
-  --disable-xpm           libXpm will not be used],
-[enable_xpm="$enableval"], [enable_xpm="yes"])
-
-if test "$enable_xpm" = "yes"; then
-  save_cflags="$CFLAGS"
-  CFLAGS="$CFLAGS $X_CFLAGS"
-  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-  AC_CHECK_HEADERS(X11/xpm.h)
-  CFLAGS="$save_cflags"
-  if test "$ac_cv_header_X11_xpm_h" = "yes"; then
-    save_ldflags="$LDFLAGS"
-    LDFLAGS="$LDFLAGS $X_LIBS"
-    AC_CHECK_LIB(Xpm, XpmReadFileToPixmap,
-                 [X_PRE_LIBS="-lXpm $X_PRE_LIBS"; AC_DEFINE(HAVE_LIBXPM)], [],
-                 [$X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
-    LDFLAGS="$save_ldflags"
-  fi
-fi
-
-AC_SUBST(PRE_XMULIB)
-AC_SUBST(POST_XMULIB)
-AC_SUBST(CONF_CFLAGS)
-AC_SUBST(CONF_LDFLAGS)
-
-AC_MSG_CHECKING(whether ptys or pipes should be used)
-AC_ARG_ENABLE(ptys, 
-[  --enable-ptys           force use of pseudo-ttys with child processes
-  --disable-ptys          force use of pipes with child processes],
-[if test "$enableval" = yes; then
-  USE_PTYS=1
-  AC_MSG_RESULT([ptys (user override)])
-fi
-if test "$enableval" = no; then
-  USE_PTYS=0
-  AC_MSG_RESULT([pipes (user override)])
-fi],
-[if test "$USE_PTYS" = 1; then
-  AC_MSG_RESULT(ptys)
-else
-  AC_MSG_RESULT(pipes)
-fi])
-AC_DEFINE_UNQUOTED(USE_PTYS, $USE_PTYS)
-
-AC_ARG_ENABLE(zippy, 
-[  --enable-zippy          support interfacing a chess program to ICS (default)
-  --disable-zippy         do not support interfacing a chess program to ICS],
-[enable_zippy="$enableval"], [enable_zippy="yes"])
-if test "$enable_zippy" = yes; then
-  AC_DEFINE(ZIPPY, 1)
-  ZIPPY_O=zippy.o
-  ZIPPY_H=zippy.h
-fi
-AC_SUBST(ZIPPY_O)  
-AC_SUBST(ZIPPY_H)  
-
-AC_ARG_ENABLE(sigint, 
-[  --enable-sigint         sending SIGINT (^C) wakes up GNU Chess (default)
-  --disable-sigint        typing a command wakes up GNU Chess],
-[if test "$enableval" = yes; then
-  AC_DEFINE(ATTENTION, 1)
-fi],
-[AC_DEFINE(ATTENTION, 1)])
-
-AC_DEFINE_UNQUOTED(PRODUCT, "$PRODUCT")
-AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
-AC_DEFINE_UNQUOTED(PATCHLEVEL, "$PATCHLEVEL")
-AC_SUBST(PRODUCT)
-AC_SUBST(VERSION)
-AC_SUBST(PATCHLEVEL)
-
-AC_OUTPUT(Makefile cmail xboard.texinfo,
-[test -z "$CONFIG_HEADERS" || date > stamp-h
-chmod 755 cmail
-])
diff --git a/copyright.texi b/copyright.texi
index 661d27a..64d3047 100644
--- a/copyright.texi
+++ b/copyright.texi
@@ -1,3 +1,5 @@
+ at setfilename copyright.info
+
 Copyright @copyright{} 1991 Digital Equipment Corporation, Maynard, Massachusetts.
 
 All Rights Reserved.
@@ -18,7 +20,8 @@ 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.
 
-Enhancements copyright @copyright{} 1992-2003 Free Software Foundation, Inc.
+Enhancements copyright @copyright{}
+1992-2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc.
 
 @format
 Published by the Free Software Foundation
diff --git a/engine-intf.html b/engine-intf.html
index 9ee5d0e..6fb7c11 100644
--- a/engine-intf.html
+++ b/engine-intf.html
@@ -1,1896 +1,2250 @@
-<html>
-<head>
-<title>Chess Engine Communication Protocol</title>
-</head>
-
-<body>
-<hr noshade size="2">
-<h1>Chess Engine Communication Protocol</h1>
-<h2><a href="http://www.tim-mann.org/">Tim Mann</a></h2>
-<p>
-$Id: engine-intf.html,v 2.1 2003/10/27 19:21:00 mann Exp $<br>
-Version 2; implemented in xboard/WinBoard 4.2.1 and later.<br>
-Changes since version 1 are indicated in <font color=red>red</font>.
-<hr noshade size="2">
-
-<ul>
-<li><a href="#1">1. Introduction</a>
-<li><a href="#2">2. Connection</a>
-<li><a href="#3">3. Debugging</a>
-<li><a href="#4">4. How it got this way</a>
-<li><a href="#5">5. WinBoard requires Win32 engines</a>
-<li><a href="#6">6. Hints on input/output</a>
-<li><a href="#7">7. Signals</a>
-<li><a href="#8">8. Commands from xboard to the engine</a>
-<li><a href="#9">9. Commands from the engine to xboard</a>
-<li><a href="#10">10. Thinking Output</a>
-<li><a href="#11">11. Time control</a>
-<li><a href="#12">12. Analyze Mode</a>
-<li><a href="#13">13. Idioms and backward compatibility features</a>
-</ul>
-
-<hr noshade size="2">
-
-<h2><a name="1">1. Introduction</a></h2>
-
-<p>
-This document is a set of rough notes on the protocol that xboard and
-WinBoard use to communicate with gnuchessx and other chess engines.
-These notes may be useful if you want to connect a different chess
-engine to xboard.  Throughout the notes, "xboard" means both xboard
-and WinBoard except where they are specifically contrasted.
-</p>
-
-<p>
-There are two reasons I can imagine someone wanting to do this: 
-</p>
-<ol>
-<li>You have, or are developing, a chess engine but you don't want to
-write your own graphical interface. 
-<li>You have, or are developing,a chess engine, and you want to
-interface it to the Internet Chess Server.
-</ol>
-
-<p>
-In case (2), if you are using xboard, you will need to configure the
-"Zippy" code into it, but WinBoard includes this code already.  See
-the file <a
-href="http://www.tim-mann.org/xboard/zippy.README">zippy.README</a>
-in the xboard or WinBoard distribution for more information.
-
-</p>
-
-<p>
-These notes are unpolished, but I've attempted to make them complete
-in this release.  If you notice any errors, omissions, or misleading
-statements, let me know.
-</p>
-
-<p>
-I'd like to hear from everyone who is trying to interface their own
-chess engine to xboard/WinBoard.  Please email me,
-tim<a name="nospam">@</a>tim-mann.org.  Also, please join
-the mailing list for authors of xboard/WinBoard compatible chess
-engines.  The list is now hosted by Yahoo Groups; you can join at <a
-href="http://www.egroups.com/group/chess-engines"
->http://www.egroups.com/group/chess-engines</a>, or you can read the
-list there without joining.  The list is filtered to prevent spam.
-</p>
-
-<h2><a name="2">2. Connection</a></h2>
-
-<p>
-An xboard chess engine runs as a separate process from xboard itself,
-connected to xboard through a pair of anonymous pipes.  The engine
-does not have to do anything special to set up these pipes.  xboard
-sets up the pipes itself and starts the engine with one pipe as its
-standard input and the other as its standard output.  The engine then
-reads commands from its standard input and writes responses to its
-standard output.  This is, unfortunately, a little more complicated to
-do right than it sounds; see <a href="#6">section 6</a> below.
-</p>
-
-<p>
-And yes, contrary to some people's expectations, exactly the same
-thing is true for WinBoard.  Pipes and standard input/output are
-implemented in Win32 and work fine.  You don't have to use DDE, COM,
-DLLs, BSOD, or any of the other infinite complexity that
-Microsoft has created just to talk between two programs.  A WinBoard
-chess engine is a Win32 console program that simply reads from its
-standard input and writes to its standard output.  See sections 
-<a href="#5">5</a> and <a href="#6">6</a> below for additional details.
-</p>
-
-<h2><a name="3">3. Debugging</a></h2>
-
-<p>
-To diagnose problems in your engine's interaction with xboard, use the
--debug flag on xboard's command line to see the messages that are
-being exchanged.  In WinBoard, these messages are written to the file
-WinBoard.debug instead of going to the screen.
-</p>
-
-<p>
-You can turn debug mode on or off while WinBoard is running by
-pressing Ctrl+Alt+F12.  You can turn debug mode on or off while xboard
-is running by binding DebugProc to a shortcut key (and pressing the
-key!); see the instructions on shortcut keys in the xboard man page.
-</p>
-
-<p>
-While your engine is running under xboard/WinBoard, you can send a
-command directly to the engine by pressing Shift+1 (xboard) or Alt+1
-(WinBoard 4.0.3 and later).  This brings up a dialog that you can type
-your command into.  Press Shift+2 (Alt+2) instead to send to the
-second chess engine in Two Machines mode.  On WinBoard 4.0.2 and earlier,
-Ctrl+Alt is used in place of Alt; this had to be changed due to a conflict
-with typing the @-sign on some European keyboards.
-</p>
-
-<h2><a name="4">4. How it got this way</a></h2>
-
-<p>
-Originally, xboard was just trying to talk to the existing
-command-line interface of GNU Chess 3.1+ and 4, which was designed
-for people to type commands to.  So the communication protocol is very
-ad-hoc.  It might have been good to redesign it early on, but because
-xboard and GNU Chess are separate programs, I didn't want to force
-people to upgrade them together to versions that matched.  I
-particularly wanted to keep new versions of xboard working with old
-versions of GNU Chess, to make it easier to compare the play of old
-and new gnuchess versions.  I didn't foresee the need for a clean
-protocol to be used with other chess engines in the future.
-</p>
-
-<p>
-Circumstances have changed over the years, and now there are many more
-engines that work with xboard.  I've had to make the protocol
-description more precise, I've added some features that GNU Chess
-does not support, and I've specified the standard semantics of a few
-features to be slightly different from what GNU Chess 4 does.
-</p>
-
-<p>
-<font color=red>
-This release of the protocol specification is the first to carry a
-version number of its own -- version 2.  Previous releases simply
-carried a last-modified date and were loosely tied to specific 
-releases of xboard and WinBoard.  The version number "1" applies
-generally to all those older versions of the protocol.
-</font>
-
-<font color=red>
-<p>Protocol version 2 remains compatible with older engines but has
-several new capabilities.  In particular, it adds the 
-"feature" command, a new mechanism for making backward-compatible
-changes and extensions to the protocol.  Engines that do not support a
-particular new feature do not have to use it; new features are not
-enabled unless the engine specifically requests them using the feature
-command.  If an engine does not send the feature command at all, the
-protocol behavior is nearly identical to version 1.  Several new
-features can be selected by the feature command in version 2,
-including the "ping" command (recommended for all engines), the
-"setboard" command, and many optional parameters.  Additional features
-will probably be added in future versions.
-</p>
-</font>
-
-<h2><a name="5">5. WinBoard requires Win32 engines</a></h2>
-
-<p>
-Due to some Microsoft brain damage that I don't understand, WinBoard
-does not work with chess engines that were compiled to use a DOS
-extender for 32-bit addressing.  (Probably not with 16-bit DOS or
-Windows programs either.)  WinBoard works only with engines that are
-compiled for the Win32 API.  You can get a free compiler that targets
-the Win32 API from <a href="http://sources.redhat.com/cygwin/"
->http://sources.redhat.com/cygwin/</a>.  I think DJGPP 2.x should also
-work if you use the RSXNTDJ extension, but I haven't tried it.  Of
-course, Microsoft Visual C++ will work.  Most likely the other
-commercial products that support Win32 will work too (Borland, etc.),
-but I have not tried them.  Delphi has been successfully used to write
-engines for WinBoard; if you want to do this, Tony Werten has donated
-some <a href="http://www.tim-mann.org/winboard/delphi.txt" >sample
-code</a> that should help you get started.
-</p>
-
-<h2><a name="6">6. Hints on input/output</a></h2>
-
-<p>
-Beware of using buffered I/O in your chess engine.  The C stdio
-library, C++ streams, and the I/O packages in most other languages use
-buffering both on input and output.  That means two things.  First,
-when your engine tries to write some characters to xboard, the library
-stashes them in an internal buffer and does not actually write them to
-the pipe connected to xboard until either the buffer fills up or you
-call a special library routine asking for it to be flushed.  (In C
-stdio, this routine is named <tt>fflush</tt>.)  Second, when your engine tries
-to read some characters from xboard, the library does not read just
-the characters you asked for -- it reads all the characters that are
-currently available (up to some limit) and stashes any characters you
-are not yet ready for in an internal buffer.  The next time you ask to
-read, you get the characters from the buffer (if any) before the
-library tries to read more data from the actual pipe.
-</p>
-
-<p>
-Why does this cause problems?  First, on the output side, remember
-that your engine produces output in small quantities (say, a few
-characters for a move, or a line or two giving the current analysis),
-and that data always needs to be delivered to xboard/WinBoard for
-display immediately.  If you use buffered output, the data you print
-will sit in a buffer in your own address space instead of being
-delivered.
-</p>
-
-<p>
-You can usually fix the output buffering problem by asking for the
-buffering to be turned off.  In C stdio, you do this by calling
-<tt>setbuf(stdout, NULL)</tt>.  A more laborious and error-prone
-method is to carefully call <tt>fflush(stdout)</tt> after every line
-you output; I don't recommend this.  In C++, you can try
-<tt>cout.setf(ios::unitbuf)</tt>, which is documented in current
-editions of "The C++ Programming Language," but not older ones.
-Another C++ method that might work is
-<tt>cout.rdbuf()-&gt;setbuf(NULL, 0)</tt>.  Alternatively, you can
-carefully call <tt>cout.flush()</tt> after every line you output;
-again, I don't recommend this.
-</p>
-
-<p>
-Another way to fix the problem is to use unbuffered operating system
-calls to write directly to the file descriptor for standard output.
-On Unix, this means <tt>write(1, ...)</tt> -- see the man page for write(2).
-On Win32, you can use either the Unix-like <tt>_write(1, ...)</tt> or Win32
-native routines like <tt>WriteFile</tt>.
-</p>
-
-<p>
-Second, on the input side, you are likely to want to poll during your
-search and stop it if new input has come in.  If you implement
-pondering, you'll need this so that pondering stops when the user
-makes a move.  You should also poll during normal thinking on your
-move, so that you can implement the "?" (move now) command, and so
-that you can respond promptly to a "result", "force", or "quit"
-command if xboard wants to end the game or terminate your engine.
-Buffered input makes polling more complicated -- when you poll, you
-must stop your search if there are <em>either</em> characters in the buffer
-<em>or</em> characters available from the underlying file descriptor.
-</p>
-
-<p>
-The most direct way to fix this problem is to use unbuffered operating
-system calls to read (and poll) the underlying file descriptor
-directly.  On Unix, use <tt>read(0, ...)</tt> to read from standard input, and
-use <tt>select()</tt> to poll it.  See the man pages read(2) and select(2).
-(Don't follow the example of GNU Chess 4 and use the FIONREAD ioctl to
-poll for input.  It is not very portable; that is, it does not exist
-on all versions of Unix, and is broken on some that do have it.)  On
-Win32, you can use either the Unix-like <tt>_read(0, ...)</tt> or the native
-Win32 <tt>ReadFile()</tt> to read.  Unfortunately, under Win32, the function to
-use for polling is different depending on whether the input device is
-a pipe, a console, or something else.  (More Microsoft brain damage
-here -- did they never hear of device independence?)  For pipes, you
-can use <tt>PeekNamedPipe</tt> to poll (even when the pipe is unnamed).
-For consoles, 
-you can use <tt>GetNumberOfConsoleInputEvents</tt>.  For sockets only, you can
-use <tt>select()</tt>.  It might be possible to use
-<tt>WaitForSingleObject</tt> more 
-generally, but I have not tried it.  Some code to do these things can
-be found in Crafty's utility.c, but I don't guarantee that it's all
-correct or optimal.
-</p>
-
-<p>
-A second way to fix the problem might be to ask your I/O library not
-to buffer on input.  It should then be safe to poll the underlying
-file descriptor as described above.  With C, you can try calling
-<tt>setbuf(stdin, NULL)</tt>.  However, I have never tried this.  Also, there
-could be problems if you use <tt>scanf()</tt>, at least with certain patterns,
-because <tt>scanf()</tt> sometimes needs to read one extra character and "push
-it back" into the buffer; hence, there is a one-character pushback
-buffer even if you asked for stdio to be unbuffered.  With C++, you
-can try <tt>cin.rdbuf()-&gt;setbuf(NULL, 0)</tt>, but again, I have never tried
-this.
-</p>
-
-<p>
-A third way to fix the problem is to check whether there are
-characters in the buffer whenever you poll.  C I/O libraries generally
-do not provide any portable way to do this.  Under C++, you can use
-<tt>cin.rdbuf()-&gt;in_avail()</tt>.  This method has been reported to
-work with 
-EXchess.  Remember that if there are no characters in the buffer, you
-still have to poll the underlying file descriptor too, using the
-method described above.
-</p>
-
-<p>
-A fourth way to fix the problem is to use a separate thread to read
-from stdin.  This way works well if you are familiar with thread
-programming.  This thread can be blocked waiting for input to come in
-at all times, while the main thread of your engine does its thinking.
-When input arrives, you have the thread put the input into a buffer
-and set a flag in a global variable.  Your search routine then
-periodically tests the global variable to see if there is input to
-process, and stops if there is.  WinBoard and my Win32 ports of ICC
-timestamp and FICS timeseal use threads to handle multiple input
-sources.
-</p>
-
-<h2><a name="7">7. Signals</a></h2>
-
-<p>Engines that run on Unix need to be concerned with two Unix
-signals: <tt>SIGTERM</tt> and <tt>SIGINT</tt>.  This applies both to
-engines that run under xboard and (the unusual case of) engines that
-WinBoard remotely runs on a Unix host using the -firstHost or
--secondHost feature.  It does not apply to engines that run on
-Windows, because Windows does not have Unix-style signals.
-<font color=red>
-Beginning with version 2, you can now turn off the use of
-either or both
-signals.  See the "feature" command in <a href="#6">section 9</a> below.
-</font>
-</p>
-
-<p>First, when an engine is sent the "quit" command, it is also given
-a <tt>SIGTERM</tt> signal shortly afterward to make sure it goes away.
-If your engine reliably responds to "quit", and the signal causes
-problems for you, you should either ignore it by calling
-<tt>signal(SIGTERM, SIG_IGN)</tt> at the start of your program,
-or disable it with the "feature" command.</p>
-
-<p>Second, xboard will send an interrupt signal (<tt>SIGINT</tt>) at
-certain times when it believes the engine may not be listening to user
-input (thinking or pondering).  WinBoard currently does this only when
-the engine is running remotely using the -firstHost or -secondHost
-feature, not when it is running locally.  You probably need to know
-only enough about this grungy feature to keep it from getting in your
-way.
-</p>
-
-<p>
-The <tt>SIGINT</tt>s are basically tailored to the needs of GNU Chess 4
-on systems where its input polling code is broken or disabled.
-Because they work in a rather peculiar way, it is recommended that you
-either ignore <tt>SIGINT</tt> by having your engine call
-<tt>signal(SIGINT, SIG_IGN)</tt>, or disable it with the "feature"
-command.</p>
-
-<p>
-Here are details for the curious.  If xboard needs to send a command
-when it is the chess engine's move (such as before the "?" command), 
-it sends a <tt>SIGINT</tt> first.  If xboard needs to send commands when it is
-not the chess engine's move, but the chess engine may be pondering
-(thinking on its opponent's time) or analyzing (analysis or analyze
-file mode), xboard sends a <tt>SIGINT</tt> before the first such command only.
-Another <tt>SIGINT</tt> is not sent until another move is made, even if xboard
-issues more commands.  This behavior is necessary for GNU Chess 4.  The
-first <tt>SIGINT</tt> stops it from pondering until the next move, but on some
-systems, GNU Chess 4 will die if it receives a <tt>SIGINT</tt> when not 
-actually thinking or pondering.
-</p>
-
-<p>
-There are two reasons why WinBoard does not send the Win32 equivalent
-of <tt>SIGINT</tt> (which is called <tt>CTRL_C_EVENT</tt>) to local
-engines.  First, the Win32 GNU Chess 4 port does not need it.  Second, I
-could not find a way to get it to work.  Win32 seems to be designed
-under the assumption that only console applications, not windowed
-applications, would ever want to send a <tt>CTRL_C_EVENT</tt>.
-</p>
-
-<h2><a name="8">8. Commands from xboard to the engine</a></h2>
-
-<p>
-All commands from xboard to the engine end with a newline (\n), even
-where that is not explicitly stated.  All your output to xboard must
-be in complete lines; any form of prompt or partial line will cause
-problems.
-</p>
-
-<p>
-At the beginning of each game, xboard sends an initialization string.
-This is currently "new\nrandom\n" unless the user changes it with the
-initString or secondInitString option.
-</p>
-
-<p>
-xboard normally reuses the same chess engine process for multiple
-games.  At the end of a game, xboard will send the "force" command
-(see below) to make sure your engine stops thinking about the current
-position.  It will later send the initString again to start a new
-game.  If your engine can't play multiple games, you can disable reuse
-<font color=red>
-either with the "feature" command (beginning in protocol version
-2; see below) or 
-</font>
-with xboard's -xreuse (or -xreuse2) command line
-option.  xboard will then ask the process to quit after each game and
-start a new process for the next game.
-</p>
-
-<dl>
-<dt><strong>xboard</strong>
-<dd>This command will be sent once immediately after your engine
-process is started.  You can use it to put your engine into "xboard
-mode" if that is needed.  If your engine prints a prompt to ask for
-user input, you must turn off the prompt and output a newline when the
-"xboard" command comes in.
-<p>
-
-<dt><font color=red><strong>protover N</strong></font>
-<dd><font color=red>
-Beginning in protocol version 2 (in which N=2), this command will
-be sent immediately after the "xboard" command.  If you receive some
-other command immediately after "xboard" (such as "new"), you can
-assume that protocol version 1 is in use.  The "protover" command is
-the only new command that xboard always sends in version 2.  All other
-new commands to the engine are sent only if the engine first enables
-them with the "feature" command.  Protocol versions will always be
-simple integers so that they can easily be compared.
-
-<p>Your engine should reply to the protover command by sending the
-"feature" command (see below) with the list of non-default feature
-settings that you require, if any.
-
-<p>Your engine should never refuse to run due to receiving a higher
-protocol version number than it is expecting!  New protocol versions
-will always be compatible with older ones by default; the larger
-version number is simply a hint that additional "feature" command
-options added in later protocol versions may be accepted.
-</font>
-<p>
-
-<dt><font color=red><strong>accepted</strong></font>
-<dt><font color=red><strong>rejected</strong></font>
-<dd><font color=red>
-These commands may be sent to your engine in reply to the "feature"
-command; see its documentation below.
-</font>
-<p>
-
-<dt><strong>new</strong>
-<dd>Reset the board to the standard chess starting position.  Set
-White on move.  Leave force mode and set the engine to play Black.
-Associate the engine's clock with Black and the opponent's clock with
-White.  Reset clocks and time controls to the start of a new game.
-Stop clocks.  Do not ponder on this move, even if pondering is on.
-Remove any search depth limit previously set by the sd command.
-<p>
-
-<dt><strong>variant VARNAME</strong>
-<dd>If the game is not standard chess, but a variant, this command is
-sent after "new" and before the first move or "edit" command.  Currently
-defined variant names are:
-
-<table>
-<tr align="left"><th>wildcastle<td>Shuffle chess where king can castle from d file
-<tr align="left"><th>nocastle<td>Shuffle chess with no castling at all
-<tr align="left"><th>fischerandom<td>Fischer Random (not supported yet)
-<tr align="left"><th>bughouse<td>Bughouse, ICC/FICS rules
-<tr align="left"><th>crazyhouse<td>Crazyhouse, ICC/FICS rules
-<tr align="left"><th>losers<td>Win by losing all pieces or getting mated (ICC)
-<tr align="left"><th>suicide<td>Win by losing all pieces including king,
-or by having fewer pieces when one player has no legal moves (FICS)
-<tr align="left"><th><font color=red>giveaway</font>
-<td><font color=red>Win by losing all pieces including king,
-or by having no legal moves (ICC)</font>
-<tr align="left"><th>twokings<td>Weird ICC wild 9
-<tr align="left"><th>kriegspiel<td>Kriegspiel (engines not supported)
-<tr align="left"><th>atomic<td>Atomic
-<tr align="left"><th>3check<td>Win by giving check 3 times
-<tr align="left"><th>unknown<td>Unknown variant (not supported)
-</table>
-<p>
-
-<dt><strong>quit</strong>
-<dd>The chess engine should immediately exit.  This command is used
-when xboard is itself exiting, and also between games if the -xreuse
-command line option is given (or -xreuse2 for the second engine).
-See also <a href="#7">Signals</a> above.
-<p>
-
-<dt><strong>random</strong>
-<dd>This command is specific to GNU Chess 4.  You can either ignore it
-completely (that is, treat it as a no-op) or implement it as GNU Chess
-does.  The command toggles "random" mode (that is, it sets random =
-!random).  In random mode, the engine adds a small random value to its
-evaluation function to vary its play.  The "new" command sets random
-mode off.
-<p>
-
-<dt><strong>force</strong>
-<dd>Set the engine to play neither color ("force mode").  Stop clocks.
-The engine should check that moves received in force mode are legal
-and made in the proper turn, but should not think, ponder, or make
-moves of its own.
-<p>
-
-<dt><strong>go</strong>
-<dd>Leave force mode and set the engine to play the color that is on
-move.  Associate the engine's clock with the color that is on move,
-the opponent's clock with the color that is not on move.  Start the engine's
-clock.  Start thinking and eventually make a move.
-<p>
-
-<dt><font color=red><strong>playother</strong></font>
-<dd>
-<font color=red>
-(This command is new in protocol version 2.  It is not
-sent unless you enable it with the feature command.)
-Leave force mode and set the engine to play the color that is <i>not</i> on
-move.  Associate the opponent's clock with the color that is on move,
-the engine's clock with the color that is not on move.  Start the opponent's
-clock.  If pondering is enabled, the engine should begin pondering.
-If the engine later receives a move, it should start thinking and eventually
-reply.
-</font>
-<p>
-
-<dt><strong>white</strong>
-<dd>
-<font color=red>
-(This command is obsolete as of protocol version 2, but is still
-sent in some situations to accommodate older engines unless you disable it 
-with the feature command.)
-</font>
-Set White on move.  Set the engine to play Black.  Stop clocks.
-<p>
-  
-<dt><strong>black</strong>
-<dd>
-<font color=red>
-(This command is obsolete as of protocol version 2, but is still
-sent in some situations to accommodate older engines unless you disable it 
-with the feature command.)
-</font>
-Set Black on move.  Set the engine to play White.  Stop clocks.
-<p>
-
-<dt><strong>level MPS BASE INC</strong>
-<dd>Set time controls.  See the <a href="#11">Time Control</a> section below.
-<p>
-  
-<dt><strong>st TIME</strong>
-<dd>Set time controls.  See the <a href="#11">Time Control</a> section
-below. The commands "level" and "st" are not used together.
-<p>
-
-<dt><strong>sd DEPTH</strong>
-<dd>The engine should limit its thinking to DEPTH ply.
-<p>
-
-<dt><strong>time N</strong>
-<dd>Set a clock that always belongs to the engine.  N is a number in
-  centiseconds (units of 1/100 second).  Even if the engine changes to
-  playing the opposite color, this clock remains with the engine.
-<p>
-
-<dt><strong>otim N</strong>
-
-<dd>Set a clock that always belongs to the opponent.  N is a number in
-centiseconds (units of 1/100 second).  Even if the opponent changes to
-playing the opposite color, this clock remains with the opponent.
-<p>
-If needed for purposes of board display in force mode (where the
-engine is not participating in the game) the time clock should be
-associated with the last color that the engine was set to play, the
-otim clock with the opposite color.
-</p>
-
-<p>
-<font color=red>
-Beginning in protocol version 2, if you can't handle the time and
-otim commands, you can use the "feature" command to disable them; see
-below.  
-</font>
-The following techniques from older protocol versions also
-work: You can ignore the time and otim commands (that is, treat them
-as no-ops), or send back "Error (unknown command): time" the first
-time you see "time".
-</p>
-
-<dt><strong>MOVE</strong>
-<dd>See below for the syntax of moves.  If the move is illegal, print
-an error message; see the section "<a href="#9">Commands from the engine to
-xboard</a>".  If the move is legal and in turn, make it.  If not in force
-mode, stop the opponent's clock, start the engine's clock, start
-thinking, and eventually make a move.
-<p>
-When xboard sends your engine a move, it normally sends coordinate
-algebraic notation.  Examples:
-<p>
-<table>
-<tr align="left"><td>Normal moves:<td>e2e4
-<tr align="left"><td>Pawn promotion:<td>e7e8q
-<tr align="left"><td>Castling:<td>e1g1, e1c1, e8g8, e8c8
-<tr align="left"><td>Bughouse/crazyhouse drop:<td>P at h3
-<tr align="left"><td>ICS Wild 0/1 castling:<td>d1f1, d1b1, d8f8, d8b8
-<tr align="left"><td>FischerRandom castling:<td>O-O, O-O-O (oh, not zero)
-</table>
-
-<p>
-<font color=red>
-Beginning in protocol version 2, you can use the feature command
-to select SAN (standard algebraic notation) instead; for example, e4,
-Nf3, exd5, Bxf7+, Qxf7#, e8=Q, O-O, or P at h3.  Note that the last form,
-P at h3, is a extension to the PGN standard's definition of SAN, which does
-not support bughouse or crazyhouse.
-</font>
-</p>
-
-<p>
-xboard doesn't reliably detect illegal moves, because it does not keep
-track of castling unavailability due to king or rook moves, or en
-passant availability.  If xboard sends an illegal move, send back an
-error message so that xboard can retract it and inform the user; see
-the section "<a href="#9">Commands from the engine to xboard</a>".
-</p>
-
-<dt><font color=red><strong>usermove MOVE</strong></font>
-<dd><font color=red>
-By default, moves are sent to the engine without a command name;
-the notation is just sent as a line by itself.
-Beginning in protocol version 2, you can use the feature command
-to cause the command name "usermove" to be sent before the move.
-Example: "usermove e2e4".
-</font>
-</p>
-
-<dt><strong>?</strong>
-<dd>Move now.  If your engine is thinking, it should move immediately;
-  otherwise, the command should be ignored (treated as a no-op).  It
-  is permissible for your engine to always ignore the ? command.  The
-  only bad consequence is that xboard's Move Now menu command will do
-  nothing.
-<p>
-It is also permissible for your engine to move immediately if it gets
-any command while thinking, as long as it processes the command right
-after moving, but it's preferable if you don't do this.  For example,
-xboard may send post, nopost, easy, hard, force, quit,
-<font color=red>
-or other commands
-</font>
-while the engine is on move.
-</p>
-
-<dt><font color=red><strong>ping N</strong></font>
-<dd>
-<font color=red>
-In this command, N is a decimal number.  When you receive the command,
-reply by sending the string <strong>pong N</strong>, where N is the
-same number you received.  Important: You must not reply to a "ping"
-command until you have finished executing all commands that you
-received before it.  Pondering does not count; if you receive a ping
-while pondering, you should reply immediately and continue pondering.
-Because of the way xboard uses the ping command, if you implement the
-other commands in this protocol, you should never see a "ping" command
-when it is your move; however, if you do, you must not send the "pong"
-reply to xboard until after you send your move.  For example, xboard
-may send "?" immediately followed by "ping".  If you implement the "?"
-command, you will have moved by the time you see the subsequent ping
-command.  Similarly, xboard may send a sequence like "force", "new",
-"ping".  You must not send the pong response until after you have
-finished executing the "new" command and are ready for the new game to
-start.
-
-<p>
-The ping command is new in protocol version 2 and will not be sent
-unless you enable it with the "feature" command.  Its purpose is to
-allow several race conditions that could occur in previous versions of
-the protocol to be fixed, so it is highly recommended that you
-implement it.  It is especially important in simple engines that do
-not ponder and do not poll for input while thinking, but it is needed in all
-engines.  
-</p>
-</font>
-
-<dt><strong>draw</strong>
-<dd>The engine's opponent offers the engine a draw.  To accept the
-draw, send "offer draw".  To decline, ignore the offer (that is, send
-nothing).  If you're playing on ICS, it's possible for the draw offer
-to have been withdrawn by the time you accept it, so don't assume the
-game is over because you accept a draw offer.  Continue playing until
-xboard tells you the game is over.  See also "offer draw" below.
-<p>
-
-<dt><strong>result RESULT {COMMENT}</strong>
-<dd>After the end of each game, xboard will send you a result command.
-You can use this command to trigger learning.  RESULT is either 1-0,
-0-1, 1/2-1/2, or *, indicating whether white won, black won, the game
-was a draw, or the game was unfinished.  The COMMENT string is purely
-a human-readable comment; its content is unspecified and subject to
-change.  In ICS mode, it is passed through from ICS uninterpreted.
-Example: <pre>result 1-0 {White mates}</pre>
-<p>
-Here are some notes on interpreting the "result" command.  Some apply
-only to playing on ICS ("Zippy" mode).
-</p>
-
-<p>
-If you won but did not just play a mate, your opponent must have
-resigned or forfeited.  If you lost but were not just mated, you
-probably forfeited on time, or perhaps the operator resigned manually.
-If there was a draw for some nonobvious reason, perhaps your opponent
-called your flag when he had insufficient mating material (or vice
-versa), or perhaps the operator agreed to a draw manually.
-</p>
-
-<p>
-You will get a result command even if you already know the game ended
--- for example, after you just checkmated your opponent.  In fact, if
-you send the "RESULT {COMMENT}" command (discussed below), you will
-simply get the same thing fed back to you with "result" tacked in
-front.  You might not always get a "result *" command, however.  In
-particular, you won't get one in local chess engine mode when the user
-stops playing by selecting Reset, Edit Game, Exit or the like.
-</p>
-
-<dt><font color=red><strong>setboard FEN</strong></font>
-<dd><font color=red>
-The setboard command is the new way to set up positions, beginning
-in protocol version 2.  It is not used unless it has been selected
-with the feature command.  Here FEN is a position in Forsythe-Edwards
-Notation, as defined in the PGN standard.
-
-<p><i>Illegal positions:</i> Note that either setboard or edit can
-be used to send an illegal position to the engine.  The user can
-create any position with xboard's Edit Position command (even, say,
-an empty board, or a board with 64 white kings and no black ones).
-If your engine receives a position that it considers illegal, 
-I suggest that you send the response "tellusererror Illegal position",
-and then respond to any attempted move with "Illegal move" until
-the next new, edit, or setboard command.</p>
-</font>
-<p>
-
-<dt><strong>edit</strong>
-<dd>
-<font color=red>
-The edit command is the old way to set up positions.  For compatibility
-with old engines, it is still used by default, but new engines may prefer
-to use the feature command (see below) to cause xboard to use setboard instead.
-</font>
-The edit command puts the chess engine into a special mode, where
-it accepts the following subcommands:
-<table>
-<tr align="left"><th>c<td>change current piece color, initially white
-<tr align="left"><th>Pa4 (for example)<td>place pawn of current color on a4
-<tr align="left"><th>xa4 (for example)<td>empty the square a4 (not used by xboard)
-<tr align="left"><th>#<td>clear board
-<tr align="left"><th>.<td>leave edit mode
-</table>
-<font color=red>
-See the Idioms section below for additional subcommands used in
-ChessBase's implementation of the protocol.
-</font>
-
-<p>The edit command does not change the side to move.  To set up a
-black-on-move position, xboard uses the following command sequence:
-</p>
-<pre>
-    new
-    force
-    a2a3
-    edit
-    &lt;edit commands&gt;
-    .
-</pre>
-
-<p>
-This sequence is used to avoid the "black" command, which is now
-considered obsolete and which many engines never did implement as 
-specified in this document.
-</p>
-
-<p>
-After an edit command is complete, if a king and a rook are on their
-home squares, castling is assumed to be available to them.  En passant
-capture is assumed to be illegal on the current move regardless of the
-positions of the pawns.  The clock for the 50 move rule starts at
-zero, and for purposes of the draw by repetition rule, no prior
-positions are deemed to have occurred.
-</p>
-
-<dt><strong>hint</strong>
-<dd>If the user asks for a hint, xboard sends your engine the command
-"hint".  Your engine should respond with "Hint: xxx", where xxx is a
-suggested move.  If there is no move to suggest, you can ignore the
-hint command (that is, treat it as a no-op).
-<p>
-
-<dt><strong>bk</strong>
-<dd>If the user selects "Book" from the xboard menu, xboard will send
-your engine the command "bk".  You can send any text you like as the
-response, as long as each line begins with a blank space or tab (\t)
-character, and you send an empty line at the end.  The text pops up in
-a modal information dialog.
-<p>
-
-<dt><strong>undo</strong>
-<dd>If the user asks to back up one move, xboard will send you the
-"undo" command.  xboard will not send this command without putting you
-in "force" mode first, so you don't have to worry about what should
-happen if the user asks to undo a move your engine made.  (GNU Chess 4
-actually switches to playing the opposite color in this case.)
-<p>
-
-<dt><strong>remove</strong>
-<dd>If the user asks to retract a move, xboard will send you the
-"remove" command.  It sends this command only when the user is on
-move.  Your engine should undo the last two moves (one for each
-player) and continue playing the same color.
-<p>
-
-<dt><strong>hard</strong>
-<dd>Turn on pondering (thinking on the opponent's time, also known as
-"permanent brain").  xboard will not make any assumption about what
-your default is for pondering or whether "new" affects this setting.
-<p>
-
-<dt><strong>easy</strong>
-<dd>Turn off pondering.
-<p>
-  
-<dt><strong>post</strong>
-<dd>Turn on thinking/pondering output.  
-See <a href="#10">Thinking Output</a> section.
-<p>
-
-<dt><strong>nopost</strong>
-<dd>Turn off thinking/pondering output.
-<p>
-  
-<dt><strong>analyze</strong>
-<dd>Enter analyze mode.  See <a href="#12">Analyze Mode</a> section.
-<p>
-
-<dt><strong>name X</strong> <dd>This command informs the engine of its
-opponent's name.  When the engine is playing on a chess server, xboard
-obtains the opponent's name from the server. 
-<font color=red>
-When the engine is
-playing locally against a human user, xboard obtains the user's login
-name from the local operating system.  When the engine is playing
-locally against another engine, xboard uses either the other engine's
-filename or the name that the other engine supplied in the myname
-option to the feature command.  By default, xboard uses the name
-command only when the engine is playing on a chess server.  Beginning
-in protocol version 2, you can change this with the name option to the
-feature command; see below.
-</font>
-<p>
-
-<dt><strong>rating</strong>
-<dd>In ICS mode, xboard obtains the ICS opponent's rating from the
-"Creating:" message that appears before each game.  (This message may
-not appear on servers using outdated versions of the FICS code.)  In
-Zippy mode, it sends these ratings on to the chess engine using the
-"rating" command.  The chess engine's own rating comes first, and if
-either opponent is not rated, his rating is given as 0.  
-<font color=red>
-In the future this command may also be used in other modes, if ratings
-are known.
-</font>
-Example: <pre>rating 2600 1500</pre>
-<p>
-
-<dt><font color=red><strong>ics HOSTNAME</strong></font>
-<dd><font color=red>
-If HOSTNAME is "-", the engine is playing against a local
-opponent; otherwise, the engine is playing on an Internet Chess Server
-(ICS) with the given hostname.  This command is new in protocol
-version 2 and is not sent unless the engine has enabled it with
-the "feature" command.  Example: "ics freechess.org"
-</font>
-<p>
-
-<dt><strong>computer</strong>
-<dd>The opponent is also a computer chess engine.  Some engines alter
-their playing style when they receive this command.
-<p>
-
-<dt><font color=red><strong>pause</strong></font>
-<dt><font color=red><strong>resume</strong></font>
-<dd><font color=red>(These commands are new in protocol
-version 2 and will not be sent unless feature pause=1 is set.  At
-this writing, xboard actually does not use the commands at all, but it
-or other interfaces may use them in the future.)
-The "pause" command puts the engine into a special state where it
-does not think, ponder, or otherwise consume significant CPU time.
-The current thinking or pondering (if any) is suspended and both
-player's clocks are stopped.  The only command that the interface may
-send to the engine while it is in the paused state is "resume".  The
-paused thinking or pondering (if any) resumes from exactly where it
-left off, and the clock of the player on move resumes running from
-where it stopped.
-</font>
-</dl>
-
-<h3>Bughouse commands:</h3>
-
-<p>
-xboard now supports bughouse engines when in Zippy mode.  See
-<a href="http://www.tim-mann.org/xboard/zippy.README"
->zippy.README</a> for information on Zippy mode and how to turn on the
-bughouse support.  The bughouse move format is given above.  xboard
-sends the following additional commands to the engine when in bughouse
-mode.  
-Commands to inform your engine of the partner's game state may
-be added in the future.
-</p>
-
-<dl>
-<dt><strong>partner &lt;player&gt;</strong>
-<dd>&lt;player&gt; is now your partner for future games.  Example: <pre>partner mann</pre>
-<p>
-
-<dt><strong>partner</strong>
-<dd>Meaning: You no longer have a partner.
-<p>
-
-<dt><strong>ptell &lt;text&gt;</strong>
-<dd>Your partner told you &lt;text&gt;, either with a ptell or an ordinary tell.  
-<p>
-
-<dt><strong>holding [&lt;white&gt;] [&lt;black&gt;]</strong>
-<dd>White currently holds &lt;white&gt;; black currently holds &lt;black&gt;.
-  Example: <pre>holding [PPPRQ] []</pre>
-
-<dt><strong>holding [&lt;white&gt;] [&lt;black&gt;] &lt;color&gt;&lt;piece&gt;</strong>
-<dd>White currently holds &lt;white&gt;; black currently holds &lt;black&gt;, after
-  &lt;color&gt; acquired &lt;piece&gt;.   Example: <pre>holding [PPPRQ] [R] BR</pre>
-</dl>
-
-<h2><a name="9">9. Commands from the engine to xboard</a></h2>
-
-<p>
-<font color=red>
-In general, an engine should not send any output to xboard that is not
-described in this document.  As the protocol is extended, newer
-versions of xboard may recognize additional strings as commands that
-were previously not assigned a meaning.
-</font>
-</p>
-
-<dl>
-<dt><font color=red>
-<strong>feature FEATURE1=VALUE1 FEATURE2=VALUE2 ...</strong> 
-</font>
-
-<dd><font color=red>
-Beginning with version 2, the protocol includes the "feature"
-command, which lets your engine control certain optional protocol
-features.  Feature settings are written as FEATURE=VALUE, where
-FEATURE is a name from the list below and VALUE is the value to be
-assigned.  Features can take string, integer, or boolean values; the
-type of value is listed for each feature.  String values are written
-in double quotes (for example, <tt>feature myname="Miracle Chess
-0.9"</tt>), integers are written in decimal, and boolean values are
-written as 0 for false, 1 for true.  Any number of features can be set
-in one feature command, or multiple feature commands can be given.
-
-<p>
-Your engine should send one or more feature commands immediately after
-receiving the "protover" command, since xboard needs to know the
-values of some features before sending further commands to the engine.
-Because engines that predate protocol version 2 do not send "feature",
-xboard uses a timeout mechanism: when it first starts your engine, it
-sends "xboard" and "protover N", then listens for feature commands for
-two seconds before sending any other commands.  To end this timeout
-and avoid the wait, set the feature "done=1" at the end of your last
-feature command.  To increase the timeout, if needed, set the feature
-"done=0" before your first feature command and "done=1" at the end.
-If needed, it is okay for your engine to set done=0 soon as it starts,
-even before it receives the xboard and protover commands.  This can be
-useful if your engine takes a long time to initialize itself.  It
-should be harmless even if you are talking to a (version 1) user
-interface that does not understand the "feature" command, since such
-interfaces generally ignore commands from the engine that they do not
-understand.
-</p>
-
-<p>
-The feature command is designed to let the protocol change without
-breaking engines that were written for older protocol versions.  When
-a new feature is added to the protocol, its default value is always
-chosen to be compatible with older versions of the protocol that did
-not have the feature.  Any feature that your engine does not set in a
-"feature" command retains its default value, so as the protocol
-changes, you do not have to change your engine to keep up with it
-unless you want to take advantage of a new feature.  Because some
-features are improvements to the protocol, while others are meant to
-cater to engines that do not implement all the protocol features, the
-recommended setting for a feature is not always the same as the
-default setting.  The listing below gives both default and recommended
-settings for most features.
-</p>
-
-<p>
-You may want to code your engine so as to be able to work with
-multiple versions of the engine protocol.  Protocol version 1 does not
-send the protover command and does not implement the feature command;
-if you send a feature command in protocol version 1, it will have no
-effect and there will be no response.  In protocol version 2 or later,
-each feature F that you set generates the response "accepted F" if the
-feature is implemented, or "rejected F" if it is not.  Thus an engine
-author can request any feature without having to keep track of which
-protocol version it was introduced in; you need only check whether the
-feature is accepted or rejected.  This mechanism also makes it
-possible for a user interface author to implement a subset of a
-protocol version by rejecting some features that are defined in that
-version; however, you should realize that engine authors are likely to
-code for xboard and may not be prepared to have a feature that they
-depend on be rejected.
-</p>
-
-<p>
-Here are the features that are currently defined.
-</p>
-</font>
-
-<dl>
-<dt><font color=red>
-<strong>ping</strong> (boolean, default 0, recommended 1)
-</font>
-<dd><font color=red>
-If ping=1, xboard may use the protocol's new "ping" command;
-if ping=0, xboard will not use the command.
-</font>
-
-<dt><font color=red>
-<strong>setboard</strong> (boolean, default 0, recommended 1)
-</font>
-<dd><font color=red>
-If setboard=1, xboard will use the protocol's new "setboard" command
-to set up positions; if setboard=0, it will use the older "edit" command.
-</font>
-
-<dt><font color=red>
-<strong>playother</strong> (boolean, default 0, recommended 1)
-</font>
-<dd><font color=red>
-If playother=1, xboard will use the protocol's new "playother" command
-when appropriate; if playother=0, it will not use the command.
-</font>
-
-<dt><font color=red>
-<strong>san</strong> (boolean, default 0)
-</font>
-<dd><font color=red>
-If san=1, xboard will send moves to the engine in standard algebraic
-notation (SAN); for example, Nf3.  If san=0, xboard will send moves in
-coordinate notation; for example, g1f3.  See MOVE in 
-<a href="#8">section 8</a> above for more details of both kinds of notation.
-</font>
-
-<dt><font color=red>
-<strong>usermove</strong> (boolean, default 0)
-</font>
-<dd><font color=red>
-If usermove=1, xboard will send moves to the engine with the
-command "usermove MOVE"; if usermove=0, xboard will send just the move,
-with no command name.
-</font>
-
-<dt><font color=red>
-<strong>time</strong> (boolean, default 1, recommended 1)
-</font>
-<dd><font color=red>
-If time=1, xboard will send the "time" and "otim" commands to
-update the engine's clocks; if time=0, it will not.
-</font>
-
-<dt><font color=red>
-<strong>draw</strong> (boolean, default 1, recommended 1)
-</font>
-<dd><font color=red>
-If draw=1, xboard will send the "draw" command if the engine's opponent
-offers a draw; if draw=0, xboard will not inform the engine about
-draw offers.  Note that if draw=1, you may receive a draw offer while you
-are on move; if this will cause you to move immediately, you should set
-draw=0.
-</font>
-
-<dt><font color=red>
-<strong>sigint</strong> (boolean, default 1)
-</font>
-<dd><font color=red>
-If sigint=1, xboard may send SIGINT (the interrupt signal) to
-the engine as <a href="#7">section 7</a> above; if sigint=0, it will
-not.
-</font>
-
-<dt><font color=red>
-<strong>sigterm</strong> (boolean, default 1)
-</font>
-<dd><font color=red>
-If sigterm=1, xboard may send SIGTERM (the termination signal) to
-the engine as <a href="#7">section 7</a> above; if sigterm=0, it will
-not.
-</font>
-
-<dt><font color=red>
-<strong>reuse</strong> (boolean, default 1, recommended 1) 
-</font>
-<dd><font color=red>
-If reuse=1, xboard may reuse your engine for multiple games.  If
-reuse=0 (or if the user has set the -xreuse option on xboard's command
-line), xboard will kill the engine process after every game and start
-a fresh process for the next game.
-</font>
-
-<dt><font color=red>
-<strong>analyze</strong> (boolean, default 1, recommended 1)
-</font>
-<dd><font color=red>
-If analyze=0, xboard will not try to use the "analyze" command; it
-will pop up an error message if the user asks for analysis mode.  If
-analyze=1, xboard will try to use the command if the user asks for
-analysis mode.
-</font>
-
-<dt><font color=red>
-<strong>myname</strong> (string, default determined from engine filename)
-</font>
-<dd><font color=red>
-This feature lets you set the name that xboard will use for your
-engine in window banners, in the PGN tags of saved game files, and when
-sending the "name" command to another engine.
-</font>
-
-<dt><font color=red>
-<strong>variants</strong> (string, see text below)
-</font>
-<dd><font color=red>
-This feature indicates which chess variants your engine accepts.
-It should be a comma-separated list of variant names.  See the table
-under the "variant" command in <a href="#8">section 8</a> above.  If
-you do not set this feature, xboard will assume by default that your
-engine supports all variants.  (However, the -zippyVariants
-command-line option still limits which variants will be accepted in
-Zippy mode.)  It is recommended that you set this feature to the
-correct value for your engine (just "normal" in most cases) rather
-than leaving the default in place, so that the user will get an
-appropriate error message if he tries to play a variant that your
-engine does not support.
-</font>
-
-<dt><font color=red>
-<strong>colors</strong> (boolean, default 1, recommended 0) 
-</font>
-<dd><font color=red>
-If colors=1, xboard uses the obsolete "white" and "black"
-commands in a stylized way that works with most older chess engines
-that require the commands.  See the "<a href="#13">Idioms</a>" section
-below for details.  If colors=0, xboard does not use the "white" and
-"black" commands at all.
-</font>
-
-<dt><font color=red>
-<strong>ics</strong> (boolean, default 0)
-</font>
-<dd><font color=red>
-If ics=1, xboard will use the protocol's new "ics" command
-to inform the engine of whether or not it is playing on a chess server;
-if ics=0, it will not.
-</font>
-
-<dt><font color=red>
-<strong>name</strong> (boolean, see text below)
-</font>
-<dd><font color=red>
-If name=1, xboard will use the protocol's "name" command
-to inform the engine of the opponent's name; if name=0, it will not.
-By default, name=1 if the engine is playing on a chess server; name=0 if not.
-</font>
-
-<dt><font color=red>
-<strong>pause</strong> (boolean, default 0)
-</font>
-<dd><font color=red>
-If pause=1, xboard may use the protocol's new "pause" command;
-if pause=0, xboard assumes that the engine does not support this command.
-</font>
-
-<dt><font color=red>
-<strong>done</strong> (integer, no default)
-</font>
-<dd><font color=red>
-If you set done=1 during the initial two-second timeout after
-xboard sends you the "xboard" command, the
-timeout will end and xboard will not look for any more feature
-commands before starting normal operation.
-If you set done=0, the initial timeout is increased to one hour;
-in this case, you must set done=1 before xboard will enter normal operation.
-</font>
-</dl>
-<p>
-
-<dt><strong>Illegal move: MOVE</strong>
-<dt><strong>Illegal move (REASON): MOVE</strong>
-<dd>If your engine receives a MOVE command that is recognizably a move
-but is not legal in the current position, your engine must print an
-error message in one of the above formats so that xboard can pass the
-error on to the user and retract the move.  The (REASON) is entirely
-optional.  Examples:
-
-<pre>
-  Illegal move: e2e4
-  Illegal move (in check): Nf3
-  Illegal move (moving into check): e1g1
-</pre>
-<p>
-Generally, xboard will never send an ambiguous move, so it does not 
-matter whether you respond to such a move with an Illegal move message 
-or an Error message.
-</p>
-
-<dt><strong>Error (ERRORTYPE): COMMAND</strong>
-<dd>If your engine receives a command it does not understand or does
-not implement, it should print an error message in the above format so
-that xboard can parse it.  Examples:
-<pre>
-  Error (ambiguous move): Nf3
-  Error (unknown command): analyze
-  Error (command not legal now): undo
-  Error (too many parameters): level 1 2 3 4 5 6 7
-</pre>
-
-<dt><strong>move MOVE</strong>
-<dd>Your engine is making the move MOVE.  Do not echo moves from
-xboard with this command; send only new moves made by the engine.
-
-<font color=red>
-<p>For the actual move text from your chess engine (in place of MOVE
-above), your move should be either
-<ul>
-<li>in coordinate notation (e.g.,
-e2e4, e7e8q) with castling indicated by the King's two-square move (e.g.,
-e1g1), or
-<li>in Standard Algebraic Notation (SAN) as defined in the
-Portable Game Notation standard (e.g, e4, Nf3, O-O, cxb5, Nxe4, e8=Q),
-with the extension piece at square (e.g., P at f7) to handle piece placement
-in bughouse and crazyhouse.
-</ul>
-xboard itself also accepts some variants of SAN, but for compatibility
-with non-xboard interfaces, it is best not to rely on this behavior.
-</p>
-
-<p>Warning: Even though all versions of this protocol specification
-have indicated that xboard accepts SAN moves, some non-xboard
-interfaces are known to accept only coordinate notation.  See the
-Idioms section for more information on the known limitations of some
-non-xboard interfaces.  It should be safe to send SAN moves if you
-receive a "protover 2" (or later) command from the interface, but
-otherwise it is best to stick to coordinate notation for maximum
-compatibility.  An even more conservative approach would be for your
-engine to send SAN to the interface only if you have set feature san=1
-(which causes the interface to send SAN to you) and have received
-"accepted san" in reply.
-</p>
-</font>
-
-<dt><strong>RESULT {COMMENT}</strong> <dd>When your engine detects
-that the game has ended by rule, your engine must output a line of the
-form "RESULT {comment}" (without the quotes), where RESULT is a PGN
-result code (1-0, 0-1, or 1/2-1/2), and comment is the reason.  Here
-"by rule" means that the game is definitely over because of what
-happened on the board.  In normal chess, this includes checkmate,
-stalemate, triple repetition, the 50 move rule, or insufficient
-material; it does not include loss on time or the like.
-Examples:
-<pre>
-  0-1 {Black mates}
-  1-0 {White mates}
-  1/2-1/2 {Draw by repetition}
-  1/2-1/2 {Stalemate}
-</pre>
-
-<p>
-xboard relays the result to the user, the ICS, the other engine in Two
-Machines mode, and the PGN save file as required.
-</p>
-
-<dt><strong>resign</strong>
-<dd>If your engine wants to resign, it can send the command "resign".
-Alternatively, it can use the "RESULT {comment}" command if the string
-"resign" is included in the comment; for example "0-1 {White
-resigns}".  xboard relays the resignation to the user, the ICS, the
-other engine in Two Machines mode, and the PGN save file as required.
-<p>
-
-<dt><strong>offer draw</strong>
-<dd>If your engine wants to offer a draw by agreement (as opposed to
-claiming a draw by rule), it can send the command "offer draw".
-xboard relays the offer to the user, the ICS, the other engine in Two
-Machines mode, and the PGN save file as required.  In Machine White,
-Machine Black, or Two Machines mode, the offer is considered valid
-until your engine has made two more moves.
-<p>
-
-<dt><font color=red><strong>tellopponent MESSAGE</strong></font>
-<dd><font color=red>
-This command lets the engine give a message to its opponent,
-independent of whether the opponent is a user on the local machine or
-a remote ICS user (Zippy mode).  MESSAGE consists of any characters,
-including whitespace, to the end of the line.  When the engine is
-playing against a user on the local machine, xboard pops up an
-information dialog containing the message.  When the engine is playing
-against an opponent on the ICS (Zippy mode), xboard sends "say
-MESSAGE\n" to the ICS.
-<p>
-
-<dt><strong>tellothers MESSAGE</strong> 
-<dd>This command lets the engine give a message to people watching the
-game other than the engine's opponent.  MESSAGE consists of any
-characters, including whitespace, to the end of the line.  When the
-engine is playing against a user on the local machine, this command
-does nothing.  When the engine is playing against an opponent on the
-ICS (Zippy mode), xboard sends "whisper MESSAGE\n" to the ICS.
-<p>
-
-<dt><strong>tellall MESSAGE</strong>
-<dd>This command lets the engine give a message to its opponent and
-other people watching the game, 
-independent of whether the opponent is a user on the local machine or
-a remote ICS user (Zippy mode).  MESSAGE consists of any characters,
-including whitespace, to the end of the line.  When the engine is
-playing against a user on the local machine, xboard pops up an
-information dialog containing the message.  When the engine is playing
-against an opponent on the ICS (Zippy mode), xboard sends "kibitz
-MESSAGE\n" to the ICS.
-</font>
-<p>
-
-<dt><strong>telluser MESSAGE</strong>
-<dd>xboard pops up an information dialog containing the message.
-MESSAGE consists of any characters, including whitespace, to the end
-of the line.
-<p>
-
-<dt><strong>tellusererror MESSAGE</strong>
-<dd>xboard pops up an error dialog containing the message.
-MESSAGE consists of any characters, including whitespace, to the end
-of the line.
-<p>
-
-<dt><strong>askuser REPTAG MESSAGE</strong>
-<dd>Here REPTAG is a string containing no whitespace, and MESSAGE
-consists of any characters, including whitespace, to the end of the
-line.  xboard pops up a question dialog that says MESSAGE and
-has a typein box.  If the user types in "bar", xboard sends "REPTAG
-bar" to the engine.  The user can cancel the dialog and send nothing.
-<p>
-
-<dt><strong>tellics MESSAGE</strong>
-<dd>In Zippy mode, xboard sends "MESSAGE\n" to ICS.  MESSAGE consists
-of any characters, including whitespace, to the end of the line.
-<p>
-
-<dt><font color=red><strong>tellicsnoalias MESSAGE</strong></font>
-<dd><font color=red>
-In Zippy mode, xboard sends "xMESSAGE\n" to ICS, where "x" is a
-character that prevents the ICS from expanding command aliases, if
-xboard knows of such a character.  (On chessclub.com and chess.net,
-"/" is used; on freechess.org, "$" is used.)  MESSAGE consists of any
-characters, including whitespace, to the end of the line.
-</font>
-</dl>
-<p>
-
-<h2><a name="10">10. Thinking Output</a></h2>
-
-<p>
-If the user asks your engine to "show thinking", xboard sends your
-engine the "post" command.  It sends "nopost" to turn thinking off.
-In post mode, your engine sends output lines to show the progress of
-its thinking.  The engine can send as many or few of these lines as it
-wants to, whenever it wants to.  Typically they would be sent when the
-PV (principal variation) changes or the depth changes.  The thinking
-output should be in the following format:
-</p>
-
-<pre>ply score time nodes pv</pre>
-
-Where:
-<table>
-<tr align="left"><th>ply<td>Integer giving current search depth.
-<tr align="left"><th>score<td>Integer giving current evaluation in centipawns.
-<tr align="left"><th>time<td>Current search time in centiseconds (ex:
-1028 = 10.28 seconds).
-
-<tr align="left"><th>nodes<td>Nodes searched.
-<tr align="left"><th>pv<td>Freeform text giving current "best" line.
-You can continue the pv onto another line if you start each
-continuation line with at least four space characters.
-</table>
-
-<p>
-Example:
-</p>
-
-<pre>  9 156 1084 48000 Nf3 Nc6 Nc3 Nf6</pre>
-
-<p>
-Meaning:
-</p>
-
-9 ply, score=1.56, time = 10.84 seconds, nodes=48000, 
-PV = "Nf3 Nc6 Nc3 Nf6"
-
-<p>
-Longer example from actual Crafty output:
-</p>
-<pre>
-  4    109      14   1435  1. e4 d5 2. Qf3 dxe4 3. Qxe4 Nc6
-  4    116      23   2252  1. Nf3 Nc6 2. e4 e6
-  4    116      27   2589  1. Nf3 Nc6 2. e4 e6
-  5    141      44   4539  1. Nf3 Nc6 2. O-O e5 3. e4
-  5    141      54   5568  1. Nf3 Nc6 2. O-O e5 3. e4
-</pre>
-
-<p>
-You can use the PV to show other things; for instance, while in book,
-Crafty shows the observed frequency of different reply moves in its
-book.  In situations like this where your engine is not really
-searching, start the PV with a '(' character:
-</p>
-
-<pre>
-  0      0       0      0  (e4 64%, d4 24%)
-</pre>
-
-<p>
-GNU Chess output is very slightly different.  The ply number is
-followed by an extra nonblank character, and the time is in seconds,
-not hundredths of seconds.  For compatibility, xboard accepts the
-extra character and takes it as a flag indicating the different time
-units.  Example:
-</p>
-
-<pre>
- 2.     14    0       38   d1d2  e8e7 
- 3+     78    0       65   d1d2  e8e7  d2d3 
- 3&     14    0       89   d1d2  e8e7  d2d3 
- 3&     76    0      191   d1e2  e8e7  e2e3 
- 3.     76    0      215   d1e2  e8e7  e2e3 
- 4&     15    0      366   d1e2  e8e7  e2e3  e7e6 
- 4.     15    0      515   d1e2  e8e7  e2e3  e7e6 
- 5+     74    0      702   d1e2  f7f5  e2e3  e8e7  e3f4 
- 5&     71    0     1085   d1e2  e8e7  e2e3  e7e6  e3f4 
- 5.     71    0     1669   d1e2  e8e7  e2e3  e7e6  e3f4 
- 6&     48    0     3035   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
- 6.     48    0     3720   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
- 7&     48    0     6381   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
- 7.     48    0    10056   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
- 8&     66    1    20536   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5 
- 8.     66    1    24387   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5 
- 9&     62    2    38886   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4 
-                           d4e4 
- 9.     62    4    72578   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4 
-                           d4e4 
-10&     34    7   135944   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4 
-                           d4e4  f7f5  e4f4 
-10.     34    9   173474   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4 
-                           d4e4  f7f5  e4f4 
-</pre>
-
-<p>If your engine is pondering (thinking on its opponent's time) in post
-mode, it can show its thinking then too.  In this case your engine may
-omit the hint move (the move it is assuming its opponent will make)
-from the thinking lines <em>if and only if</em> it sends xboard the move in
-the usual "Hint: xxx" format before sending the first line.
-</p>
-
-<h2><a name="11">11. Time control</a></h2>
-
-<p>
-xboard supports three styles of time control: conventional chess clocks,
-the ICS-style incremental clock, and an exact number of seconds per move.
-</p>
-
-<p>In conventional clock mode, every time control period is the same.
-That is, if the time control is 40 moves in 5 minutes, then after each
-side has made 40 moves, they each get an additional 5 minutes, and so
-on, ad infinitum.  At some future time it would be nice to support a
-series of distinct time controls.  This is very low on my personal
-priority list, but code donations to the xboard project are accepted,
-so feel free to take a swing at it.  I suggest you talk to me first,
-though.
-</p>
-
-<p>
-The command to set a conventional time control looks like this:
-</p>
-
-<pre>
-  level 40 5 0
-  level 40 0:30 0
-</pre>
-
-<p>
-The 40 means that there are 40 moves per time control.  The 5 means
-there are 5 minutes in the control.  In the second example, the 0:30
-means there are 30 seconds.  The final 0 means that we are in
-conventional clock mode.
-</p>
-
-<p>
-The command to set an incremental time control looks like this:
-</p>
-
-<pre>
-  level 0 2 12
-</pre>
-
-<p>
-Here the 0 means "play the whole game in this time control period",
-the 2 means "base=2 minutes", and the 12 means "inc=12 seconds".  As
-in conventional clock mode, the second argument to level can be in
-minutes and seconds.
-</p>
-
-<p>
-At the start of the game, each player's clock is set to base minutes.
-Immediately after a player makes a move, inc seconds are added to his
-clock.  A player's clock counts down while it is his turn.  Your flag
-can be called whenever your clock is zero or negative.  (Your clock
-can go negative and then become positive again because of the
-increment.)
-</p>
-
-<p>
-A special rule on some ICS implementations: if you ask for a game with
-base=0, the clocks really start at 10 seconds instead of 0.  xboard
-itself does not know about this rule, so it passes the 0 on to the
-engine instead of changing it to 0:10.
-</p>
-
-<p>
-ICS also has time odds games.  With time odds, each player has his own
-(base, inc) pair, but otherwise things work the same as in normal
-games.  The Zippy xboard accepts time odds games but ignores the fact
-that the opponent's parameters are different; this is perhaps not
-quite the right thing to do, but gnuchess doesn't understand time
-odds.  Time odds games are always unrated.
-</p>
-
-<p>
-The command to set an exact number of seconds per move looks like this:
-</p>
-
-<pre>
-  st 30
-</pre>
-
-<p>
-This means that each move must be made in at most 30 seconds.  Time not used
-on one move does not accumulate for use on later moves.
-</p>
-
-<h2><a name="12">12. Analyze Mode</a></h2>
-
-<p>xboard supports analyzing fresh games, edited positions, and games
-from files.  However, all of these look the same from the chess
-engine's perspective. Basically, the engine just has to respond to the
-"analyze" command.  
-<font color=red>
-Beginning in protocol version 2,
-if your engine does not support analyze mode, it should use
-the feature command to set analyze=0.  
-</font>
-The older method of
-printing the error message "Error (unknown command): analyze" in
-response to the "analyze" command will also work, however.
-</p>
-
-<p>
-To enter analyze mode, xboard sends the command sequence "post", "analyze".  
-Analyze mode in your engine should be
-similar to force mode, except that your engine thinks about what move
-it would make next if it were on move.  Your engine should accept the
-following commands while in analyze mode:
-</p>
-
-<ul>
-<li>Any legal move, as in force mode
-<li><strong>undo</strong>&nbsp;&nbsp; Back up one move and analyze previous position.
-<li><strong>new</strong>&nbsp;&nbsp; Reset position to start of game but stay in analyze mode.
-<li><font color=red><strong>setboard</strong> if you have set feature setboard=1; otherwise <strong>edit</strong>.  Exiting edit mode returns to analyze mode.
-</font>
-<li><strong>exit</strong>&nbsp;&nbsp; Leave analyze mode.
-<li><strong>.</strong>&nbsp;&nbsp; Send a search status update (optional); see below.
-<li><font color=red>
-<strong>bk</strong>&nbsp;&nbsp; Show book moves from this position,
-if any; see above.</font>
-<li><font color=red>
-<strong>hint</strong>&nbsp;&nbsp; Show the predicted move from this
-position, if any; see above.</font>
-</ul>
-  
-<p>
-If the user selects "Periodic Updates", xboard will send the string
-".\n" to the chess engine periodically during analyze mode, unless the
-last PV received began with a '(' character.
-</p>
-
-<p>
-The chess engine should respond to ".\n" with a line like this:
-</p>
-
-<pre>
-stat01: time nodes ply mvleft mvtot <font color=red>mvname</font>
-</pre>
-
-Where:
-<table>
-<tr align="left"><th>time<td>Elapsed search time in centiseconds (ie: 567 = 5.67 seconds).
-<tr align="left"><th>nodes<td>Nodes searched so far.
-<tr align="left"><th>ply<td>Search depth so far.
-<tr align="left"><th>mvleft<td>Number of moves left to consider at this depth.
-<tr align="left"><th>mvtot<td>Total number of moves to consider.
-<tr align="left"><th><font color=red>mvname</font><td><font color=red>
-Move currently being considered (SAN or coordinate notation).  Optional;
-added in protocol version 2.</font>
-</table>
-
-<p>
-Examples:
-</p>
-<pre>
-  stat01: 1234 30000 7 5 30
-  stat01: 1234 30000 7 5 30 Nf3
-</pre>
-
-<p>
-Meaning:
-</p>
-
-<p>After 12.34 seconds, I've searched 7 ply/30000 nodes, there are a
-  total of 30 legal moves, and I have 5 more moves to search
-  before going to depth 8.  In the second example, of the 30 legal
-  moves, the one I am currently searching is Nf3.</p>
-
-<p>
-Implementation of the "." command is optional. If the engine does not
-respond to the "." command with a "stat01..." line, xboard will stop
-sending "."  commands.  If the engine does not implement this command,
-the analysis window will use a shortened format to display the engine
-info.
-</p>
-
-<p>
-To give the user some extra information, the chess engine can output
-the strings "++\n" and "--\n", to indicate that the current search is
-failing high or low, respectively.  You don't have to send anything
-else to say "Okay, I'm not failing high/low anymore."  xboard will
-figure this out itself.
-</p>
-
-<h2><a name="13">13. Idioms and backward compatibility features</a></h2>
-
-<p>
-Some engines have variant interpretations of the force/go/white/black,
-time/otim, and hard/easy command sets.  
-In order to accommodate these older engines, xboard uses these commands
-only according to the stylized patterns ("idioms") given in this section.
-The obsolete white and black commands
-have historically been particularly troublesome, and it is recommended
-that new engines set the feature colors=0 and/or ignore the commands.
-</p>
-
-<dl>
-
-<dt><strong>time N</strong>
-<dt><strong>otim N</strong>
-<dt><strong>MOVE</strong>
-<dd>Sent when the opponent makes a move and the engine is already
-playing the opposite color.
-<p>
-
-<dt><strong>white</strong>
-<dt><strong>go</strong>
-<dd>Sent when the engine is in force mode or playing Black but should
-switch to playing White.  This sequence is sent only when White is
-already on move.  
-<font color=red>
-If you set the feature colors=0, "white" is not sent.
-</font>
-<p>
-
-<dt><strong>black</strong>
-<dt><strong>go</strong>
-<dd>Sent when the engine is in force mode or playing White but should
-switch to playing Black.  This sequence is sent only when Black is
-already on move.  
-<font color=red>
-If you set the feature colors=0, "black" is not sent.
-</font>
-<p>
-
-<dt><strong>white</strong>
-<dt><strong>time N</strong>
-<dt><strong>otim N</strong>
-<dt><strong>black</strong>
-<dt><strong>go</strong>
-<dd>Sent when Black is on move, the engine is in force mode or playing
-White, and the engine's clock needs to be updated before it starts
-playing.  
-The initial "white" is a kludge to accommodate GNU Chess
-4's variant interpretation of these commands.  
-<font color=red>
-If you set the feature colors=0, "white" and "black" are not sent.
-</font>
-<p>
-
-<dt><strong>black</strong>
-<dt><strong>time N</strong>
-<dt><strong>otim N</strong>
-<dt><strong>white</strong>
-<dt><strong>go</strong>
-<dd>Sent when White is on move, the engine is in force mode or playing
-Black, and the engine's clock needs to be updated before it starts
-playing.  See previous idiom.  
-The initial "black" is a kludge to accommodate GNU Chess
-4's variant interpretation of these commands.  
-<font color=red>
-If you set the feature colors=0, "black" and "white" are not sent.
-</font>
-<p>
-
-<dt><strong>hard</strong>
-<dt><strong>easy</strong>
-<dd>Sent in sequence to turn off pondering if xboard is not sure
-whether it is on.  When xboard is sure, it will send "hard" or "easy"
-alone.  xboard does this because "easy" is a toggle in GNU Chess 4 but
-"hard" is an absolute on.
-
-</dl>
-
-<p>
-To support older engines, certain additional commands from the engine
-to xboard are also recognized.  (These are commands by themselves, not
-values to be placed in the comment field of the PGN result code.)
-These forms are not recommended for new engines; use the PGN result
-code commands or the resign command instead.
-</p>
-
-<table>
-<tr align="left"><th>Command              <th>Interpreted as
-<tr align="left"><td>White resigns        <td>0-1 {White resigns}
-<tr align="left"><td>Black resigns        <td>1-0 {Black resigns}
-<tr align="left"><td>White                <td>1-0 {White mates}
-<tr align="left"><td>Black                <td>0-1 {Black mates}
-<tr align="left"><td>Draw                 <td>1/2-1/2 {Draw}
-<tr align="left"><td>computer mates       <td>1-0 {White mates} or 0-1 {Black mates}
-<tr align="left"><td>opponent mates       <td>1-0 {White mates} or 0-1 {Black mates}
-<tr align="left"><td>computer resigns     <td>0-1 {White resigns} or 1-0 {Black resigns}
-<tr align="left"><td>game is a draw       <td>1/2-1/2 {Draw}
-<tr align="left"><td>checkmate            <td>1-0 {White mates} or 0-1 {Black mates}
-</table>
-
-<p>
-Commands in the above table are recognized if they begin a line and
-arbitrary characters follow, so (for example) "White mates" will be
-recognized as "White", and "game is a draw by the 50 move rule" will
-be recognized as "game is a draw".  All the commands are
-case-sensitive.
-</p>
-
-<p>
-An alternative move syntax is also recognized:
-</p>
-
-<table>
-<tr align="left"><th>Command              <th>Interpreted as
-<tr align="left"><td>NUMBER ... MOVE      <td>move MOVE
-</table>
-
-<p>
-Here NUMBER means any string of decimal digits, optionally ending in a
-period.  MOVE is any string containing no whitespace.  In this command
-format, xboard requires the "..." even if your engine is playing
-White.  A command of the form NUMBER MOVE will be ignored.  This odd
-treatment of the commands is needed for compatibility with gnuchessx.
-The original reasons for it are lost in the mists of time, but I
-suspect it was originally a bug in the earliest versions of xboard,
-before I started working on it, which someone "fixed" in the wrong
-way, by creating a special version of gnuchess (gnuchessx) instead of
-changing xboard.
-</p>
-
-<p>
-Any line that contains the words "offer" and "draw" is recognized as
-"offer draw".
-</p>
-
-<p>
-The "Illegal move" message is recognized even if spelled "illegal
-move" and even if the colon (":") is omitted.  This accommodates GNU
-Chess 4, which prints messages like "Illegal move (no matching
-move)e2e4", and old versions of Crafty, which print just "illegal move".
-</p>
-
-<p>
-In Zippy mode, for compatibility with older versions of Crafty,
-xboard passes through to ICS any line that begins "kibitz", "whisper",
-"tell", or "draw".  Do not use this feature in new code.  Instead, use the
-commands "tellall", "tellothers", "tellopponent", "tellics" (if needed),
-"1/2-1/2 {COMMENT}", or "offer draw", as appropriate.
-</p>
-
-<p>
-<font color=red>
-If the engine responds to the "sd DEPTH" command with an error message
-indicating the command is not supported (such as "Illegal move: sd"),
-xboard sets an internal flag and subsequently uses the command
-"depth\nDEPTH" instead, for the benefit of GNU Chess 4.  Note the
-newline in the middle of this command!  New engines should not rely on
-this feature.
-</font>
-</p>
-
-<p>
-<font color=red>
-If the engine responds to the "st TIME" command with an error message
-indicating the command is not supported (such as "Illegal move: st"),
-xboard sets an internal flag and subsequently uses the command "level
-1 TIME" instead, for the benefit of GNU Chess 4.  Note that this is
-not a standard use of the level command, as TIME seconds are not added
-after each player makes 1 move; rather, each move is made in at most
-TIME seconds.  New engines should not implement or rely on this
-feature.
-</font>
-</p>
-
-<font color=red>
-<p>
-In support of the -firstHost/-secondHost features, which allow a chess
-engine to be run on another machine using the rsh protocol, xboard recognizes
-error messages that are likely to come from rsh as fatal errors.  The following
-messages are currently recognized:
-</p>
-
-<blockquote>
-unknown host<br>
-No remote directory<br>
-not found<br>
-No such file<br>
-can't alloc<br>
-Permission denied<br>
-</blockquote>
-</font>
-
-<p>
-<font color=red>
-ChessBase/Fritz now implements the xboard/winboard protocol and can use
-WinBoard-compatible engines in its GUI.  ChessBase's version of the
-protocol is generally the same as version 1, except that they have
-added the commands <strong>fritz</strong>, <strong>reset</strong>, and
-<strong>ponder</strong>, and the edit subcommands
-<strong>castle</strong> and <strong>ep</strong>.  If you want your
-engine to work well with the ChessBase/Fritz GUI, you may need to
-implement these additional commands, and you should also be aware of
-the peculiar way that ChessBase uses the protocol.  See their <a
-href="http://www.chessbase.com/Products/engines/winboard/tech.htm"
->web page</a> for documentation.
-</font>
-</p>
-
-<p>
-<font color=red>
-ChessMaster 8000 also implements version 1 of the xboard/winboard
-protocol and can use WinBoard-compatible engines.  The original
-release of CM8000 also has one additional restriction: only pure
-coordinate notation (e.g., e2e4) is accepted in the move command.  A
-patch to correct this should be available from The Learning Company
-(makers of CM8000) in February 2001.
-</font>
-</p>
-
-<hr noshade size="2">
-<address>converted to HTML by <a href="http://www.jakob.at/steffen/">Steffen A. Jakob</a></address>
-</body>
-</html>
+<html>
+<head>
+<title>Chess Engine Communication Protocol</title>
+</head>
+
+<body>
+<hr noshade size="2">
+<h1>Chess Engine Communication Protocol</h1>
+<h1><font color=green>Discussion Proposal</font></h1>
+<h2><a href="http://www.tim-mann.org/">Tim Mann</a> &amp; <a href="http://home.hccnet.nl/h.g.muller/winboardF.html">H.G.Muller</a></h2>
+<p>
+$Id: engine-intf.html,v 2.1 2003/10/27 19:21:00 mann Exp $<br>
+Version 2; implemented in xboard/WinBoard 4.2.1 and later.<br>
+Changes since version 1 are indicated in <font color=red>red</font>.<br>
+Changes for WinBoard 4.3.xx are indicated in <font color=green>green</font>.<br>
+Proposed changes, implemented only in alpha versions are indicated in <font color=blue>blue</font>.
+<hr noshade size="2">
+
+<ul>
+<li><a href="#1">1. Introduction</a>
+<li><a href="#2">2. Connection</a>
+<li><a href="#3">3. Debugging</a>
+<li><a href="#4">4. How it got this way</a>
+<li><a href="#5">5. WinBoard requires Win32 engines</a>
+<li><a href="#6">6. Hints on input/output</a>
+<li><a href="#7">7. Signals</a>
+<li><a href="#8">8. Commands from xboard to the engine</a>
+<li><a href="#9">9. Commands from the engine to xboard</a>
+<li><a href="#10">10. Thinking Output</a>
+<li><a href="#11">11. Time control</a>
+<li><a href="#12">12. Analyze Mode</a>
+<li><a href="#13">13. Idioms and backward compatibility features</a>
+</ul>
+
+<hr noshade size="2">
+
+<h2><a name="1">1. Introduction</a></h2>
+
+<p>
+This document is a set of rough notes on the protocol that xboard and
+WinBoard use to communicate with gnuchessx and other chess engines.
+These notes may be useful if you want to connect a different chess
+engine to xboard.  Throughout the notes, "xboard" means both xboard
+and WinBoard except where they are specifically contrasted.
+</p>
+
+<p>
+There are two reasons I can imagine someone wanting to do this: 
+</p>
+<ol>
+<li>You have, or are developing, a chess engine but you don't want to
+write your own graphical interface. 
+<li>You have, or are developing,a chess engine, and you want to
+interface it to the Internet Chess Server.
+</ol>
+
+<p>
+In case (2), if you are using xboard, you will need to configure the
+"Zippy" code into it, but WinBoard includes this code already.  See
+the file <a
+href="http://www.tim-mann.org/xboard/zippy.README">zippy.README</a>
+in the xboard or WinBoard distribution for more information.
+
+</p>
+
+<p>
+These notes are unpolished, but I've attempted to make them complete
+in this release.  If you notice any errors, omissions, or misleading
+statements, let me know.
+</p>
+
+<p>
+I'd like to hear from everyone who is trying to interface their own
+chess engine to xboard/WinBoard. Please join the mailing list for 
+authors of xboard/WinBoard compatible chess engines and post a message 
+about what you're doing. The list is now hosted by Yahoo Groups; you 
+can join at <a href="http://groups.yahoo.com/group/chess-engines" 
+>http://groups.yahoo.com/group/chess-engines</a>, or you can read the
+list there without joining.  The list is filtered to prevent spam.
+</p>
+<p>
+<font color=green>
+Note that the WinBoard 4.3.xx line was developed independently of the
+original GNU project, by H.G.Muller.
+If you have questions about WinBoard 4.3.xx, or want to report bugs in it,
+report them in the appropriate section of the 
+<a href="http://www.open-aurec.com/wbforum/">WinBoard forum</a>.
+</font>
+</p>
+
+<h2><a name="2">2. Connection</a></h2>
+
+<p>
+An xboard chess engine runs as a separate process from xboard itself,
+connected to xboard through a pair of anonymous pipes.  The engine
+does not have to do anything special to set up these pipes.  xboard
+sets up the pipes itself and starts the engine with one pipe as its
+standard input and the other as its standard output.  The engine then
+reads commands from its standard input and writes responses to its
+standard output.  This is, unfortunately, a little more complicated to
+do right than it sounds; see <a href="#6">section 6</a> below.
+</p>
+
+<p>
+And yes, contrary to some people's expectations, exactly the same
+thing is true for WinBoard.  Pipes and standard input/output are
+implemented in Win32 and work fine.  You don't have to use DDE, COM,
+DLLs, BSOD, or any of the other infinite complexity that
+Microsoft has created just to talk between two programs.  A WinBoard
+chess engine is a Win32 console program that simply reads from its
+standard input and writes to its standard output.  See sections 
+<a href="#5">5</a> and <a href="#6">6</a> below for additional details.
+</p>
+
+<h2><a name="3">3. Debugging</a></h2>
+
+<p>
+To diagnose problems in your engine's interaction with xboard, use the
+-debug flag on xboard's command line to see the messages that are
+being exchanged.  In WinBoard, these messages are written to the file
+WinBoard.debug instead of going to the screen.
+</p>
+
+<p>
+You can turn debug mode on or off while WinBoard is running by
+pressing Ctrl+Alt+F12.  You can turn debug mode on or off while xboard
+is running by binding DebugProc to a shortcut key (and pressing the
+key!); see the instructions on shortcut keys in the xboard man page.
+</p>
+
+<p>
+While your engine is running under xboard/WinBoard, you can send a
+command directly to the engine by pressing Shift+1 (xboard) or Alt+1
+(WinBoard 4.0.3 and later).  This brings up a dialog that you can type
+your command into.  Press Shift+2 (Alt+2) instead to send to the
+second chess engine in Two Machines mode.  On WinBoard 4.0.2 and earlier,
+Ctrl+Alt is used in place of Alt; this had to be changed due to a conflict
+with typing the @-sign on some European keyboards.
+</p>
+
+<h2><a name="4">4. How it got this way</a></h2>
+
+<p>
+Originally, xboard was just trying to talk to the existing
+command-line interface of GNU Chess 3.1+ and 4, which was designed
+for people to type commands to.  So the communication protocol is very
+ad-hoc.  It might have been good to redesign it early on, but because
+xboard and GNU Chess are separate programs, I didn't want to force
+people to upgrade them together to versions that matched.  I
+particularly wanted to keep new versions of xboard working with old
+versions of GNU Chess, to make it easier to compare the play of old
+and new gnuchess versions.  I didn't foresee the need for a clean
+protocol to be used with other chess engines in the future.
+</p>
+
+<p>
+Circumstances have changed over the years, and now there are many more
+engines that work with xboard.  I've had to make the protocol
+description more precise, I've added some features that GNU Chess
+does not support, and I've specified the standard semantics of a few
+features to be slightly different from what GNU Chess 4 does.
+</p>
+
+<p>
+<font color=red>
+This release of the protocol specification is the first to carry a
+version number of its own -- version 2.  Previous releases simply
+carried a last-modified date and were loosely tied to specific 
+releases of xboard and WinBoard.  The version number "1" applies
+generally to all those older versions of the protocol.
+</font>
+
+<font color=red>
+<p>Protocol version 2 remains compatible with older engines but has
+several new capabilities.  In particular, it adds the 
+"feature" command, a new mechanism for making backward-compatible
+changes and extensions to the protocol.  Engines that do not support a
+particular new feature do not have to use it; new features are not
+enabled unless the engine specifically requests them using the feature
+command.  If an engine does not send the feature command at all, the
+protocol behavior is nearly identical to version 1.  Several new
+features can be selected by the feature command in version 2,
+including the "ping" command (recommended for all engines), the
+"setboard" command, and many optional parameters.  Additional features
+will probably be added in future versions.
+</p>
+
+<p>
+<font color=green>
+If it is necessary to have a separate name, 
+it would be best to refer to the protocol including the green additions as version 2f.
+I really don't think it is a different protocol from version 2, though.
+I just tried to clarify some ambiguities in the original definition,
+now that the WinBoard 4.3.xx line has implemented them in a specific way.
+The hand-shaking protocol for features as defined in protocol 2 perfectly
+allows addition of an occasional new features without any need for stepping up the protocol version number,
+and I think refraining from the latter would enormously lower the barrier for actual
+implementation of these features in engines.
+<br>
+The two really new things are the engine debug comments, and the "nps" command.
+The former merely tries to regulate an extremely common existing pactice 
+of having engines dump debug messages on WinBoard in an unprotected way, 
+as usually you get away with that.
+</font>
+
+</font>
+
+<h2><a name="5">5. WinBoard requires Win32 engines</a></h2>
+
+<p>
+Due to some Microsoft brain damage that I don't understand, WinBoard
+does not work with chess engines that were compiled to use a DOS
+extender for 32-bit addressing.  (Probably not with 16-bit DOS or
+Windows programs either.)  WinBoard works only with engines that are
+compiled for the Win32 API.  You can get a free compiler that targets
+the Win32 API from <a href="http://sources.redhat.com/cygwin/"
+>http://sources.redhat.com/cygwin/</a>.  I think DJGPP 2.x should also
+work if you use the RSXNTDJ extension, but I haven't tried it.  Of
+course, Microsoft Visual C++ will work.  Most likely the other
+commercial products that support Win32 will work too (Borland, etc.),
+but I have not tried them.  Delphi has been successfully used to write
+engines for WinBoard; if you want to do this, Tony Werten has donated
+some <a href="http://www.tim-mann.org/winboard/delphi.txt" >sample
+code</a> that should help you get started.
+</p>
+
+<h2><a name="6">6. Hints on input/output</a></h2>
+
+<p>
+Beware of using buffered I/O in your chess engine.  The C stdio
+library, C++ streams, and the I/O packages in most other languages use
+buffering both on input and output.  That means two things.  First,
+when your engine tries to write some characters to xboard, the library
+stashes them in an internal buffer and does not actually write them to
+the pipe connected to xboard until either the buffer fills up or you
+call a special library routine asking for it to be flushed.  (In C
+stdio, this routine is named <tt>fflush</tt>.)  Second, when your engine tries
+to read some characters from xboard, the library does not read just
+the characters you asked for -- it reads all the characters that are
+currently available (up to some limit) and stashes any characters you
+are not yet ready for in an internal buffer.  The next time you ask to
+read, you get the characters from the buffer (if any) before the
+library tries to read more data from the actual pipe.
+</p>
+
+<p>
+Why does this cause problems?  First, on the output side, remember
+that your engine produces output in small quantities (say, a few
+characters for a move, or a line or two giving the current analysis),
+and that data always needs to be delivered to xboard/WinBoard for
+display immediately.  If you use buffered output, the data you print
+will sit in a buffer in your own address space instead of being
+delivered.
+</p>
+
+<p>
+You can usually fix the output buffering problem by asking for the
+buffering to be turned off.  In C stdio, you do this by calling
+<tt>setbuf(stdout, NULL)</tt>.  A more laborious and error-prone
+method is to carefully call <tt>fflush(stdout)</tt> after every line
+you output; I don't recommend this.  In C++, you can try
+<tt>cout.setf(ios::unitbuf)</tt>, which is documented in current
+editions of "The C++ Programming Language," but not older ones.
+Another C++ method that might work is
+<tt>cout.rdbuf()-&gt;setbuf(NULL, 0)</tt>.  Alternatively, you can
+carefully call <tt>cout.flush()</tt> after every line you output;
+again, I don't recommend this.
+</p>
+
+<p>
+Another way to fix the problem is to use unbuffered operating system
+calls to write directly to the file descriptor for standard output.
+On Unix, this means <tt>write(1, ...)</tt> -- see the man page for write(2).
+On Win32, you can use either the Unix-like <tt>_write(1, ...)</tt> or Win32
+native routines like <tt>WriteFile</tt>.
+</p>
+
+<p>
+Second, on the input side, you are likely to want to poll during your
+search and stop it if new input has come in.  If you implement
+pondering, you'll need this so that pondering stops when the user
+makes a move.  You should also poll during normal thinking on your
+move, so that you can implement the "?" (move now) command, and so
+that you can respond promptly to a "result", "force", or "quit"
+command if xboard wants to end the game or terminate your engine.
+Buffered input makes polling more complicated -- when you poll, you
+must stop your search if there are <em>either</em> characters in the buffer
+<em>or</em> characters available from the underlying file descriptor.
+</p>
+
+<p>
+The most direct way to fix this problem is to use unbuffered operating
+system calls to read (and poll) the underlying file descriptor
+directly.  On Unix, use <tt>read(0, ...)</tt> to read from standard input, and
+use <tt>select()</tt> to poll it.  See the man pages read(2) and select(2).
+(Don't follow the example of GNU Chess 4 and use the FIONREAD ioctl to
+poll for input.  It is not very portable; that is, it does not exist
+on all versions of Unix, and is broken on some that do have it.)  On
+Win32, you can use either the Unix-like <tt>_read(0, ...)</tt> or the native
+Win32 <tt>ReadFile()</tt> to read.  Unfortunately, under Win32, the function to
+use for polling is different depending on whether the input device is
+a pipe, a console, or something else.  (More Microsoft brain damage
+here -- did they never hear of device independence?)  For pipes, you
+can use <tt>PeekNamedPipe</tt> to poll (even when the pipe is unnamed).
+For consoles, 
+you can use <tt>GetNumberOfConsoleInputEvents</tt>.  For sockets only, you can
+use <tt>select()</tt>.  It might be possible to use
+<tt>WaitForSingleObject</tt> more 
+generally, but I have not tried it.  Some code to do these things can
+be found in Crafty's utility.c, but I don't guarantee that it's all
+correct or optimal.
+</p>
+
+<p>
+A second way to fix the problem might be to ask your I/O library not
+to buffer on input.  It should then be safe to poll the underlying
+file descriptor as described above.  With C, you can try calling
+<tt>setbuf(stdin, NULL)</tt>.  However, I have never tried this.  Also, there
+could be problems if you use <tt>scanf()</tt>, at least with certain patterns,
+because <tt>scanf()</tt> sometimes needs to read one extra character and "push
+it back" into the buffer; hence, there is a one-character pushback
+buffer even if you asked for stdio to be unbuffered.  With C++, you
+can try <tt>cin.rdbuf()-&gt;setbuf(NULL, 0)</tt>, but again, I have never tried
+this.
+</p>
+
+<p>
+A third way to fix the problem is to check whether there are
+characters in the buffer whenever you poll.  C I/O libraries generally
+do not provide any portable way to do this.  Under C++, you can use
+<tt>cin.rdbuf()-&gt;in_avail()</tt>.  This method has been reported to
+work with 
+EXchess.  Remember that if there are no characters in the buffer, you
+still have to poll the underlying file descriptor too, using the
+method described above.
+</p>
+
+<p>
+A fourth way to fix the problem is to use a separate thread to read
+from stdin.  This way works well if you are familiar with thread
+programming.  This thread can be blocked waiting for input to come in
+at all times, while the main thread of your engine does its thinking.
+When input arrives, you have the thread put the input into a buffer
+and set a flag in a global variable.  Your search routine then
+periodically tests the global variable to see if there is input to
+process, and stops if there is.  WinBoard and my Win32 ports of ICC
+timestamp and FICS timeseal use threads to handle multiple input
+sources.
+</p>
+
+<h2><a name="7">7. Signals</a></h2>
+
+<p>Engines that run on Unix need to be concerned with two Unix
+signals: <tt>SIGTERM</tt> and <tt>SIGINT</tt>.  This applies both to
+engines that run under xboard and (the unusual case of) engines that
+WinBoard remotely runs on a Unix host using the -firstHost or
+-secondHost feature.  It does not apply to engines that run on
+Windows, because Windows does not have Unix-style signals.
+<font color=red>
+Beginning with version 2, you can now turn off the use of
+either or both
+signals.  See the "feature" command in <a href="#6">section 9</a> below.
+</font>
+</p>
+
+<p>First, when an engine is sent the "quit" command, it is also given
+a <tt>SIGTERM</tt> signal shortly afterward to make sure it goes away.
+If your engine reliably responds to "quit", and the signal causes
+problems for you, you should either ignore it by calling
+<tt>signal(SIGTERM, SIG_IGN)</tt> at the start of your program,
+or disable it with the "feature" command.</p>
+
+<p>Second, xboard will send an interrupt signal (<tt>SIGINT</tt>) at
+certain times when it believes the engine may not be listening to user
+input (thinking or pondering).  WinBoard currently does this only when
+the engine is running remotely using the -firstHost or -secondHost
+feature, not when it is running locally.  You probably need to know
+only enough about this grungy feature to keep it from getting in your
+way.
+</p>
+
+<p>
+The <tt>SIGINT</tt>s are basically tailored to the needs of GNU Chess 4
+on systems where its input polling code is broken or disabled.
+Because they work in a rather peculiar way, it is recommended that you
+either ignore <tt>SIGINT</tt> by having your engine call
+<tt>signal(SIGINT, SIG_IGN)</tt>, or disable it with the "feature"
+command.</p>
+
+<p>
+Here are details for the curious.  If xboard needs to send a command
+when it is the chess engine's move (such as before the "?" command), 
+it sends a <tt>SIGINT</tt> first.  If xboard needs to send commands when it is
+not the chess engine's move, but the chess engine may be pondering
+(thinking on its opponent's time) or analyzing (analysis or analyze
+file mode), xboard sends a <tt>SIGINT</tt> before the first such command only.
+Another <tt>SIGINT</tt> is not sent until another move is made, even if xboard
+issues more commands.  This behavior is necessary for GNU Chess 4.  The
+first <tt>SIGINT</tt> stops it from pondering until the next move, but on some
+systems, GNU Chess 4 will die if it receives a <tt>SIGINT</tt> when not 
+actually thinking or pondering.
+</p>
+
+<p>
+There are two reasons why WinBoard does not send the Win32 equivalent
+of <tt>SIGINT</tt> (which is called <tt>CTRL_C_EVENT</tt>) to local
+engines.  First, the Win32 GNU Chess 4 port does not need it.  Second, I
+could not find a way to get it to work.  Win32 seems to be designed
+under the assumption that only console applications, not windowed
+applications, would ever want to send a <tt>CTRL_C_EVENT</tt>.
+</p>
+
+<h2><a name="8">8. Commands from xboard to the engine</a></h2>
+
+<p>
+All commands from xboard to the engine end with a newline (\n), even
+where that is not explicitly stated.  All your output to xboard must
+be in complete lines; any form of prompt or partial line will cause
+problems.
+</p>
+
+<p>
+At the beginning of each game, xboard sends an initialization string.
+This is currently "new\nrandom\n" unless the user changes it with the
+initString or secondInitString option.
+</p>
+
+<p>
+xboard normally reuses the same chess engine process for multiple
+games.  At the end of a game, xboard will send the "force" command
+(see below) to make sure your engine stops thinking about the current
+position.  It will later send the initString again to start a new
+game.  If your engine can't play multiple games, you can disable reuse
+<font color=red>
+either with the "feature" command (beginning in protocol version
+2; see below) or 
+</font>
+with xboard's -xreuse (or -xreuse2) command line
+option.  xboard will then ask the process to quit after each game and
+start a new process for the next game.
+</p>
+
+<dl>
+<dt><strong>xboard</strong>
+<dd>This command will be sent once immediately after your engine
+process is started.  You can use it to put your engine into "xboard
+mode" if that is needed.  If your engine prints a prompt to ask for
+user input, you must turn off the prompt and output a newline when the
+"xboard" command comes in.
+<p>
+
+<dt><font color=red><strong>protover N</strong></font>
+<dd><font color=red>
+Beginning in protocol version 2 (in which N=2), this command will
+be sent immediately after the "xboard" command.  If you receive some
+other command immediately after "xboard" (such as "new"), you can
+assume that protocol version 1 is in use.  The "protover" command is
+the only new command that xboard always sends in version 2.  All other
+new commands to the engine are sent only if the engine first enables
+them with the "feature" command.  Protocol versions will always be
+simple integers so that they can easily be compared.
+
+<p>Your engine should reply to the protover command by sending the
+"feature" command (see below) with the list of non-default feature
+settings that you require, if any.
+
+<p>Your engine should never refuse to run due to receiving a higher
+protocol version number than it is expecting!  New protocol versions
+will always be compatible with older ones by default; the larger
+version number is simply a hint that additional "feature" command
+options added in later protocol versions may be accepted.
+</font>
+<p>
+
+<dt><font color=red><strong>accepted</strong></font>
+<dt><font color=red><strong>rejected</strong></font>
+<dd><font color=red>
+These commands may be sent to your engine in reply to the "feature"
+command; see its documentation below.
+</font>
+<p>
+
+<dt><strong>new</strong>
+<dd>Reset the board to the standard chess starting position.  Set
+White on move.  Leave force mode and set the engine to play Black.
+Associate the engine's clock with Black and the opponent's clock with
+White.  Reset clocks and time controls to the start of a new game.
+Use wall clock for time measurement.
+Stop clocks.  Do not ponder on this move, even if pondering is on.
+Remove any search depth limit previously set by the sd command.
+<p>
+
+<dt><strong>variant VARNAME</strong>
+<dd>If the game is not standard chess, but a variant, this command is
+sent after "new" and before the first move or "edit" command.  Currently
+defined variant names are:
+
+<table>
+<tr align="left"><th>wildcastle<td>Shuffle chess where king can castle from d file
+<tr align="left"><th>nocastle<td>Shuffle chess with no castling at all
+<tr align="left"><th>fischerandom<td>Fischer Random
+<tr align="left"><th>bughouse<td>Bughouse, ICC/FICS rules
+<tr align="left"><th>crazyhouse<td>Crazyhouse, ICC/FICS rules
+<tr align="left"><th>losers<td>Win by losing all pieces or getting mated (ICC)
+<tr align="left"><th>suicide<td>Win by losing all pieces including king,
+or by having fewer pieces when one player has no legal moves (FICS)
+<tr align="left"><th><font color=red>giveaway</font>
+<td><font color=red>Win by losing all pieces including king,
+or by having no legal moves (ICC)</font>
+<tr align="left"><th>twokings<td>Weird ICC wild 9
+<tr align="left"><th>kriegspiel<td>Kriegspiel (engines not supported)
+<tr align="left"><th>atomic<td>Atomic
+<tr align="left"><th>3check<td>Win by giving check 3 times
+<tr align="left"><th><font color=green>xiangqi</font>
+<td><font color=green>Chinese Chess (9x10 board)</font>
+<tr align="left"><th><font color=green>shogi</font>
+<td><font color=green>Japanese Chess (9x9 bord)</font>
+<tr align="left"><th><font color=green>capablanca</font>
+<td><font color=green>Capablanca Chess (10x8 board, with Archbishop and Chancellor)</font>
+<tr align="left"><th><font color=green>gothic</font>
+<td><font color=green>Gothic Chess (10x8 board, same with better opening setup)</font>
+<tr align="left"><th><font color=green>falcon</font>
+<td><font color=green>Falcon Chess (10x8 board, with two Falcon pieces)</font>
+<tr align="left"><th><font color=green>shatranj</font>
+<td><font color=green>ancient Arabic Chess, with Elephants and General in stead of B and Q</font>
+<tr align="left"><th><font color=green>courier</font>
+<td><font color=green>Courier Chess (12x8 board, a medieval precursor of modern Chess</font>
+<tr align="left"><th><font color=green>knightmate</font>
+<td><font color=green>King moves as Knight and vice versa</font>
+<tr align="left"><th><font color=green>berolina</font><td>
+<font color=green>Pawns capture straight ahead, and move diagonally</font>
+<tr align="left"><th><font color=green>janus</font><td>
+<font color=green>Janus Chess (10x8, with two Archbishops)</font>
+<tr align="left"><th><font color=green>caparandom</font>
+<td><font color=green>shuffle variant like FRC (10x8 board)</font>
+<tr align="left"><th><font color=green>cylinder</font>
+<td><font color=green>Pieces wrap around between side edges, like board is a cylinder</font>
+<tr align="left"><th><font color=blue>super</font>
+<td><font color=blue>Superchess: a shuffle variant with 4 fairy pieces on 8x8 board</font>
+<tr align="left"><th>unknown<td>Unknown variant (not supported)
+</table>
+<p>
+
+<dt><strong>quit</strong>
+<dd>The chess engine should immediately exit.  This command is used
+when xboard is itself exiting, and also between games if the -xreuse
+command line option is given (or -xreuse2 for the second engine).
+See also <a href="#7">Signals</a> above.
+<p>
+
+<dt><strong>random</strong>
+<dd>This command is specific to GNU Chess 4.  You can either ignore it
+completely (that is, treat it as a no-op) or implement it as GNU Chess
+does.  The command toggles "random" mode (that is, it sets random =
+!random).  In random mode, the engine adds a small random value to its
+evaluation function to vary its play.  The "new" command sets random
+mode off.
+<p>
+
+<dt><strong>force</strong>
+<dd>Set the engine to play neither color ("force mode").  Stop clocks.
+The engine should check that moves received in force mode are legal
+and made in the proper turn, but should not think, ponder, or make
+moves of its own.
+<p>
+
+<dt><strong>go</strong>
+<dd>Leave force mode and set the engine to play the color that is on
+move.  Associate the engine's clock with the color that is on move,
+the opponent's clock with the color that is not on move.  Start the engine's
+clock.  Start thinking and eventually make a move.
+<p>
+
+<dt><font color=red><strong>playother</strong></font>
+<dd>
+<font color=red>
+(This command is new in protocol version 2.  It is not
+sent unless you enable it with the feature command.)
+Leave force mode and set the engine to play the color that is <i>not</i> on
+move.  Associate the opponent's clock with the color that is on move,
+the engine's clock with the color that is not on move.  Start the opponent's
+clock.  If pondering is enabled, the engine should begin pondering.
+If the engine later receives a move, it should start thinking and eventually
+reply.
+</font>
+<p>
+
+<dt><strong>white</strong>
+<dd>
+<font color=red>
+(This command is obsolete as of protocol version 2, but is still
+sent in some situations to accommodate older engines unless you disable it 
+with the feature command.)
+</font>
+Set White on move.  Set the engine to play Black.  Stop clocks.
+<p>
+  
+<dt><strong>black</strong>
+<dd>
+<font color=red>
+(This command is obsolete as of protocol version 2, but is still
+sent in some situations to accommodate older engines unless you disable it 
+with the feature command.)
+</font>
+Set Black on move.  Set the engine to play White.  Stop clocks.
+<p>
+
+<dt><strong>level MPS BASE INC</strong>
+<dd>Set time controls.  See the <a href="#11">Time Control</a> section below.
+<p>
+  
+<dt><strong>st TIME</strong>
+<dd>Set time controls.  See the <a href="#11">Time Control</a> section
+below. 
+<p>
+
+<dt><strong>sd DEPTH</strong>
+<dd>The engine should limit its thinking to DEPTH ply.
+<font color=green>The commands "level" or "st" and "sd" can be used together in an orthogonal way.
+If both are issued, the engine should observe both limitations:</font>
+In the protocol, the "sd" command isn't a time control.  It doesn't
+say that your engine has unlimited time but must search to exactly the
+given depth.  It says that you should pay attention to the time
+control as normal, but cut off the search at the specified depth even
+if you have time to search deeper.  If you don't have time to search
+to the specified depth, given your normal time management algorithm,
+then you will want to stop sooner than the given depth.
+<p>
+The "new" command should set the search depth back to unlimited.  This
+is already stated in the spec.  The "level" command should not affect
+the search depth.  As it happens, xboard/WinBoard currently always
+sends sd (if needed) right after level, but that isn't part of the
+spec.
+<p>
+
+<dt><font color=green><strong>nps NODE_RATE</strong></font>
+<dd><font color=green>The engine should not use wall-clock time to make its timing decisions,
+but an own internal time measure based on the number of nodes it has searched
+(and will report as "thinking output", see <a href="#10">section 10</a>),
+converted to seconds through dividing by the given NODE_RATE.
+Example: after receiving the commands "st 8" and "nps 10000",
+the engine should never use more that 80,000 nodes in the search for any move.
+In this mode, the engine should report user CPU time used (in its thinking output), 
+rather than wall-clock time.
+This even holds if NODE_RATE is given as 0,
+but in that case it should also use the user CPU time for its timing decisions.
+The effect of an "nps" command should persist until the next "new" command.
+</font>
+<p>
+
+<dt><strong>time N</strong>
+<dd>Set a clock that always belongs to the engine.  N is a number in
+  centiseconds (units of 1/100 second).  Even if the engine changes to
+  playing the opposite color, this clock remains with the engine.
+<p>
+
+<dt><strong>otim N</strong>
+
+<dd>Set a clock that always belongs to the opponent.  N is a number in
+centiseconds (units of 1/100 second).  Even if the opponent changes to
+playing the opposite color, this clock remains with the opponent.
+<p>
+If needed for purposes of board display in force mode (where the
+engine is not participating in the game) the time clock should be
+associated with the last color that the engine was set to play, the
+otim clock with the opposite color.
+</p>
+<p>
+<font color=green>This business of "clocks remaining with the engine" is apparently so ambiguous
+that many engines implement it wrong.
+The clocks in fact always remain with the color.
+Which clock reading is relayed with "time", and which by "otim", is determined by which side the engine plays.
+Note that the way the clocks operate and receive extra time (in accordance with the selected time control)
+is not affected in any way by which moves are made by the engine, which by the opponent, and which were forced.
+</font>
+</p>
+<p>
+<font color=red>
+Beginning in protocol version 2, if you can't handle the time and
+otim commands, you can use the "feature" command to disable them; see
+below.  
+</font>
+The following techniques from older protocol versions also
+work: You can ignore the time and otim commands (that is, treat them
+as no-ops), or send back "Error (unknown command): time" the first
+time you see "time".
+</p>
+
+<dt><strong>MOVE</strong>
+<dd>See below for the syntax of moves.  If the move is illegal, print
+an error message; see the section "<a href="#9">Commands from the engine to
+xboard</a>".  If the move is legal and in turn, make it.  If not in force
+mode, stop the opponent's clock, start the engine's clock, start
+thinking, and eventually make a move.
+<p>
+When xboard sends your engine a move, it normally sends coordinate
+algebraic notation.  Examples:
+<p>
+<table>
+<tr align="left"><td>Normal moves:<td>e2e4
+<tr align="left"><td>Pawn promotion:<td>e7e8q
+<tr align="left"><td>Castling:<td>e1g1, e1c1, e8g8, e8c8
+<tr align="left"><td>Bughouse/crazyhouse drop:<td>P at h3
+<tr align="left"><td>ICS Wild 0/1 castling:<td>d1f1, d1b1, d8f8, d8b8
+<tr align="left"><td>FischerRandom castling:<td>O-O, O-O-O (oh, not zero)
+</table>
+
+<p>
+<font color=green>
+Note that on boards with more than 9 ranks, counting of the ranks starts at 0.
+</font>
+</p>
+<p>
+<font color=red>
+Beginning in protocol version 2, you can use the feature command
+to select SAN (standard algebraic notation) instead; for example, e4,
+Nf3, exd5, Bxf7+, Qxf7#, e8=Q, O-O, or P at h3.  Note that the last form,
+P at h3, is a extension to the PGN standard's definition of SAN, which does
+not support bughouse or crazyhouse.
+</font>
+</p>
+
+<p>
+xboard doesn't reliably detect illegal moves, because it does not keep
+track of castling unavailability due to king or rook moves, or en
+passant availability.  If xboard sends an illegal move, send back an
+error message so that xboard can retract it and inform the user; see
+the section "<a href="#9">Commands from the engine to xboard</a>".
+</p>
+
+<dt><font color=red><strong>usermove MOVE</strong></font>
+<dd><font color=red>
+By default, moves are sent to the engine without a command name;
+the notation is just sent as a line by itself.
+Beginning in protocol version 2, you can use the feature command
+to cause the command name "usermove" to be sent before the move.
+Example: "usermove e2e4".
+</font>
+</p>
+
+<dt><strong>?</strong>
+<dd>Move now.  If your engine is thinking, it should move immediately;
+  otherwise, the command should be ignored (treated as a no-op).  It
+  is permissible for your engine to always ignore the ? command.  The
+  only bad consequence is that xboard's Move Now menu command will do
+  nothing.
+<p>
+It is also permissible for your engine to move immediately if it gets
+any command while thinking, as long as it processes the command right
+after moving, but it's preferable if you don't do this.  For example,
+xboard may send post, nopost, easy, hard, force, quit,
+<font color=red>
+or other commands
+</font>
+while the engine is on move.
+</p>
+
+<dt><font color=red><strong>ping N</strong></font>
+<dd>
+<font color=red>
+In this command, N is a decimal number.  When you receive the command,
+reply by sending the string <strong>pong N</strong>, where N is the
+same number you received.  Important: You must not reply to a "ping"
+command until you have finished executing all commands that you
+received before it.  Pondering does not count; if you receive a ping
+while pondering, you should reply immediately and continue pondering.
+Because of the way xboard uses the ping command, if you implement the
+other commands in this protocol, you should never see a "ping" command
+when it is your move; however, if you do, you must not send the "pong"
+reply to xboard until after you send your move.  For example, xboard
+may send "?" immediately followed by "ping".  If you implement the "?"
+command, you will have moved by the time you see the subsequent ping
+command.  Similarly, xboard may send a sequence like "force", "new",
+"ping".  You must not send the pong response until after you have
+finished executing the "new" command and are ready for the new game to
+start.
+
+<p>
+The ping command is new in protocol version 2 and will not be sent
+unless you enable it with the "feature" command.  Its purpose is to
+allow several race conditions that could occur in previous versions of
+the protocol to be fixed, so it is highly recommended that you
+implement it.  It is especially important in simple engines that do
+not ponder and do not poll for input while thinking, but it is needed in all
+engines.  
+</p>
+</font>
+
+<dt><strong>draw</strong>
+<dd>The engine's opponent offers the engine a draw.  To accept the
+draw, send "offer draw".  To decline, ignore the offer (that is, send
+nothing).  If you're playing on ICS, it's possible for the draw offer
+to have been withdrawn by the time you accept it, so don't assume the
+game is over because you accept a draw offer.  Continue playing until
+xboard tells you the game is over.  See also "offer draw" below.
+<p>
+
+<dt><strong>result RESULT {COMMENT}</strong>
+<dd>After the end of each game, xboard will send you a result command.
+You can use this command to trigger learning.  RESULT is either 1-0,
+0-1, 1/2-1/2, or *, indicating whether white won, black won, the game
+was a draw, or the game was unfinished.  The COMMENT string is purely
+a human-readable comment; its content is unspecified and subject to
+change.  In ICS mode, it is passed through from ICS uninterpreted.
+Example: <pre>result 1-0 {White mates}</pre>
+<p>
+Here are some notes on interpreting the "result" command.  Some apply
+only to playing on ICS ("Zippy" mode).
+</p>
+
+<p>
+If you won but did not just play a mate, your opponent must have
+resigned or forfeited.  If you lost but were not just mated, you
+probably forfeited on time, or perhaps the operator resigned manually.
+If there was a draw for some nonobvious reason, perhaps your opponent
+called your flag when he had insufficient mating material (or vice
+versa), or perhaps the operator agreed to a draw manually.
+</p>
+
+<p>
+You will get a result command even if you already know the game ended
+-- for example, after you just checkmated your opponent.  In fact, if
+you send the "RESULT {COMMENT}" command (discussed below), you will
+simply get the same thing fed back to you with "result" tacked in
+front.  You might not always get a "result *" command, however.  In
+particular, you won't get one in local chess engine mode when the user
+stops playing by selecting Reset, Edit Game, Exit or the like.
+</p>
+
+<dt><font color=red><strong>setboard FEN</strong></font>
+<dd><font color=red>
+The setboard command is the new way to set up positions, beginning
+in protocol version 2.  It is not used unless it has been selected
+with the feature command.  Here FEN is a position in Forsythe-Edwards
+Notation, as defined in the PGN standard.</font>
+<font color=green>Note that this PGN standard referred to here
+only applies to normal Chess;
+Obviously in variants that cannot be described by a FEN for normal Chess,
+e.g. because the board is not 8x8, other pieces then PNBRQK participate, 
+there are holdings that need to be specified, etc., 
+xboard will use a FEN format that is standard or suitable for that varant.
+In particular, in FRC or CRC, WinBoard will use Shredder-FEN or X-FEN standard,
+i.e. it can use the rook-file indicator letter to represent a castling right 
+(like HAha) whenever it wants, but if it uses KQkq, this will always refer 
+to the outermost rook on the given side.</font>
+<font color=red>
+
+<p><i>Illegal positions:</i> Note that either setboard or edit can
+be used to send an illegal position to the engine.  The user can
+create any position with xboard's Edit Position command (even, say,
+an empty board, or a board with 64 white kings and no black ones).
+If your engine receives a position that it considers illegal, 
+I suggest that you send the response "tellusererror Illegal position",
+and then respond to any attempted move with "Illegal move" until
+the next new, edit, or setboard command.</p>
+</font>
+<p>
+
+<dt><strong>edit</strong>
+<dd>
+<font color=red>
+The edit command is the old way to set up positions.  For compatibility
+with old engines, it is still used by default, but new engines may prefer
+to use the feature command (see below) to cause xboard to use setboard instead.
+</font>
+The edit command puts the chess engine into a special mode, where
+it accepts the following subcommands:
+<table>
+<tr align="left"><th>c<td>change current piece color, initially white
+<tr align="left"><th>Pa4 (for example)<td>place pawn of current color on a4
+<tr align="left"><th>xa4 (for example)<td>empty the square a4 (not used by xboard)
+<tr align="left"><th>#<td>clear board
+<tr align="left"><th>.<td>leave edit mode
+</table>
+<font color=red>
+See the Idioms section below for additional subcommands used in
+ChessBase's implementation of the protocol.
+</font>
+
+<p>The edit command does not change the side to move.  To set up a
+black-on-move position, xboard uses the following command sequence:
+</p>
+<pre>
+    new
+    force
+    a2a3
+    edit
+    &lt;edit commands&gt;
+    .
+</pre>
+
+<p>
+This sequence is used to avoid the "black" command, which is now
+considered obsolete and which many engines never did implement as 
+specified in this document.
+</p>
+
+<p>
+After an edit command is complete, if a king and a rook are on their
+home squares, castling is assumed to be available to them.  En passant
+capture is assumed to be illegal on the current move regardless of the
+positions of the pawns.  The clock for the 50 move rule starts at
+zero, and for purposes of the draw by repetition rule, no prior
+positions are deemed to have occurred.
+<font color=green>
+In FRC or CRC, any rook and king put on the back rank should be considered to
+have castling rights, even if it later becomes apparent that they cannot be both in the
+initial position, because the position just set up is asymmetric.
+It is upto WinBoard to find work-around in cases where this is not desired,
+similar to the "black kludge" shown above, by setting up an earlier position,
+and then do a move to destroy castling rights or create e.p. rights.
+(Don't bet your life on it...)
+</font>
+</p>
+
+<dt><strong>hint</strong>
+<dd>If the user asks for a hint, xboard sends your engine the command
+"hint".  Your engine should respond with "Hint: xxx", where xxx is a
+suggested move.  If there is no move to suggest, you can ignore the
+hint command (that is, treat it as a no-op).
+<p>
+
+<dt><strong>bk</strong>
+<dd>If the user selects "Book" from the xboard menu, xboard will send
+your engine the command "bk".  You can send any text you like as the
+response, as long as each line begins with a blank space or tab (\t)
+character, and you send an empty line at the end.  The text pops up in
+a modal information dialog.
+<p>
+
+<dt><strong>undo</strong>
+<dd>If the user asks to back up one move, xboard will send you the
+"undo" command.  xboard will not send this command without putting you
+in "force" mode first, so you don't have to worry about what should
+happen if the user asks to undo a move your engine made.  (GNU Chess 4
+actually switches to playing the opposite color in this case.)
+<p>
+
+<dt><strong>remove</strong>
+<dd>If the user asks to retract a move, xboard will send you the
+"remove" command.  It sends this command only when the user is on
+move.  Your engine should undo the last two moves (one for each
+player) and continue playing the same color.
+<p>
+
+<dt><strong>hard</strong>
+<dd>Turn on pondering (thinking on the opponent's time, also known as
+"permanent brain").  xboard will not make any assumption about what
+your default is for pondering or whether "new" affects this setting.
+<p>
+
+<dt><strong>easy</strong>
+<dd>Turn off pondering.
+<p>
+  
+<dt><strong>post</strong>
+<dd>Turn on thinking/pondering output.  
+See <a href="#10">Thinking Output</a> section.
+<p>
+
+<dt><strong>nopost</strong>
+<dd>Turn off thinking/pondering output.
+<p>
+  
+<dt><strong>analyze</strong>
+<dd>Enter analyze mode.  See <a href="#12">Analyze Mode</a> section.
+<p>
+
+<dt><strong>name X</strong> <dd>This command informs the engine of its
+opponent's name.  When the engine is playing on a chess server, xboard
+obtains the opponent's name from the server. 
+<font color=red>
+When the engine is
+playing locally against a human user, xboard obtains the user's login
+name from the local operating system.  When the engine is playing
+locally against another engine, xboard uses either the other engine's
+filename or the name that the other engine supplied in the myname
+option to the feature command.  By default, xboard uses the name
+command only when the engine is playing on a chess server.  Beginning
+in protocol version 2, you can change this with the name option to the
+feature command; see below.
+</font>
+<p>
+
+<dt><strong>rating</strong>
+<dd>In ICS mode, xboard obtains the ICS opponent's rating from the
+"Creating:" message that appears before each game.  (This message may
+not appear on servers using outdated versions of the FICS code.)  In
+Zippy mode, it sends these ratings on to the chess engine using the
+"rating" command.  The chess engine's own rating comes first, and if
+either opponent is not rated, his rating is given as 0.  
+<font color=red>
+In the future this command may also be used in other modes, if ratings
+are known.
+</font>
+Example: <pre>rating 2600 1500</pre>
+<p>
+
+<dt><font color=red><strong>ics HOSTNAME</strong></font>
+<dd><font color=red>
+If HOSTNAME is "-", the engine is playing against a local
+opponent; otherwise, the engine is playing on an Internet Chess Server
+(ICS) with the given hostname.  This command is new in protocol
+version 2 and is not sent unless the engine has enabled it with
+the "feature" command.  Example: "ics freechess.org"
+</font>
+<p>
+
+<dt><strong>computer</strong>
+<dd>The opponent is also a computer chess engine.  Some engines alter
+their playing style when they receive this command.
+<p>
+
+<dt><font color=red><strong>pause</strong></font>
+<dt><font color=red><strong>resume</strong></font>
+<dd><font color=red>(These commands are new in protocol
+version 2 and will not be sent unless feature pause=1 is set.  At
+this writing, xboard actually does not use the commands at all, but it
+or other interfaces may use them in the future.)
+The "pause" command puts the engine into a special state where it
+does not think, ponder, or otherwise consume significant CPU time.
+The current thinking or pondering (if any) is suspended and both
+player's clocks are stopped.  The only command that the interface may
+send to the engine while it is in the paused state is "resume".  The
+paused thinking or pondering (if any) resumes from exactly where it
+left off, and the clock of the player on move resumes running from
+where it stopped.
+</font>
+<p>
+
+<dt><font color=blue><strong>memory N</strong></font>
+<dd><font color=blue>
+This command informs the engine on how much memory it is allowed to use maximally, in MegaBytes.
+On receipt of this command, the engine should adapt the size of its hash tables accordingly.
+This command does only fix the total memory use,
+the engine has to decide for itself 
+(or be configured by the user by other means) 
+how to divide up the available memory between the various tables it wants to use 
+(e.g. main hash, pawn hash, tablebase cache, bitbases).
+This command will only be sent to engines that have requested it through the memory feature,
+and only at the start of a game,
+as the first of the commands to relay engine option settings just before each "new" command.
+</font>
+<p>
+
+<dt><font color=blue><strong>cores N</strong></font>
+<dd><font color=blue>
+This command informs the engine on how many CPU cores it is allowed to use maximally.
+This could be interpreted as the number of search threads for SMP engines. 
+(Threads that do not consume significant amounts of CPU time, like I/O threads, need not be included in the count.)
+This command will only be sent to engines that have requested it through the smp feature.
+The engine should be able to respond to the "cores" command any time during a game,
+but it is allowed to finish a search in progress before procesing the command.
+(Obeying the command should take priority over finishing a ponder search, though.)
+In any case it will be sent at the start of every game
+as the last command to relay engine option settings before the "new" command.
+</font>
+<p>
+
+<dt><font color=blue><strong>egtpath TYPE PATH</strong></font>
+<dd><font color=blue>
+This command informs the engine in which directory (given by the PATH argument)
+it can find end-game tables of the specified TYPE.
+The TYPE argument can be any character string which does not contain spaces.
+Currently <strong>nalimov</strong> and <strong>scorpio</strong> are defined types, 
+for Nalimov tablebases and Scorpio bitbases, respectively,
+but future developers of other formats are free to define their own format names.
+The GUI simply matches the TYPE names the engine says it supports 
+with those that the user supplied when configuring xboard.
+For every match, it sends a separate "y" command.
+The PATH argument would normally (for Nalimov) be the pathname of the directory the EGT files are in,
+but could also be the name of a file, or in fact anything the particular EGT type requires.
+It is upto the developer of the EGT format to specify the syntax of this parameter.
+This command will only be sent to engines that have told the GUI they support EGTs of the given TYPE
+through the egt feature.
+It will be sent at the start of each game, before the "new" command.
+</font>
+<p>
+
+<dt><font color=blue><strong>option NAME[=VALUE]</strong></font>
+<dd><font color=blue>
+This command changes the setting of the option NAME defined by the engine 
+(through an earlier feature command)
+to the given VALUE.
+XBoard will in general have no idea what the option means,
+and will send the command only when a user changes the value of this option through a menu,
+or at startup of the engine 
+(before the first 'cores' command or, if that is not sent, the first 'new' command)
+in reaction to command-line options.
+The NAME echoes back to the engine the string that was identified as an option NAME
+in the feature command defining the option.
+The VALUE is of the type (numeric or text or absent) that was implied by the option type
+specified in this feature command,
+i.e. with 'spin' and 'check' options VALUE will be a decimal integer (in the latter case 0 or 1),
+with 'combo' and 'string' options VALUE will be a text string,
+and with 'button' and 'save' options no VALUE will be sent at all.
+</font>
+</dl>
+
+<h3>Bughouse commands:</h3>
+
+<p>
+xboard now supports bughouse engines when in Zippy mode.  See
+<a href="http://www.tim-mann.org/xboard/zippy.README"
+>zippy.README</a> for information on Zippy mode and how to turn on the
+bughouse support.  The bughouse move format is given above.  xboard
+sends the following additional commands to the engine when in bughouse
+mode.  
+Commands to inform your engine of the partner's game state may
+be added in the future.
+</p>
+
+<dl>
+<dt><strong>partner &lt;player&gt;</strong>
+<dd>&lt;player&gt; is now your partner for future games.  Example: <pre>partner mann</pre>
+<p>
+
+<dt><strong>partner</strong>
+<dd>Meaning: You no longer have a partner.
+<p>
+
+<dt><strong>ptell &lt;text&gt;</strong>
+<dd>Your partner told you &lt;text&gt;, either with a ptell or an ordinary tell.  
+<p>
+
+<dt><strong>holding [&lt;white&gt;] [&lt;black&gt;]</strong>
+<dd>White currently holds &lt;white&gt;; black currently holds &lt;black&gt;.
+  Example: <pre>holding [PPPRQ] []</pre>
+
+<dt><strong>holding [&lt;white&gt;] [&lt;black&gt;] &lt;color&gt;&lt;piece&gt;</strong>
+<dd>White currently holds &lt;white&gt;; black currently holds &lt;black&gt;, after
+  &lt;color&gt; acquired &lt;piece&gt;.   Example: <pre>holding [PPPRQ] [R] BR</pre>
+</dl>
+
+<h2><a name="9">9. Commands from the engine to xboard</a></h2>
+
+<p>
+<font color=red>
+In general, an engine should not send any output to xboard that is not
+described in this document.  As the protocol is extended, newer
+versions of xboard may recognize additional strings as commands that
+were previously not assigned a meaning.
+</font>
+</p>
+
+<dl>
+<dt><font color=red>
+<strong>feature FEATURE1=VALUE1 FEATURE2=VALUE2 ...</strong> 
+</font>
+
+<dd><font color=red>
+Beginning with version 2, the protocol includes the "feature"
+command, which lets your engine control certain optional protocol
+features.  Feature settings are written as FEATURE=VALUE, where
+FEATURE is a name from the list below and VALUE is the value to be
+assigned.  Features can take string, integer, or boolean values; the
+type of value is listed for each feature.  String values are written
+in double quotes (for example, <tt>feature myname="Miracle Chess
+0.9"</tt>), integers are written in decimal, and boolean values are
+written as 0 for false, 1 for true.  Any number of features can be set
+in one feature command, or multiple feature commands can be given.
+
+<p>
+Your engine should send one or more feature commands immediately after
+receiving the "protover" command, since xboard needs to know the
+values of some features before sending further commands to the engine.
+Because engines that predate protocol version 2 do not send "feature",
+xboard uses a timeout mechanism: when it first starts your engine, it
+sends "xboard" and "protover N", then listens for feature commands for
+two seconds before sending any other commands.  To end this timeout
+and avoid the wait, set the feature "done=1" at the end of your last
+feature command.  To increase the timeout, if needed, set the feature
+"done=0" before your first feature command and "done=1" at the end.
+If needed, it is okay for your engine to set done=0 soon as it starts,
+even before it receives the xboard and protover commands.  This can be
+useful if your engine takes a long time to initialize itself.  It
+should be harmless even if you are talking to a (version 1) user
+interface that does not understand the "feature" command, since such
+interfaces generally ignore commands from the engine that they do not
+understand.
+</p>
+
+<p>
+The feature command is designed to let the protocol change without
+breaking engines that were written for older protocol versions.  When
+a new feature is added to the protocol, its default value is always
+chosen to be compatible with older versions of the protocol that did
+not have the feature.  Any feature that your engine does not set in a
+"feature" command retains its default value, so as the protocol
+changes, you do not have to change your engine to keep up with it
+unless you want to take advantage of a new feature.  Because some
+features are improvements to the protocol, while others are meant to
+cater to engines that do not implement all the protocol features, the
+recommended setting for a feature is not always the same as the
+default setting.  The listing below gives both default and recommended
+settings for most features.
+</p>
+
+<p>
+You may want to code your engine so as to be able to work with
+multiple versions of the engine protocol.  Protocol version 1 does not
+send the protover command and does not implement the feature command;
+if you send a feature command in protocol version 1, it will have no
+effect and there will be no response.  In protocol version 2 or later,
+each feature F that you set generates the response "accepted F" if the
+feature is implemented, or "rejected F" if it is not.  Thus an engine
+author can request any feature without having to keep track of which
+protocol version it was introduced in; you need only check whether the
+feature is accepted or rejected.  This mechanism also makes it
+possible for a user interface author to implement a subset of a
+protocol version by rejecting some features that are defined in that
+version; however, you should realize that engine authors are likely to
+code for xboard and may not be prepared to have a feature that they
+depend on be rejected.
+</p>
+
+<p>
+Here are the features that are currently defined.
+</p>
+</font>
+
+<dl>
+<dt><font color=red>
+<strong>ping</strong> (boolean, default 0, recommended 1)
+</font>
+<dd><font color=red>
+If ping=1, xboard may use the protocol's new "ping" command;
+if ping=0, xboard will not use the command.
+</font>
+
+<dt><font color=red>
+<strong>setboard</strong> (boolean, default 0, recommended 1)
+</font>
+<dd><font color=red>
+If setboard=1, xboard will use the protocol's new "setboard" command
+to set up positions; if setboard=0, it will use the older "edit" command.
+</font>
+
+<dt><font color=red>
+<strong>playother</strong> (boolean, default 0, recommended 1)
+</font>
+<dd><font color=red>
+If playother=1, xboard will use the protocol's new "playother" command
+when appropriate; if playother=0, it will not use the command.
+</font>
+
+<dt><font color=red>
+<strong>san</strong> (boolean, default 0)
+</font>
+<dd><font color=red>
+If san=1, xboard will send moves to the engine in standard algebraic
+notation (SAN); for example, Nf3.  If san=0, xboard will send moves in
+coordinate notation; for example, g1f3.  See MOVE in 
+<a href="#8">section 8</a> above for more details of both kinds of notation.
+</font>
+
+<dt><font color=red>
+<strong>usermove</strong> (boolean, default 0)
+</font>
+<dd><font color=red>
+If usermove=1, xboard will send moves to the engine with the
+command "usermove MOVE"; if usermove=0, xboard will send just the move,
+with no command name.
+</font>
+
+<dt><font color=red>
+<strong>time</strong> (boolean, default 1, recommended 1)
+</font>
+<dd><font color=red>
+If time=1, xboard will send the "time" and "otim" commands to
+update the engine's clocks; if time=0, it will not.
+</font>
+
+<dt><font color=red>
+<strong>draw</strong> (boolean, default 1, recommended 1)
+</font>
+<dd><font color=red>
+If draw=1, xboard will send the "draw" command if the engine's opponent
+offers a draw; if draw=0, xboard will not inform the engine about
+draw offers.  Note that if draw=1, you may receive a draw offer while you
+are on move; if this will cause you to move immediately, you should set
+draw=0.
+</font>
+
+<dt><font color=red>
+<strong>sigint</strong> (boolean, default 1)
+</font>
+<dd><font color=red>
+If sigint=1, xboard may send SIGINT (the interrupt signal) to
+the engine as <a href="#7">section 7</a> above; if sigint=0, it will
+not.
+</font>
+
+<dt><font color=red>
+<strong>sigterm</strong> (boolean, default 1)
+</font>
+<dd><font color=red>
+If sigterm=1, xboard may send SIGTERM (the termination signal) to
+the engine as <a href="#7">section 7</a> above; if sigterm=0, it will
+not.
+</font>
+
+<dt><font color=red>
+<strong>reuse</strong> (boolean, default 1, recommended 1) 
+</font>
+<dd><font color=red>
+If reuse=1, xboard may reuse your engine for multiple games.  If
+reuse=0 (or if the user has set the -xreuse option on xboard's command
+line), xboard will kill the engine process after every game and start
+a fresh process for the next game.
+</font>
+
+<dt><font color=red>
+<strong>analyze</strong> (boolean, default 1, recommended 1)
+</font>
+<dd><font color=red>
+If analyze=0, xboard will not try to use the "analyze" command; it
+will pop up an error message if the user asks for analysis mode.  If
+analyze=1, xboard will try to use the command if the user asks for
+analysis mode.
+</font>
+
+<dt><font color=red>
+<strong>myname</strong> (string, default determined from engine filename)
+</font>
+<dd><font color=red>
+This feature lets you set the name that xboard will use for your
+engine in window banners, in the PGN tags of saved game files, and when
+sending the "name" command to another engine.
+</font>
+
+<dt><font color=red>
+<strong>variants</strong> (string, see text below)
+</font>
+<dd><font color=red>
+This feature indicates which chess variants your engine accepts.
+It should be a comma-separated list of variant names.  See the table
+under the "variant" command in <a href="#8">section 8</a> above.  If
+you do not set this feature, xboard will assume by default that your
+engine supports all variants.  (However, the -zippyVariants
+command-line option still limits which variants will be accepted in
+Zippy mode.)  It is recommended that you set this feature to the
+correct value for your engine (just "normal" in most cases) rather
+than leaving the default in place, so that the user will get an
+appropriate error message if he tries to play a variant that your
+engine does not support.</font>
+<br>
+<font color=green>If your engine can play variants on a deviating board size,
+like capablanca on an 8x8 board, or capablanca crazyhouse,
+it can list them amongst the variants with a prefix spcifying board size plus
+holdings size, like 8x8+0_capablanca or 10x8+7_capablanca.
+If it is capable of playing any variant with an arbitrary board size,
+it should list "boardsize" as one of the variants.
+If there is a maximum to the board size, this can be prefixed,
+e.g. "12x10+0_boardsize".
+</font>
+
+<dt><font color=red>
+<strong>colors</strong> (boolean, default 1, recommended 0) 
+</font>
+<dd><font color=red>
+If colors=1, xboard uses the obsolete "white" and "black"
+commands in a stylized way that works with most older chess engines
+that require the commands.  See the "<a href="#13">Idioms</a>" section
+below for details.  If colors=0, xboard does not use the "white" and
+"black" commands at all.
+</font>
+
+<dt><font color=red>
+<strong>ics</strong> (boolean, default 0)
+</font>
+<dd><font color=red>
+If ics=1, xboard will use the protocol's new "ics" command
+to inform the engine of whether or not it is playing on a chess server;
+if ics=0, it will not.
+</font>
+
+<dt><font color=red>
+<strong>name</strong> (boolean, see text below)
+</font>
+<dd><font color=red>
+If name=1, xboard will use the protocol's "name" command
+to inform the engine of the opponent's name; if name=0, it will not.
+By default, name=1 if the engine is playing on a chess server; name=0 if not.
+</font>
+
+<dt><font color=red>
+<strong>pause</strong> (boolean, default 0)
+</font>
+<dd><font color=red>
+If pause=1, xboard may use the protocol's new "pause" command;
+if pause=0, xboard assumes that the engine does not support this command.
+</font>
+
+<dt><font color=green>
+<strong>nps</strong> (boolean, default ?)
+</font>
+<dd><font color=green>
+If nps=1, it means the engine supports the nps command.
+If nps=0, it means the engine does not support it, and WinBoard should refrain from sending it.
+Default is that WinBoard sends it, in an attempt to try out if the engine understand it.
+The engine should properly respond with "Error (unkown command): nps" if it does not implement it,
+(as any protocol version pre-scribes),
+or WinBoard might assume that the engine did understand the command. 
+In that case the use of different time standards that ensues could lead to time forfeits for the engine.
+</font>
+
+<dt><font color=green>
+<strong>debug</strong> (boolean, default 0)
+</font>
+<dd><font color=green>
+If debug=1, it means the engine wants to send debug output prefixed by '#',
+which WinBoard should ignore, except for including it in the winboard.debug file.
+As this feature is added to protocol 2 ony late,
+so that not all protocol-2 supporting versions of WinBoard might implement it,
+it is important that engines check if WinBoard accepts the feature.
+If the feature is rejected,
+engines must refrain from sending the debug output,
+or do so at their own risk.
+</font>
+
+<dt><font color=blue>
+<strong>memory</strong> (boolean, default 0)
+</font>
+<dd><font color=blue>
+If memory=1, the size of the total amount of memory available for the memory-consuming tables of the engine 
+(e.g. hash, EGTB cache)
+will be set by the GUI through the "memory" command.
+</font>
+
+<dt><font color=blue>
+<strong>smp</strong> (boolean, default 0)
+</font>
+<dd><font color=blue>
+If smp=1, the GUI will send the "cores" command to the engine to inform it how many CPU cores it can use.
+Note that sending smp=1 does not imply the engine can use more than one CPU;
+just that it wants to receive the "cores" command.
+</font>
+
+<dt><font color=blue>
+<strong>egt</strong> (string, see text below)
+</font>
+<dd><font color=blue>
+This feature indicates which end-game table formats the engine supports.
+It should be a comma-separated list of format names.
+See under the "egtpath" command in <a href="#8">section 8</a> above.
+If you do not set this feature, xboard will assume the engine does not support end-game tables,
+and will not send any "egtpath" commands to inform the engine about their whereabouts.
+</font>
+
+<dt><font color=blue>
+<strong>option</strong> (string, see text below)
+</font>
+<dd><font color=blue>
+This feature is used by the engine to define an option command to appear in a GUI menu,
+so that the user can change the corresponding setting of the engine through the GUI.
+The string describes the option by defining a name, type, current value and (sometimes) the acceptable value range.
+There are six different options types, each requiring a slighly different syntax of the defining string:
+<br>
+feature option="NAME -button"
+<br>
+feature option="NAME -save"
+<br>
+feature option="NAME -check VALUE"
+<br>
+feature option="NAME -string VALUE"
+<br>
+feature option="NAME -spin VALUE MIN MAX"
+<br>
+feature option="NAME -combo CHOICE1 /// CHOICE2 ..."
+<br>
+NAME is an arbitrary alphanumeric string which can contain spaces; 
+the oter words in capitals would be replaced by the current (default) setting of the option,
+the minimum or maximum value of numeric (-spin) options, 
+or arbitrary text labels (for -combo option).
+In the latter cae, the current value will be preceded by an asterisk.
+</font>
+
+<dt><font color=red>
+<strong>done</strong> (integer, no default)
+</font>
+<dd><font color=red>
+If you set done=1 during the initial two-second timeout after
+xboard sends you the "xboard" command, the
+timeout will end and xboard will not look for any more feature
+commands before starting normal operation.
+If you set done=0, the initial timeout is increased to one hour;
+in this case, you must set done=1 before xboard will enter normal operation.
+</font>
+</dl>
+<p>
+
+<dt><strong>Illegal move: MOVE</strong>
+<dt><strong>Illegal move (REASON): MOVE</strong>
+<dd>If your engine receives a MOVE command that is recognizably a move
+but is not legal in the current position, your engine must print an
+error message in one of the above formats so that xboard can pass the
+error on to the user and retract the move.  The (REASON) is entirely
+optional.  Examples:
+
+<pre>
+  Illegal move: e2e4
+  Illegal move (in check): Nf3
+  Illegal move (moving into check): e1g1
+</pre>
+<p>
+Generally, xboard will never send an ambiguous move, so it does not 
+matter whether you respond to such a move with an Illegal move message 
+or an Error message.
+</p>
+
+<dt><strong>Error (ERRORTYPE): COMMAND</strong>
+<dd>If your engine receives a command it does not understand or does
+not implement, it should print an error message in the above format so
+that xboard can parse it.  Examples:
+<pre>
+  Error (ambiguous move): Nf3
+  Error (unknown command): analyze
+  Error (command not legal now): undo
+  Error (too many parameters): level 1 2 3 4 5 6 7
+</pre>
+
+<dt><strong>move MOVE</strong>
+<dd>Your engine is making the move MOVE.  Do not echo moves from
+xboard with this command; send only new moves made by the engine.
+
+<font color=red>
+<p>For the actual move text from your chess engine (in place of MOVE
+above), your move should be either
+<ul>
+<li>in coordinate notation (e.g.,
+e2e4, e7e8q) with castling indicated by the King's two-square move (e.g.,
+e1g1), or
+<li>in Standard Algebraic Notation (SAN) as defined in the
+Portable Game Notation standard (e.g, e4, Nf3, O-O, cxb5, Nxe4, e8=Q),
+with the extension piece at square (e.g., P at f7) to handle piece placement
+in bughouse and crazyhouse.
+</ul>
+xboard itself also accepts some variants of SAN, but for compatibility
+with non-xboard interfaces, it is best not to rely on this behavior.
+</p>
+
+<p>Warning: Even though all versions of this protocol specification
+have indicated that xboard accepts SAN moves, some non-xboard
+interfaces are known to accept only coordinate notation.  See the
+Idioms section for more information on the known limitations of some
+non-xboard interfaces.  It should be safe to send SAN moves if you
+receive a "protover 2" (or later) command from the interface, but
+otherwise it is best to stick to coordinate notation for maximum
+compatibility.  An even more conservative approach would be for your
+engine to send SAN to the interface only if you have set feature san=1
+(which causes the interface to send SAN to you) and have received
+"accepted san" in reply.
+</p>
+</font>
+
+<dt><strong>RESULT {COMMENT}</strong> <dd>When your engine detects
+that the game has ended by rule, your engine must output a line of the
+form "RESULT {comment}" (without the quotes), where RESULT is a PGN
+result code (1-0, 0-1, or 1/2-1/2), and comment is the reason.  Here
+"by rule" means that the game is definitely over because of what
+happened on the board.  In normal chess, this includes checkmate,
+stalemate, triple repetition, the 50 move rule, or insufficient
+material; it does not include loss on time or the like.
+Examples:
+<pre>
+  0-1 {Black mates}
+  1-0 {White mates}
+  1/2-1/2 {Draw by repetition}
+  1/2-1/2 {Stalemate}
+</pre>
+
+<p>
+xboard relays the result to the user, the ICS, the other engine in Two
+Machines mode, and the PGN save file as required.
+<font color=green>Note that "definitey over" above means that sending this command 
+will be taken by WinBoard as an unconditional refusal of the engine to play on,
+which might cause you to forfeit if the game was in fact not over.
+This command should thus not be used to offer draws, accept draws,
+or make draw-by-rule claims that might not be valid 
+(because it is not your move, and the opponent already moved without you knowing it yet).
+For offering and claiming draws, "offer draw" should be used.</font>
+<p>
+Note to GUI programmers: RESULT commands that the engine sends immediately after its move
+might be detected by the GUI only after the opponent has moved, because of communication
+and scheduling delays, no matter how fast the engine sent it.
+Any judgement of the validity of RESULT claims based on te "current" board position
+will have to account for this uncertainty.
+</p>
+
+<dt><strong>resign</strong>
+<dd>If your engine wants to resign, it can send the command "resign".
+Alternatively, it can use the "RESULT {comment}" command if the string
+"resign" is included in the comment; for example "0-1 {White
+resigns}".  xboard relays the resignation to the user, the ICS, the
+other engine in Two Machines mode, and the PGN save file as required.
+<p>
+
+<dt><strong>offer draw</strong>
+<dd>If your engine wants to offer a draw by agreement (as opposed to
+claiming a draw by rule), it can send the command "offer draw".
+xboard relays the offer to the user, the ICS, the other engine in Two
+Machines mode, and the PGN save file as required.  In Machine White,
+Machine Black, or Two Machines mode, the offer is considered valid
+until your engine has made two more moves.
+<font color=green>This command must also be used to accept a draw offer.
+Do not use the 1/2-1/2 command for that, as the offer might be no longer valid,
+in which case a refusal to play on implied by the RESULT command would make you forfeit the game.
+"offer draw" should also be used to claim 50-move and 3-fold-repetition draws
+that will occur <em>after</em> your move, by sending it <em>before</em> making the move.
+WinBoard will grant draw offers without the opponent having any say in
+it in situations where draws can be claimed.
+Only if the draw cannot be claimed, the offer will be passed to your opponent after you make your next move,
+just before WinBoard relays this move to the opponent.
+</font>
+<p>
+
+<dt><font color=red><strong>tellopponent MESSAGE</strong></font>
+<dd><font color=red>
+This command lets the engine give a message to its opponent,
+independent of whether the opponent is a user on the local machine or
+a remote ICS user (Zippy mode).  MESSAGE consists of any characters,
+including whitespace, to the end of the line.  When the engine is
+playing against a user on the local machine, xboard pops up an
+information dialog containing the message.  When the engine is playing
+against an opponent on the ICS (Zippy mode), xboard sends "say
+MESSAGE\n" to the ICS.
+<p>
+
+<dt><strong>tellothers MESSAGE</strong> 
+<dd>This command lets the engine give a message to people watching the
+game other than the engine's opponent.  MESSAGE consists of any
+characters, including whitespace, to the end of the line.  When the
+engine is playing against a user on the local machine, this command
+does nothing.  When the engine is playing against an opponent on the
+ICS (Zippy mode), xboard sends "whisper MESSAGE\n" to the ICS.
+<p>
+
+<dt><strong>tellall MESSAGE</strong>
+<dd>This command lets the engine give a message to its opponent and
+other people watching the game, 
+independent of whether the opponent is a user on the local machine or
+a remote ICS user (Zippy mode).  MESSAGE consists of any characters,
+including whitespace, to the end of the line.  When the engine is
+playing against a user on the local machine, xboard pops up an
+information dialog containing the message.  When the engine is playing
+against an opponent on the ICS (Zippy mode), xboard sends "kibitz
+MESSAGE\n" to the ICS.
+</font>
+<p>
+
+<dt><strong>telluser MESSAGE</strong>
+<dd>xboard pops up an information dialog containing the message.
+MESSAGE consists of any characters, including whitespace, to the end
+of the line.
+<p>
+
+<dt><strong>tellusererror MESSAGE</strong>
+<dd>xboard pops up an error dialog containing the message.
+MESSAGE consists of any characters, including whitespace, to the end
+of the line.
+<p>
+
+<dt><strong>askuser REPTAG MESSAGE</strong>
+<dd>Here REPTAG is a string containing no whitespace, and MESSAGE
+consists of any characters, including whitespace, to the end of the
+line.  xboard pops up a question dialog that says MESSAGE and
+has a typein box.  If the user types in "bar", xboard sends "REPTAG
+bar" to the engine.  The user can cancel the dialog and send nothing.
+<p>
+
+<dt><strong>tellics MESSAGE</strong>
+<dd>In Zippy mode, xboard sends "MESSAGE\n" to ICS.  MESSAGE consists
+of any characters, including whitespace, to the end of the line.
+<p>
+
+<dt><font color=red><strong>tellicsnoalias MESSAGE</strong></font>
+<dd><font color=red>
+In Zippy mode, xboard sends "xMESSAGE\n" to ICS, where "x" is a
+character that prevents the ICS from expanding command aliases, if
+xboard knows of such a character.  (On chessclub.com and chess.net,
+"/" is used; on freechess.org, "$" is used.)  MESSAGE consists of any
+characters, including whitespace, to the end of the line.
+</font>
+<p>
+
+<dt><font color=green><strong># COMMENT</strong></font>
+<dd><font color=green>
+The engine can send any string of printable characters, terminated by a newline,
+for inclusion in the winboard.debug file, provided the line starts with a '#' character.
+If the engine has set feature debug=1,
+it is guaranteed that WinBoard (and any future version of it) will completely ignore
+these lines in any other respect.
+</font>
+</dl>
+<p>
+
+<h2><a name="10">10. Thinking Output</a></h2>
+
+<p>
+If the user asks your engine to "show thinking", xboard sends your
+engine the "post" command.  It sends "nopost" to turn thinking off.
+In post mode, your engine sends output lines to show the progress of
+its thinking.  The engine can send as many or few of these lines as it
+wants to, whenever it wants to.  Typically they would be sent when the
+PV (principal variation) changes or the depth changes.  The thinking
+output should be in the following format:
+</p>
+
+<pre>ply score time nodes pv</pre>
+
+Where:
+<table>
+<tr align="left"><th>ply<td>Integer giving current search depth.
+<tr align="left"><th>score<td>Integer giving current evaluation in centipawns.
+<tr align="left"><th>time<td>Current search time in centiseconds (ex:
+1028 = 10.28 seconds).
+
+<tr align="left"><th>nodes<td>Nodes searched.
+<tr align="left"><th>pv<td>Freeform text giving current "best" line.
+You can continue the pv onto another line if you start each
+continuation line with at least four space characters.
+</table>
+
+<p>
+Example:
+</p>
+
+<pre>  9 156 1084 48000 Nf3 Nc6 Nc3 Nf6</pre>
+
+<p>
+Meaning:
+</p>
+
+9 ply, score=1.56, time = 10.84 seconds, nodes=48000, 
+PV = "Nf3 Nc6 Nc3 Nf6"
+
+<p>
+Longer example from actual Crafty output:
+</p>
+<pre>
+  4    109      14   1435  1. e4 d5 2. Qf3 dxe4 3. Qxe4 Nc6
+  4    116      23   2252  1. Nf3 Nc6 2. e4 e6
+  4    116      27   2589  1. Nf3 Nc6 2. e4 e6
+  5    141      44   4539  1. Nf3 Nc6 2. O-O e5 3. e4
+  5    141      54   5568  1. Nf3 Nc6 2. O-O e5 3. e4
+</pre>
+
+<p>
+You can use the PV to show other things; for instance, while in book,
+Crafty shows the observed frequency of different reply moves in its
+book.  In situations like this where your engine is not really
+searching, start the PV with a '(' character:
+</p>
+
+<pre>
+  0      0       0      0  (e4 64%, d4 24%)
+</pre>
+
+<p>
+GNU Chess output is very slightly different.  The ply number is
+followed by an extra nonblank character, and the time is in seconds,
+not hundredths of seconds.  For compatibility, xboard accepts the
+extra character and takes it as a flag indicating the different time
+units.  Example:
+</p>
+
+<pre>
+ 2.     14    0       38   d1d2  e8e7 
+ 3+     78    0       65   d1d2  e8e7  d2d3 
+ 3&     14    0       89   d1d2  e8e7  d2d3 
+ 3&     76    0      191   d1e2  e8e7  e2e3 
+ 3.     76    0      215   d1e2  e8e7  e2e3 
+ 4&     15    0      366   d1e2  e8e7  e2e3  e7e6 
+ 4.     15    0      515   d1e2  e8e7  e2e3  e7e6 
+ 5+     74    0      702   d1e2  f7f5  e2e3  e8e7  e3f4 
+ 5&     71    0     1085   d1e2  e8e7  e2e3  e7e6  e3f4 
+ 5.     71    0     1669   d1e2  e8e7  e2e3  e7e6  e3f4 
+ 6&     48    0     3035   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
+ 6.     48    0     3720   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
+ 7&     48    0     6381   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
+ 7.     48    0    10056   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
+ 8&     66    1    20536   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5 
+ 8.     66    1    24387   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5 
+ 9&     62    2    38886   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4 
+                           d4e4 
+ 9.     62    4    72578   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4 
+                           d4e4 
+10&     34    7   135944   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4 
+                           d4e4  f7f5  e4f4 
+10.     34    9   173474   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4 
+                           d4e4  f7f5  e4f4 
+</pre>
+
+<p>If your engine is pondering (thinking on its opponent's time) in post
+mode, it can show its thinking then too.  In this case your engine may
+omit the hint move (the move it is assuming its opponent will make)
+from the thinking lines <em>if and only if</em> it sends xboard the move in
+the usual "Hint: xxx" format before sending the first line.
+</p>
+
+<h2><a name="11">11. Time control</a></h2>
+
+<p>
+xboard supports three styles of time control: conventional chess clocks,
+the ICS-style incremental clock, and an exact number of seconds per move.
+</p>
+
+<p>In conventional clock mode, every time control period is the same.
+That is, if the time control is 40 moves in 5 minutes, then after each
+side has made 40 moves, they each get an additional 5 minutes, and so
+on, ad infinitum.  At some future time it would be nice to support a
+series of distinct time controls.  This is very low on my personal
+priority list, but code donations to the xboard project are accepted,
+so feel free to take a swing at it.  I suggest you talk to me first,
+though.
+</p>
+
+<p>
+The command to set a conventional time control looks like this:
+</p>
+
+<pre>
+  level 40 5 0
+  level 40 0:30 0
+</pre>
+
+<p>
+The 40 means that there are 40 moves per time control.  The 5 means
+there are 5 minutes in the control.  In the second example, the 0:30
+means there are 30 seconds.  The final 0 means that we are in
+conventional clock mode.
+</p>
+
+<p>
+<font color=green>
+Note that the time parameter in this command is not a pure numeric argument,
+but in general is a character string, in order to pass the number of seconds.
+Engines are encouraged to ignore any unexpected characters at the end of this string,
+i.e. following the MIN or MIN:SEC specification.
+Future protocol versions might (under control of an appropriate feature)
+append such extra characters to this argument,
+in order to inform the engine in advance of the time control it can expect after the current session completes.
+E.g. "level 40 25+5 0" could mean that the engine has to play 40 moves in 25 minutes,
+but should expect to get only 5 minutes for the entire remainder of the game after that,
+rather than another 25 minutes for the next 40 moves.
+When the time comes, (i.e. after the 40 moves), 
+it will be informed of the time-control change by receiving a new "level 0 5 0" command,
+but engines with advanced time management might want to plan for this in advance.
+</font>
+</p>
+
+<p>
+The command to set an incremental time control looks like this:
+</p>
+
+<pre>
+  level 0 2 12
+</pre>
+
+<p>
+Here the 0 means "play the whole game in this time control period",
+the 2 means "base=2 minutes", and the 12 means "inc=12 seconds".  As
+in conventional clock mode, the second argument to level can be in
+minutes and seconds.
+</p>
+
+<p>
+At the start of the game, each player's clock is set to base minutes.
+Immediately after a player makes a move, inc seconds are added to his
+clock.  A player's clock counts down while it is his turn.  Your flag
+can be called whenever your clock is zero or negative.  (Your clock
+can go negative and then become positive again because of the
+increment.)
+</p>
+
+<p><font color=blue>
+The number of moves given in the level command (when non-zero) should 
+be taken as the number of moves still to do before the specified time
+will be added to the clock, if the "level" command is received after
+some moves have already been played.
+The time given should be interpreted as the time left on its clock
+(including any time left over from the previous sessions),
+and not necessarily the time that will be added to the clock
+after the specified number of moves has been played.
+This is only relevant in WinBoard 4.3.xx, which might send the engine
+"level" commands during a game,
+just before the engine has to start thinking about the first move of 
+a new time-control session.
+Example: if at the start of the game "level 40 60 0" was given 
+(40 moves per hour),
+and the engine receives "level 20 22 0" just before move 41,
+it should understand that it should do the next 20 moves in 22 minutes
+(pehaps because the secondary session was 20 moves per 15 minutes,
+and it had 7 minutes left on its clock after the first 40 moves).
+</font></p>
+
+<p>
+A special rule on some ICS implementations: if you ask for a game with
+base=0, the clocks really start at 10 seconds instead of 0.  xboard
+itself does not know about this rule, so it passes the 0 on to the
+engine instead of changing it to 0:10.
+</p>
+
+<p>
+ICS also has time odds games.  With time odds, each player has his own
+(base, inc) pair, but otherwise things work the same as in normal
+games.  The Zippy xboard accepts time odds games but ignores the fact
+that the opponent's parameters are different; this is perhaps not
+quite the right thing to do, but gnuchess doesn't understand time
+odds.  Time odds games are always unrated.
+</p>
+
+<p>
+The command to set an exact number of seconds per move looks like this:
+</p>
+
+<pre>
+  st 30
+</pre>
+
+<p>
+This means that each move must be made in at most 30 seconds.  Time not used
+on one move does not accumulate for use on later moves.
+</p>
+
+<h2><a name="12">12. Analyze Mode</a></h2>
+
+<p>xboard supports analyzing fresh games, edited positions, and games
+from files.  However, all of these look the same from the chess
+engine's perspective. Basically, the engine just has to respond to the
+"analyze" command.  
+<font color=red>
+Beginning in protocol version 2,
+if your engine does not support analyze mode, it should use
+the feature command to set analyze=0.  
+</font>
+The older method of
+printing the error message "Error (unknown command): analyze" in
+response to the "analyze" command will also work, however.
+</p>
+
+<p>
+To enter analyze mode, xboard sends the command sequence "post", "analyze".  
+Analyze mode in your engine should be
+similar to force mode, except that your engine thinks about what move
+it would make next if it were on move.  Your engine should accept the
+following commands while in analyze mode:
+</p>
+
+<ul>
+<li>Any legal move, as in force mode
+<li><strong>undo</strong>&nbsp;&nbsp; Back up one move and analyze previous position.
+<li><strong>new</strong>&nbsp;&nbsp; Reset position to start of game but stay in analyze mode.
+<li><font color=red><strong>setboard</strong> if you have set feature setboard=1; otherwise <strong>edit</strong>.  Exiting edit mode returns to analyze mode.
+</font>
+<li><strong>exit</strong>&nbsp;&nbsp; Leave analyze mode.
+<li><strong>.</strong>&nbsp;&nbsp; Send a search status update (optional); see below.
+<li><font color=red>
+<strong>bk</strong>&nbsp;&nbsp; Show book moves from this position,
+if any; see above.</font>
+<li><font color=red>
+<strong>hint</strong>&nbsp;&nbsp; Show the predicted move from this
+position, if any; see above.</font>
+</ul>
+  
+<p>
+If the user selects "Periodic Updates", xboard will send the string
+".\n" to the chess engine periodically during analyze mode, unless the
+last PV received began with a '(' character.
+</p>
+
+<p>
+The chess engine should respond to ".\n" with a line like this:
+</p>
+
+<pre>
+stat01: time nodes ply mvleft mvtot <font color=red>mvname</font>
+</pre>
+
+Where:
+<table>
+<tr align="left"><th>time<td>Elapsed search time in centiseconds (ie: 567 = 5.67 seconds).
+<tr align="left"><th>nodes<td>Nodes searched so far.
+<tr align="left"><th>ply<td>Search depth so far.
+<tr align="left"><th>mvleft<td>Number of moves left to consider at this depth.
+<tr align="left"><th>mvtot<td>Total number of moves to consider.
+<tr align="left"><th><font color=red>mvname</font><td><font color=red>
+Move currently being considered (SAN or coordinate notation).  Optional;
+added in protocol version 2.</font>
+</table>
+
+<p>
+Examples:
+</p>
+<pre>
+  stat01: 1234 30000 7 5 30
+  stat01: 1234 30000 7 5 30 Nf3
+</pre>
+
+<p>
+Meaning:
+</p>
+
+<p>After 12.34 seconds, I've searched 7 ply/30000 nodes, there are a
+  total of 30 legal moves, and I have 5 more moves to search
+  before going to depth 8.  In the second example, of the 30 legal
+  moves, the one I am currently searching is Nf3.</p>
+
+<p>
+Implementation of the "." command is optional. If the engine does not
+respond to the "." command with a "stat01..." line, xboard will stop
+sending "."  commands.  If the engine does not implement this command,
+the analysis window will use a shortened format to display the engine
+info.
+</p>
+
+<p>
+To give the user some extra information, the chess engine can output
+the strings "++\n" and "--\n", to indicate that the current search is
+failing high or low, respectively.  You don't have to send anything
+else to say "Okay, I'm not failing high/low anymore."  xboard will
+figure this out itself.
+</p>
+
+<h2><a name="13">13. Idioms and backward compatibility features</a></h2>
+
+<p>
+Some engines have variant interpretations of the force/go/white/black,
+time/otim, and hard/easy command sets.  
+In order to accommodate these older engines, xboard uses these commands
+only according to the stylized patterns ("idioms") given in this section.
+The obsolete white and black commands
+have historically been particularly troublesome, and it is recommended
+that new engines set the feature colors=0 and/or ignore the commands.
+</p>
+
+<dl>
+
+<dt><strong>time N</strong>
+<dt><strong>otim N</strong>
+<dt><strong>MOVE</strong>
+<dd>Sent when the opponent makes a move and the engine is already
+playing the opposite color.
+<p>
+
+<dt><strong>white</strong>
+<dt><strong>go</strong>
+<dd>Sent when the engine is in force mode or playing Black but should
+switch to playing White.  This sequence is sent only when White is
+already on move.  
+<font color=red>
+If you set the feature colors=0, "white" is not sent.
+</font>
+<p>
+
+<dt><strong>black</strong>
+<dt><strong>go</strong>
+<dd>Sent when the engine is in force mode or playing White but should
+switch to playing Black.  This sequence is sent only when Black is
+already on move.  
+<font color=red>
+If you set the feature colors=0, "black" is not sent.
+</font>
+<p>
+
+<dt><strong>white</strong>
+<dt><strong>time N</strong>
+<dt><strong>otim N</strong>
+<dt><strong>black</strong>
+<dt><strong>go</strong>
+<dd>Sent when Black is on move, the engine is in force mode or playing
+White, and the engine's clock needs to be updated before it starts
+playing.  
+The initial "white" is a kludge to accommodate GNU Chess
+4's variant interpretation of these commands.  
+<font color=red>
+If you set the feature colors=0, "white" and "black" are not sent.
+</font>
+<p>
+
+<dt><strong>black</strong>
+<dt><strong>time N</strong>
+<dt><strong>otim N</strong>
+<dt><strong>white</strong>
+<dt><strong>go</strong>
+<dd>Sent when White is on move, the engine is in force mode or playing
+Black, and the engine's clock needs to be updated before it starts
+playing.  See previous idiom.  
+The initial "black" is a kludge to accommodate GNU Chess
+4's variant interpretation of these commands.  
+<font color=red>
+If you set the feature colors=0, "black" and "white" are not sent.
+</font>
+<p>
+
+<dt><strong>hard</strong>
+<dt><strong>easy</strong>
+<dd>Sent in sequence to turn off pondering if xboard is not sure
+whether it is on.  When xboard is sure, it will send "hard" or "easy"
+alone.  xboard does this because "easy" is a toggle in GNU Chess 4 but
+"hard" is an absolute on.
+
+</dl>
+
+<p>
+To support older engines, certain additional commands from the engine
+to xboard are also recognized.  (These are commands by themselves, not
+values to be placed in the comment field of the PGN result code.)
+These forms are not recommended for new engines; use the PGN result
+code commands or the resign command instead.
+</p>
+
+<table>
+<tr align="left"><th>Command              <th>Interpreted as
+<tr align="left"><td>White resigns        <td>0-1 {White resigns}
+<tr align="left"><td>Black resigns        <td>1-0 {Black resigns}
+<tr align="left"><td>White                <td>1-0 {White mates}
+<tr align="left"><td>Black                <td>0-1 {Black mates}
+<tr align="left"><td>Draw                 <td>1/2-1/2 {Draw}
+<tr align="left"><td>computer mates       <td>1-0 {White mates} or 0-1 {Black mates}
+<tr align="left"><td>opponent mates       <td>1-0 {White mates} or 0-1 {Black mates}
+<tr align="left"><td>computer resigns     <td>0-1 {White resigns} or 1-0 {Black resigns}
+<tr align="left"><td>game is a draw       <td>1/2-1/2 {Draw}
+<tr align="left"><td>checkmate            <td>1-0 {White mates} or 0-1 {Black mates}
+</table>
+
+<p>
+Commands in the above table are recognized if they begin a line and
+arbitrary characters follow, so (for example) "White mates" will be
+recognized as "White", and "game is a draw by the 50 move rule" will
+be recognized as "game is a draw".  All the commands are
+case-sensitive.
+</p>
+
+<p>
+An alternative move syntax is also recognized:
+</p>
+
+<table>
+<tr align="left"><th>Command              <th>Interpreted as
+<tr align="left"><td>NUMBER ... MOVE      <td>move MOVE
+</table>
+
+<p>
+Here NUMBER means any string of decimal digits, optionally ending in a
+period.  MOVE is any string containing no whitespace.  In this command
+format, xboard requires the "..." even if your engine is playing
+White.  A command of the form NUMBER MOVE will be ignored.  This odd
+treatment of the commands is needed for compatibility with gnuchessx.
+The original reasons for it are lost in the mists of time, but I
+suspect it was originally a bug in the earliest versions of xboard,
+before I started working on it, which someone "fixed" in the wrong
+way, by creating a special version of gnuchess (gnuchessx) instead of
+changing xboard.
+</p>
+
+<p>
+Any line that contains the words "offer" and "draw" is recognized as
+"offer draw".
+</p>
+
+<p>
+The "Illegal move" message is recognized even if spelled "illegal
+move" and even if the colon (":") is omitted.  This accommodates GNU
+Chess 4, which prints messages like "Illegal move (no matching
+move)e2e4", and old versions of Crafty, which print just "illegal move".
+</p>
+
+<p>
+In Zippy mode, for compatibility with older versions of Crafty,
+xboard passes through to ICS any line that begins "kibitz", "whisper",
+"tell", or "draw".  Do not use this feature in new code.  Instead, use the
+commands "tellall", "tellothers", "tellopponent", "tellics" (if needed),
+"1/2-1/2 {COMMENT}", or "offer draw", as appropriate.
+</p>
+
+<p>
+<font color=red>
+If the engine responds to the "sd DEPTH" command with an error message
+indicating the command is not supported (such as "Illegal move: sd"),
+xboard sets an internal flag and subsequently uses the command
+"depth\nDEPTH" instead, for the benefit of GNU Chess 4.  Note the
+newline in the middle of this command!  New engines should not rely on
+this feature.
+</font>
+</p>
+
+<p>
+<font color=red>
+If the engine responds to the "st TIME" command with an error message
+indicating the command is not supported (such as "Illegal move: st"),
+xboard sets an internal flag and subsequently uses the command "level
+1 TIME" instead, for the benefit of GNU Chess 4.  Note that this is
+not a standard use of the level command, as TIME seconds are not added
+after each player makes 1 move; rather, each move is made in at most
+TIME seconds.  New engines should not implement or rely on this
+feature.
+</font>
+</p>
+
+<font color=red>
+<p>
+In support of the -firstHost/-secondHost features, which allow a chess
+engine to be run on another machine using the rsh protocol, xboard recognizes
+error messages that are likely to come from rsh as fatal errors.  The following
+messages are currently recognized:
+</p>
+
+<blockquote>
+unknown host<br>
+No remote directory<br>
+not found<br>
+No such file<br>
+can't alloc<br>
+Permission denied<br>
+</blockquote>
+</font>
+
+<p>
+<font color=red>
+ChessBase/Fritz now implements the xboard/winboard protocol and can use
+WinBoard-compatible engines in its GUI.  ChessBase's version of the
+protocol is generally the same as version 1, except that they have
+added the commands <strong>fritz</strong>, <strong>reset</strong>, and
+<strong>ponder</strong>, and the edit subcommands
+<strong>castle</strong> and <strong>ep</strong>.  If you want your
+engine to work well with the ChessBase/Fritz GUI, you may need to
+implement these additional commands, and you should also be aware of
+the peculiar way that ChessBase uses the protocol.  See their <a
+href="http://www.chessbase.com/Products/engines/winboard/tech.htm"
+>web page</a> for documentation.
+</font>
+</p>
+
+<p>
+<font color=red>
+ChessMaster 8000 also implements version 1 of the xboard/winboard
+protocol and can use WinBoard-compatible engines.  The original
+release of CM8000 also has one additional restriction: only pure
+coordinate notation (e.g., e2e4) is accepted in the move command.  A
+patch to correct this should be available from The Learning Company
+(makers of CM8000) in February 2001.
+</font>
+</p>
+
+<hr noshade size="2">
+<address>converted to HTML by <a href="http://www.jakob.at/steffen/">Steffen A. Jakob</a></address>
+</body>
+</html>
diff --git a/frontend.h b/frontend.h
index 732b316..ee73ddd 100644
--- a/frontend.h
+++ b/frontend.h
@@ -2,8 +2,10 @@
  * frontend.h -- Interface exported by all XBoard front ends
  * $Id: frontend.h,v 2.2 2003/11/06 07:22:14 mann Exp $
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
@@ -27,24 +29,25 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #ifndef _FRONTEND
 #define _FRONTEND
@@ -164,10 +167,23 @@ void ClearPremoveHighlights P((void));
 void ShutDownFrontEnd P((void));
 void BoardToTop P((void));
 void AnimateMove P((Board board, int fromX, int fromY, int toX, int toY));
-void HistorySet P((char movelist[][2*MOVE_LEN],
-		   int first, int last, int current));
+void HistorySet P((char movelist[][2*MOVE_LEN], int first, int last, int current));
 void FreezeUI P((void));
 void ThawUI P((void));
 extern char *programName;
 
+typedef struct FrontEndProgramStats_TAG {
+    int which;
+    int depth;
+    unsigned long nodes;
+    int score;
+    int time;
+    char * pv;
+    char * hint;
+    int an_move_index;
+    int an_move_count;
+} FrontEndProgramStats;
+
+void SetProgramStats P(( FrontEndProgramStats * stats )); /* [AS] */
+
 #endif
diff --git a/gamelist.c b/gamelist.c
index e8d4132..1a8f5b4 100644
--- a/gamelist.c
+++ b/gamelist.c
@@ -2,24 +2,25 @@
  * gamelist.c -- Functions to manage a gamelist
  * XBoard $Id: gamelist.c,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include "config.h"
 
@@ -70,6 +71,7 @@ static void GameListDeleteGame(listGame)
 	if (listGame->gameInfo.resultDetails) free(listGame->gameInfo.resultDetails);
 	if (listGame->gameInfo.timeControl) free(listGame->gameInfo.timeControl);
 	if (listGame->gameInfo.extraTags) free(listGame->gameInfo.extraTags);
+        if (listGame->gameInfo.outOfBook) free(listGame->gameInfo.outOfBook);
 	ListNodeFree((ListNode *) listGame);
     }
 }
@@ -107,6 +109,7 @@ void GameListInitGameInfo(gameInfo)
     gameInfo->whiteRating = -1; /* unknown */
     gameInfo->blackRating = -1; /* unknown */
     gameInfo->variant = VariantNormal;
+    gameInfo->outOfBook = NULL;
 }
 
 
@@ -295,12 +298,16 @@ void ClearGameInfo(gameInfo)
     if (gameInfo->extraTags != NULL) {
 	free(gameInfo->extraTags);
     }
+    if (gameInfo->outOfBook != NULL) {
+        free(gameInfo->outOfBook);
+    }
 
     GameListInitGameInfo(gameInfo);
 }
 
+/* [AS] Replaced by "dynamic" tag selection below */
 char *
-GameListLine(number, gameInfo)
+GameListLineOld(number, gameInfo)
      int number;
      GameInfo *gameInfo;
 {
@@ -317,3 +324,97 @@ GameListLine(number, gameInfo)
     return ret;
 }
 
+#define MAX_FIELD_LEN   64  /* To avoid overflowing the buffer */
+
+char * GameListLine( int number, GameInfo * gameInfo )
+{
+    char buffer[1024];
+    char * buf = buffer;
+    char * glt = appData.gameListTags;
+    
+    buf += sprintf( buffer, "%d.", number );
+
+    while( *glt != '\0' ) {
+        *buf++ = ' ';
+
+        switch( *glt ) {
+        case GLT_EVENT:
+            strncpy( buf, gameInfo->event ? gameInfo->event : "?", MAX_FIELD_LEN );
+            break;
+        case GLT_SITE:
+            strncpy( buf, gameInfo->site ? gameInfo->site : "?", MAX_FIELD_LEN );
+            break;
+        case GLT_DATE:
+            strncpy( buf, gameInfo->date ? gameInfo->date : "?", MAX_FIELD_LEN );
+            break;
+        case GLT_ROUND:
+            strncpy( buf, gameInfo->round ? gameInfo->round : "?", MAX_FIELD_LEN );
+            break;
+        case GLT_PLAYERS:
+            strncpy( buf, gameInfo->white ? gameInfo->white : "?", MAX_FIELD_LEN );
+            buf[ MAX_FIELD_LEN-1 ] = '\0';
+            buf += strlen( buf );
+            *buf++ = '-';
+            strncpy( buf, gameInfo->black ? gameInfo->black : "?", MAX_FIELD_LEN );
+            break;
+        case GLT_RESULT:
+            strcpy( buf, PGNResult(gameInfo->result) );
+            break;
+        case GLT_WHITE_ELO:
+            if( gameInfo->whiteRating > 0 )
+                sprintf( buf, "%d", gameInfo->whiteRating );
+            else
+                strcpy( buf, "?" );
+            break;
+        case GLT_BLACK_ELO:
+            if( gameInfo->blackRating > 0 )
+                sprintf( buf, "%d", gameInfo->blackRating );
+            else
+                strcpy( buf, "?" );
+            break;
+        case GLT_TIME_CONTROL:
+            strncpy( buf, gameInfo->timeControl ? gameInfo->timeControl : "?", MAX_FIELD_LEN );
+            break;
+        case GLT_VARIANT:
+            break;
+        case GLT_OUT_OF_BOOK:
+            strncpy( buf, gameInfo->outOfBook ? gameInfo->outOfBook : "?", MAX_FIELD_LEN );
+            break;
+        default:
+            break;
+        }
+
+        buf[MAX_FIELD_LEN-1] = '\0';
+
+        buf += strlen( buf );
+
+        glt++;
+
+        if( *glt != '\0' ) {
+            *buf++ = ',';
+        }
+    }
+
+    *buf = '\0';
+
+    return strdup( buffer );
+}
+
+char * GameListLineFull( int number, GameInfo * gameInfo )
+{
+    char * event = gameInfo->event ? gameInfo->event : "?";
+    char * site = gameInfo->site ? gameInfo->site : "?";
+    char * white = gameInfo->white ? gameInfo->white : "?";
+    char * black = gameInfo->black ? gameInfo->black : "?";
+    char * round = gameInfo->round ? gameInfo->round : "?";
+    char * date = gameInfo->date ? gameInfo->date : "?";
+    char * oob = gameInfo->outOfBook ? gameInfo->outOfBook : "";
+    
+    int len = 64 + strlen(event) + strlen(site) + strlen(white) + strlen(black) + strlen(date) + strlen(oob);
+
+    char *ret = (char *) malloc(len);
+
+    sprintf(ret, "%d, \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\"", number, event, site, round, white, black, PGNResult(gameInfo->result), date, oob );
+
+    return ret;
+}
diff --git a/gettext.h b/gettext.h
new file mode 100755
index 0000000..8983b33
--- /dev/null
+++ b/gettext.h
@@ -0,0 +1,73 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+ * Copyright (C) 1995-1998,
+ * 2000-2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option.  */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions.  */
+# include <libintl.h>
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+   chokes if dcgettext is defined as a macro.  So include it now, to make
+   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
+   as well because people using "gettext.h" will not include <libintl.h>,
+   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+   is OK.  */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Disabled NLS.
+   The casts to 'const char *' serve the purpose of producing warnings
+   for invalid uses of the value returned from these functions.
+   On pre-ANSI systems without 'const', the config.h file is supposed to
+   contain "#define const".  */
+# define gettext(Msgid) ((const char *) (Msgid))
+# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
+# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+   extraction of messages, but does not call gettext().  The run-time
+   translation is done at a different place in the code.
+   The argument, String, should be a literal string.  Concatenated strings
+   and other string expressions won't work.
+   The macro's expansion is not parenthesized, so that it is suitable as
+   initializer for static 'char[]' or 'const char[]' variables.  */
+#define gettext_noop(String) String
+
+#endif /* _LIBGETTEXT_H */
diff --git a/gpl.texinfo b/gpl.texinfo
index b24db7d..97a17e1 100644
--- a/gpl.texinfo
+++ b/gpl.texinfo
@@ -1,398 +1,717 @@
- at c This GPL is meant to be included from other files.
- at c To format a standalone GPL, use license.texi.
+ at c The GNU General Public License.
+ at center Version 3, 29 June 2007
 
- at center Version 2, June 1991
+ at c This file is intended to be included within another document,
+ at c hence no sectioning command or @node.
 
 @display
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.  
-59 Temple Place, Suite 330, Boston, MA 02111 USA
+Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/}
 
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
 @end display
 
- at unnumberedsec Preamble
+ at heading 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.
+The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
 
-  When we speak of free software, we are referring to freedom, not
+The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom
+to share and change all versions of a program---to make sure it remains
+free software for all its users.  We, the Free Software Foundation,
+use the GNU General Public License for most of our software; it
+applies also to any other work released this way by its authors.  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
+them 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 prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you
+have certain responsibilities if you distribute copies of the
+software, or if you modify it: responsibilities to respect the freedom
+of others.
+
+For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  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.
+
+Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the
+manufacturer can do so.  This is fundamentally incompatible with the
+aim of protecting users' freedom to change the software.  The
+systematic pattern of such abuse occurs in the area of products for
+individuals to use, which is precisely where it is most unacceptable.
+Therefore, we have designed this version of the GPL to prohibit the
+practice for those products.  If such problems arise substantially in
+other domains, we stand ready to extend this provision to those
+domains in future versions of the GPL, as needed to protect the
+freedom of users.
+
+Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish
+to avoid the special danger that patents applied to a free program
+could make it effectively proprietary.  To prevent this, the GPL
+assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and
 modification follow.
 
- at iftex
- at unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- at end iftex
- at ifinfo
- at center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- at end ifinfo
+ at heading TERMS AND CONDITIONS
 
 @enumerate 0
+ at item Definitions.
+
+``This License'' refers to version 3 of the GNU General Public License.
+
+``Copyright'' also means copyright-like laws that apply to other kinds
+of works, such as semiconductor masks.
+
+``The Program'' refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as ``you''.  ``Licensees'' and
+``recipients'' may be individuals or organizations.
+
+To ``modify'' a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of
+an exact copy.  The resulting work is called a ``modified version'' of
+the earlier work or a work ``based on'' the earlier work.
+
+A ``covered work'' means either the unmodified Program or a work based
+on the Program.
+
+To ``propagate'' a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+To ``convey'' a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user
+through a computer network, with no transfer of a copy, is not
+conveying.
+
+An interactive user interface displays ``Appropriate Legal Notices'' to
+the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ at item Source Code.
+
+The ``source code'' for a work means the preferred form of the work for
+making modifications to it.  ``Object code'' means any non-source form
+of a work.
+
+A ``Standard Interface'' means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+The ``System Libraries'' of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+``Major Component'', in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+The ``Corresponding Source'' for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can
+regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same
+work.
+
+ at item Basic Permissions.
+
+All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey,
+without conditions so long as your license otherwise remains in force.
+You may convey covered works to others for the sole purpose of having
+them make modifications exclusively for you, or provide you with
+facilities for running those works, provided that you comply with the
+terms of this License in conveying all material for which you do not
+control copyright.  Those thus making or running the covered works for
+you must do so exclusively on your behalf, under your direction and
+control, on terms that prohibit them from making any copies of your
+copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the
+conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ at item Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such
+circumvention is effected by exercising rights under this License with
+respect to the covered work, and you disclaim any intention to limit
+operation or modification of the work as a means of enforcing, against
+the work's users, your or third parties' legal rights to forbid
+circumvention of technological measures.
+
+ at item Conveying Verbatim Copies.
+
+You may convey 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;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ at item Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these
+conditions:
+
+ at enumerate a
 @item
-This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The ``Program'', below,
-refers to any such program or work, and a ``work based on the Program''
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term ``modification''.)  Each licensee is addressed as ``you''.
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
+The work must carry prominent notices stating that you modified it,
+and giving a relevant date.
 
 @item
-You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
+The work must carry prominent notices stating that it is released
+under this License and any conditions added under section 7.  This
+requirement modifies the requirement in section 4 to ``keep intact all
+notices''.
 
-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.
+ at item
+You must license the entire work, as a whole, under this License to
+anyone who comes into possession of a copy.  This License will
+therefore apply, along with any applicable section 7 additional terms,
+to the whole of the work, and all its parts, regardless of how they
+are packaged.  This License gives no permission to license the work in
+any other way, but it does not invalidate such permission if you have
+separately received it.
 
 @item
-You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
+If the work has interactive user interfaces, each must display
+Appropriate Legal Notices; however, if the Program has interactive
+interfaces that do not display Appropriate Legal Notices, your work
+need not make them do so.
+ at end enumerate
+
+A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+``aggregate'' if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ at item  Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of
+sections 4 and 5, provided that you also convey the machine-readable
+Corresponding Source under the terms of this License, in one of these
+ways:
 
 @enumerate a
 @item
-You must cause the modified files to carry prominent notices
-stating that you changed the files and the date of any change.
+Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by the
+Corresponding Source fixed on a durable physical medium customarily
+used for software interchange.
 
 @item
-You must cause any work that you distribute or publish, that in
-whole or in part contains or is derived from the Program or any
-part thereof, to be licensed as a whole at no charge to all third
-parties under the terms of this License.
+Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by a written
+offer, valid for at least three years and valid for as long as you
+offer spare parts or customer support for that product model, to give
+anyone who possesses the object code either (1) a copy of the
+Corresponding Source for all the software in the product that is
+covered by this License, on a durable physical medium customarily used
+for software interchange, for a price no more than your reasonable
+cost of physically performing this conveying of source, or (2) access
+to copy the Corresponding Source from a network server at no charge.
 
 @item
-If the modified program normally reads commands interactively
-when run, you must cause it, when started running for such
-interactive use in the most ordinary way, to print or display an
-announcement including an appropriate copyright notice and a
-notice that there is no warranty (or else, saying that you provide
-a warranty) and that users may redistribute the program under
-these conditions, and telling the user how to view a copy of this
-License.  (Exception: if the Program itself is interactive but
-does not normally print such an announcement, your work based on
-the Program is not required to print an announcement.)
- at end enumerate
+Convey individual copies of the object code with a copy of the written
+offer to provide the Corresponding Source.  This alternative is
+allowed only occasionally and noncommercially, and only if you
+received the object code with such an offer, in accord with subsection
+6b.
 
-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.
+ at item
+Convey the object code by offering access from a designated place
+(gratis or for a charge), and offer equivalent access to the
+Corresponding Source in the same way through the same place at no
+further charge.  You need not require recipients to copy the
+Corresponding Source along with the object code.  If the place to copy
+the object code is a network server, the Corresponding Source may be
+on a different server (operated by you or a third party) that supports
+equivalent copying facilities, provided you maintain clear directions
+next to the object code saying where to find the Corresponding Source.
+Regardless of what server hosts the Corresponding Source, you remain
+obligated to ensure that it is available for as long as needed to
+satisfy these requirements.
 
 @item
-You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
+Convey the object code using peer-to-peer transmission, provided you
+inform other peers where the object code and Corresponding Source of
+the work are being offered to the general public at no charge under
+subsection 6d.
+
+ at end enumerate
+
+A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+A ``User Product'' is either (1) a ``consumer product'', which means any
+tangible personal property which is normally used for personal,
+family, or household purposes, or (2) anything designed or sold for
+incorporation into a dwelling.  In determining whether a product is a
+consumer product, doubtful cases shall be resolved in favor of
+coverage.  For a particular product received by a particular user,
+``normally used'' refers to a typical or common use of that class of
+product, regardless of the status of the particular user or of the way
+in which the particular user actually uses, or expects or is expected
+to use, the product.  A product is a consumer product regardless of
+whether the product has substantial commercial, industrial or
+non-consumer uses, unless such uses represent the only significant
+mode of use of the product.
+
+``Installation Information'' for a User Product means any methods,
+procedures, authorization keys, or other information required to
+install and execute modified versions of a covered work in that User
+Product from a modified version of its Corresponding Source.  The
+information must suffice to ensure that the continued functioning of
+the modified object code is in no case prevented or interfered with
+solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or
+updates for a work that has been modified or installed by the
+recipient, or for the User Product in which it has been modified or
+installed.  Access to a network may be denied when the modification
+itself materially and adversely affects the operation of the network
+or violates the rules and protocols for communication across the
+network.
+
+Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ at item Additional Terms.
+
+``Additional permissions'' are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders
+of that material) supplement the terms of this License with terms:
 
 @enumerate a
 @item
-Accompany it with the complete corresponding machine-readable
-source code, which must be distributed under the terms of Sections
-1 and 2 above on a medium customarily used for software interchange; or,
+Disclaiming warranty or limiting liability differently from the terms
+of sections 15 and 16 of this License; or
 
 @item
-Accompany it with a written offer, valid for at least three
-years, to give any third party, for a charge no more than your
-cost of physically performing source distribution, a complete
-machine-readable copy of the corresponding source code, to be
-distributed under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
+Requiring preservation of specified reasonable legal notices or author
+attributions in that material or in the Appropriate Legal Notices
+displayed by works containing it; or
 
 @item
-Accompany it with the information you received as to the offer
-to distribute corresponding source code.  (This alternative is
-allowed only for noncommercial distribution and only if you
-received the program in object code or executable form with such
-an offer, in accord with Subsection b above.)
- at end enumerate
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
+Prohibiting misrepresentation of the origin of that material, or
+requiring that modified versions of such material be marked in
+reasonable ways as different from the original version; or
 
 @item
-You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
+Limiting the use for publicity purposes of names of licensors or
+authors of the material; or
 
 @item
-You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
+Declining to grant rights under trademark law for use of some trade
+names, trademarks, or service marks; or
 
 @item
-Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
+Requiring indemnification of licensors and authors of that material by
+anyone who conveys the material (or modified versions of it) with
+contractual assumptions of liability to the recipient, for any
+liability that these contractual assumptions directly impose on those
+licensors and authors.
+ at end enumerate
+
+All other non-permissive additional terms are considered ``further
+restrictions'' within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions; the
+above requirements apply either way.
+
+ at item Termination.
+
+You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ at item Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run
+a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ at item Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+An ``entity transaction'' is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ at item Patents.
+
+A ``contributor'' is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's ``contributor version''.
+
+A contributor's ``essential patent claims'' are all patent claims owned
+or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, ``control'' includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
 this License.
 
- at item
-If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
+Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+In the following three paragraphs, a ``patent license'' is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To ``grant'' such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  ``Knowingly relying'' means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+A patent license is ``discriminatory'' if it does not include within the
+scope of its coverage, prohibits the exercise of, or is conditioned on
+the non-exercise of one or more of the rights that are specifically
+granted under this License.  You may not convey a covered work if you
+are a party to an arrangement with a third party that is in the
+business of distributing software, under which you make payment to the
+third party based on the extent of your activity of conveying the
+work, and under which the third party grants, to any of the parties
+who would receive the covered work from you, a discriminatory patent
+license (a) in connection with copies of the covered work conveyed by
+you (or copies made from those copies), or (b) primarily for and in
+connection with specific products or compilations that contain the
+covered work, unless you entered into that arrangement, or that patent
+license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ at item No Surrender of Others' Freedom.
+
+If 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.
+excuse you from the conditions of this License.  If you cannot convey
+a covered work so as to satisfy simultaneously your obligations under
+this License and any other pertinent obligations, then as a
+consequence you may not convey it at all.  For example, if you agree
+to terms that obligate you to collect a royalty for further conveying
+from those to whom you convey the Program, the only way you could
+satisfy both those terms and this License would be to refrain entirely
+from conveying the Program.
+
+ at item Use with the GNU Affero General Public License.
+
+Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ at item Revised Versions of this License.
 
- at item
-If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- at item
 The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
+of the GNU 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.
+specifies that a certain numbered version of the GNU General Public
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that numbered version or
+of any later version published by the Free Software Foundation.  If
+the Program does not specify a version number of the GNU General
+Public License, you may choose any version ever published by the Free
+Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions
+of the GNU General Public License can be used, that proxy's public
+statement of acceptance of a version permanently authorizes you to
+choose that version for the Program.
+
+Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ at item Disclaimer of Warranty.
+
+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.
+
+ at item Limitation of Liability.
 
- at item
-If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- at iftex
- at vskip - at baselineskip
- at vskip - at baselineskip
- at heading NO WARRANTY
- at end iftex
- at ifinfo
- at center NO WARRANTY
- at end ifinfo
-
- at item
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- at item
 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
+CONVEYS 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.
+
+ at item Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
 @end enumerate
 
- at iftex
 @heading END OF TERMS AND CONDITIONS
- at end iftex
- at ifinfo
- at center END OF TERMS AND CONDITIONS
- at end ifinfo
 
- at page
- at unnumberedsec How to Apply These Terms to Your New Programs
+ at heading How to Apply These Terms to Your New Programs
 
-  If you develop a new program, and you want it to be of the greatest
+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.
+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 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
+state the exclusion of warranty; and each file should have at least
 the ``copyright'' line and a pointer to where the full notice is found.
 
 @smallexample
- at var{one line to give the program's name and an idea of what it does.}
-Copyright (C) 19 at var{yy}  @var{name of author}
+ at var{one line to give the program's name and a brief idea of what it does.}
+Copyright (C) @var{year} @var{name of author}
 
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+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., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+along with this program.  If not, see @url{http://www.gnu.org/licenses/}.
 @end smallexample
 
 Also add information on how to contact you by electronic and paper mail.
 
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
+If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
 
 @smallexample
-Gnomovision version 69, Copyright (C) 19 at var{yy} @var{name of author}
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'.  This is free software, and you are welcome
-to redistribute it under certain conditions; type `show c' 
-for details.
+ at var{program} Copyright (C) @var{year} @var{name of author}
+This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type @samp{show c} for details.
 @end smallexample
 
 The hypothetical commands @samp{show w} and @samp{show c} should show
-the appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than @samp{show w} and
- at samp{show c}; they could even be mouse-clicks or menu items---whatever
-suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a ``copyright disclaimer'' for the program, if
-necessary.  Here is a sample; alter the names:
-
- at example
- at group
-Yoyodyne, Inc., hereby disclaims all copyright
-interest in the program `Gnomovision'
-(which makes passes at compilers) written 
-by James Hacker.
-
- at var{signature of Ty Coon}, 1 April 1989
-Ty Coon, President of Vice
- at end group
- at end example
-
-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.
+the appropriate parts of the General Public License.  Of course, your
+program's commands might be different; for a GUI interface, you would
+use an ``about box''.
+
+You should also get your employer (if you work as a programmer) or school,
+if any, to sign a ``copyright disclaimer'' for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+ at url{http://www.gnu.org/licenses/}.
+
+The GNU 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 Lesser General Public License instead of this License.  But
+first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}.
diff --git a/install-sh b/install-sh
old mode 100755
new mode 100644
diff --git a/lists.c b/lists.c
index a9e0d41..74a1283 100644
--- a/lists.c
+++ b/lists.c
@@ -2,24 +2,27 @@
  * lists.c -- Functions to implement a double linked list
  * XBoard $Id: lists.c,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
- * ------------------------------------------------------------------------
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
  *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+/*
  * This file could well be a part of backend.c, but I prefer it this
  * way.
  */
diff --git a/lists.h b/lists.h
index 31d6f5b..ca95d9a 100644
--- a/lists.h
+++ b/lists.h
@@ -2,24 +2,27 @@
  * lists.c -- Includefile of lists.c
  * XBoard $Id: lists.h,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
- * ------------------------------------------------------------------------
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
  *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+/*
  * This file could well be a part of backend.c, but I prefer it this
  * way.
  */
diff --git a/mkinstalldirs b/mkinstalldirs
old mode 100755
new mode 100644
diff --git a/moves.c b/moves.c
index a77b23b..c11a8f3 100644
--- a/moves.c
+++ b/moves.c
@@ -2,8 +2,10 @@
  * moves.c - Move generation and checking
  * $Id: moves.c,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
@@ -27,24 +29,25 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include "config.h"
 
@@ -62,31 +65,34 @@
 int WhitePiece P((ChessSquare));
 int BlackPiece P((ChessSquare));
 int SameColor P((ChessSquare, ChessSquare));
+int PosFlags(int index);
+
+extern char initialRights[BOARD_SIZE]; /* [HGM] all rights enabled, set in InitPosition */
 
 
 int WhitePiece(piece)
      ChessSquare piece;
 {
-    return (int) piece >= (int) WhitePawn && (int) piece <= (int) WhiteKing;
+    return (int) piece >= (int) WhitePawn && (int) piece < (int) BlackPawn;
 }
 
 int BlackPiece(piece)
      ChessSquare piece;
 {
-    return (int) piece >= (int) BlackPawn && (int) piece <= (int) BlackKing;
+    return (int) piece >= (int) BlackPawn && (int) piece < (int) EmptySquare;
 }
 
 int SameColor(piece1, piece2)
      ChessSquare piece1, piece2;
 {
-    return ((int) piece1 >= (int) WhitePawn &&
-	    (int) piece1 <= (int) WhiteKing &&
+    return ((int) piece1 >= (int) WhitePawn &&   /* [HGM] can be > King ! */
+            (int) piece1 <  (int) BlackPawn &&
 	    (int) piece2 >= (int) WhitePawn &&
-	    (int) piece2 <= (int) WhiteKing)
+            (int) piece2 <  (int) BlackPawn)
       ||   ((int) piece1 >= (int) BlackPawn &&
-	    (int) piece1 <= (int) BlackKing &&
+            (int) piece1 <  (int) EmptySquare &&
 	    (int) piece2 >= (int) BlackPawn &&
-	    (int) piece2 <= (int) BlackKing);
+            (int) piece2 <  (int) EmptySquare);
 }
 
 ChessSquare PromoPiece(moveType)
@@ -115,88 +121,100 @@ ChessSquare PromoPiece(moveType)
 	return WhiteKing;
       case BlackPromotionKing:
 	return BlackKing;
-    }
-}
-
-ChessMove PromoCharToMoveType(whiteOnMove, promoChar)
-     int whiteOnMove;
-     int promoChar;
-{
-    if (whiteOnMove) {
-	switch (promoChar) {
-	  case 'n':
-	  case 'N':
-	    return WhitePromotionKnight;
-	  case 'b':
-	  case 'B':
-	    return WhitePromotionBishop;
-	  case 'r':
-	  case 'R':
-	    return WhitePromotionRook;
-	  case 'q':
-	  case 'Q':
-	    return WhitePromotionQueen;
-	  case 'k':
-	  case 'K':
-	    return WhitePromotionKing;
-	  case NULLCHAR:
-	  default:
-	    return NormalMove;
-	}
-    } else {
-	switch (promoChar) {
-	  case 'n':
-	  case 'N':
-	    return BlackPromotionKnight;
-	  case 'b':
-	  case 'B':
-	    return BlackPromotionBishop;
-	  case 'r':
-	  case 'R':
-	    return BlackPromotionRook;
-	  case 'q':
-	  case 'Q':
-	    return BlackPromotionQueen;
-	  case 'k':
-	  case 'K':
-	    return BlackPromotionKing;
-	  case NULLCHAR:
-	  default:
-	    return NormalMove;
-	}
+      case WhitePromotionChancellor:
+        return WhiteMarshall;
+      case BlackPromotionChancellor:
+        return BlackMarshall;
+      case WhitePromotionArchbishop:
+        return WhiteAngel;
+      case BlackPromotionArchbishop:
+        return BlackAngel;
+      case WhitePromotionCentaur:
+        return WhiteSilver;
+      case BlackPromotionCentaur:
+        return BlackSilver;
     }
 }
 
 char pieceToChar[] = {
-    'P', 'N', 'B', 'R', 'Q', 'K',
-    'p', 'n', 'b', 'r', 'q', 'k', 'x'
-  };
+                        'P', 'N', 'B', 'R', 'Q', 'F', 'E', 'A', 'C', 'W', 'M', 
+                        'O', 'H', 'I', 'J', 'G', 'D', 'V', 'L', 's', 'U', 'K',
+                        'p', 'n', 'b', 'r', 'q', 'f', 'e', 'a', 'c', 'w', 'm', 
+                        'o', 'h', 'i', 'j', 'g', 'd', 'v', 'l', 's', 'u', 'k', 
+                        'x' };
 
 char PieceToChar(p)
      ChessSquare p;
 {
+    if((int)p < 0 || (int)p >= (int)EmptySquare) return('x'); /* [HGM] for safety */
     return pieceToChar[(int) p];
 }
 
+int PieceToNumber(p)  /* [HGM] holdings: count piece type, ignoring non-participating piece types */
+     ChessSquare p;
+{
+    int i=0;
+    ChessSquare start = (int)p >= (int)BlackPawn ? BlackPawn : WhitePawn;
+
+    while(start++ != p) if(pieceToChar[(int)start-1] != '.') i++;
+    return i;
+}
+
 ChessSquare CharToPiece(c)
      int c;
 {
-    switch (c) {
-      default:
-      case 'x':	return EmptySquare;
-      case 'P':	return WhitePawn;
-      case 'R':	return WhiteRook;
-      case 'N':	return WhiteKnight;
-      case 'B':	return WhiteBishop;
-      case 'Q':	return WhiteQueen;
-      case 'K':	return WhiteKing;
-      case 'p':	return BlackPawn;
-      case 'r':	return BlackRook;
-      case 'n':	return BlackKnight;
-      case 'b':	return BlackBishop;
-      case 'q':	return BlackQueen;
-      case 'k':	return BlackKing;
-    }
+     int i;
+     for(i=0; i< (int) EmptySquare; i++)
+          if(pieceToChar[i] == c) return (ChessSquare) i;
+     return EmptySquare;
+}
+
+ChessMove PromoCharToMoveType(whiteOnMove, promoChar)
+     int whiteOnMove;
+     int promoChar;
+{	/* [HGM] made dependent on CharToPiece to alow alternate piece letters */
+	ChessSquare piece = CharToPiece(whiteOnMove ? ToUpper(promoChar) : ToLower(promoChar) );
+
+
+	if(promoChar == NULLCHAR) return NormalMove;
+
+	switch(piece) {
+		case WhiteQueen:
+			return WhitePromotionQueen;
+		case WhiteRook:
+			return WhitePromotionRook;
+		case WhiteBishop:
+			return WhitePromotionBishop;
+		case WhiteKnight:
+			return WhitePromotionKnight;
+		case WhiteKing:
+			return WhitePromotionKing;
+		case WhiteAngel:
+			return WhitePromotionArchbishop;
+		case WhiteMarshall:
+			return WhitePromotionChancellor;
+		case WhiteSilver:
+			return WhitePromotionCentaur;
+		case BlackQueen:
+			return BlackPromotionQueen;
+		case BlackRook:
+			return BlackPromotionRook;
+		case BlackBishop:
+			return BlackPromotionBishop;
+		case BlackKnight:
+			return BlackPromotionKnight;
+		case BlackKing:
+			return BlackPromotionKing;
+		case BlackAngel:
+			return BlackPromotionArchbishop;
+		case BlackMarshall:
+			return BlackPromotionChancellor;
+		case BlackSilver:
+			return BlackPromotionCentaur;
+		default:
+			// not all promotion implemented yet! Take Queen for those we don't know.
+			return (whiteOnMove ? WhitePromotionQueen : BlackPromotionQueen);
+	}
 }
 
 void CopyBoard(to, from)
@@ -204,8 +222,8 @@ void CopyBoard(to, from)
 {
     int i, j;
     
-    for (i = 0; i < BOARD_SIZE; i++)
-      for (j = 0; j < BOARD_SIZE; j++)
+    for (i = 0; i < BOARD_HEIGHT; i++)
+      for (j = 0; j < BOARD_WIDTH; j++)
 	to[i][j] = from[i][j];
 }
 
@@ -214,8 +232,8 @@ int CompareBoards(board1, board2)
 {
     int i, j;
     
-    for (i = 0; i < BOARD_SIZE; i++)
-      for (j = 0; j < BOARD_SIZE; j++) {
+    for (i = 0; i < BOARD_HEIGHT; i++)
+      for (j = 0; j < BOARD_WIDTH; j++) {
 	  if (board1[i][j] != board2[i][j])
 	    return FALSE;
     }
@@ -239,45 +257,73 @@ void GenPseudoLegal(board, flags, epfile, callback, closure)
      VOIDSTAR closure;
 {
     int rf, ff;
-    int i, j, d, s, fs, rs, rt, ft;
+    int i, j, d, s, fs, rs, rt, ft, m;
+
+    for (rf = 0; rf < BOARD_HEIGHT; rf++) 
+      for (ff = BOARD_LEFT; ff < BOARD_RGHT; ff++) {
+          ChessSquare piece;
 
-    for (rf = 0; rf <= 7; rf++) 
-      for (ff = 0; ff <= 7; ff++) {
 	  if (flags & F_WHITE_ON_MOVE) {
 	      if (!WhitePiece(board[rf][ff])) continue;
 	  } else {
 	      if (!BlackPiece(board[rf][ff])) continue;
 	  }
-	  switch (board[rf][ff]) {
-	    case EmptySquare:
+          m = 0; piece = board[rf][ff];
+          if(PieceToChar(piece) == '~') 
+                 piece = (ChessSquare) ( DEMOTED piece );
+          if(gameInfo.variant == VariantShogi)
+                 piece = (ChessSquare) ( SHOGI piece );
+
+          switch (piece) {
+            /* case EmptySquare: [HGM] this is nonsense, and conflicts with Shogi cases */
 	    default:
-	      /* can't happen */
+	      /* can't happen ([HGM] except for faries...) */
 	      break;
 
-	    case WhitePawn:
-	      if (rf < 7 && board[rf + 1][ff] == EmptySquare) {
+             case WhitePawn:
+              if(gameInfo.variant == VariantXiangqi) {
+                  /* [HGM] capture and move straight ahead in Xiangqi */
+                  if (rf < BOARD_HEIGHT-1 &&
+                           !SameColor(board[rf][ff], board[rf + 1][ff]) ) {
+                           callback(board, flags, NormalMove,
+                                    rf, ff, rf + 1, ff, closure);
+                  }
+                  /* and move sideways when across the river */
+                  for (s = -1; s <= 1; s += 2) {
+                      if (rf >= BOARD_HEIGHT>>1 &&
+                          ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
+                          !WhitePiece(board[rf][ff+s]) ) {
+                           callback(board, flags, NormalMove,
+                                    rf, ff, rf, ff+s, closure);
+                      }
+                  }
+                  break;
+              }
+              if (rf < BOARD_HEIGHT-1 && board[rf + 1][ff] == EmptySquare) {
 		  callback(board, flags,
-			   rf == 6 ? WhitePromotionQueen : NormalMove,
+			   rf == BOARD_HEIGHT-2 ? WhitePromotionQueen : NormalMove,
 			   rf, ff, rf + 1, ff, closure);
 	      }
 	      if (rf == 1 && board[2][ff] == EmptySquare &&
-		  board[3][ff] == EmptySquare) {
-		  callback(board, flags, NormalMove,
-			   rf, ff, 3, ff, closure);
+                  gameInfo.variant != VariantShatranj && /* [HGM] */
+                  gameInfo.variant != VariantCourier  && /* [HGM] */
+                  board[3][ff] == EmptySquare ) {
+                      callback(board, flags, NormalMove,
+                               rf, ff, 3, ff, closure);
 	      }
 	      for (s = -1; s <= 1; s += 2) {
-		  if (rf < 7 && ff + s >= 0 && ff + s <= 7 &&
+                  if (rf < BOARD_HEIGHT-1 && ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
 		      ((flags & F_KRIEGSPIEL_CAPTURE) ||
 		       BlackPiece(board[rf + 1][ff + s]))) {
 		      callback(board, flags, 
-			       rf == 6 ? WhitePromotionQueen : NormalMove,
+			       rf == BOARD_HEIGHT-2 ? WhitePromotionQueen : NormalMove,
 			       rf, ff, rf + 1, ff + s, closure);
 		  }
-		  if (rf == 4) {
-		      if (ff + s >= 0 && ff + s <= 7 &&
+		  if (rf == BOARD_HEIGHT-4) {
+                      if (ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
 			  (epfile == ff + s || epfile == EP_UNKNOWN) &&
-			  board[4][ff + s] == BlackPawn &&
-			  board[5][ff + s] == EmptySquare) {
+                          board[BOARD_HEIGHT-4][ff + s] == BlackPawn &&
+                          board[BOARD_HEIGHT-3][ff + s] == EmptySquare) {
 			  callback(board, flags, WhiteCapturesEnPassant,
 				   rf, ff, 5, ff + s, closure);
 		      }
@@ -286,18 +332,37 @@ void GenPseudoLegal(board, flags, epfile, callback, closure)
 	      break;
 
 	    case BlackPawn:
+              if(gameInfo.variant == VariantXiangqi) {
+                  /* [HGM] capture straight ahead in Xiangqi */
+                  if (rf > 0 && !SameColor(board[rf][ff], board[rf - 1][ff]) ) {
+                           callback(board, flags, NormalMove,
+                                    rf, ff, rf - 1, ff, closure);
+                  }
+                  /* and move sideways when across the river */
+                  for (s = -1; s <= 1; s += 2) {
+                      if (rf < BOARD_HEIGHT>>1 &&
+                          ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
+                          !BlackPiece(board[rf][ff+s]) ) {
+                           callback(board, flags, NormalMove,
+                                    rf, ff, rf, ff+s, closure);
+                      }
+                  }
+                  break;
+              }
 	      if (rf > 0 && board[rf - 1][ff] == EmptySquare) {
 		  callback(board, flags, 
 			   rf == 1 ? BlackPromotionQueen : NormalMove,
 			   rf, ff, rf - 1, ff, closure);
 	      }
-	      if (rf == 6 && board[5][ff] == EmptySquare &&
-		  board[4][ff] == EmptySquare) {
+	      if (rf == BOARD_HEIGHT-2 && board[BOARD_HEIGHT-3][ff] == EmptySquare &&
+                  gameInfo.variant != VariantShatranj && /* [HGM] */
+                  gameInfo.variant != VariantCourier  && /* [HGM] */
+		  board[BOARD_HEIGHT-4][ff] == EmptySquare) {
 		  callback(board, flags, NormalMove,
-			   rf, ff, 4, ff, closure);
+			   rf, ff, BOARD_HEIGHT-4, ff, closure);
 	      }
 	      for (s = -1; s <= 1; s += 2) {
-		  if (rf > 0 && ff + s >= 0 && ff + s <= 7 &&
+                  if (rf > 0 && ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
 		      ((flags & F_KRIEGSPIEL_CAPTURE) ||
 		       WhitePiece(board[rf - 1][ff + s]))) {
 		      callback(board, flags, 
@@ -305,7 +370,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure)
 			       rf, ff, rf - 1, ff + s, closure);
 		  }
 		  if (rf == 3) {
-		      if (ff + s >= 0 && ff + s <= 7 &&
+                      if (ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
 			  (epfile == ff + s || epfile == EP_UNKNOWN) &&
 			  board[3][ff + s] == WhitePawn &&
 			  board[2][ff + s] == EmptySquare) {
@@ -316,48 +381,210 @@ void GenPseudoLegal(board, flags, epfile, callback, closure)
 	      }		    
 	      break;
 
+            case WhiteUnicorn:
+            case BlackUnicorn:
 	    case WhiteKnight:
 	    case BlackKnight:
+            mounted:
 	      for (i = -1; i <= 1; i += 2)
 		for (j = -1; j <= 1; j += 2)
 		  for (s = 1; s <= 2; s++) {
 		      rt = rf + i*s;
 		      ft = ff + j*(3-s);
-		      if (rt < 0 || rt > 7 || ft < 0 || ft > 7) continue;
-		      if (SameColor(board[rf][ff], board[rt][ft])) continue;
+                      if (!(rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT)
+                          && ( gameInfo.variant != VariantXiangqi || board[rf+i*(s-1)][ff+j*(2-s)] == EmptySquare)
+                          && !SameColor(board[rf][ff], board[rt][ft]))
 		      callback(board, flags, NormalMove,
 			       rf, ff, rt, ft, closure);
 		  }
 	      break;
 
+            case SHOGI WhiteKnight:
+	      for (s = -1; s <= 1; s += 2) {
+                  if (rf < BOARD_HEIGHT-2 && ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
+                      !SameColor(board[rf][ff], board[rf + 2][ff + s])) {
+                      callback(board, flags, NormalMove,
+                               rf, ff, rf + 2, ff + s, closure);
+		  }
+              }
+	      break;
+
+            case SHOGI BlackKnight:
+	      for (s = -1; s <= 1; s += 2) {
+                  if (rf > 1 && ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
+                      !SameColor(board[rf][ff], board[rf - 2][ff + s])) {
+                      callback(board, flags, NormalMove,
+                               rf, ff, rf - 2, ff + s, closure);
+		  }
+	      }		    
+	      break;
+
+            case WhiteCannon:
+            case BlackCannon:
+              for (d = 0; d <= 1; d++)
+                for (s = -1; s <= 1; s += 2) {
+                  m = 0;
+		  for (i = 1;; i++) {
+		      rt = rf + (i * s) * d;
+		      ft = ff + (i * s) * (1 - d);
+                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
+                      if (m == 0 && board[rt][ft] == EmptySquare)
+                                 callback(board, flags, NormalMove,
+                                          rf, ff, rt, ft, closure);
+                      if (m == 1 && board[rt][ft] != EmptySquare &&
+                          !SameColor(board[rf][ff], board[rt][ft]) )
+                                 callback(board, flags, NormalMove,
+                                          rf, ff, rt, ft, closure);
+                      if (board[rt][ft] != EmptySquare && m++) break;
+                  }
+                }
+	      break;
+
+            /* Gold General (and all its promoted versions) . First do the */
+            /* diagonal forward steps, then proceed as normal Wazir        */
+            case SHOGI WhiteWazir:
+            case SHOGI (PROMOTED WhitePawn):
+            case SHOGI (PROMOTED WhiteKnight):
+            case SHOGI (PROMOTED WhiteQueen):
+            case SHOGI (PROMOTED WhiteFerz):
+	      for (s = -1; s <= 1; s += 2) {
+                  if (rf < BOARD_HEIGHT-1 && ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
+                      !SameColor(board[rf][ff], board[rf + 1][ff + s])) {
+                      callback(board, flags, NormalMove,
+			       rf, ff, rf + 1, ff + s, closure);
+		  }
+              }
+              goto finishGold;
+
+            case SHOGI BlackWazir:
+            case SHOGI (PROMOTED BlackPawn):
+            case SHOGI (PROMOTED BlackKnight):
+            case SHOGI (PROMOTED BlackQueen):
+            case SHOGI (PROMOTED BlackFerz):
+	      for (s = -1; s <= 1; s += 2) {
+                  if (rf > 0 && ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
+                      !SameColor(board[rf][ff], board[rf - 1][ff + s])) {
+                      callback(board, flags, NormalMove,
+			       rf, ff, rf - 1, ff + s, closure);
+		  }
+	      }		    
+
+            case WhiteWazir:
+            case BlackWazir:
+            finishGold:
+              for (d = 0; d <= 1; d++)
+                for (s = -1; s <= 1; s += 2) {
+                      rt = rf + s * d;
+                      ft = ff + s * (1 - d);
+                      if (!(rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT)
+                          && !SameColor(board[rf][ff], board[rt][ft]) &&
+                          (gameInfo.variant != VariantXiangqi || InPalace(rt, ft) ) )
+                               callback(board, flags, NormalMove,
+                                        rf, ff, rt, ft, closure);
+                      }
+	      break;
+
+            case WhiteAlfil:
+            case BlackAlfil:
+                /* [HGM] support Shatranj pieces */
+                for (rs = -1; rs <= 1; rs += 2) 
+                  for (fs = -1; fs <= 1; fs += 2) {
+                      rt = rf + 2 * rs;
+                      ft = ff + 2 * fs;
+                      if (!(rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT)
+                          && ( gameInfo.variant != VariantXiangqi ||
+                               board[rf+rs][ff+fs] == EmptySquare && (2*rf < BOARD_HEIGHT) == (2*rt < BOARD_HEIGHT) )
+                         
+                          && !SameColor(board[rf][ff], board[rt][ft]))
+                               callback(board, flags, NormalMove,
+                                        rf, ff, rt, ft, closure);
+		  }
+                break;
+
+            /* Shogi Dragon Horse has to continue with Wazir after Bishop */
+            case SHOGI WhiteCardinal:
+            case SHOGI BlackCardinal:
+              m++;
+
+            /* Capablanca Archbishop continues as Knight                  */
+            case WhiteAngel:
+            case BlackAngel:
+              m++;
+
+            /* Shogi Bishops are ordinary Bishops */
+            case SHOGI WhiteBishop:
+            case SHOGI BlackBishop:
 	    case WhiteBishop:
 	    case BlackBishop:
 	      for (rs = -1; rs <= 1; rs += 2) 
-		for (fs = -1; fs <= 1; fs += 2)
+                for (fs = -1; fs <= 1; fs += 2) 
 		  for (i = 1;; i++) {
 		      rt = rf + (i * rs);
 		      ft = ff + (i * fs);
-		      if (rt < 0 || rt > 7 || ft < 0 || ft > 7) break;
+                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
 		      if (SameColor(board[rf][ff], board[rt][ft])) break;
 		      callback(board, flags, NormalMove,
 			       rf, ff, rt, ft, closure);
 		      if (board[rt][ft] != EmptySquare) break;
 		  }
+                if(m==1) goto mounted;
+                if(m==2) goto finishGold;
+                /* Bishop falls through */
 	      break;
 
+            /* Shogi Lance is unlike anything, and asymmetric at that */
+            case SHOGI WhiteQueen:
+              for(i = 1;; i++) {
+                      rt = rf + i;
+                      ft = ff;
+                      if (rt >= BOARD_HEIGHT) break;
+		      if (SameColor(board[rf][ff], board[rt][ft])) break;
+		      callback(board, flags, NormalMove,
+			       rf, ff, rt, ft, closure);
+                      if (board[rt][ft] != EmptySquare) break;
+              }
+              break;
+
+            case SHOGI BlackQueen:
+              for(i = 1;; i++) {
+                      rt = rf - i;
+                      ft = ff;
+                      if (rt < 0) break;
+		      if (SameColor(board[rf][ff], board[rt][ft])) break;
+		      callback(board, flags, NormalMove,
+			       rf, ff, rt, ft, closure);
+                      if (board[rt][ft] != EmptySquare) break;
+              }
+              break;
+
+            /* Shogi Dragon King has to continue as Ferz after Rook moves */
+            case SHOGI WhiteDragon:
+            case SHOGI BlackDragon:
+              m++;
+
+            /* Capablanca Chancellor sets flag to continue as Knight      */
+            case WhiteMarshall:
+            case BlackMarshall:
+              m++;
+
+            /* Shogi Rooks are ordinary Rooks */
+            case SHOGI WhiteRook:
+            case SHOGI BlackRook:
 	    case WhiteRook:
 	    case BlackRook:
-	      for (d = 0; d <= 1; d++)
-		for (s = -1; s <= 1; s += 2)
+              for (d = 0; d <= 1; d++)
+                for (s = -1; s <= 1; s += 2)
 		  for (i = 1;; i++) {
 		      rt = rf + (i * s) * d;
 		      ft = ff + (i * s) * (1 - d);
-		      if (rt < 0 || rt > 7 || ft < 0 || ft > 7) break;
+                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
 		      if (SameColor(board[rf][ff], board[rt][ft])) break;
 		      callback(board, flags, NormalMove,
 			       rf, ff, rt, ft, closure);
 		      if (board[rt][ft] != EmptySquare) break;
 		  }
+                if(m==1) goto mounted;
+                if(m==2) goto finishGold;
 	      break;
 
 	    case WhiteQueen:
@@ -368,7 +595,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure)
 		    for (i = 1;; i++) {
 			rt = rf + (i * rs);
 			ft = ff + (i * fs);
-			if (rt < 0 || rt > 7 || ft < 0 || ft > 7) break;
+                        if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
 			if (SameColor(board[rf][ff], board[rt][ft])) break;
 			callback(board, flags, NormalMove,
 				 rf, ff, rt, ft, closure);
@@ -377,19 +604,81 @@ void GenPseudoLegal(board, flags, epfile, callback, closure)
 		}
 	      break;
 
+            /* Shogi Pawn and Silver General: first the Pawn move,    */
+            /* then the General continues like a Ferz                 */
+            case SHOGI WhitePawn:
+            case SHOGI WhiteFerz:
+                  if (rf < BOARD_HEIGHT-1 &&
+                           !SameColor(board[rf][ff], board[rf + 1][ff]) ) 
+                           callback(board, flags, NormalMove,
+                                    rf, ff, rf + 1, ff, closure);
+              if(piece != SHOGI WhitePawn) goto finishSilver;
+              break;
+
+            case SHOGI BlackPawn:
+            case SHOGI BlackFerz:
+                  if (rf > 0 &&
+                           !SameColor(board[rf][ff], board[rf - 1][ff]) ) 
+                           callback(board, flags, NormalMove,
+                                    rf, ff, rf - 1, ff, closure);
+              if(piece == SHOGI BlackPawn) break;
+
+            case WhiteFerz:
+            case BlackFerz:
+            finishSilver:
+                /* [HGM] support Shatranj pieces */
+                for (rs = -1; rs <= 1; rs += 2) 
+                  for (fs = -1; fs <= 1; fs += 2) {
+                      rt = rf + rs;
+                      ft = ff + fs;
+                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) continue;
+                      if (!SameColor(board[rf][ff], board[rt][ft]) &&
+                          (gameInfo.variant != VariantXiangqi || InPalace(rt, ft) ) )
+                               callback(board, flags, NormalMove,
+                                        rf, ff, rt, ft, closure);
+		  }
+                break;
+
+	    case WhiteSilver:
+	    case BlackSilver:
+		m++; // [HGM] superchess: use for Centaur
+            case WhiteMan:
+            case BlackMan:
+            case SHOGI WhiteKing:
+            case SHOGI BlackKing:
 	    case WhiteKing:
 	    case BlackKing:
+//            walking:
 	      for (i = -1; i <= 1; i++)
 		for (j = -1; j <= 1; j++) {
 		    if (i == 0 && j == 0) continue;
 		    rt = rf + i;
 		    ft = ff + j;
-		    if (rt < 0 || rt > 7 || ft < 0 || ft > 7) continue;
+                    if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) continue;
 		    if (SameColor(board[rf][ff], board[rt][ft])) continue;
 		    callback(board, flags, NormalMove,
 			     rf, ff, rt, ft, closure);
 		}
+		if(m==1) goto mounted;
 	      break;
+
+	    case WhiteNightrider:
+	    case BlackNightrider:
+	      for (i = -1; i <= 1; i += 2)
+		for (j = -1; j <= 1; j += 2)
+		  for (s = 1; s <= 2; s++) {  int k;
+                    for(k=1;; k++) {
+		      rt = rf + k*i*s;
+		      ft = ff + k*j*(3-s);
+                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
+		      if (SameColor(board[rf][ff], board[rt][ft])) break;
+		      callback(board, flags, NormalMove,
+			       rf, ff, rt, ft, closure);
+		      if (board[rt][ft] != EmptySquare) break;
+                    }
+		  }
+	      break;
+
 	  }
       }
 }
@@ -425,7 +714,7 @@ void GenLegalCallback(board, flags, kind, rf, ff, rt, ft, closure)
 	if (board[rf][ff] == king) return;
 	for (r = rt-1; r <= rt+1; r++) {
 	  for (f = ft-1; f <= ft+1; f++) {
-	    if (r >= 0 && r <= 7 && f >= 0 && f <= 7 &&
+            if (r >= 0 && r < BOARD_HEIGHT && f >= BOARD_LEFT && f < BOARD_RGHT &&
 		board[r][f] == king) return;
 	  }
 	}
@@ -435,23 +724,32 @@ void GenLegalCallback(board, flags, kind, rf, ff, rt, ft, closure)
 }
 
 
+typedef struct {
+    int rf, ff, rt, ft;
+    ChessMove kind;
+    int captures; // [HGM] losers
+} LegalityTestClosure;
+
+
 /* Like GenPseudoLegal, but (1) include castling moves, (2) unless
    F_IGNORE_CHECK is set in the flags, omit moves that would leave the
    king in check, and (3) if F_ATOMIC_CAPTURE is set in the flags, omit
    moves that would destroy your own king.  The CASTLE_OK flags are
    true if castling is not yet ruled out by a move of the king or
    rook.  Return TRUE if the player on move is currently in check and
-   F_IGNORE_CHECK is not set.  */
-int GenLegal(board, flags, epfile, callback, closure)
+   F_IGNORE_CHECK is not set.  [HGM] add castlingRights parameter */
+int GenLegal(board, flags, epfile, castlingRights, callback, closure)
      Board board;
      int flags;
      int epfile;
+     char castlingRights[];
      MoveCallback callback;
      VOIDSTAR closure;
 {
     GenLegalClosure cl;
-    int ff;
+    int ff, ft, k, left, right;
     int ignoreCheck = (flags & F_IGNORE_CHECK) != 0;
+    ChessSquare wKing = WhiteKing, bKing = BlackKing;
 
     cl.cb = callback;
     cl.cl = closure;
@@ -461,69 +759,157 @@ int GenLegal(board, flags, epfile, callback, closure)
 	CheckTest(board, flags, -1, -1, -1, -1, FALSE)) return TRUE;
 
     /* Generate castling moves */
-    for (ff = 4; ff >= 3; ff-- /*ics wild 1*/) {
+    if(gameInfo.variant == VariantKnightmate) { /* [HGM] Knightmate */
+        wKing = WhiteUnicorn; bKing = BlackUnicorn;
+    }
+
+    for (ff = BOARD_WIDTH>>1; ff >= (BOARD_WIDTH-1)>>1; ff-- /*ics wild 1*/) {
 	if ((flags & F_WHITE_ON_MOVE) &&
 	    (flags & F_WHITE_KCASTLE_OK) &&
-	    board[0][ff] == WhiteKing &&
-	    board[0][ff + 1] == EmptySquare &&
-	    board[0][ff + 2] == EmptySquare &&
-	    board[0][6] == EmptySquare &&
-	    board[0][7] == WhiteRook &&
-	    (ignoreCheck ||
+            board[0][ff] == wKing &&
+            board[0][ff + 1] == EmptySquare &&
+            board[0][ff + 2] == EmptySquare &&
+            board[0][BOARD_RGHT-3] == EmptySquare &&
+            board[0][BOARD_RGHT-2] == EmptySquare &&
+            board[0][BOARD_RGHT-1] == WhiteRook &&
+            castlingRights[0] >= 0 && /* [HGM] check rights */
+            ( castlingRights[2] == ff || castlingRights[6] == ff ) &&
+            (ignoreCheck ||                             
 	     (!CheckTest(board, flags, 0, ff, 0, ff + 1, FALSE) &&
+              !CheckTest(board, flags, 0, ff, 0, BOARD_RGHT-3, FALSE) &&
+              (gameInfo.variant != VariantJanus || !CheckTest(board, flags, 0, ff, 0, BOARD_RGHT-2, FALSE)) &&
 	      !CheckTest(board, flags, 0, ff, 0, ff + 2, FALSE)))) {
 
 	    callback(board, flags,
-		     ff==4 ? WhiteKingSideCastle : WhiteKingSideCastleWild,
-		     0, ff, 0, ff + 2, closure);
+                     ff==BOARD_WIDTH>>1 ? WhiteKingSideCastle : WhiteKingSideCastleWild,
+                     0, ff, 0, ff + ((gameInfo.boardWidth+2)>>2) + (gameInfo.variant == VariantJanus), closure);
 	}
 	if ((flags & F_WHITE_ON_MOVE) &&
 	    (flags & F_WHITE_QCASTLE_OK) &&
-	    board[0][ff] == WhiteKing &&
+            board[0][ff] == wKing &&
 	    board[0][ff - 1] == EmptySquare &&
 	    board[0][ff - 2] == EmptySquare &&
-	    board[0][1] == EmptySquare &&
-	    board[0][0] == WhiteRook &&
+            board[0][BOARD_LEFT+2] == EmptySquare &&
+            board[0][BOARD_LEFT+1] == EmptySquare &&
+            board[0][BOARD_LEFT+0] == WhiteRook &&
+            castlingRights[1] >= 0 && /* [HGM] check rights */
+            ( castlingRights[2] == ff || castlingRights[6] == ff ) &&
 	    (ignoreCheck ||
 	     (!CheckTest(board, flags, 0, ff, 0, ff - 1, FALSE) &&
+              !CheckTest(board, flags, 0, ff, 0, BOARD_LEFT+3, FALSE) &&
 	      !CheckTest(board, flags, 0, ff, 0, ff - 2, FALSE)))) {
 
 	    callback(board, flags,
-		     ff==4 ? WhiteQueenSideCastle : WhiteQueenSideCastleWild,
-		     0, ff, 0, ff - 2, closure);
+		     ff==BOARD_WIDTH>>1 ? WhiteQueenSideCastle : WhiteQueenSideCastleWild,
+                     0, ff, 0, ff - ((gameInfo.boardWidth+2)>>2), closure);
 	}
 	if (!(flags & F_WHITE_ON_MOVE) &&
 	    (flags & F_BLACK_KCASTLE_OK) &&
-	    board[7][ff] == BlackKing &&
-	    board[7][ff + 1] == EmptySquare &&
-	    board[7][ff + 2] == EmptySquare &&
-	    board[7][6] == EmptySquare &&
-	    board[7][7] == BlackRook &&
+            board[BOARD_HEIGHT-1][ff] == bKing &&
+	    board[BOARD_HEIGHT-1][ff + 1] == EmptySquare &&
+	    board[BOARD_HEIGHT-1][ff + 2] == EmptySquare &&
+            board[BOARD_HEIGHT-1][BOARD_RGHT-3] == EmptySquare &&
+            board[BOARD_HEIGHT-1][BOARD_RGHT-2] == EmptySquare &&
+            board[BOARD_HEIGHT-1][BOARD_RGHT-1] == BlackRook &&
+            castlingRights[3] >= 0 && /* [HGM] check rights */
+            ( castlingRights[5] == ff || castlingRights[7] == ff ) &&
 	    (ignoreCheck ||
-	     (!CheckTest(board, flags, 7, ff, 7, ff + 1, FALSE) &&
-	      !CheckTest(board, flags, 7, ff, 7, ff + 2, FALSE)))) {
+	     (!CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, ff + 1, FALSE) &&
+              !CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, BOARD_RGHT-3, FALSE) &&
+              (gameInfo.variant != VariantJanus || !CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, BOARD_RGHT-2, FALSE)) &&
+	      !CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, ff + 2, FALSE)))) {
 
 	    callback(board, flags,
-		     ff==4 ? BlackKingSideCastle : BlackKingSideCastleWild,
-		     7, ff, 7, ff + 2, closure);
+		     ff==BOARD_WIDTH>>1 ? BlackKingSideCastle : BlackKingSideCastleWild,
+                     BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, ff + ((gameInfo.boardWidth+2)>>2) + (gameInfo.variant == VariantJanus), closure);
 	}
 	if (!(flags & F_WHITE_ON_MOVE) &&
 	    (flags & F_BLACK_QCASTLE_OK) &&
-	    board[7][ff] == BlackKing &&
-	    board[7][ff - 1] == EmptySquare &&
-	    board[7][ff - 2] == EmptySquare &&
-	    board[7][1] == EmptySquare &&
-	    board[7][0] == BlackRook &&
+            board[BOARD_HEIGHT-1][ff] == bKing &&
+	    board[BOARD_HEIGHT-1][ff - 1] == EmptySquare &&
+	    board[BOARD_HEIGHT-1][ff - 2] == EmptySquare &&
+            board[BOARD_HEIGHT-1][BOARD_LEFT+2] == EmptySquare &&
+            board[BOARD_HEIGHT-1][BOARD_LEFT+1] == EmptySquare &&
+            board[BOARD_HEIGHT-1][BOARD_LEFT+0] == BlackRook &&
+            castlingRights[4] >= 0 && /* [HGM] check rights */
+            ( castlingRights[5] == ff || castlingRights[7] == ff ) &&
 	    (ignoreCheck ||
-	     (!CheckTest(board, flags, 7, ff, 7, ff - 1, FALSE) &&
-	      !CheckTest(board, flags, 7, ff, 7, ff - 1, FALSE)))) {
+	     (!CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, ff - 1, FALSE) &&
+              !CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, BOARD_LEFT+3, FALSE) &&
+              !CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, ff - 2, FALSE)))) {
 
 	    callback(board, flags,
-		     ff==4 ? BlackQueenSideCastle : BlackQueenSideCastleWild,
-		     7, ff, 7, ff - 2, closure);
+		     ff==BOARD_WIDTH>>1 ? BlackQueenSideCastle : BlackQueenSideCastleWild,
+                     BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, ff - ((gameInfo.boardWidth+2)>>2), closure);
 	}
     }
 
+  if(gameInfo.variant == VariantFischeRandom) {
+
+    /* generate all potential FRC castling moves (KxR), ignoring flags */
+    /* [HGM] test if the Rooks we find have castling rights */
+
+
+    if ((flags & F_WHITE_ON_MOVE) != 0) {
+        ff = castlingRights[2]; /* King file if we have any rights */
+        if(ff > 0 && board[0][ff] == WhiteKing) {
+    if (appData.debugMode) {
+        fprintf(debugFP, "FRC castling, %d %d %d %d %d %d\n",
+                castlingRights[0],castlingRights[1],ff,castlingRights[3],castlingRights[4],castlingRights[5]);
+    }
+            ft = castlingRights[0]; /* Rook file if we have H-side rights */
+            left  = ff+1;
+            right = BOARD_RGHT-2;
+            if(ff == BOARD_RGHT-2) left = right = ff-1;    /* special case */
+            for(k=left; k<=right && ft >= 0; k++) /* first test if blocked */
+                if(k != ft && board[0][k] != EmptySquare) ft = -1;
+            for(k=left; k<right && ft >= 0; k++) /* then if not checked */
+                if(!ignoreCheck && CheckTest(board, flags, 0, ff, 0, k, FALSE)) ft = -1;
+            if(ft >= 0 && board[0][ft] == WhiteRook)
+                callback(board, flags, WhiteHSideCastleFR, 0, ff, 0, ft, closure);
+
+            ft = castlingRights[1]; /* Rook file if we have A-side rights */
+            left  = BOARD_LEFT+2;
+            right = ff-1;
+            if(ff <= BOARD_LEFT+2) { left = ff+1; right = BOARD_LEFT+3; }
+            for(k=left; k<=right && ft >= 0; k++) /* first test if blocked */
+                if(k != ft && board[0][k] != EmptySquare) ft = -1;
+            if(ff > BOARD_LEFT+2) 
+            for(k=left+1; k<=right && ft >= 0; k++) /* then if not checked */
+                if(!ignoreCheck && CheckTest(board, flags, 0, ff, 0, k, FALSE)) ft = -1;
+            if(ft >= 0 && board[0][ft] == WhiteRook)
+                callback(board, flags, WhiteASideCastleFR, 0, ff, 0, ft, closure);
+        }
+    } else {
+        ff = castlingRights[5]; /* King file if we have any rights */
+        if(ff > 0 && board[BOARD_HEIGHT-1][ff] == BlackKing) {
+            ft = castlingRights[3]; /* Rook file if we have H-side rights */
+            left  = ff+1;
+            right = BOARD_RGHT-2;
+            if(ff == BOARD_RGHT-2) left = right = ff-1;    /* special case */
+            for(k=left; k<=right && ft >= 0; k++) /* first test if blocked */
+                if(k != ft && board[BOARD_HEIGHT-1][k] != EmptySquare) ft = -1;
+            for(k=left; k<right && ft >= 0; k++) /* then if not checked */
+                if(!ignoreCheck && CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, k, FALSE)) ft = -1;
+            if(ft >= 0 && board[BOARD_HEIGHT-1][ft] == BlackRook)
+                callback(board, flags, BlackHSideCastleFR, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, ft, closure);
+
+            ft = castlingRights[4]; /* Rook file if we have A-side rights */
+            left  = BOARD_LEFT+2;
+            right = ff-1;
+            if(ff <= BOARD_LEFT+2) { left = ff+1; right = BOARD_LEFT+3; }
+            for(k=left; k<=right && ft >= 0; k++) /* first test if blocked */
+                if(k != ft && board[BOARD_HEIGHT-1][k] != EmptySquare) ft = -1;
+            if(ff > BOARD_LEFT+2) 
+            for(k=left+1; k<=right && ft >= 0; k++) /* then if not checked */
+                if(!ignoreCheck && CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, k, FALSE)) ft = -1;
+            if(ft >= 0 && board[BOARD_HEIGHT-1][ft] == BlackRook)
+                callback(board, flags, BlackASideCastleFR, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, ft, closure);
+        }
+    }
+
+  }
+
     return FALSE;
 }
 
@@ -569,6 +955,11 @@ int CheckTest(board, flags, rf, ff, rt, ft, enPassant)
     ChessSquare captured = EmptySquare;
     /*  Suppress warnings on uninitialized variables    */
 
+    if(gameInfo.variant == VariantXiangqi)
+        king = flags & F_WHITE_ON_MOVE ? WhiteWazir : BlackWazir;
+    if(gameInfo.variant == VariantKnightmate)
+        king = flags & F_WHITE_ON_MOVE ? WhiteUnicorn : BlackUnicorn;
+
     if (rf >= 0) {
 	if (enPassant) {
 	    captured = board[rf][ft];
@@ -584,9 +975,20 @@ int CheckTest(board, flags, rf, ff, rt, ft, enPassant)
        order a1, a2, a3, ... b1, b2, ..., h8 to find the first king,
        and we test only whether that one is in check. */
     cl.check = 0;
-    for (cl.fking = 0; cl.fking <= 7; cl.fking++)
-	for (cl.rking = 0; cl.rking <= 7; cl.rking++) {
-	  if (board[cl.rking][cl.fking] == king) {
+    for (cl.fking = BOARD_LEFT+0; cl.fking < BOARD_RGHT; cl.fking++)
+	for (cl.rking = 0; cl.rking < BOARD_HEIGHT; cl.rking++) {
+          if (board[cl.rking][cl.fking] == king) {
+              if(gameInfo.variant == VariantXiangqi) {
+                  /* [HGM] In Xiangqi opposing Kings means check as well */
+                  int i, dir;
+                  dir = (king >= BlackPawn) ? -1 : 1;
+                  for( i=cl.rking+dir; i>=0 && i<BOARD_HEIGHT &&
+                                board[i][cl.fking] == EmptySquare; i+=dir );
+                  if(i>=0 && i<BOARD_HEIGHT &&
+                      board[i][cl.fking] == (dir>0 ? BlackWazir : WhiteWazir) )
+                          cl.check++;
+              }
+
 	      GenPseudoLegal(board, flags ^ F_WHITE_ON_MOVE, -1,
 			     CheckTestCallback, (VOIDSTAR) &cl);
 	      goto undo_move;  /* 2-level break */
@@ -609,11 +1011,6 @@ int CheckTest(board, flags, rf, ff, rt, ft, enPassant)
 }
 
 
-typedef struct {
-    int rf, ff, rt, ft;
-    ChessMove kind;
-} LegalityTestClosure;
-
 extern void LegalityTestCallback P((Board board, int flags, ChessMove kind,
 				    int rf, int ff, int rt, int ft,
 				    VOIDSTAR closure));
@@ -627,24 +1024,82 @@ void LegalityTestCallback(board, flags, kind, rf, ff, rt, ft, closure)
 {
     register LegalityTestClosure *cl = (LegalityTestClosure *) closure;
 
+//    if (appData.debugMode) {
+//        fprintf(debugFP, "Legality test: %c%c%c%c\n", ff+AAA, rf+ONE, ft+AAA, rt+ONE);
+//    }
+    if(board[rt][ft] != EmptySquare || kind==WhiteCapturesEnPassant || kind==BlackCapturesEnPassant)
+	cl->captures++; // [HGM] losers: count legal captures
     if (rf == cl->rf && ff == cl->ff && rt == cl->rt && ft == cl->ft)
       cl->kind = kind;
 }
 
-ChessMove LegalityTest(board, flags, epfile, rf, ff, rt, ft, promoChar)
+ChessMove LegalityTest(board, flags, epfile, castlingRights, rf, ff, rt, ft, promoChar)
      Board board;
      int flags, epfile;
      int rf, ff, rt, ft, promoChar;
+     char castlingRights[];
 {
-    LegalityTestClosure cl;
+    LegalityTestClosure cl; ChessSquare piece = board[rf][ff];
     
+    if (appData.debugMode) {
+        int i;
+        for(i=0; i<6; i++) fprintf(debugFP, "%d ", castlingRights[i]);
+        fprintf(debugFP, "Legality test? %c%c%c%c\n", ff+AAA, rf+ONE, ft+AAA, rt+ONE);
+    }
+    /* [HGM] Lance, Cobra and Falcon are wildcard pieces; consider all their moves legal */
+    /* (perhaps we should disallow moves that obviously leave us in check?)              */
+    if(piece == WhiteFalcon || piece == BlackFalcon ||
+       piece == WhiteCobra  || piece == BlackCobra  ||
+       piece == WhiteLance  || piece == BlackLance)
+        return NormalMove;
+
     cl.rf = rf;
     cl.ff = ff;
     cl.rt = rt;
     cl.ft = ft;
     cl.kind = IllegalMove;
-    GenLegal(board, flags, epfile, LegalityTestCallback, (VOIDSTAR) &cl);
+    cl.captures = 0; // [HGM] losers: prepare to count legal captures.
+    GenLegal(board, flags, epfile, castlingRights, LegalityTestCallback, (VOIDSTAR) &cl);
+    if((flags & F_MANDATORY_CAPTURE) && cl.captures && board[rt][ft] == EmptySquare
+		&& cl.kind != WhiteCapturesEnPassant && cl.kind != BlackCapturesEnPassant)
+	return(IllegalMove); // [HGM] losers: if there are legal captures, non-capts are illegal
+
+    if(gameInfo.variant == VariantShogi) {
+        /* [HGM] Shogi promotions. '=' means defer */
+        if(rf != DROP_RANK && cl.kind == NormalMove) {
+            ChessSquare piece = board[rf][ff];
+
+            if(promoChar == PieceToChar(BlackQueen)) promoChar = NULLCHAR; /* [HGM] Kludge */
+            if(promoChar != NULLCHAR && promoChar != 'x' &&
+               promoChar != '+' && promoChar != '=' &&
+               ToUpper(PieceToChar(PROMOTED piece)) != ToUpper(promoChar) )
+                    cl.kind = IllegalMove;
+            else if(flags & F_WHITE_ON_MOVE) {
+                if( (int) piece < (int) WhiteWazir &&
+                     (rf > BOARD_HEIGHT-4 || rt > BOARD_HEIGHT-4) ) {
+                    if( (piece == WhitePawn || piece == WhiteQueen) && rt > BOARD_HEIGHT-2 ||
+                         piece == WhiteKnight && rt > BOARD_HEIGHT-3) /* promotion mandatory */
+                             cl.kind = promoChar == '=' ? IllegalMove : WhitePromotionKnight;
+                    else /* promotion optional, default is promote */
+                             cl.kind = promoChar == '=' ? NormalMove  : WhitePromotionQueen;
+                   
+                } else cl.kind = (promoChar == NULLCHAR || promoChar == 'x' || promoChar == '=') ?
+                                            NormalMove : IllegalMove;
+            } else {
+                if( (int) piece < (int) BlackWazir && (rf < 3 || rt < 3) ) {
+                    if( (piece == BlackPawn || piece == BlackQueen) && rt < 1 ||
+                         piece == BlackKnight && rt < 2 ) /* promotion obligatory */
+                             cl.kind = promoChar == '=' ? IllegalMove : BlackPromotionKnight;
+                    else /* promotion optional, default is promote */
+                             cl.kind = promoChar == '=' ? NormalMove  : BlackPromotionQueen;
+
+                } else cl.kind = (promoChar == NULLCHAR || promoChar == 'x' || promoChar == '=') ?
+                                            NormalMove : IllegalMove;
+            }
+        }
+    } else
     if (promoChar != NULLCHAR && promoChar != 'x') {
+	if(promoChar == '=') cl.kind = IllegalMove; else // [HGM] shogi: no deferred promotion outside Shogi
 	if (cl.kind == WhitePromotionQueen || cl.kind == BlackPromotionQueen) {
 	    cl.kind = 
 	      PromoCharToMoveType((flags & F_WHITE_ON_MOVE) != 0, promoChar);
@@ -652,6 +1107,7 @@ ChessMove LegalityTest(board, flags, epfile, rf, ff, rt, ft, promoChar)
 	    cl.kind = IllegalMove;
 	}
     }
+    /* [HGM] For promotions, 'ToQueen' = optional, 'ToKnight' = mandatory */
     return cl.kind;
 }
 
@@ -676,19 +1132,21 @@ void MateTestCallback(board, flags, kind, rf, ff, rt, ft, closure)
 }
 
 /* Return MT_NONE, MT_CHECK, MT_CHECKMATE, or MT_STALEMATE */
-int MateTest(board, flags, epfile)
+int MateTest(board, flags, epfile, castlingRights)
      Board board;
      int flags, epfile;
+     char castlingRights[];
 {
     MateTestClosure cl;
     int inCheck;
 
     cl.count = 0;
-    inCheck = GenLegal(board, flags, epfile, MateTestCallback, (VOIDSTAR) &cl);
+    inCheck = GenLegal(board, flags, epfile, castlingRights, MateTestCallback, (VOIDSTAR) &cl);
     if (cl.count > 0) {
 	return inCheck ? MT_CHECK : MT_NONE;
     } else {
-	return inCheck ? MT_CHECKMATE : MT_STALEMATE;
+        return inCheck || gameInfo.variant == VariantXiangqi || gameInfo.variant == VariantShatranj ?
+                         MT_CHECKMATE : MT_STALEMATE;
     }
 }
 
@@ -706,14 +1164,17 @@ void DisambiguateCallback(board, flags, kind, rf, ff, rt, ft, closure)
 {
     register DisambiguateClosure *cl = (DisambiguateClosure *) closure;
 
-    if ((cl->pieceIn == EmptySquare || cl->pieceIn == board[rf][ff]) &&
+    if ((cl->pieceIn == EmptySquare || cl->pieceIn == board[rf][ff]
+         || PieceToChar(board[rf][ff]) == '~'
+              && cl->pieceIn == (ChessSquare)(DEMOTED board[rf][ff])
+                                                                      ) &&
 	(cl->rfIn == -1 || cl->rfIn == rf) &&
 	(cl->ffIn == -1 || cl->ffIn == ff) &&
 	(cl->rtIn == -1 || cl->rtIn == rt) &&
 	(cl->ftIn == -1 || cl->ftIn == ft)) {
 
 	cl->count++;
-	cl->piece = board[rf][ff];
+        cl->piece = board[rf][ff];
 	cl->rf = rf;
 	cl->ff = ff;
 	cl->rt = rt;
@@ -727,21 +1188,79 @@ void Disambiguate(board, flags, epfile, closure)
      int flags, epfile;
      DisambiguateClosure *closure;
 {
-    int illegal = 0;
+    int illegal = 0; char c = closure->promoCharIn;
     closure->count = 0;
     closure->rf = closure->ff = closure->rt = closure->ft = 0;
     closure->kind = ImpossibleMove;
-    GenLegal(board, flags, epfile, DisambiguateCallback, (VOIDSTAR) closure);
+    if (appData.debugMode) {
+        fprintf(debugFP, "Disambiguate in:  %d(%d,%d)-(%d,%d) = %d (%c)\n",
+                             closure->pieceIn,closure->ffIn,closure->rfIn,closure->ftIn,closure->rtIn,
+                             closure->promoCharIn, closure->promoCharIn >= ' ' ? closure->promoCharIn : '-');
+    }
+    GenLegal(board, flags, epfile, initialRights, DisambiguateCallback, (VOIDSTAR) closure);
     if (closure->count == 0) {
 	/* See if it's an illegal move due to check */
         illegal = 1;
-	GenLegal(board, flags|F_IGNORE_CHECK, epfile, DisambiguateCallback,
+        GenLegal(board, flags|F_IGNORE_CHECK, epfile, initialRights, DisambiguateCallback,
 		 (VOIDSTAR) closure);	
 	if (closure->count == 0) {
 	    /* No, it's not even that */
+    if (appData.debugMode) { int i, j;
+	for(i=BOARD_HEIGHT-1; i>=0; i--) {
+		for(j=0; j<BOARD_WIDTH; j++)
+		        fprintf(debugFP, "%3d", (int) board[i][j]);
+	        fprintf(debugFP, "\n");
+	}
+    }
 	    return;
 	}
     }
+
+    if(gameInfo.variant == VariantShogi) {
+        /* [HGM] Shogi promotions. '=' means defer */
+        if(closure->rfIn != DROP_RANK && closure->kind == NormalMove) {
+            ChessSquare piece = closure->piece;
+#if 0
+    if (appData.debugMode) {
+        fprintf(debugFP, "Disambiguate A:   %d(%d,%d)-(%d,%d) = %d (%c)\n",
+                          closure->pieceIn,closure->ffIn,closure->rfIn,closure->ftIn,closure->rtIn,
+                          closure->promoCharIn,closure->promoCharIn);
+    }
+#endif
+            if(c != NULLCHAR && c != 'x' && c != '+' && c != '=' &&
+               ToUpper(PieceToChar(PROMOTED piece)) != ToUpper(c) ) 
+                    closure->kind = IllegalMove;
+            else if(flags & F_WHITE_ON_MOVE) {
+#if 0
+    if (appData.debugMode) {
+        fprintf(debugFP, "Disambiguate B:   %d(%d,%d)-(%d,%d) = %d (%c)\n",
+                          closure->pieceIn,closure->ffIn,closure->rfIn,closure->ftIn,closure->rtIn,
+                          closure->promoCharIn,closure->promoCharIn);
+    }
+#endif
+                if( (int) piece < (int) WhiteWazir &&
+                     (closure->rf > BOARD_HEIGHT-4 || closure->rt > BOARD_HEIGHT-4) ) {
+                    if( (piece == WhitePawn || piece == WhiteQueen) && closure->rt > BOARD_HEIGHT-2 ||
+                         piece == WhiteKnight && closure->rt > BOARD_HEIGHT-3) /* promotion mandatory */
+                             closure->kind = c == '=' ? IllegalMove : WhitePromotionKnight;
+                    else /* promotion optional, default is promote */
+                             closure->kind = c == '=' ? NormalMove  : WhitePromotionQueen;
+                   
+                } else closure->kind = (c == NULLCHAR || c == 'x' || c == '=') ?
+                                            NormalMove : IllegalMove;
+            } else {
+                if( (int) piece < (int) BlackWazir && (closure->rf < 3 || closure->rt < 3) ) {
+                    if( (piece == BlackPawn || piece == BlackQueen) && closure->rt < 1 ||
+                         piece == BlackKnight && closure->rt < 2 ) /* promotion obligatory */
+                             closure->kind = c == '=' ? IllegalMove : BlackPromotionKnight;
+                    else /* promotion optional, default is promote */
+                             closure->kind = c == '=' ? NormalMove  : BlackPromotionQueen;
+
+                } else closure->kind = (c == NULLCHAR || c == 'x' || c == '=') ?
+                                            NormalMove : IllegalMove;
+            }
+        }
+    } else
     if (closure->promoCharIn != NULLCHAR && closure->promoCharIn != 'x') {
 	if (closure->kind == WhitePromotionQueen
 	    || closure->kind == BlackPromotionQueen) {
@@ -752,7 +1271,17 @@ void Disambiguate(board, flags, epfile, closure)
 	    closure->kind = IllegalMove;
 	}
     }
-    closure->promoChar = ToLower(PieceToChar(PromoPiece(closure->kind)));
+#if 0
+    if (appData.debugMode) {
+        fprintf(debugFP, "Disambiguate C:   %d(%d,%d)-(%d,%d) = %d (%c)\n",
+                          closure->pieceIn,closure->ffIn,closure->rfIn,closure->ftIn,closure->rtIn,
+                          closure->promoCharIn,closure->promoCharIn);
+    }
+#endif
+    /* [HGM] returns 'q' for optional promotion, 'n' for mandatory */
+    if(closure->promoCharIn != '=')
+        closure->promoChar = ToLower(closure->promoCharIn);
+    else closure->promoChar = '=';
     if (closure->promoChar == 'x') closure->promoChar = NULLCHAR;
     if (closure->count > 1) {
 	closure->kind = AmbiguousMove;
@@ -764,6 +1293,14 @@ void Disambiguate(board, flags, epfile, closure)
 	*/
 	closure->kind = IllegalMove;
     }
+    if(closure->kind == IllegalMove)
+    /* [HGM] might be a variant we don't understand, pass on promotion info */
+        closure->promoChar = ToLower(closure->promoCharIn);
+    if (appData.debugMode) {
+        fprintf(debugFP, "Disambiguate out: %d(%d,%d)-(%d,%d) = %d (%c)\n",
+        closure->piece,closure->ff,closure->rf,closure->ft,closure->rt,closure->promoChar,
+	closure->promoChar >= ' ' ? closure->promoChar:'-');
+    }
 }
 
 
@@ -793,7 +1330,10 @@ void CoordsToAlgebraicCallback(board, flags, kind, rf, ff, rt, ft, closure)
       (CoordsToAlgebraicClosure *) closure;
 
     if (rt == cl->rt && ft == cl->ft &&
-	board[rf][ff] == cl->piece) {
+        (board[rf][ff] == cl->piece
+         || PieceToChar(board[rf][ff]) == '~' &&
+            (ChessSquare) (DEMOTED board[rf][ff]) == cl->piece)
+                                     ) {
 	if (rf == cl->rf) {
 	    if (ff == cl->ff) {
 		cl->kind = kind; /* this is the move we want */
@@ -823,71 +1363,94 @@ ChessMove CoordsToAlgebraic(board, flags, epfile,
 {
     ChessSquare piece;
     ChessMove kind;
-    char *outp = out;
+    char *outp = out, c;
     CoordsToAlgebraicClosure cl;
     
     if (rf == DROP_RANK) {
 	/* Bughouse piece drop */
 	*outp++ = ToUpper(PieceToChar((ChessSquare) ff));
 	*outp++ = '@';
-	*outp++ = ft + 'a';
-	*outp++ = rt + '1';
+        *outp++ = ft + AAA;
+        if(rt+ONE <= '9')
+           *outp++ = rt + ONE;
+        else { *outp++ = (rt+ONE-'0')/10 + '0';*outp++ = (rt+ONE-'0')%10 + '0'; }
 	*outp = NULLCHAR;
 	return (flags & F_WHITE_ON_MOVE) ? WhiteDrop : BlackDrop;
     }
 
     if (promoChar == 'x') promoChar = NULLCHAR;
     piece = board[rf][ff];
+    if(PieceToChar(piece)=='~') piece = (ChessSquare)(DEMOTED piece);
+
+  if (appData.debugMode)
+          fprintf(debugFP, "CoordsToAlgebraic, piece=%d (%d,%d)-(%d,%d) %c\n", (int)piece,ff,rf,ft,rt,promoChar >= ' ' ? promoChar : '-');
     switch (piece) {
       case WhitePawn:
       case BlackPawn:
-	kind = LegalityTest(board, flags, epfile, rf, ff, rt, ft, promoChar);
+        kind = LegalityTest(board, flags, epfile, initialRights, rf, ff, rt, ft, promoChar);
 	if (kind == IllegalMove && !(flags&F_IGNORE_CHECK)) {
 	    /* Keep short notation if move is illegal only because it
                leaves the player in check, but still return IllegalMove */
-	    kind = LegalityTest(board, flags|F_IGNORE_CHECK, epfile,
+            kind = LegalityTest(board, flags|F_IGNORE_CHECK, epfile, initialRights,
 			       rf, ff, rt, ft, promoChar);
 	    if (kind == IllegalMove) break;
 	    kind = IllegalMove;
 	}
 	/* Pawn move */
-	*outp++ = ff + 'a';
-	if (ff == ft) {
+        *outp++ = ff + AAA;
+        if (ff == ft && board[rt][ft] == EmptySquare) { /* [HGM] Xiangqi has straight noncapts! */
 	    /* Non-capture; use style "e5" */
-	    *outp++ = rt + '1';
+            if(rt+ONE <= '9')
+               *outp++ = rt + ONE;
+            else { *outp++ = (rt+ONE-'0')/10 + '0';*outp++ = (rt+ONE-'0')%10 + '0'; }
 	} else {
 	    /* Capture; use style "exd5" */
-	    *outp++ = 'x';
-	    *outp++ = ft + 'a';
-	    *outp++ = rt + '1';
+            if(gameInfo.variant != VariantXiangqi || board[rt][ft] != EmptySquare )
+            *outp++ = 'x';  /* [HGM] Xiangqi has sideway noncaptures across river! */
+            *outp++ = ft + AAA;
+            if(rt+ONE <= '9')
+               *outp++ = rt + ONE;
+            else { *outp++ = (rt+ONE-'0')/10 + '0';*outp++ = (rt+ONE-'0')%10 + '0'; }
 	}
 	/* Use promotion suffix style "=Q" */
-	if (promoChar != NULLCHAR && promoChar != 'x') {
-	    *outp++ = '=';
-	    *outp++ = ToUpper(promoChar);
-	}
 	*outp = NULLCHAR;
-	return kind;
+  if (appData.debugMode)
+          fprintf(debugFP, "movetype=%d, promochar=%d=%c\n", (int)kind, promoChar, promoChar >= ' ' ? promoChar : '-');
+        if (promoChar != NULLCHAR) {
+            if(gameInfo.variant == VariantShogi) {
+                /* [HGM] ... but not in Shogi! */
+                *outp++ = promoChar == '=' ? '=' : '+';
+            } else {
+                *outp++ = '=';
+                *outp++ = ToUpper(promoChar);
+            }
+            *outp = NULLCHAR;
+	}
+        return kind;
 
 	
       case WhiteKing:
       case BlackKing:
+        /* Fabien moved code: FRC castling first (if KxR), wild castling second */
+	/* Code added by Tord:  FRC castling. */
+	if((piece == WhiteKing && board[rt][ft] == WhiteRook) ||
+	   (piece == BlackKing && board[rt][ft] == BlackRook)) {
+	  if(ft > ff) strcpy(out, "O-O"); else strcpy(out, "O-O-O");
+            return LegalityTest(board, flags, epfile, initialRights,
+				rf, ff, rt, ft, promoChar);
+	}
+	/* End of code added by Tord */
 	/* Test for castling or ICS wild castling */
 	/* Use style "O-O" (oh-oh) for PGN compatibility */
-	if (rf == rt &&
-	    rf == ((piece == WhiteKing) ? 0 : 7) &&
-	    ((ff == 4 && (ft == 2 || ft == 6)) ||
-	     (ff == 3 && (ft == 1 || ft == 5)))) {
-	    switch (ft) {
-	      case 1:
-	      case 6:
+	else if (rf == rt &&
+	    rf == ((piece == WhiteKing) ? 0 : BOARD_HEIGHT-1) &&
+            ((ff == BOARD_WIDTH>>1 && (ft == BOARD_LEFT+2 || ft == BOARD_RGHT-2)) ||
+             (ff == (BOARD_WIDTH-1)>>1 && (ft == BOARD_LEFT+1 || ft == BOARD_RGHT-3)))) {
+            if(ft==BOARD_LEFT+1 || ft==BOARD_RGHT-2)
 		strcpy(out, "O-O");
-		break;
-	      case 2:
-	      case 5:
+            else
 		strcpy(out, "O-O-O");
-		break;
-	    }
+
 	    /* This notation is always unambiguous, unless there are
 	       kings on both the d and e files, with "wild castling"
 	       possible for the king on the d file and normal castling
@@ -896,11 +1459,11 @@ ChessMove CoordsToAlgebraic(board, flags, epfile,
 	       this situation.  So I am not going to worry about it;
 	       I'll just generate an ambiguous O-O in this case.
 	    */
-	    return LegalityTest(board, flags, epfile,
+            return LegalityTest(board, flags, epfile, initialRights,
 				rf, ff, rt, ft, promoChar);
 	}
+
 	/* else fall through */
-	
       default:
 	/* Piece move */
 	cl.rf = rf;
@@ -910,14 +1473,14 @@ ChessMove CoordsToAlgebraic(board, flags, epfile,
 	cl.piece = piece;
 	cl.kind = IllegalMove;
 	cl.rank = cl.file = cl.either = 0;
-	GenLegal(board, flags, epfile,
+        GenLegal(board, flags, epfile, initialRights,
 		 CoordsToAlgebraicCallback, (VOIDSTAR) &cl);
 
 	if (cl.kind == IllegalMove && !(flags&F_IGNORE_CHECK)) {
 	    /* Generate pretty moves for moving into check, but
 	       still return IllegalMove.
 	    */
-	    GenLegal(board, flags|F_IGNORE_CHECK, epfile,
+            GenLegal(board, flags|F_IGNORE_CHECK, epfile, initialRights,
 		     CoordsToAlgebraicCallback, (VOIDSTAR) &cl);
 	    if (cl.kind == IllegalMove) break;
 	    cl.kind = IllegalMove;
@@ -928,23 +1491,77 @@ ChessMove CoordsToAlgebraic(board, flags, epfile,
 	   else "N1f3" or "N5xf7",
 	   else "Ng1f3" or "Ng5xf7".
 	*/
-	*outp++ = ToUpper(PieceToChar(piece));
-	
+        c = PieceToChar(piece) ;
+        if( c == '~' || c == '+') {
+           /* [HGM] print nonexistent piece as its demoted version */
+           piece = (ChessSquare) (DEMOTED piece);
+        }
+        if(c=='+') *outp++ = c;
+        *outp++ = ToUpper(PieceToChar(piece));
+
 	if (cl.file || (cl.either && !cl.rank)) {
-	    *outp++ = ff + 'a';
+            *outp++ = ff + AAA;
 	}
 	if (cl.rank) {
-	    *outp++ = rf + '1';
+            if(rf+ONE <= '9')
+                *outp++ = rf + ONE;
+            else { *outp++ = (rf+ONE-'0')/10 + '0';*outp++ = (rf+ONE-'0')%10 + '0'; }
 	}
 
 	if(board[rt][ft] != EmptySquare)
 	  *outp++ = 'x';
 
-	*outp++ = ft + 'a';
-	*outp++ = rt + '1';
+        *outp++ = ft + AAA;
+        if(rt+ONE <= '9')
+           *outp++ = rt + ONE;
+        else { *outp++ = (rt+ONE-'0')/10 + '0';*outp++ = (rt+ONE-'0')%10 + '0'; }
 	*outp = NULLCHAR;
-	return cl.kind;
+        if (gameInfo.variant == VariantShogi) {
+            /* [HGM] in Shogi non-pawns can promote */
+            if(flags & F_WHITE_ON_MOVE) {
+                if( (int) cl.piece < (int) WhiteWazir &&
+                     (rf > BOARD_HEIGHT-4 || rt > BOARD_HEIGHT-4) ) {
+                    if( (piece == WhitePawn || piece == WhiteQueen) && rt > BOARD_HEIGHT-2 ||
+                         piece == WhiteKnight && rt > BOARD_HEIGHT-3) /* promotion mandatory */
+                             cl.kind = promoChar == '=' ? IllegalMove : WhitePromotionKnight;
+                    else cl.kind =  WhitePromotionQueen; /* promotion optional */
+                   
+                } else cl.kind = (promoChar == NULLCHAR || promoChar == 'x' || promoChar == '=') ?
+                                            NormalMove : IllegalMove;
+            } else {
+                if( (int) cl.piece < (int) BlackWazir && (rf < 3 || rt < 3) ) {
+                    if( (piece == BlackPawn || piece == BlackQueen) && rt < 1 ||
+                         piece == BlackKnight && rt < 2 ) /* promotion obligatory */
+                             cl.kind = promoChar == '=' ? IllegalMove : BlackPromotionKnight;
+                    else cl.kind =  BlackPromotionQueen; /* promotion optional */
+                } else cl.kind = (promoChar == NULLCHAR || promoChar == 'x' || promoChar == '=') ?
+                                            NormalMove : IllegalMove;
+            }
+            if(cl.kind == WhitePromotionQueen || cl.kind == BlackPromotionQueen) {
+                /* for optional promotions append '+' or '=' */
+                if(promoChar == '=') {
+                    *outp++ = '=';
+                    cl.kind = NormalMove;
+                } else *outp++ = '+';
+                *outp = NULLCHAR;
+            } else if(cl.kind == IllegalMove) {
+                /* Illegal move specifies any given promotion */
+                if(promoChar != NULLCHAR && promoChar != 'x') {
+                    *outp++ = '=';
+                    *outp++ = ToUpper(promoChar);
+                    *outp = NULLCHAR;
+                }
+            }
+        }
+        return cl.kind;
 	
+      /* [HGM] Always long notation for fairies we don't know */
+      case WhiteFalcon:
+      case BlackFalcon:
+      case WhiteLance:
+      case BlackLance:
+      case WhiteGrasshopper:
+      case BlackGrasshopper:
       case EmptySquare:
 	/* Moving a nonexistent piece */
 	break;
@@ -962,11 +1579,15 @@ ChessMove CoordsToAlgebraic(board, flags, epfile,
     if (piece != EmptySquare && piece != WhitePawn && piece != BlackPawn) {
 	*outp++ = ToUpper(PieceToChar(piece));
     }
-    *outp++ = ff + 'a';
-    *outp++ = rf + '1';
+    *outp++ = ff + AAA;
+    if(rf+ONE <= '9')
+       *outp++ = rf + ONE;
+    else { *outp++ = (rf+ONE-'0')/10 + '0';*outp++ = (rf+ONE-'0')%10 + '0'; }
     if (board[rt][ft] != EmptySquare) *outp++ = 'x';
-    *outp++ = ft + 'a';
-    *outp++ = rt + '1';
+    *outp++ = ft + AAA;
+    if(rt+ONE <= '9')
+       *outp++ = rt + ONE;
+    else { *outp++ = (rt+ONE-'0')/10 + '0';*outp++ = (rt+ONE-'0')%10 + '0'; }
     /* Use promotion suffix style "=Q" */
     if (promoChar != NULLCHAR && promoChar != 'x') {
 	*outp++ = '=';
@@ -976,3 +1597,222 @@ ChessMove CoordsToAlgebraic(board, flags, epfile,
 
     return IllegalMove;
 }
+
+// [HGM] XQ: the following code serves to detect perpetual chasing (Asian rules)
+
+typedef struct {
+    /* Input */
+    int rf, ff, rt, ft;
+    /* Output */
+    int recaptures;
+} ChaseClosure;
+
+// I guess the following variables logically belong in the closure too, but I was too lazy and used globals
+
+int preyStackPointer, chaseStackPointer;
+
+struct {
+char rf, ff, rt, ft;
+} chaseStack[100];
+
+struct {
+char rank, file;
+} preyStack[100];
+
+
+
+
+// there are three new callbacks for use with GenLegal: for adding captures, deleting them, and finding a recapture
+
+extern void AtacksCallback P((Board board, int flags, ChessMove kind,
+				int rf, int ff, int rt, int ft,
+				VOIDSTAR closure));
+
+void AttacksCallback(board, flags, kind, rf, ff, rt, ft, closure)
+     Board board;
+     int flags;
+     ChessMove kind;
+     int rf, ff, rt, ft;
+     VOIDSTAR closure;
+{   // For adding captures that can lead to chase indictment to the chaseStack
+    if(board[rt][ft] == EmptySquare) return;                               // non-capture
+    if(board[rt][ft] == WhitePawn && rt <  BOARD_HEIGHT/2) return;         // Pawn before river can be chased
+    if(board[rt][ft] == BlackPawn && rt >= BOARD_HEIGHT/2) return;         // Pawn before river can be chased
+    if(board[rf][ff] == WhitePawn  || board[rf][ff] == BlackPawn)  return; // Pawns are allowed to chase
+    if(board[rf][ff] == WhiteWazir || board[rf][ff] == BlackWazir) return; // King is allowed to chase
+    // move cannot be excluded from being a chase trivially (based on attacker and victim); save it on chaseStack
+    chaseStack[chaseStackPointer].rf = rf;
+    chaseStack[chaseStackPointer].ff = ff;
+    chaseStack[chaseStackPointer].rt = rt;
+    chaseStack[chaseStackPointer].ft = ft;
+    chaseStackPointer++;
+}
+
+extern void ExistingAtacksCallback P((Board board, int flags, ChessMove kind,
+				int rf, int ff, int rt, int ft,
+				VOIDSTAR closure));
+
+void ExistingAttacksCallback(board, flags, kind, rf, ff, rt, ft, closure)
+     Board board;
+     int flags;
+     ChessMove kind;
+     int rf, ff, rt, ft;
+     VOIDSTAR closure;
+{   // for removing pre-exsting captures from the chaseStack, to be left with newly created ones
+    int i;
+    register ChaseClosure *cl = (ChaseClosure *) closure; //closure tells us the move played in the repeat loop
+
+    if(board[rt][ft] == EmptySquare) return; // no capture
+    if(rf == cl->rf && ff == cl->ff) { // attacks with same piece from new position are not considered new
+	rf = cl->rt; ff = cl->ft;      // doctor their fromSquare so they will be recognized in chaseStack
+    }
+    // search move in chaseStack, and delete it if it occurred there (as we know now it is not a new capture)
+    for(i=0; i<chaseStackPointer; i++) {
+	if(chaseStack[i].rf == rf && chaseStack[i].ff == ff && 
+	   chaseStack[i].rt == rt && chaseStack[i].ft == ft   ) { 
+	    // move found on chaseStack, delete it by overwriting with move popped from top of chaseStack
+	    chaseStack[i] = chaseStack[--chaseStackPointer];
+	    break;
+	}
+    }
+}
+
+extern void ProtectedCallback P((Board board, int flags, ChessMove kind,
+				int rf, int ff, int rt, int ft,
+				VOIDSTAR closure));
+
+void ProtectedCallback(board, flags, kind, rf, ff, rt, ft, closure)
+     Board board;
+     int flags;
+     ChessMove kind;
+     int rf, ff, rt, ft;
+     VOIDSTAR closure;
+{   // for determining if a piece (given through the closure) is protected
+    register ChaseClosure *cl = (ChaseClosure *) closure; // closure tells us where to recapture
+
+    if(rt == cl->rt && ft == cl->ft) cl->recaptures++;    // count legal recaptures to this square
+    if(appData.debugMode && board[rt][ft] != EmptySquare)
+	fprintf(debugFP, "try %c%c%c%c=%d\n", ff+AAA, rf+ONE,ft+AAA, rt+ONE, cl->recaptures);
+}
+
+extern char moveList[MAX_MOVES][MOVE_LEN];
+
+int PerpetualChase(int first, int last)
+{   // this routine detects if the side to move in the 'first' position is perpetually chasing (when not checking)
+    int i, j, k, tail;
+    ChaseClosure cl;
+    ChessSquare captured;
+
+    preyStackPointer = 0;        // clear stack of chased pieces
+    for(i=first; i<last; i+=2) { // for all positions with same side to move
+        if(appData.debugMode) fprintf(debugFP, "judge position %i\n", i);
+	chaseStackPointer = 0;   // clear stack that is going to hold possible chases
+	// determine all captures possible after the move, and put them on chaseStack
+	GenLegal(boards[i+1], PosFlags(i), EP_NONE, initialRights, AttacksCallback, &cl);
+	if(appData.debugMode) { int n; 
+	    for(n=0; n<chaseStackPointer; n++) 
+                fprintf(debugFP, "%c%c%c%c ", chaseStack[n].ff+AAA, chaseStack[n].rf+ONE, 
+                                              chaseStack[n].ft+AAA, chaseStack[n].rt+ONE);
+            fprintf(debugFP, ": all capts\n");
+	}
+	// determine all captures possible before the move, and delete them from chaseStack
+	cl.rf = moveList[i][1]-ONE; // prepare closure to pass move that led from i to i+1
+	cl.ff = moveList[i][0]-AAA+BOARD_LEFT;
+	cl.rt = moveList[i][3]-ONE;
+	cl.ft = moveList[i][2]-AAA+BOARD_LEFT;
+	GenLegal(boards[i],   PosFlags(i), EP_NONE, initialRights, ExistingAttacksCallback, &cl);
+	if(appData.debugMode) { int n; 
+	    for(n=0; n<chaseStackPointer; n++) 
+                fprintf(debugFP, "%c%c%c%c ", chaseStack[n].ff+AAA, chaseStack[n].rf+ONE, 
+                                              chaseStack[n].ft+AAA, chaseStack[n].rt+ONE);
+            fprintf(debugFP, ": new capts after %c%c%c%c\n", cl.ff+AAA, cl.rf+ONE, cl.ft+AAA, cl.rt+ONE);
+	}
+	// chaseSack now contains all captures made possible by the move
+	for(j=0; j<chaseStackPointer; j++) { // run through chaseStack to identify true chases
+            int attacker = (int)boards[i+1][chaseStack[j].rf][chaseStack[j].ff];
+            int victim   = (int)boards[i+1][chaseStack[j].rt][chaseStack[j].ft];
+
+	    if(attacker >= (int) BlackPawn) attacker = BLACK_TO_WHITE attacker; // convert to white, as piecee type
+	    if(victim   >= (int) BlackPawn) victim   = BLACK_TO_WHITE victim;
+
+	    if((attacker == WhiteKnight || attacker == WhiteCannon) && victim == WhiteRook) 
+		continue; // C or H attack on R is always chase; leave on chaseStack
+
+	    if(attacker == victim) {
+                if(LegalityTest(boards[i+1], PosFlags(i+1), EP_NONE, initialRights, chaseStack[j].rt, 
+                   chaseStack[j].ft, chaseStack[j].rf, chaseStack[j].ff, NULLCHAR) == NormalMove) {
+			// we can capture back with equal piece, so this is no chase but a sacrifice
+                        chaseStack[j] = chaseStack[--chaseStackPointer]; // delete the capture from the chaseStack
+			j--; /* ! */ continue;
+		}
+
+	    }
+
+	    // the attack is on a lower piece, or on a pinned or blocked equal one
+            // test if the victim is protected by a true protector. First make the capture.
+	    captured = boards[i+1][chaseStack[j].rt][chaseStack[j].ft];
+	    boards[i+1][chaseStack[j].rt][chaseStack[j].ft] = boards[i+1][chaseStack[j].rf][chaseStack[j].ff];
+	    boards[i+1][chaseStack[j].rf][chaseStack[j].ff] = EmptySquare;
+	    // Then test if the opponent can recapture
+	    cl.recaptures = 0;         // prepare closure to pass recapture square and count moves to it
+	    cl.rt = chaseStack[j].rt;
+	    cl.ft = chaseStack[j].ft;
+	    if(appData.debugMode) {
+            	fprintf(debugFP, "test if we can recapture %c%c\n", cl.ft+AAA, cl.rt+ONE);
+	    }
+            GenLegal(boards[i+1], PosFlags(i+1), EP_NONE, initialRights, ProtectedCallback, &cl); // try all moves
+	    // unmake the capture
+	    boards[i+1][chaseStack[j].rf][chaseStack[j].ff] = boards[i+1][chaseStack[j].rt][chaseStack[j].ft];
+            boards[i+1][chaseStack[j].rt][chaseStack[j].ft] = captured;
+	    // if a recapture was found, piece is protected, and we are not chasing it.
+	    if(cl.recaptures) { // attacked piece was defended by true protector, no chase
+		chaseStack[j] = chaseStack[--chaseStackPointer]; // so delete from chaseStack
+		j--; /* ! */ 
+	    }
+	}
+	// chaseStack now contains all moves that chased
+	if(appData.debugMode) { int n; 
+	    for(n=0; n<chaseStackPointer; n++) 
+                fprintf(debugFP, "%c%c%c%c ", chaseStack[n].ff+AAA, chaseStack[n].rf+ONE, 
+                                              chaseStack[n].ft+AAA, chaseStack[n].rt+ONE);
+            fprintf(debugFP, ": chases\n");
+	}
+        if(i == first) { // copy all people chased by first move of repeat cycle to preyStack
+	    for(j=0; j<chaseStackPointer; j++) {
+                preyStack[j].rank = chaseStack[j].rt;
+                preyStack[j].file = chaseStack[j].ft;
+	    }
+	    preyStackPointer = chaseStackPointer;
+	}
+	tail = 0;
+        for(j=0; j<chaseStackPointer; j++) {
+	    for(k=0; k<preyStackPointer; k++) {
+		// search the victim of each chase move on the preyStack (first occurrence)
+		if(chaseStack[j].ft == preyStack[k].file && chaseStack[j].rt == preyStack[k].rank ) {
+		    if(k < tail) break; // piece was already identified as still being chased
+		    preyStack[preyStackPointer] = preyStack[tail]; // move chased piece to bottom part of preyStack
+		    preyStack[tail] = preyStack[k];                // by swapping
+		    preyStack[k] = preyStack[preyStackPointer];
+		    tail++;
+		    break;
+		}
+	    }
+	}
+        preyStackPointer = tail; // keep bottom part of preyStack, popping pieces unchased on move i.
+	if(appData.debugMode) { int n; 
+            for(n=0; n<preyStackPointer; n++) 
+                fprintf(debugFP, "%c%c ", preyStack[n].file+AAA, preyStack[n].rank+ONE);
+            fprintf(debugFP, "always chased upto ply %d\n", i);
+	}
+        // now adjust the location of the chased pieces according to opponent move
+        for(j=0; j<preyStackPointer; j++) {
+            if(preyStack[j].rank == moveList[i+1][1]-ONE &&
+               preyStack[j].file == moveList[i+1][0]-AAA+BOARD_LEFT) {
+                preyStack[j].rank = moveList[i+1][3]-ONE;
+                preyStack[j].file = moveList[i+1][2]-AAA+BOARD_LEFT;
+                break;
+            }
+        }
+    }
+    return preyStackPointer; // if any piece was left on preyStack, it has been perpetually chased
+}
diff --git a/moves.h b/moves.h
index c0c6b75..50e6c17 100644
--- a/moves.h
+++ b/moves.h
@@ -2,8 +2,10 @@
  * moves.h - Move generation and checking
  * $Id: moves.h,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
@@ -27,32 +29,35 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 extern ChessSquare PromoPiece P((ChessMove moveType));
 extern ChessMove PromoCharToMoveType P((int whiteOnMove, int promoChar));
 extern char PieceToChar P((ChessSquare p));
 extern ChessSquare CharToPiece P((int c));
+extern int PieceToNumber P((ChessSquare p));
 
 extern void CopyBoard P((Board to, Board from));
 extern int CompareBoards P((Board board1, Board board2));
+extern char pieceToChar[(int)EmptySquare+1];
 
 typedef void (*MoveCallback) P((Board board, int flags, ChessMove kind,
 				int rf, int ff, int rt, int ft,
@@ -71,10 +76,21 @@ typedef void (*MoveCallback) P((Board board, int flags, ChessMove kind,
 #define F_ATOMIC_CAPTURE 128    /* capturing piece explodes, destroying itself
 				   and all non-pawns on adjacent squares; 
 				   destroying your own king is illegal */
+#define F_FRC_TYPE_CASTLING 256 /* generate castlings as captures of own Rook */
+#define F_MANDATORY_CAPTURE 0x100
 
-/* Special epfile values */
-#define EP_NONE -1
-#define EP_UNKNOWN -2
+/* Special epfile values. [HGM] positive values are non-reversible moves! */
+#define EP_NONE (-4)           /* [HGM] Tricky! order matters:            */
+#define EP_UNKNOWN (-1)        /*       >= EP_UNKNOWN spils rep-draw      */
+#define EP_CAPTURE (-2)        /*       <= EP_NONE is reversible move     */
+#define EP_PAWN_MOVE (-3)
+#define EP_REP_DRAW   (-15)
+#define EP_RULE_DRAW  (-14)
+#define EP_INSUF_DRAW  (-13)
+#define EP_DRAWS (-10)
+#define EP_BEROLIN_A 16        /* [HGM] berolina: add to file if pawn to be taken of a-side of e.p.file */
+#define EP_CHECKMATE 100       /* [HGM] verify: record mates in epStatus for easy claim verification    */
+#define EP_STALEMATE -16
 
 /* Call callback once for each pseudo-legal move in the given
    position, except castling moves.  A move is pseudo-legal if it is
@@ -94,6 +110,7 @@ extern void GenPseudoLegal P((Board board, int flags, int epfile,
    on move is currently in check and F_IGNORE_CHECK is not set.
 */
 extern int GenLegal P((Board board, int flags, int epfile,
+                        char castlingRights[], /* [HGM] */
 			MoveCallback callback, VOIDSTAR closure));
 
 /* If the player on move were to move from (rf, ff) to (rt, ft), would
@@ -110,6 +127,7 @@ extern int CheckTest P((Board board, int flags,
    flags say is on move?  Other arguments as in GenPseudoLegal.
    Returns the type of move made, taking promoChar into account. */
 extern ChessMove LegalityTest P((Board board, int flags, int epfile,
+                                 char castlingRights[], /* [HGM] */
 				 int rf, int ff, int rt, int ft,
 				 int promoChar));
 
@@ -119,7 +137,8 @@ extern ChessMove LegalityTest P((Board board, int flags, int epfile,
 #define MT_STALEMATE 3
 
 /* Return MT_NONE, MT_CHECK, MT_CHECKMATE, or MT_STALEMATE */
-extern int MateTest P((Board board, int flags, int epfile));
+extern int MateTest P((Board board, int flags, int epfile,
+                                        char castlingRights[])); /* [HGM] */
 
 typedef struct {
     /* Input data */
diff --git a/parser.c b/parser.c
deleted file mode 100644
index 609a285..0000000
--- a/parser.c
+++ /dev/null
@@ -1,3875 +0,0 @@
-/* A lexical scanner generated by flex */
-
-/* Scanner skeleton version:
- * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
- */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-
-#include <stdio.h>
-#include <unistd.h>
-
-
-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
-#ifdef c_plusplus
-#ifndef __cplusplus
-#define __cplusplus
-#endif
-#endif
-
-
-#ifdef __cplusplus
-
-#include <stdlib.h>
-
-/* Use prototypes in function declarations. */
-#define YY_USE_PROTOS
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-#if __STDC__
-
-#define YY_USE_PROTOS
-#define YY_USE_CONST
-
-#endif	/* __STDC__ */
-#endif	/* ! __cplusplus */
-
-#ifdef __TURBOC__
- #pragma warn -rch
- #pragma warn -use
-#include <io.h>
-#include <stdlib.h>
-#define YY_USE_CONST
-#define YY_USE_PROTOS
-#endif
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-
-#ifdef YY_USE_PROTOS
-#define YY_PROTO(proto) proto
-#else
-#define YY_PROTO(proto) ()
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN yy_start = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START ((yy_start - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#define YY_BUF_SIZE 16384
-
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-
-extern int yyleng;
-extern FILE *yyin, *yyout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-/* The funky do-while in the following #define is used to turn the definition
- * int a single C statement (which needs a semi-colon terminator).  This
- * avoids problems with code like:
- *
- * 	if ( condition_holds )
- *		yyless( 5 );
- *	else
- *		do_something_else();
- *
- * Prior to using the do-while the compiler would get upset at the
- * "else" because it interpreted the "if" statement as being all
- * done when it reached the ';' after the yyless() call.
- */
-
-/* Return all but the first 'n' matched characters back to the input stream. */
-
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-		*yy_cp = yy_hold_char; \
-		YY_RESTORE_YY_MORE_OFFSET \
-		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
-		} \
-	while ( 0 )
-
-#define unput(c) yyunput( c, yytext_ptr )
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-typedef unsigned int yy_size_t;
-
-
-struct yy_buffer_state
-	{
-	FILE *yy_input_file;
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	int yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-	/* When an EOF's been seen but there's still some text to process
-	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-	 * shouldn't try reading from the input source any more.  We might
-	 * still have a bunch of tokens to match, though, because of
-	 * possible backing-up.
-	 *
-	 * When we actually see the EOF, we change the status to "new"
-	 * (via yyrestart()), so that the user can continue scanning by
-	 * just pointing yyin at a new input file.
-	 */
-#define YY_BUFFER_EOF_PENDING 2
-	};
-
-static YY_BUFFER_STATE yy_current_buffer = 0;
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- */
-#define YY_CURRENT_BUFFER yy_current_buffer
-
-
-/* yy_hold_char holds the character lost when yytext is formed. */
-static char yy_hold_char;
-
-static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-
-
-int yyleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1;		/* whether we need to initialize */
-static int yy_start = 0;	/* start state number */
-
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin.  A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void yyrestart YY_PROTO(( FILE *input_file ));
-
-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
-void yy_load_buffer_state YY_PROTO(( void ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
-
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
-
-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
-static void yy_flex_free YY_PROTO(( void * ));
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-	{ \
-	if ( ! yy_current_buffer ) \
-		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	yy_current_buffer->yy_is_interactive = is_interactive; \
-	}
-
-#define yy_set_bol(at_bol) \
-	{ \
-	if ( ! yy_current_buffer ) \
-		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	yy_current_buffer->yy_at_bol = at_bol; \
-	}
-
-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
-
-
-#define YY_USES_REJECT
-typedef unsigned char YY_CHAR;
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
-typedef int yy_state_type;
-extern char *yytext;
-#define yytext_ptr yytext
-
-static yy_state_type yy_get_previous_state YY_PROTO(( void ));
-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
-static int yy_get_next_buffer YY_PROTO(( void ));
-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
-	yytext_ptr = yy_bp; \
-	yyleng = (int) (yy_cp - yy_bp); \
-	yy_hold_char = *yy_cp; \
-	*yy_cp = '\0'; \
-	yy_c_buf_p = yy_cp;
-
-#define YY_NUM_RULES 42
-#define YY_END_OF_BUFFER 43
-static yyconst short int yy_acclist[661] =
-    {   0,
-       43,   41,   42,   41,   42,   41,   42,   40,   41,   42,
-       41,   42,   25,   41,   42,   41,   42,   40,   41,   42,
-       40,   41,   42,16410,   40,   41,   42,16410,   41,   42,
-       40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
-       41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
-       42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
-       40,   41,   42,   40,   41,   42,   40,   41,   42,   41,
-       42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
-       40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
-       41,   42,   40,   41,   42,   40,   41,   42,   41,   42,
-
-       41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
-       42,16410,   40,   41,   42,16410,   41,   42,   40,   41,
-       42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
-       40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
-       41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
-       42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
-       40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
-       41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
-       42,   40,   41,   42,   41,   42,   33,   40,   17,   40,
-        9,   40,   40,   40,16410, 8218,   40,   35,   40,   40,
-
-       40,   40,   40,   40,   40,   40,   40,   40,   40,    9,
-       40,   40,   40,   40,   40,   40,   36,   40,    3,   40,
-       40,   40,    4,   40,   40,    3,   40,   40,    4,   40,
-       40,   40,   40,    9,   40,   34,   40,   40,    9,   40,
-       40,   40,16410, 8218,   40,   40,   40,   40,   40,   40,
-       40,   40,   40,   40,   40,   40,    9,   40,   40,   40,
-       40,   40,   40,   40,    3,   40,   40,   40,    4,   40,
-       40,    3,   40,   40,    4,   40,   40,   40,   40,    9,
-       40,   15,    9,   40,   23,   40,   23,    8,   40, 8218,
-       22,   40,   22,   24,   40,   40,   40,    6,   40,   40,
-
-       40,   40,   40,   40,   40,    9,   40,   40,   40,   40,
-       40,   20,   40,    4,   40,   40,    3,   40,   40,    3,
-       40,    4,    5,   40,    4,   40,   40,    4,   40,   40,
-       40,    3,   40,    4,    4,   40,    5,    6,   40,    4,
-       40,   40,    9,   40,   34,   39,    9,   40,   23,   40,
-        8,   40,   22,   40,   35,   40,   40,   40,    6,   40,
-       40,   40,   40,   40,   40,   40,    9,   40,   40,   40,
-       40,   40,   20,   40,    4,   40,   40,    3,   40,   40,
-        3,   40,    5,   40,    4,   40,   40,    4,   40,   40,
-       40,    3,   40,    4,   40,    5,    6,   40,    4,   40,
-
-       40,    9,   40,   38,   38,   37,   25,   25,   40,    6,
-       40,    7,   40,    6,   10,   40,   40,   40,   40,   19,
-       40,   40,   21,   40,   16,   40,   40,   40,   40,   40,
-       20,   20,   40,   20,   40,   36,    3,    3,    2,   40,
-        5,    4,    5,   40,   40,    4,    4,   40,    2,    7,
-       40,    5,    6,    5,    6,   40,    5,   40,   40,   40,
-       25,   39,   40,    6,   40,    7,   40,   40,   40,   40,
-       40,   19,   40,   40,   21,   40,   16,   40,   40,   40,
-       40,   40,   20,   40,   20,   20,   40,    2,   40,    5,
-       40,   40,    4,   40,    2,    7,   40,    5,    6,   40,
-
-        5,   40,   40,   40,    7,    1,   40,   40,   40,   19,
-       40,   40,   40,   21,   21,   40,   21,   40,   40,   40,
-       40,   30,   36,    2,    2,   40,    5,    4,    5,    5,
-       40,    2,    7,   39,    1,   40,   40,   40,   19,   40,
-       40,   40,   21,   40,   21,   21,   40,   40,   40,   40,
-       20,   39,    2,   40,    5,   40,   27,   38,   23,   23,
-       22,   22,   24,   24,   20,   21,    1,    1,   40,   40,
-       40,   40,   11,   40,   40,   28,   36,   30,    2,    2,
-        5,   27,   34,   39,   39,    1,   40,   40,   40,   40,
-       21,   39,   11,   40,   40,   20,   39,   18,   24,   20,
-
-       21,    1,    1,   19,   40,   40,   40,   11,   40,   40,
-       40,   40,   21,   39,   40,   11,   40,   40,   12,   40,
-       40,   40,   40,   12,   40,   40,   14,   40,   40,   40,
-       14,   40,   40,   40,   39,   40,   40,   40,   40,   39,
-       39,   40,   40,   31,   40,   39,   39,   31,   40,   13,
-       31,   32,   32,   35,   39,   39,   31,   39,   34,   29
-    } ;
-
-static yyconst short int yy_accept[712] =
-    {   0,
-        1,    1,    1,    2,    4,    6,    8,   11,   13,   16,
-       18,   21,   25,   29,   31,   34,   37,   40,   43,   46,
-       49,   52,   55,   58,   61,   64,   67,   70,   72,   75,
-       78,   81,   84,   87,   90,   93,   96,   99,  101,  103,
-      106,  109,  113,  117,  119,  122,  125,  128,  131,  134,
-      137,  140,  143,  146,  149,  152,  155,  158,  161,  164,
-      167,  170,  173,  176,  179,  182,  185,  187,  187,  188,
-      189,  189,  189,  189,  189,  190,  190,  190,  191,  191,
-      193,  193,  193,  193,  194,  194,  194,  196,  196,  198,
-      198,  199,  199,  200,  200,  201,  201,  201,  202,  203,
-
-      204,  205,  206,  207,  208,  209,  210,  212,  213,  214,
-      215,  216,  217,  217,  217,  217,  217,  218,  219,  221,
-      221,  222,  223,  225,  226,  228,  228,  229,  231,  232,
-      233,  234,  236,  236,  236,  236,  237,  237,  238,  238,
-      239,  241,  241,  242,  244,  244,  246,  246,  247,  248,
-      248,  249,  250,  251,  252,  253,  254,  255,  256,  257,
-      259,  260,  261,  262,  263,  264,  265,  267,  267,  268,
-      269,  271,  272,  274,  274,  275,  277,  278,  279,  280,
-      282,  282,  282,  282,  282,  282,  282,  282,  282,  282,
-      282,  282,  283,  283,  283,  283,  285,  287,  288,  290,
-
-      291,  291,  291,  291,  293,  294,  295,  295,  295,  295,
-      295,  296,  296,  297,  297,  298,  298,  298,  300,  301,
-      302,  303,  304,  305,  306,  308,  309,  310,  311,  312,
-      314,  314,  314,  314,  314,  316,  316,  317,  317,  317,
-      319,  320,  322,  323,  325,  325,  325,  327,  328,  330,
-      331,  331,  332,  334,  335,  337,  340,  342,  343,  345,
-      346,  346,  346,  346,  346,  347,  349,  351,  353,  355,
-      355,  356,  356,  357,  358,  358,  359,  361,  362,  363,
-      364,  365,  366,  367,  369,  370,  371,  372,  373,  375,
-      377,  378,  378,  380,  381,  383,  385,  387,  388,  390,
-
-      391,  391,  392,  394,  396,  399,  401,  402,  404,  404,
-      404,  405,  406,  406,  406,  407,  407,  407,  408,  408,
-      409,  409,  409,  409,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  412,  412,  412,  414,
-      415,  416,  417,  417,  418,  419,  420,  422,  422,  423,
-      425,  427,  428,  429,  430,  431,  432,  434,  436,  436,
-      436,  436,  436,  437,  438,  438,  439,  441,  442,  443,
-      443,  443,  443,  445,  446,  447,  447,  449,  449,  452,
-      454,  457,  459,  460,  461,  461,  462,  462,  462,  462,
-      462,  463,  463,  464,  464,  464,  466,  468,  469,  469,
-
-      470,  471,  472,  474,  475,  477,  479,  480,  481,  482,
-      483,  485,  486,  488,  490,  492,  493,  495,  498,  501,
-      503,  504,  505,  505,  505,  505,  505,  505,  505,  505,
-      505,  505,  505,  505,  505,  505,  505,  505,  505,  505,
-      506,  508,  509,  510,  510,  512,  512,  513,  514,  515,
-      517,  519,  520,  521,  522,  522,  522,  524,  524,  524,
-      525,  525,  525,  527,  528,  528,  529,  530,  530,  532,
-      532,  534,  534,  534,  534,  534,  534,  534,  535,  535,
-      535,  537,  538,  539,  541,  542,  543,  545,  546,  548,
-      549,  550,  551,  553,  555,  557,  557,  557,  559,  559,
-
-      559,  560,  560,  561,  561,  562,  562,  563,  563,  564,
-      564,  565,  565,  565,  565,  565,  567,  567,  568,  568,
-      568,  570,  571,  571,  571,  571,  571,  571,  572,  573,
-      575,  576,  578,  578,  579,  580,  581,  582,  582,  582,
-      584,  584,  584,  585,  586,  586,  586,  588,  589,  590,
-      591,  593,  595,  596,  598,  598,  599,  599,  599,  599,
-      600,  600,  600,  600,  602,  602,  603,  604,  604,  605,
-      605,  605,  605,  605,  606,  607,  608,  610,  611,  611,
-      611,  611,  611,  611,  612,  613,  615,  616,  618,  619,
-      619,  619,  619,  619,  619,  619,  620,  620,  620,  620,
-
-      620,  621,  622,  622,  622,  622,  622,  623,  624,  624,
-      624,  624,  624,  625,  625,  625,  625,  626,  627,  629,
-      629,  629,  629,  629,  630,  630,  631,  633,  633,  633,
-      633,  633,  634,  635,  635,  635,  635,  635,  636,  637,
-      638,  638,  638,  638,  638,  638,  639,  640,  640,  640,
-      640,  640,  641,  642,  643,  644,  644,  644,  644,  644,
-      644,  646,  646,  646,  646,  646,  647,  648,  650,  650,
-      650,  651,  651,  652,  652,  653,  653,  653,  655,  655,
-      656,  657,  657,  657,  657,  657,  659,  659,  659,  659,
-      659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
-
-      659,  659,  659,  659,  659,  659,  659,  659,  660,  661,
-      661
-    } ;
-
-static yyconst int yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    4,    1,    5,    6,    7,    8,    1,    9,   10,
-       11,   12,   13,    1,   14,   15,   16,   17,   18,   19,
-       20,   20,   20,   20,   20,   20,   21,   22,   23,    1,
-       24,    1,    1,   25,   26,   27,   28,   29,   30,   31,
-       32,   33,   34,   34,   35,   36,   37,   38,   39,   40,
-       41,   42,   43,   34,   44,   34,   45,   46,   34,   34,
-       47,    1,   48,    1,   49,    1,   50,   51,   52,   53,
-
-       54,   55,   56,   57,   58,   34,   59,   60,   61,   62,
-       63,   64,   41,   65,   66,   67,   68,   34,   69,   46,
-       70,   34,   71,    1,   72,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-static yyconst int yy_meta[73] =
-    {   0,
-        1,    2,    3,    2,    1,    1,    1,    1,    4,    5,
-        6,    1,    1,    7,    1,    1,    4,    8,    8,    8,
-        4,    9,    1,   10,    1,    4,   11,    4,    4,    4,
-        4,    4,    4,    4,   11,    4,    4,   11,   12,   12,
-       11,   11,    4,    4,    4,    7,    1,    1,    1,   13,
-       14,   13,   13,   15,   13,   13,   13,    4,   11,    4,
-        4,   11,   12,   12,   11,    4,    4,    4,    4,    4,
-        1,    1
-    } ;
-
-static yyconst short int yy_base[787] =
-    {   0,
-        0,   72, 2588, 4394,  119,  129,    0,  141, 2583,  139,
-      150,  171,  238, 2583,  257, 2527, 2518,  117,  159, 2518,
-     2530,  190,  142,  233,  191, 2512,  239,  317,  376,  420,
-      125,  205,  193,  114,  243,  120,  204,  331, 2574,  174,
-      353,  476,  258,  260,  543,  244,  282,  346,  311,  334,
-      256,  312,  365,  595,  331,  351,  354,  644,  688,  242,
-      348,  327,  365,  386,  303,  392,  552, 2521,  432,    0,
-     2566,  258,  557,  282, 4394, 2562,  393,  320, 2556, 2554,
-     2552,  342,  442, 2551,  457,  364,  605, 2550,    0, 2562,
-     4394,  576,  530,  617,  732,  625,  661,  449, 2514, 2509,
-
-     2512, 2517, 2492, 2493, 2490, 2517, 2515,  463,  572, 2503,
-     2494, 2489, 2502,  789,  372,  861, 4394,  669,  924,  705,
-      713,  468,  980,  765, 1032,  773,  789, 1076,  481,  637,
-     2486, 2485,  390, 2475,  830, 2542, 2541,  383, 2540,  617,
-      593,  546,  858,  874,  406,  579,  432,  865, 1120, 1005,
-      505,  683,  726,  727,  621,  872,  870,  876,  603,  873,
-      905,  665,  891,  884,  882,  973, 1168, 1013, 1049,  936,
-     1225, 1057, 1277, 1093, 1101, 1321,  641,  983,  928,  930,
-      896, 2478,  538,  543,  612, 2531,  622, 1030, 1221, 2528,
-     2466, 4394, 2532, 2531, 2529, 2518, 2527, 2526,    0, 4394,
-
-     2525, 2524, 2523, 2521, 2520,  443, 2465, 2459, 2471, 2466,
-      668,  709,  594, 1218,  732,  753,  756, 1365, 2467, 2466,
-     2446,  803,  906, 2460, 2498,    0, 2453, 2449, 2441, 1422,
-      689, 1069,  172, 1494,  790, 1251, 1294, 1302, 1415, 2496,
-      838,  976, 1288, 1557, 1413, 1449,  678,  629,  910, 1338,
-     1346,  992, 1105, 1502, 1057, 1609, 1182, 1100, 2492, 4394,
-     1510,  996, 2501,  191, 2501, 1172,  960,  962, 1158,  831,
-     2499, 1132, 1237,  889, 1482, 1300, 1653, 1176, 1228, 1010,
-     1273, 1315, 1175, 1190,    0, 1204, 1531, 1071, 1710, 1774,
-     1550, 1582, 1242, 1443, 1551, 1830, 1272, 1239, 1121, 1493,
-
-     1590, 1606, 1659, 1141, 1882, 1673, 1721, 1427, 1504, 2447,
-     4394,  843, 1025, 2489, 4394, 1727, 2487, 2485, 2423, 2422,
-     2475, 2474, 2473, 2473, 1010, 2472,  539, 2471, 1290, 1541,
-      610, 2421, 2421, 2414, 2414,    0,  939, 1197,    0, 4394,
-     4394, 1699, 1710, 1344, 2420, 2419,  885,  879, 1130, 1939,
-        0, 2438, 2420, 2421, 2420,    0, 2011, 2083,  733,  949,
-     1131, 1410, 2468, 2461, 1365, 4394, 2146, 1356, 1154,  689,
-     1752, 1796, 1157,  715, 2417, 2406,    0, 1386,    0, 1564,
-     2202, 1802, 1633, 2406, 1857, 2464, 1571, 1672, 2417, 2403,
-     2462, 1187, 1451, 1003,  894, 1295, 1470, 1718, 1855, 1823,
-
-     1555, 1665, 1782, 1796, 2267, 1574, 1588, 1826, 1647, 1674,
-     2339, 2460, 2411, 2475, 1840, 1858, 1608,    0, 2531, 1905,
-     1956, 1857, 1728, 2409, 2451, 1639, 2450, 2385, 2445, 2383,
-     2443, 2381, 2434, 1281, 2399, 2395, 2395, 2390, 1389, 4394,
-     2587, 2443, 1146, 1916, 2442, 1281, 2415, 2390,    0, 2652,
-     2724, 2378, 2378, 2428, 1322, 1883, 4394, 2426, 1966, 1457,
-     2002, 2076, 2419, 1428,  952, 4394, 2375, 2364,    0, 2410,
-     1544, 1774, 2396, 1877, 2392, 2347, 2341, 1521, 1030, 1255,
-     2787, 1676, 1881, 1788, 1891, 1861, 2852, 2402, 2924, 1963,
-     1841, 1944, 2402, 1691, 1649, 1816, 1235, 4394, 1979, 2393,
-
-     2392, 2330, 2329, 2389, 2388, 2326, 2325, 2385, 2381, 2319,
-     2318, 2366, 2362, 2315, 2323, 1377, 2320, 1778, 2004, 2102,
-     2355, 2310, 2348, 2304, 2287, 2326, 2288, 2289, 2264, 1524,
-     2279, 4394, 1980, 4394, 2317, 4394, 4394, 2312, 2053, 2319,
-     2268, 2261, 2315, 1999, 1555,  548, 1908, 1982, 1951, 1786,
-     2301, 2043, 2029, 2297, 2054, 4394, 2243, 2158, 2289, 2284,
-     2219, 2205, 2209, 4394, 2198, 2239, 4394, 2235, 2228, 2174,
-     2228, 2182, 2157, 2174, 2105, 2086,    0, 2061, 2130, 2120,
-     2054, 1040,  358, 2032, 2091, 2073, 2093, 1970, 2136, 2120,
-     1988, 2029, 1542, 1985, 1941, 1941, 1923,  884, 1858, 1831,
-
-     2996, 1815, 1772, 1768, 1617,  651, 3068, 2150, 2149, 1757,
-     1745, 1725, 4394, 1623, 1924, 2045, 3140, 2054,    0, 1631,
-     1594, 1302, 1202, 3212, 2158, 2066, 2040, 2177, 1577, 1531,
-     2110, 1524, 1496, 1455, 1427, 1308, 1895, 2162, 1448, 1422,
-     2179, 1319, 1298, 2163, 2154, 1285, 1115, 1083, 1117, 1726,
-     1576, 2196, 2198, 1062,  984, 2193, 2056,  930, 2153, 2166,
-        0,  902,  804,  803, 1618, 2210, 2238,    0, 2213,  583,
-     4394,  497, 2199,  486, 4394,  426,  460, 4394, 2116, 2203,
-     2254, 2231,  392,  317, 1804, 2255, 2281,  239, 2027,  829,
-     2006, 2117, 2293, 2295, 2298, 2299, 2303, 2317, 2321, 2322,
-
-     2323, 2365, 2366, 2369, 2370, 2371, 2233,  154, 4394, 4394,
-     3281, 3296, 3311, 3326, 3341, 3353, 3368, 3383, 3397, 3412,
-     3427, 3442, 3457, 3472, 3487, 3502, 3517, 3532, 3547, 3562,
-     3577, 3592, 3607, 3622, 3633, 3648, 3663, 3678, 3693, 3708,
-     3723, 3738, 3753, 3768, 3783, 3792, 3807, 3822, 3837, 3852,
-     3867, 3882, 3897, 3908, 3923, 3938, 3953, 3968, 3983, 3998,
-     4013, 4028, 4043, 4058, 4073, 4088, 4103, 4118, 4133, 4148,
-     4163, 4174, 4188, 4203, 4218, 4233, 4244, 4258, 4273, 4288,
-     4303, 4318, 4333, 4348, 4363, 4378
-    } ;
-
-static yyconst short int yy_def[787] =
-    {   0,
-      710,  710,  710,  710,  710,  710,  711,  712,  710,  710,
-      711,  710,   12,  713,  711,  711,  711,  711,   15,  711,
-      711,   15,  711,  711,   15,  711,  711,  714,  711,   15,
-       29,   29,   29,   29,   29,   29,  711,  715,  710,  716,
-      716,  710,   42,  713,  716,  716,  716,  716,   45,  716,
-      716,   45,  716,  716,   45,  716,  716,  716,   45,   58,
-       58,   58,   58,   58,   58,  716,  715,  710,  710,  711,
-      717,  718,  717,  710,  710,  710,  710,  711,  710,  711,
-      710,  719,  719,  711,  719,  710,   12,  710,  711,  713,
-      710,  710,  711,  710,  711,  710,  710,   95,  711,  711,
-
-      711,  711,  711,  711,  711,  711,  711,  711,   95,  711,
-      711,  711,  720,  714,  720,  721,  710,  711,  711,  710,
-      711,  711,  711,  711,  119,  710,  711,  123,   95,  711,
-      711,  711,  715,  722,  715,  710,  723,  716,  710,  716,
-      716,  710,  716,   42,  710,  716,  724,  716,  148,  710,
-      149,  716,  716,  716,  716,  716,  716,  716,  716,  716,
-      716,  149,  716,  716,  716,  148,  148,  710,  148,  716,
-      716,  148,  167,  710,  148,  171,  149,  716,  716,  716,
-      715,  710,  717,  725,  725,  726,  727,  717,  717,  728,
-      729,  710,  710,  710,  710,  711,  711,  710,  711,  710,
-
-      710,  710,  710,  711,  710,  710,  710,  710,  710,  710,
-      711,  710,   95,  710,  711,  710,  710,  711,  711,  711,
-      711,  711,  711,  711,  711,  218,  711,  711,  711,  730,
-      731,  732,  733,  734,  123,  710,  711,  710,  710,  711,
-      711,  711,  735,  711,  710,  710,  711,  711,  123,  711,
-      710,  711,  711,  735,  123,  244,  711,  711,  711,  710,
-      715,  710,  736,  710,  737,  716,  716,  716,  716,  738,
-      736,  739,  716,  149,  710,  716,  149,  716,  716,  716,
-      716,  716,  716,  716,  277,  716,  716,  716,  740,  716,
-      716,  710,  716,  716,  716,  290,  716,  716,  290,  291,
-
-      710,  716,  716,  290,  296,  716,  716,  716,  715,  710,
-      710,  741,  741,  742,  710,  743,  744,  744,  745,  745,
-      710,  710,  710,  711,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  711,  746,  710,  711,  710,
-      710,  711,  710,  711,  711,  711,  711,  710,  711,  747,
-      711,  711,  711,  711,  711,  748,  749,  749,  750,  750,
-      751,  752,  753,  710,  710,  710,  711,  754,  710,  710,
-      710,  710,  711,  711,  710,  710,  711,  710,  367,  754,
-      367,  711,  711,  711,  715,  710,  710,  710,  710,  710,
-      755,  710,  716,  756,  756,  716,  716,  291,  710,  716,
-
-      716,  716,  716,  716,  757,  716,  716,  716,  716,  716,
-      758,  748,  758,  716,  716,  716,  716,  414,  414,  716,
-      716,  716,  715,  710,  759,  760,  761,  762,  763,  764,
-      765,  766,  710,  710,  710,  710,  710,  710,  710,  710,
-      711,  711,  711,  710,  711,  710,  711,  711,  767,  768,
-      768,  711,  711,  711,  769,  770,  710,  771,  710,  772,
-      710,  710,  711,  710,  710,  710,  710,  710,  711,  710,
-      772,  715,  710,  710,  710,  710,  710,  773,  774,  774,
-      414,  716,  716,  716,  716,  716,  775,  767,  775,  716,
-      716,  716,  776,  716,  716,  715,  710,  710,  760,  761,
-
-      761,  762,  762,  763,  763,  764,  764,  765,  765,  766,
-      766,  710,  710,  710,  710,  710,  710,  777,  710,  710,
-      711,  711,  778,  710,  710,  710,  710,  711,  711,  711,
-      711,  710,  710,  710,  710,  710,  710,  710,  715,  710,
-      710,  710,  773,  773,  774,  774,  716,  716,  716,  716,
-      779,  716,  716,  776,  715,  710,  710,  760,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  778,  778,  710,
-      710,  710,  710,  711,  711,  711,  711,  711,  715,  710,
-      710,  774,  774,  716,  716,  779,  716,  716,  716,  715,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-
-      780,  711,  710,  710,  774,  774,  781,  716,  715,  710,
-      710,  710,  710,  710,  782,  782,  780,  617,  711,  710,
-      710,  774,  774,  781,  782,  624,  716,  715,  710,  710,
-      782,  617,  617,  710,  710,  774,  774,  783,  624,  624,
-      715,  710,  710,  782,  782,  617,  617,  710,  710,  774,
-      774,  783,  783,  624,  624,  715,  710,  710,  782,  782,
-      617,  784,  710,  785,  774,  783,  783,  624,  715,  710,
-      710,  710,  782,  784,  710,  710,  785,  710,  774,  783,
-      783,  715,  710,  710,  774,  783,  715,  710,  774,  715,
-      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
-
-      786,  786,  786,  786,  786,  786,  786,  710,  710,    0,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710
-    } ;
-
-static yyconst short int yy_nxt[4467] =
-    {   0,
-        4,    4,    4,    5,    4,    4,    6,    4,    7,    8,
-        4,    9,   10,    7,    4,    4,   11,   12,   13,   13,
-       13,    4,   14,    4,    4,    7,   15,   16,   17,    7,
-        7,   18,    7,    7,   19,   20,   21,   22,   23,   24,
-       22,   25,   26,    7,   27,    7,   28,    4,    4,   29,
-       30,   31,   32,   33,   34,   35,   36,    7,   19,   20,
-       21,   22,   37,   24,   25,   26,    7,    7,   27,    7,
-       38,    4,    4,    4,    4,    5,    4,   39,    6,   39,
-        7,    8,    4,    9,   10,   40,    4,    4,   41,   42,
-       43,   43,   43,    4,   44,    4,    4,   40,   45,   46,
-
-       47,   40,   40,   48,   40,   40,   49,   50,   51,   52,
-       53,   54,   52,   55,   56,   40,   57,   40,   28,    4,
-        4,   58,   59,   60,   61,   62,   63,   64,   65,   40,
-       49,   50,   51,   52,   66,   54,   55,   56,   40,   40,
-       57,   40,   67,    4,   68,   69,   69,   69,   69,   69,
-       72,   75,   76,   77,  102,  106,  709,   73,   73,   73,
-       73,   73,  710,   78,  122,   79,   80,  123,   68,  123,
-      122,   81,   82,   82,   83,  123,  362,  123,  103,   70,
-      107,  130,   70,  710,   84,   85,   86,   87,   87,   87,
-       87,   87,   88,  710,  710,  139,   70,   89,   70,   70,
-
-       70,   70,   70,   70,   70,   89,   70,   70,   89,   89,
-       89,   89,   89,   70,   70,   70,   70,  131,   70,  363,
-       89,   89,   89,   89,   89,   89,   89,   89,   70,   89,
-       70,   70,   89,   89,   89,   89,   70,   70,   70,   70,
-       70,   82,   92,  122,  109,  123,  389,  123,   94,   70,
-       70,   70,   70,  710,  390,  122,  123,   97,  123,  710,
-       92,   82,   91,  147,   70,  139,  132,  186,  187,  101,
-       93,  138,   94,  710,   95,   95,   95,  139,   96,  139,
-      102,   97,  108,  108,  108,  108,  108,  108,  108,  108,
-       70,  190,  662,  122,  171,  111,  112,  123,  178,  123,
-
-      153,  112,   93,  139,  103,  158,   98,   98,   98,   98,
-       98,   98,   98,   98,  710,  710,   99,  113,  114,  114,
-      114,  113,  113,  113,  113,  113,  113,  113,  113,  113,
-      115,  113,  113,  134,  710,  710,  196,  197,  113,  113,
-      113,  113,   70,   82,   82,   82,  154,  135,  135,  135,
-      135,  135,  191,  170,   70,  139,   77,   92,  171,   70,
-       91,   70,   70,  113,  117,  113,  140,  139,   79,  141,
-      138,  138,  139,   70,  142,  139,  688,  170,  159,  171,
-      205,  171,  206,  155,  162,  231,  139,  113,  113,  118,
-      138,   70,  134,  119,  119,  119,  157,  120,  170,  171,
-
-       70,  171,  136,  160,  139,  179,  193,  156,  194,  265,
-      164,  165,  154,  139,  195,  170,  165,  163,  171,  117,
-      171,  121,  205,  155,  606,  122,  123,  122,  122,  122,
-      122,  122,  122,  124,  271,  272,  170,  125,  125,  125,
-      171,  126,  171,   82,   82,   82,  330,  156,   69,   69,
-       69,   69,   69,  556,  180,  201,  331,  202,   82,   82,
-       82,  136,  678,  203,  331,  127,  218,  218,  218,  128,
-      129,  128,  129,  129,  129,  129,  129,   82,   82,   83,
-      226,  226,  226,  684,   70,  244,  244,  244,  675,  143,
-       85,   86,  144,  144,  144,  144,  144,  145,  256,  256,
-
-      256,  138,  146,  138,  138,  138,  138,  138,  138,  138,
-      146,  138,  138,  146,  146,  146,  146,  146,  138,  138,
-      138,  138,  277,  277,  277,  146,  146,  146,  146,  146,
-      146,  146,  146,  138,  146,  138,  138,  146,  146,  146,
-      146,  138,  138,  138,  138,  138,   92,  184,  311,  265,
-       91,   70,  186,  312,  134,  205,  148,  206,   94,  683,
-      149,  149,  149,  198,  150,  181,  184,   97,  135,  135,
-      135,  135,  135,  188,  188,  188,  188,  188,  189,  211,
-      211,  211,  211,  211,  211,  211,  211,   70,  148,  218,
-      218,  218,  151,  151,  151,  151,  151,  151,  151,  151,
-
-      139,   70,  152,   70,  207,  583,  208,   70,   82,  268,
-       94,   70,  209,  433,  139,  710,  139,  210,   70,   97,
-      710,  186,  312,  136,  139,   70,  710,  434,  207,   70,
-      208,  314,  315,  266,  267,  671,  209,  227,  139,   70,
-      210,  284,  139,  376,  161,  161,  161,  161,  161,  161,
-      161,  161,   70,   91,  244,  244,  244,  166,  305,  305,
-      305,  167,  167,  167,  281,  168,  212,  212,  212,  212,
-      212,  212,  212,  212,  216,  216,  216,  216,  216,  216,
-      216,  216,  277,  277,  277,  336,  336,  336,  375,  169,
-      220,   70,  377,  170,  171,  170,  170,  170,  170,  170,
-
-      170,  172,  360,  376,  139,  173,  173,  173,  623,  174,
-      217,  217,  217,  217,  217,  217,  217,  217,  235,  235,
-      235,  235,  235,  235,  235,  235,  337,  337,  337,  468,
-      286,  248,  278,  175,   70,   70,  117,  176,  177,  176,
-      177,  177,  177,  177,  177,  213,  360,  139,  139,  339,
-      339,  339,  466,  214,  243,  243,  243,  243,  243,  243,
-      243,  243,  123,  123,  123,  123,  123,  123,  123,  123,
-      340,  340,  340,  341,  341,  341,  280,  213,  469,  279,
-      117,  215,  215,  215,  215,  215,  215,  215,  215,  113,
-      114,  114,  114,  113,  113,  113,  113,  113,  113,  113,
-
-      113,  113,  113,  113,  113,  678,  348,   70,   70,   70,
-      113,  113,  113,  113,  249,  249,  249,  249,  249,  249,
-      249,  249,  254,  254,  254,  254,  254,  254,  254,  254,
-      349,  691,  134,  271,  272,  113,  117,  113,  255,  255,
-      255,  255,  255,  255,  255,  255,  135,  135,  135,  135,
-      135,  261,  314,  315,  349,  367,  367,  367,  676,  113,
-      113,  113,  232,  232,  232,  233,   70,  113,  113,  113,
-      113,  113,  113,   70,  269,  113,  113,   82,   70,  139,
-       70,   70,  113,  113,   70,  113,  139,  138,  444,  710,
-       70,  139,   70,  139,  139,  139,   91,  139,  134,   70,
-
-      136,  136,  138,  139,  675,  139,  446,  113,  117,  309,
-      139,  268,  139,   70,  273,  273,  273,  273,  273,  273,
-      273,  273,  285,  285,  285,  524,  139,  336,  336,  336,
-      446,  113,  113,  236,  138,  282,   70,  237,   70,  281,
-      287,  288,  283,  289,   70,  238,  445,  239,  524,  139,
-      240,  139,  343,  296,  296,  296,  480,  139,  240,  350,
-      343,  240,  455,  325,  240,  240,  468,  136,   70,  237,
-       70,  350,  350,  241,  242,  241,  241,  241,  241,  241,
-      241,  139,  240,  139,  343,  240,  366,  672,  240,  245,
-      308,   70,  268,  367,  367,  367,  117,  244,  244,  244,
-
-      296,  296,  296,  246,  139,   91,  247,  386,  265,  379,
-      379,  379,  387,  388,  247,  537,  265,  247,   70,  427,
-      247,  247,  290,  290,  290,  290,  290,  290,  290,  290,
-      247,  139,   91,  248,  314,  315,  279,  668,  247,  184,
-      311,  247,   91,  605,  247,  250,  188,  188,  188,  188,
-      188,  189,  479,  251,  216,  216,  216,  216,  216,  216,
-      216,  216,  243,  243,  243,  243,  243,  243,  243,  243,
-      232,  232,  232,  233,  381,  381,  381,  250,  403,   70,
-      428,  252,  253,  252,  252,  252,  252,  252,  252,  213,
-      545,  668,  139,  256,  256,  256,  265,  214,  171,  171,
-
-      171,  171,  171,  171,  171,  171,  299,  299,  299,  299,
-      299,  299,  299,  299,  376,  366,  117,  339,  339,  339,
-      663,  213,  379,  379,  379,  215,  257,  215,  215,  258,
-      215,  215,  215,  274,   91,  362,  662,  410,  396,  396,
-      396,  275,  254,  254,  254,  254,  254,  254,  254,  254,
-      304,  304,  304,  304,  304,  304,  304,  304,  419,  419,
-      419,  329,  447,  377,  375,  274,   70,  467,  661,  276,
-      276,  276,  276,  276,  276,  276,  276,  236,  363,  139,
-       70,  291,  522,   70,   70,  393,  448,  394,  478,  292,
-      478,  239,  375,  139,  293,  395,  139,  139,   70,  339,
-
-      339,  339,  293,  407,   91,  293,  522,  370,  293,  293,
-      374,  139,   70,  291,  440,  440,  440,  294,  295,  294,
-      294,  294,  294,  294,  294,  139,  293,  401,  406,  293,
-      184,  311,  293,   70,  245,  248,   70,  316,  316,  316,
-      316,  316,  296,  296,  296,   70,  139,   70,  246,  139,
-       70,  297,  366,  376,  396,  396,  396,   91,  139,  297,
-      139,  408,  297,  139,  637,  297,  297,  338,  338,  338,
-      338,  338,  338,  338,  338,  297,  348,  364,  298,  402,
-       70,   70,  375,  297,  512,  364,  297,  556,  364,  297,
-      300,  364,  364,  139,  139,  557,  513,  245,  301,  429,
-
-      404,  364,  417,   70,   91,  368,  368,  368,   70,  364,
-       91,  246,  364,  526,  661,  364,  139,  397,  397,  397,
-      546,  139,  300,   70,  404,  298,  302,  303,  302,  302,
-      302,  302,  302,  302,  274,  455,  139,  527,  305,  305,
-      305,  370,  275,  241,  241,  241,  241,  241,  241,  241,
-      241,  365,  365,  365,  365,  365,  365,  365,  365,  636,
-      430,  441,  441,  441,  658,  371,  274,  650,  405,  532,
-      276,  306,  276,  276,  307,  276,  276,  276,  342,  372,
-      405,  405,  460,  460,  460,  657,  343,  252,  252,  252,
-      252,  252,  252,  252,  252,  378,  378,  378,  378,  378,
-
-      378,  378,  378,  471,  471,  471,  518,  518,  518,  465,
-      342,  456,  456,  456,  344,  344,  344,  344,  344,  344,
-      344,  344,  356,  356,  236,  356,  356,  356,  356,  356,
-      563,  356,  356,  356,  356,   70,  356,  356,  467,  369,
-      422,  364,  564,  356,  356,  356,  356,  369,  139,  364,
-      369,   70,  364,  369,  369,  364,  364,  457,  245,   70,
-      414,  414,  414,  369,  139,  364,  461,  268,  356,  356,
-      356,  369,  139,  364,  369,  369,  364,  369,   70,  364,
-      462,  465,  655,  369,  654,  265,  369,  358,  649,  369,
-      369,  139,  356,  356,  113,  232,  232,  232,  233,  369,
-
-      113,  113,  113,  113,  113,  113,  134,  369,  113,  113,
-      369,  245,  134,  369,  648,  113,  113,  423,  113,  380,
-      380,  380,  544,  392,  544,  246,  385,  385,  385,  385,
-      385,  338,  338,  338,  338,  338,  338,  338,  338,   70,
-      113,  117,  302,  302,  302,  302,  302,  302,  302,  302,
-      431,  431,  139,  461,  331,  370,  647,   91,   70,   70,
-      646,  366,  331,   70,  113,  113,  371,  462,  414,  414,
-      414,  139,  139,  371,   77,  136,  139,  576,   91,  665,
-      372,  136,   70,  373,  473,  265,   79,  372,  643,  577,
-      409,  373,   81,  265,  373,  139,   70,  373,  373,  294,
-
-      294,  294,  294,  294,  294,  294,  294,  373,  582,  139,
-      374,  432,  432,  482,   70,  373,   70,  465,  373,   91,
-       91,  373,  342,  418,  418,  418,  268,  139,  642,  139,
-      343,  365,  365,  365,  365,  365,  365,  365,  365,  378,
-      378,  378,  378,  378,  378,  378,  378,  468,  184,  498,
-      441,  441,  441,  499,  342,   70,  635,   70,  344,  382,
-      344,  344,  383,  344,  344,  344,  398,   70,  139,  366,
-      139,  622,  679,   70,  399,  474,  418,  418,  418,   92,
-      139,   70,   70,  375,   70,  475,  139,   86,  634,  630,
-      397,  397,  397,   88,  139,  139,  469,  139,  398,   70,
-
-      491,  536,  400,  400,  400,  400,  400,  400,  400,  400,
-      356,  356,  139,  356,  356,  356,  356,  356,  357,  356,
-      356,  356,  356,  483,  356,  356,  298,  492,   91,   70,
-      134,  412,  356,  356,  356,  376,  184,  311,  397,  397,
-      397,  496,  139,  426,  426,  426,  426,  426,  344,  344,
-      344,  344,  344,  344,  344,  344,  356,  356,  356,  439,
-      439,  439,  439,  439,  439,  439,  439,  400,  400,  400,
-      400,  400,  400,  400,  400,  413,  134,  613,  464,  664,
-      356,  356,   70,  245,  417,  444,  464,  519,  539,  464,
-       70,  444,  464,  464,   70,  139,   70,  246,  629,  136,
-
-      297,  520,  464,  139,   70,  371,   91,  139,  297,  139,
-      464,  297,  467,  464,  297,  297,  464,  139,  134,  441,
-      441,  441,  464,  556,  297,  621,  620,  298,  485,  555,
-      464,   70,  297,  464,   70,  297,  464,  464,  297,  371,
-      481,  481,  481,  484,  139,  540,  464,  139,   70,   70,
-      467,  585,  486,  372,  464,  374,  415,  464,  265,  134,
-      464,  139,  139,  689,  415,   70,   70,  415,  619,   70,
-      415,  415,  468,  472,  472,  472,  472,  472,  139,  139,
-      415,  490,  139,  416,  456,  456,  456,  136,  415,   70,
-      201,  415,  202,  416,  415,  398,  615,   91,  203,   70,
-
-      615,  553,  139,  399,  439,  439,  439,  439,  439,  439,
-      439,  439,  139,   70,  550,  467,   70,  548,  567,  268,
-      549,  495,  481,  481,  481,  523,  139,  398,  136,  139,
-      457,  400,  420,  400,  400,  421,  400,  400,  400,  449,
-      449,  548,  449,  449,  449,  449,  449,   92,  449,  449,
-      449,  449,   70,  449,  449,  631,  651,  524,  416,   70,
-      449,  449,  449,  449,   70,  139,  525,  533,  533,  533,
-      468,   70,  139,  481,  481,  481,  614,  139,   70,  631,
-      524,  533,  533,  533,  139,  449,  449,  449,  184,  311,
-       70,  139,  451,  584,  612,  558,  558,  558,  558,  558,
-
-      544,  392,  544,  139,  451,  451,  613,  596,  693,  449,
-      449,  356,  356,  534,  356,  356,  356,  356,  356,  495,
-      356,  356,  356,  356,  552,  356,  356,  534,  535,   91,
-      566,  158,  356,  356,  356,  356,  535,   70,  566,  535,
-       70,  566,  535,  535,  566,  566,  611,  560,   70,  610,
-      139,   70,  535,  139,  566,  134,  134,  356,  356,  356,
-      535,  139,  566,  535,  139,  566,  535,  590,  566,  579,
-      579,  579,  579,  579,  607,  392,  631,  260,  589,  632,
-      664,  356,  356,  356,  356,  461,  356,  356,  356,  356,
-      356,  639,  356,  356,  356,  356,  587,  356,  356,   70,
-
-      631,   70,  535,  633,  356,  356,  356,  356,  588,  670,
-      535,  519,  139,  535,  139,  640,  535,  535,   91,  693,
-      604,  671,  134,  603,  136,  136,  535,  602,  566,  356,
-      356,  356,  134,  609,  535,  644,  566,  535,  577,  566,
-      535,  631,  566,  566,   70,  588,  579,  579,  579,  579,
-      579,  134,  566,  356,  356,  461,  607,  139,   70,  645,
-      566,  638,  628,  566,  392,  631,  566,  184,  498,  462,
-      601,  139,  463,  685,  558,  558,  558,  558,  558,  134,
-      463,  134,  673,  463,  631,  631,  463,  463,  260,  631,
-      641,  136,  656,  653,  631,  134,  463,  631,  392,  659,
-
-      392,  540,  608,  627,  463,  392,  669,  463,  631,  631,
-      463,  371,  392,  631,  660,  134,  601,  653,  631,  673,
-      136,  631,  600,  666,  599,  372,  682,  653,  373,  653,
-      631,  598,  686,  134,  653,  693,  373,  597,  569,  373,
-      392,  653,  373,  373,  687,  569,  680,  667,  136,  567,
-      136,  653,  373,  653,  631,  374,  392,  392,  653,  596,
-      373,  564,  595,  373,  136,  653,  373,  449,  449,  653,
-      449,  449,  449,  449,  449,  450,  449,  449,  449,  449,
-      594,  449,  449,  134,  136,  653,  653,  593,  488,  449,
-      449,  449,  592,  653,  690,  693,  591,  693,  681,  392,
-
-      693,  693,  136,  392,  708,  693,  694,  686,  695,  653,
-      653,  696,  697,  449,  449,  449,  698,  392,  581,  693,
-      489,  580,  262,  693,  693,  693,  537,  536,  578,  575,
-      699,  574,  489,  489,  700,  701,  702,  449,  449,  356,
-      356,  573,  356,  356,  356,  356,  356,  357,  356,  356,
-      356,  356,  136,  356,  356,  572,  571,  570,  569,  105,
-      412,  356,  356,  356,  260,  567,  260,  693,  693,  260,
-      260,  693,  693,  693,  260,  565,  562,  561,  703,  704,
-      560,  559,  705,  706,  707,  356,  356,  356,  260,  511,
-      511,  509,  260,  260,  260,  509,  507,  507,  505,  505,
-
-      503,  503,  501,  501,  392,  551,  542,  541,  205,  356,
-      356,  356,  356,  198,  356,  356,  356,  356,  356,  357,
-      356,  356,  356,  356,  466,  356,  356,  538,  465,  536,
-      459,   92,  412,  356,  356,  356,  260,  260,  531,  530,
-      260,  260,  260,  529,  528,  444,   92,  517,  516,  515,
-      514,  434,  511,  509,  507,  505,  503,  356,  356,  356,
-      501,  187,  497,  493,  392,  477,  476,   74,  199,  470,
-      370,  366,  459,  454,  453,  452,  199,  443,  442,  438,
-      437,  356,  356,   70,  461,  436,  435,  205,  205,  199,
-      198,  198,  198,  320,  320,  318,  139,  318,  462,  187,
-
-      424,  494,  264,  392,  264,  384,  366,  355,  354,  494,
-      353,  352,  494,  351,  347,  494,  494,  346,  345,  335,
-      334,  333,  332,  329,  329,  494,  328,  327,  326,  325,
-      325,  324,  323,  494,  322,  321,  494,  320,  318,  494,
-      371,  311,  310,  265,  264,  262,  260,  199,  259,  117,
-      230,  229,  228,  199,  372,  225,  224,  415,  223,  222,
-      222,  221,  220,  219,   91,  415,  205,  204,  415,  198,
-      199,  415,  415,  198,  192,  184,  182,  137,  110,  105,
-      104,  415,  101,  100,  416,   91,   74,  710,  710,  415,
-      710,  710,  415,  710,  710,  415,  519,  710,  710,  710,
-
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      520,  710,  710,  521,  710,  710,  710,  710,  710,  710,
-      710,  521,  710,  710,  521,  710,  710,  521,  521,  710,
-      710,  710,  710,  710,  710,  710,  710,  521,  710,  710,
-      710,  710,  710,  710,  710,  521,  710,  710,  521,  710,
-      710,  521,  449,  449,  710,  449,  449,  449,  449,  449,
-      710,  449,  449,  449,  449,  710,  449,  449,  710,  710,
-      710,  710,  710,  449,  449,  449,  449,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  449,  449,
-
-      449,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  449,  449,  449,  449,  710,  449,  449,  449,
-      449,  449,  710,  449,  449,  449,  449,  710,  449,  449,
-      710,  710,  710,  710,  710,  449,  449,  449,  449,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      449,  449,  449,  710,  710,  710,  710,  451,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  451,
-      451,  710,  710,  710,  449,  449,  519,  710,  710,  710,
-
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      520,  710,  710,  547,  710,  710,  710,  710,  710,  710,
-      710,  547,  710,  710,  547,  710,  710,  547,  547,  710,
-      710,  710,  710,  710,  710,  710,  710,  547,  710,  710,
-      710,  710,  710,  710,  710,  547,  710,  710,  547,  710,
-      710,  547,  449,  449,  710,  449,  449,  449,  449,  449,
-      450,  449,  449,  449,  449,  710,  449,  449,  710,  710,
-      710,  710,  710,  488,  449,  449,  449,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  449,  449,
-
-      449,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  449,  449,  449,  449,  710,  449,  449,  449,
-      449,  449,  450,  449,  449,  449,  449,  710,  449,  449,
-      710,  710,  710,  710,  710,  488,  449,  449,  449,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      449,  449,  449,  710,  710,  710,  710,  489,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  489,
-      489,  710,  710,  710,  449,  449,  616,  616,  710,  616,
-
-      616,  616,  616,  616,  710,  616,  616,  616,  616,  710,
-      616,  616,  710,  710,  710,  710,  710,  616,  616,  616,
-      616,  710,  710,  710,  710,  710,  710,  618,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  616,  616,  616,  710,  710,  710,  710,  710,
-      710,  618,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  616,  616,  616,  616,
-      710,  616,  616,  616,  616,  616,  617,  616,  616,  616,
-      616,  710,  616,  616,  710,  710,  710,  710,  710,  625,
-      616,  616,  616,  710,  710,  710,  710,  710,  710,  626,
-
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  616,  616,  616,  710,  710,  710,
-      710,  710,  710,  626,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  616,  616,
-      616,  616,  710,  616,  616,  616,  616,  616,  710,  616,
-      616,  616,  616,  710,  616,  616,  710,  710,  710,  710,
-      710,  616,  616,  616,  616,  710,  710,  710,  710,  710,
-      710,  618,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  616,  616,  616,  710,
-      710,  710,  710,  710,  710,  618,  710,  710,  710,  710,
-
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      616,  616,  616,  616,  710,  616,  616,  616,  616,  616,
-      617,  616,  616,  616,  616,  710,  616,  616,  710,  710,
-      710,  710,  710,  625,  616,  616,  616,  710,  710,  710,
-      710,  710,  710,  626,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  616,  616,
-      616,  710,  710,  710,  710,  710,  710,  626,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  616,  616,   70,  710,  710,   70,   70,  710,
-      710,   70,   70,   70,   70,   70,   71,   71,   71,   71,
-
-       71,  710,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   90,   90,   90,   90,   90,   90,   90,   90,   90,
-       90,   90,   90,   90,   90,   90,  116,  116,  116,  116,
-      116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
-      116,  133,  133,  133,  133,  133,  133,  133,  133,  133,
-      133,  133,  133,  133,  133,  133,  138,  710,  710,  138,
-      138,  138,  710,  138,  138,  138,  138,  138,  183,  183,
-      183,  183,  183,  710,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  200,  200,
-
-      710,  710,  710,  710,  710,  710,  710,  200,  200,  200,
-      200,  200,  113,  113,  113,  113,  113,  113,  113,  113,
-      113,  113,  113,  113,  113,  113,  113,  234,  234,  234,
-      234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
-      234,  234,  134,  134,  134,  134,  134,  134,  134,  134,
-      134,  134,  134,  134,  134,  134,  134,  263,  263,  263,
-      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
-      263,  263,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-
-      185,  185,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  317,  317,  710,  317,  317,  317,  317,  317,
-      317,  317,  317,  317,  317,  317,  317,  319,  319,  710,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  357,  357,  710,  357,  357,  357,  357,  357,
-      357,  357,  357,  357,  357,  357,  357,  359,  359,  359,
-      359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
-      359,  359,  113,  113,  113,  113,  113,  113,  113,  113,
-
-      113,  113,  113,  113,  113,  113,  113,  361,  361,  361,
-      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
-      361,  361,  234,  234,  234,  234,  234,  234,  234,  234,
-      234,  234,  234,  234,  234,  234,  234,  369,  710,  710,
-      369,  710,  369,  369,  710,  710,  369,  369,  263,  263,
-      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
-      263,  263,  263,  391,  391,  391,  391,  391,  391,  391,
-      391,  391,  391,  391,  391,  391,  391,  391,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,   90,   90,   90,   90,   90,   90,   90,
-
-       90,   90,   90,   90,   90,   90,   90,   90,  411,  411,
-      710,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  425,  425,
-      425,  425,  710,  425,  425,  425,  425,  425,  425,  425,
-      425,  425,  425,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  183,  183,  183,  183,  183,  317,  317,
-      710,  317,  317,  317,  317,  317,  317,  317,  317,  317,
-      317,  317,  317,  319,  319,  710,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  439,  710,
-
-      439,  710,  710,  710,  439,  439,  439,  450,  450,  710,
-      450,  450,  450,  450,  450,  450,  450,  450,  450,  450,
-      450,  450,  356,  356,  710,  356,  356,  356,  356,  356,
-      356,  356,  356,  356,  356,  356,  356,  357,  357,  710,
-      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
-      357,  357,  359,  359,  359,  359,  359,  359,  359,  359,
-      359,  359,  359,  359,  359,  359,  359,  361,  361,  361,
-      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
-      361,  361,  113,  113,  113,  113,  113,  113,  113,  113,
-      113,  113,  113,  113,  113,  113,  113,  458,  458,  458,
-
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  464,  710,  710,  710,  710,  464,  464,  710,
-      710,  464,  464,  391,  391,  391,  391,  391,  391,  391,
-      391,  391,  391,  391,  391,  391,  391,  391,   90,   90,
-       90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
-       90,   90,   90,  487,  487,  710,  487,  487,  487,  487,
-      487,  487,  487,  487,  487,  487,  487,  487,  411,  411,
-      710,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  425,  425,  425,  425,  710,  425,  425,
-      425,  425,  425,  425,  425,  425,  425,  425,  183,  183,
-
-      183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
-      183,  183,  183,  500,  500,  710,  500,  500,  500,  500,
-      500,  500,  500,  500,  500,  500,  500,  500,  502,  502,
-      710,  502,  502,  502,  502,  502,  502,  502,  502,  502,
-      502,  502,  502,  504,  504,  710,  504,  504,  504,  504,
-      504,  504,  504,  504,  504,  504,  504,  504,  506,  506,
-      710,  506,  506,  506,  506,  506,  506,  506,  506,  506,
-      506,  506,  506,  508,  508,  710,  508,  508,  508,  508,
-      508,  508,  508,  508,  508,  508,  508,  508,  510,  510,
-      710,  510,  510,  510,  510,  510,  510,  510,  510,  510,
-
-      510,  510,  510,  449,  449,  710,  449,  449,  449,  449,
-      449,  449,  449,  449,  449,  449,  449,  449,  450,  450,
-      710,  450,  450,  450,  450,  450,  450,  450,  450,  450,
-      450,  450,  450,  359,  359,  359,  359,  359,  359,  359,
-      359,  359,  359,  359,  359,  359,  359,  359,  113,  113,
-      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
-      113,  113,  113,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  535,  710,
-      710,  710,  710,  535,  535,  710,  710,  535,  543,  543,
-      543,  543,  543,  543,  543,  543,  543,  543,  543,  543,
-
-      543,  543,  543,   90,   90,   90,   90,   90,   90,   90,
-       90,   90,   90,   90,   90,   90,   90,   90,  487,  487,
-      710,  487,  487,  487,  487,  487,  487,  487,  487,  487,
-      487,  487,  487,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  566,  710,
-      710,  710,  710,  566,  566,  710,  710,  566,  568,  568,
-      710,  568,  568,  568,  568,  568,  568,  568,  568,  568,
-      568,  568,  568,  586,  586,  586,  586,  586,  586,  586,
-      586,  586,  586,  586,  586,  586,  586,  586,  617,  617,
-      710,  617,  617,  617,  617,  617,  617,  617,  617,  617,
-
-      617,  617,  617,  624,  624,  710,  624,  624,  624,  624,
-      624,  624,  624,  624,  624,  624,  624,  624,  616,  616,
-      710,  616,  616,  616,  616,  616,  616,  616,  616,  616,
-      616,  616,  616,  652,  652,  652,  652,  652,  652,  652,
-      652,  652,  652,  652,  652,  652,  652,  652,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  677,  677,  677,  677,  677,  677,  677,
-      677,  677,  677,  677,  677,  677,  677,  677,  692,  692,
-      692,  692,  692,  692,  692,  692,  692,  692,  692,  692,
-      692,  692,  692,    3,  710,  710,  710,  710,  710,  710,
-
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710
-    } ;
-
-static yyconst short int yy_chk[4467] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    2,    2,    2,    2,    2,    2,    2,    2,
-        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-
-        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-        2,    2,    2,    2,    5,    6,    6,    6,    6,    6,
-        8,   10,   10,   11,   18,   23,  708,    8,    8,    8,
-        8,    8,   19,   11,   34,   11,   11,   34,    5,   34,
-       36,   11,   12,   12,   12,   36,  233,   31,   18,   12,
-       23,   31,   40,   19,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   22,   25,   40,   12,   12,   12,   12,
-
-       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   37,   19,  233,
-       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   13,   27,   33,   25,   33,  264,   33,   24,   22,
-       25,   13,   46,   13,  264,   32,   32,   24,   32,   13,
-       15,   43,   44,   44,   51,   46,   37,   72,   72,   32,
-       15,   43,   15,   43,   15,   15,   15,   51,   15,   43,
-       35,   15,   24,   24,   24,   24,   24,   24,   24,   24,
-       47,   74,  688,   35,   60,   27,   27,   35,   60,   35,
-
-       46,   27,   15,   47,   35,   51,   15,   15,   15,   15,
-       15,   15,   15,   15,   49,   52,   15,   28,   28,   28,
-       28,   28,   28,   28,   28,   28,   28,   28,   28,   28,
-       28,   28,   28,   38,   55,   49,   78,   78,   28,   28,
-       28,   28,   50,   82,   82,   82,   47,   38,   38,   38,
-       38,   38,   74,   65,   48,   50,   41,   57,   65,   56,
-      583,   41,   57,   28,   28,   28,   41,   48,   41,   41,
-       49,   52,   56,   53,   41,   57,  684,   62,   53,   62,
-       86,   62,   86,   48,   55,  115,   53,   28,   28,   29,
-       55,  138,  133,   29,   29,   29,   50,   29,   61,   61,
-
-       66,   61,   38,   53,  138,   66,   77,   48,   77,  145,
-       57,   57,   61,   66,   77,   63,   57,   56,   63,  115,
-       63,   29,  145,   64,  583,   29,   29,   29,   29,   29,
-       29,   29,   29,   30,  147,  147,   64,   30,   30,   30,
-       64,   30,   64,   83,   83,   83,  206,   64,   69,   69,
-       69,   69,   69,  683,   66,   83,  206,   83,   85,   85,
-       85,  133,  677,   83,  206,   30,   98,   98,   98,   30,
-       30,   30,   30,   30,   30,   30,   30,   42,   42,   42,
-      108,  108,  108,  676,   42,  122,  122,  122,  674,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,  129,  129,
-
-      129,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,  151,  151,  151,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   45,  183,  183,  142,
-      546,   45,  184,  184,   67,  327,   45,  327,   45,  672,
-       45,   45,   45,  142,   45,   67,   73,   45,   67,   67,
-       67,   67,   67,   73,   73,   73,   73,   73,   73,   93,
-       93,   93,   93,   93,   93,   93,   93,  146,   45,  109,
-      109,  109,   45,   45,   45,   45,   45,   45,   45,   45,
-
-      146,  141,   45,   54,   92,  546,   92,  213,   87,  141,
-       54,  159,   92,  331,  141,  213,   54,   92,   87,   54,
-       87,  185,  185,   67,  159,  140,   87,  331,   92,  155,
-       92,  187,  187,  140,  140,  670,   92,  109,  140,  213,
-       92,  159,  155,  248,   54,   54,   54,   54,   54,   54,
-       54,   54,   58,  606,  130,  130,  130,   58,  177,  177,
-      177,   58,   58,   58,  155,   58,   94,   94,   94,   94,
-       94,   94,   94,   94,   96,   96,   96,   96,   96,   96,
-       96,   96,  162,  162,  162,  211,  211,  211,  247,   58,
-      130,  152,  248,   58,   58,   58,   58,   58,   58,   58,
-
-       58,   59,  231,  370,  152,   59,   59,   59,  606,   59,
-       97,   97,   97,   97,   97,   97,   97,   97,  118,  118,
-      118,  118,  118,  118,  118,  118,  212,  212,  212,  374,
-      162,  247,  152,   59,  153,  154,  231,   59,   59,   59,
-       59,   59,   59,   59,   59,   95,  359,  153,  154,  215,
-      215,  215,  370,   95,  120,  120,  120,  120,  120,  120,
-      120,  120,  121,  121,  121,  121,  121,  121,  121,  121,
-      216,  216,  216,  217,  217,  217,  154,   95,  374,  153,
-      359,   95,   95,   95,   95,   95,   95,   95,   95,  114,
-      114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
-
-      114,  114,  114,  114,  114,  664,  222,  235,  235,  235,
-      114,  114,  114,  114,  124,  124,  124,  124,  124,  124,
-      124,  124,  126,  126,  126,  126,  126,  126,  126,  126,
-      222,  690,  135,  270,  270,  114,  114,  114,  127,  127,
-      127,  127,  127,  127,  127,  127,  135,  135,  135,  135,
-      135,  135,  312,  312,  222,  241,  241,  241,  663,  114,
-      114,  116,  116,  116,  116,  116,  143,  116,  116,  116,
-      116,  116,  116,  148,  143,  116,  116,  144,  157,  143,
-      156,  160,  116,  116,  158,  116,  148,  144,  347,  144,
-      165,  157,  164,  156,  160,  144,  395,  158,  181,  163,
-
-      690,  135,  274,  165,  662,  164,  348,  116,  116,  181,
-      274,  160,  163,  161,  148,  148,  148,  148,  148,  148,
-      148,  148,  161,  161,  161,  598,  161,  249,  249,  249,
-      348,  116,  116,  119,  274,  157,  179,  119,  180,  156,
-      163,  164,  158,  165,  170,  119,  347,  119,  598,  179,
-      119,  180,  337,  170,  170,  170,  395,  170,  119,  223,
-      337,  119,  360,  267,  119,  119,  465,  181,  267,  119,
-      268,  223,  223,  119,  119,  119,  119,  119,  119,  119,
-      119,  267,  119,  268,  337,  119,  242,  658,  119,  123,
-      179,  178,  180,  242,  242,  242,  360,  123,  123,  123,
-
-      178,  178,  178,  123,  178,  394,  123,  262,  150,  252,
-      252,  252,  262,  262,  123,  465,  168,  123,  280,  325,
-      123,  123,  166,  166,  166,  166,  166,  166,  166,  166,
-      123,  280,  479,  123,  313,  313,  178,  655,  123,  188,
-      188,  123,  582,  582,  123,  125,  188,  188,  188,  188,
-      188,  188,  394,  125,  150,  150,  150,  150,  150,  150,
-      150,  150,  168,  168,  168,  168,  168,  168,  168,  168,
-      232,  232,  232,  232,  255,  255,  255,  125,  280,  288,
-      325,  125,  125,  125,  125,  125,  125,  125,  125,  128,
-      479,  654,  288,  128,  128,  128,  174,  128,  169,  169,
-
-      169,  169,  169,  169,  169,  169,  172,  172,  172,  172,
-      172,  172,  172,  172,  258,  253,  232,  258,  258,  258,
-      649,  128,  253,  253,  253,  128,  128,  128,  128,  128,
-      128,  128,  128,  149,  272,  361,  648,  288,  299,  299,
-      299,  149,  174,  174,  174,  174,  174,  174,  174,  174,
-      175,  175,  175,  175,  175,  175,  175,  175,  304,  304,
-      304,  269,  349,  258,  369,  149,  269,  373,  647,  149,
-      149,  149,  149,  149,  149,  149,  149,  167,  361,  269,
-      266,  167,  443,  283,  278,  266,  349,  272,  392,  167,
-      392,  167,  257,  266,  167,  272,  283,  278,  284,  257,
-
-      257,  257,  167,  284,  623,  167,  443,  369,  167,  167,
-      373,  284,  286,  167,  338,  338,  338,  167,  167,  167,
-      167,  167,  167,  167,  167,  286,  167,  278,  283,  167,
-      189,  189,  167,  171,  171,  257,  279,  189,  189,  189,
-      189,  189,  171,  171,  171,  273,  171,  298,  171,  279,
-      293,  171,  293,  298,  273,  273,  273,  480,  273,  171,
-      298,  286,  171,  293,  623,  171,  171,  214,  214,  214,
-      214,  214,  214,  214,  214,  171,  281,  236,  171,  279,
-      297,  281,  297,  171,  434,  236,  171,  497,  236,  171,
-      173,  236,  236,  297,  281,  497,  434,  243,  173,  329,
-
-      281,  236,  298,  396,  622,  243,  243,  243,  276,  236,
-      636,  243,  236,  446,  646,  236,  396,  276,  276,  276,
-      480,  276,  173,  282,  281,  297,  173,  173,  173,  173,
-      173,  173,  173,  173,  176,  455,  282,  446,  176,  176,
-      176,  243,  176,  237,  237,  237,  237,  237,  237,  237,
-      237,  238,  238,  238,  238,  238,  238,  238,  238,  622,
-      329,  344,  344,  344,  643,  368,  176,  636,  282,  455,
-      176,  176,  176,  176,  176,  176,  176,  176,  218,  368,
-      282,  282,  365,  365,  365,  642,  218,  250,  250,  250,
-      250,  250,  250,  250,  250,  251,  251,  251,  251,  251,
-
-      251,  251,  251,  378,  378,  378,  439,  439,  439,  368,
-      218,  362,  362,  362,  218,  218,  218,  218,  218,  218,
-      218,  218,  230,  230,  239,  230,  230,  230,  230,  230,
-      516,  230,  230,  230,  230,  308,  230,  230,  464,  245,
-      308,  239,  516,  230,  230,  230,  230,  245,  308,  239,
-      245,  294,  239,  245,  245,  239,  239,  362,  246,  393,
-      294,  294,  294,  245,  294,  239,  460,  393,  230,  230,
-      230,  245,  393,  239,  245,  246,  239,  245,  397,  239,
-      460,  464,  640,  246,  639,  275,  246,  230,  635,  246,
-      246,  397,  230,  230,  234,  234,  234,  234,  234,  246,
-
-      234,  234,  234,  234,  234,  234,  309,  246,  234,  234,
-      246,  254,  261,  246,  634,  234,  234,  309,  234,  254,
-      254,  254,  478,  478,  478,  254,  261,  261,  261,  261,
-      261,  275,  275,  275,  275,  275,  275,  275,  275,  287,
-      234,  234,  300,  300,  300,  300,  300,  300,  300,  300,
-      330,  593,  287,  471,  330,  254,  633,  545,  291,  295,
-      632,  295,  330,  401,  234,  234,  244,  471,  295,  295,
-      295,  291,  295,  380,  387,  309,  401,  530,  651,  651,
-      244,  261,  406,  244,  387,  292,  387,  380,  630,  530,
-      287,  244,  387,  301,  244,  406,  407,  244,  244,  291,
-
-      291,  291,  291,  291,  291,  291,  291,  244,  545,  407,
-      244,  330,  593,  401,  302,  244,  417,  380,  244,  605,
-      665,  244,  256,  302,  302,  302,  407,  302,  629,  417,
-      256,  292,  292,  292,  292,  292,  292,  292,  292,  301,
-      301,  301,  301,  301,  301,  301,  301,  383,  426,  426,
-      383,  383,  383,  426,  256,  409,  621,  495,  256,  256,
-      256,  256,  256,  256,  256,  256,  277,  303,  409,  303,
-      495,  605,  665,  402,  277,  388,  303,  303,  303,  482,
-      303,  306,  410,  306,  482,  388,  402,  388,  620,  614,
-      306,  306,  306,  388,  306,  410,  383,  482,  277,  494,
-
-      409,  494,  277,  277,  277,  277,  277,  277,  277,  277,
-      289,  289,  494,  289,  289,  289,  289,  289,  289,  289,
-      289,  289,  289,  402,  289,  289,  306,  410,  650,  307,
-      423,  289,  289,  289,  289,  307,  316,  316,  307,  307,
-      307,  423,  307,  316,  316,  316,  316,  316,  342,  342,
-      342,  342,  342,  342,  342,  342,  289,  289,  289,  343,
-      343,  343,  343,  343,  343,  343,  343,  398,  398,  398,
-      398,  398,  398,  398,  398,  289,  472,  612,  371,  650,
-      289,  289,  290,  290,  307,  403,  371,  518,  472,  371,
-      403,  484,  371,  371,  550,  290,  484,  290,  611,  423,
-
-      290,  518,  371,  403,  404,  372,  685,  550,  290,  484,
-      371,  290,  382,  371,  290,  290,  371,  404,  496,  382,
-      382,  382,  372,  610,  290,  604,  603,  290,  404,  496,
-      372,  400,  290,  372,  408,  290,  372,  372,  290,  296,
-      400,  400,  400,  403,  400,  472,  372,  408,  415,  491,
-      415,  550,  404,  296,  372,  382,  296,  372,  399,  385,
-      372,  415,  491,  685,  296,  422,  416,  296,  602,  486,
-      296,  296,  416,  385,  385,  385,  385,  385,  422,  416,
-      296,  408,  486,  296,  456,  456,  456,  496,  296,  483,
-      474,  296,  474,  415,  296,  305,  600,  637,  474,  485,
-
-      599,  491,  483,  305,  399,  399,  399,  399,  399,  399,
-      399,  399,  485,  420,  486,  420,  547,  483,  547,  422,
-      485,  416,  420,  420,  420,  444,  420,  305,  385,  547,
-      456,  305,  305,  305,  305,  305,  305,  305,  305,  350,
-      350,  483,  350,  350,  350,  350,  350,  492,  350,  350,
-      350,  350,  492,  350,  350,  615,  637,  444,  420,  549,
-      350,  350,  350,  350,  421,  492,  444,  459,  459,  459,
-      421,  490,  549,  421,  421,  421,  597,  421,  588,  615,
-      444,  533,  533,  533,  490,  350,  350,  350,  499,  499,
-      548,  588,  350,  549,  596,  499,  499,  499,  499,  499,
-
-      544,  544,  544,  548,  350,  350,  596,  595,  691,  350,
-      350,  357,  357,  459,  357,  357,  357,  357,  357,  421,
-      357,  357,  357,  357,  490,  357,  357,  533,  461,  689,
-      519,  548,  357,  357,  357,  357,  461,  553,  519,  461,
-      584,  519,  461,  461,  519,  519,  594,  592,  627,  591,
-      553,  552,  461,  584,  519,  539,  555,  357,  357,  357,
-      461,  627,  519,  461,  552,  519,  461,  555,  519,  539,
-      539,  539,  539,  539,  584,  586,  616,  691,  553,  618,
-      689,  357,  357,  358,  358,  462,  358,  358,  358,  358,
-      358,  626,  358,  358,  358,  358,  552,  358,  358,  585,
-
-      616,  587,  462,  618,  358,  358,  358,  358,  552,  657,
-      462,  520,  585,  462,  587,  626,  462,  462,  679,  692,
-      581,  657,  590,  580,  539,  555,  462,  578,  520,  358,
-      358,  358,  579,  590,  462,  631,  520,  462,  576,  520,
-      462,  631,  520,  520,  589,  587,  579,  579,  579,  579,
-      579,  609,  520,  358,  358,  367,  585,  589,  608,  631,
-      520,  625,  609,  520,  638,  631,  520,  558,  558,  367,
-      575,  608,  367,  679,  558,  558,  558,  558,  558,  628,
-      367,  641,  659,  367,  659,  645,  367,  367,  692,  625,
-      628,  590,  641,  638,  644,  656,  367,  660,  652,  644,
-
-      653,  579,  589,  608,  367,  680,  656,  367,  659,  645,
-      367,  381,  666,  625,  645,  669,  574,  638,  644,  660,
-      609,  660,  573,  653,  572,  381,  669,  652,  381,  653,
-      673,  571,  680,  682,  680,  707,  381,  570,  569,  381,
-      667,  666,  381,  381,  682,  568,  666,  653,  628,  566,
-      641,  652,  381,  653,  673,  381,  681,  686,  680,  565,
-      381,  563,  562,  381,  656,  666,  381,  405,  405,  667,
-      405,  405,  405,  405,  405,  405,  405,  405,  405,  405,
-      561,  405,  405,  687,  669,  681,  686,  560,  405,  405,
-      405,  405,  559,  667,  687,  693,  557,  694,  667,  554,
-
-      695,  696,  682,  551,  707,  697,  693,  681,  694,  681,
-      686,  695,  696,  405,  405,  405,  697,  543,  542,  698,
-      405,  541,  540,  699,  700,  701,  538,  535,  531,  529,
-      698,  528,  405,  405,  699,  700,  701,  405,  405,  411,
-      411,  527,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  687,  411,  411,  526,  525,  524,  523,  522,
-      411,  411,  411,  411,  693,  521,  694,  702,  703,  695,
-      696,  704,  705,  706,  697,  517,  515,  514,  702,  703,
-      513,  512,  704,  705,  706,  411,  411,  411,  698,  511,
-      510,  509,  699,  700,  701,  508,  507,  506,  505,  504,
-
-      503,  502,  501,  500,  493,  488,  477,  476,  475,  411,
-      411,  413,  413,  473,  413,  413,  413,  413,  413,  413,
-      413,  413,  413,  413,  470,  413,  413,  468,  467,  463,
-      458,  454,  413,  413,  413,  413,  702,  703,  453,  452,
-      704,  705,  706,  448,  447,  445,  442,  438,  437,  436,
-      435,  433,  432,  431,  430,  429,  428,  413,  413,  413,
-      427,  425,  424,  412,  391,  390,  389,  386,  384,  376,
-      375,  364,  363,  355,  354,  353,  352,  346,  345,  335,
-      334,  413,  413,  414,  414,  333,  332,  328,  326,  324,
-      323,  322,  321,  320,  319,  318,  414,  317,  414,  314,
-
-      310,  414,  271,  265,  263,  259,  240,  229,  228,  414,
-      227,  225,  414,  224,  221,  414,  414,  220,  219,  210,
-      209,  208,  207,  205,  204,  414,  203,  202,  201,  198,
-      197,  196,  195,  414,  194,  193,  414,  191,  190,  414,
-      419,  186,  182,  139,  137,  136,  134,  132,  131,  113,
-      112,  111,  110,  107,  419,  106,  105,  419,  104,  103,
-      102,  101,  100,   99,   90,  419,   88,   84,  419,   81,
-       80,  419,  419,   79,   76,   71,   68,   39,   26,   21,
-       20,  419,   17,   16,  419,   14,    9,    3,    0,  419,
-        0,    0,  419,    0,    0,  419,  441,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      441,    0,    0,  441,    0,    0,    0,    0,    0,    0,
-        0,  441,    0,    0,  441,    0,    0,  441,  441,    0,
-        0,    0,    0,    0,    0,    0,    0,  441,    0,    0,
-        0,    0,    0,    0,    0,  441,    0,    0,  441,    0,
-        0,  441,  450,  450,    0,  450,  450,  450,  450,  450,
-        0,  450,  450,  450,  450,    0,  450,  450,    0,    0,
-        0,    0,    0,  450,  450,  450,  450,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  450,  450,
-
-      450,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  450,  450,  451,  451,    0,  451,  451,  451,
-      451,  451,    0,  451,  451,  451,  451,    0,  451,  451,
-        0,    0,    0,    0,    0,  451,  451,  451,  451,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      451,  451,  451,    0,    0,    0,    0,  451,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  451,
-      451,    0,    0,    0,  451,  451,  481,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      481,    0,    0,  481,    0,    0,    0,    0,    0,    0,
-        0,  481,    0,    0,  481,    0,    0,  481,  481,    0,
-        0,    0,    0,    0,    0,    0,    0,  481,    0,    0,
-        0,    0,    0,    0,    0,  481,    0,    0,  481,    0,
-        0,  481,  487,  487,    0,  487,  487,  487,  487,  487,
-      487,  487,  487,  487,  487,    0,  487,  487,    0,    0,
-        0,    0,    0,  487,  487,  487,  487,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  487,  487,
-
-      487,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  487,  487,  489,  489,    0,  489,  489,  489,
-      489,  489,  489,  489,  489,  489,  489,    0,  489,  489,
-        0,    0,    0,    0,    0,  489,  489,  489,  489,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      489,  489,  489,    0,    0,    0,    0,  489,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  489,
-      489,    0,    0,    0,  489,  489,  601,  601,    0,  601,
-
-      601,  601,  601,  601,    0,  601,  601,  601,  601,    0,
-      601,  601,    0,    0,    0,    0,    0,  601,  601,  601,
-      601,    0,    0,    0,    0,    0,    0,  601,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  601,  601,  601,    0,    0,    0,    0,    0,
-        0,  601,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  601,  601,  607,  607,
-        0,  607,  607,  607,  607,  607,  607,  607,  607,  607,
-      607,    0,  607,  607,    0,    0,    0,    0,    0,  607,
-      607,  607,  607,    0,    0,    0,    0,    0,    0,  607,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  607,  607,  607,    0,    0,    0,
-        0,    0,    0,  607,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  607,  607,
-      617,  617,    0,  617,  617,  617,  617,  617,    0,  617,
-      617,  617,  617,    0,  617,  617,    0,    0,    0,    0,
-        0,  617,  617,  617,  617,    0,    0,    0,    0,    0,
-        0,  617,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  617,  617,  617,    0,
-        0,    0,    0,    0,    0,  617,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      617,  617,  624,  624,    0,  624,  624,  624,  624,  624,
-      624,  624,  624,  624,  624,    0,  624,  624,    0,    0,
-        0,    0,    0,  624,  624,  624,  624,    0,    0,    0,
-        0,    0,    0,  624,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  624,  624,
-      624,    0,    0,    0,    0,    0,    0,  624,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  624,  624,  711,    0,    0,  711,  711,    0,
-        0,  711,  711,  711,  711,  711,  712,  712,  712,  712,
-
-      712,    0,  712,  712,  712,  712,  712,  712,  712,  712,
-      712,  713,  713,  713,  713,  713,  713,  713,  713,  713,
-      713,  713,  713,  713,  713,  713,  714,  714,  714,  714,
-      714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
-      714,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  716,    0,    0,  716,
-      716,  716,    0,  716,  716,  716,  716,  716,  717,  717,
-      717,  717,  717,    0,  717,  717,  717,  717,  717,  717,
-      717,  717,  717,  718,  718,  718,  718,  718,  718,  718,
-      718,  718,  718,  718,  718,  718,  718,  718,  719,  719,
-
-        0,    0,    0,    0,    0,    0,    0,  719,  719,  719,
-      719,  719,  720,  720,  720,  720,  720,  720,  720,  720,
-      720,  720,  720,  720,  720,  720,  720,  721,  721,  721,
-      721,  721,  721,  721,  721,  721,  721,  721,  721,  721,
-      721,  721,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  723,  723,  723,
-      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
-      723,  723,  724,  724,  724,  724,  724,  724,  724,  724,
-      724,  724,  724,  724,  724,  724,  724,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-
-      725,  725,  726,  726,  726,  726,  726,  726,  726,  726,
-      726,  726,  726,  726,  726,  726,  726,  727,  727,  727,
-      727,  727,  727,  727,  727,  727,  727,  727,  727,  727,
-      727,  727,  728,  728,    0,  728,  728,  728,  728,  728,
-      728,  728,  728,  728,  728,  728,  728,  729,  729,    0,
-      729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
-      729,  729,  730,  730,    0,  730,  730,  730,  730,  730,
-      730,  730,  730,  730,  730,  730,  730,  731,  731,  731,
-      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
-      731,  731,  732,  732,  732,  732,  732,  732,  732,  732,
-
-      732,  732,  732,  732,  732,  732,  732,  733,  733,  733,
-      733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
-      733,  733,  734,  734,  734,  734,  734,  734,  734,  734,
-      734,  734,  734,  734,  734,  734,  734,  735,    0,    0,
-      735,    0,  735,  735,    0,    0,  735,  735,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  737,  737,  737,  737,  737,  737,  737,
-      737,  737,  737,  737,  737,  737,  737,  737,  738,  738,
-      738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
-      738,  738,  738,  739,  739,  739,  739,  739,  739,  739,
-
-      739,  739,  739,  739,  739,  739,  739,  739,  740,  740,
-        0,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  740,  741,  741,  741,  741,  741,  741,  741,
-      741,  741,  741,  741,  741,  741,  741,  741,  742,  742,
-      742,  742,    0,  742,  742,  742,  742,  742,  742,  742,
-      742,  742,  742,  743,  743,  743,  743,  743,  743,  743,
-      743,  743,  743,  743,  743,  743,  743,  743,  744,  744,
-        0,  744,  744,  744,  744,  744,  744,  744,  744,  744,
-      744,  744,  744,  745,  745,    0,  745,  745,  745,  745,
-      745,  745,  745,  745,  745,  745,  745,  745,  746,    0,
-
-      746,    0,    0,    0,  746,  746,  746,  747,  747,    0,
-      747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
-      747,  747,  748,  748,    0,  748,  748,  748,  748,  748,
-      748,  748,  748,  748,  748,  748,  748,  749,  749,    0,
-      749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
-      749,  749,  750,  750,  750,  750,  750,  750,  750,  750,
-      750,  750,  750,  750,  750,  750,  750,  751,  751,  751,
-      751,  751,  751,  751,  751,  751,  751,  751,  751,  751,
-      751,  751,  752,  752,  752,  752,  752,  752,  752,  752,
-      752,  752,  752,  752,  752,  752,  752,  753,  753,  753,
-
-      753,  753,  753,  753,  753,  753,  753,  753,  753,  753,
-      753,  753,  754,    0,    0,    0,    0,  754,  754,    0,
-        0,  754,  754,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  756,  756,
-      756,  756,  756,  756,  756,  756,  756,  756,  756,  756,
-      756,  756,  756,  757,  757,    0,  757,  757,  757,  757,
-      757,  757,  757,  757,  757,  757,  757,  757,  758,  758,
-        0,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  759,  759,  759,  759,    0,  759,  759,
-      759,  759,  759,  759,  759,  759,  759,  759,  760,  760,
-
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  761,  761,    0,  761,  761,  761,  761,
-      761,  761,  761,  761,  761,  761,  761,  761,  762,  762,
-        0,  762,  762,  762,  762,  762,  762,  762,  762,  762,
-      762,  762,  762,  763,  763,    0,  763,  763,  763,  763,
-      763,  763,  763,  763,  763,  763,  763,  763,  764,  764,
-        0,  764,  764,  764,  764,  764,  764,  764,  764,  764,
-      764,  764,  764,  765,  765,    0,  765,  765,  765,  765,
-      765,  765,  765,  765,  765,  765,  765,  765,  766,  766,
-        0,  766,  766,  766,  766,  766,  766,  766,  766,  766,
-
-      766,  766,  766,  767,  767,    0,  767,  767,  767,  767,
-      767,  767,  767,  767,  767,  767,  767,  767,  768,  768,
-        0,  768,  768,  768,  768,  768,  768,  768,  768,  768,
-      768,  768,  768,  769,  769,  769,  769,  769,  769,  769,
-      769,  769,  769,  769,  769,  769,  769,  769,  770,  770,
-      770,  770,  770,  770,  770,  770,  770,  770,  770,  770,
-      770,  770,  770,  771,  771,  771,  771,  771,  771,  771,
-      771,  771,  771,  771,  771,  771,  771,  771,  772,    0,
-        0,    0,    0,  772,  772,    0,    0,  772,  773,  773,
-      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
-
-      773,  773,  773,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  775,  775,
-        0,  775,  775,  775,  775,  775,  775,  775,  775,  775,
-      775,  775,  775,  776,  776,  776,  776,  776,  776,  776,
-      776,  776,  776,  776,  776,  776,  776,  776,  777,    0,
-        0,    0,    0,  777,  777,    0,    0,  777,  778,  778,
-        0,  778,  778,  778,  778,  778,  778,  778,  778,  778,
-      778,  778,  778,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  780,  780,
-        0,  780,  780,  780,  780,  780,  780,  780,  780,  780,
-
-      780,  780,  780,  781,  781,    0,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,  782,  782,
-        0,  782,  782,  782,  782,  782,  782,  782,  782,  782,
-      782,  782,  782,  783,  783,  783,  783,  783,  783,  783,
-      783,  783,  783,  783,  783,  783,  783,  783,  784,  784,
-      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
-      784,  784,  784,  785,  785,  785,  785,  785,  785,  785,
-      785,  785,  785,  785,  785,  785,  785,  785,  786,  786,
-      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
-      786,  786,  786,  710,  710,  710,  710,  710,  710,  710,
-
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  710,  710,  710,  710
-    } ;
-
-static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
-static char *yy_full_match;
-static int yy_lp;
-static int yy_looking_for_trail_begin = 0;
-static int yy_full_lp;
-static int *yy_full_state;
-#define YY_TRAILING_MASK 0x2000
-#define YY_TRAILING_HEAD_MASK 0x4000
-#define REJECT \
-{ \
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
-yy_cp = yy_full_match; /* restore poss. backed-over text */ \
-yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
-yy_state_ptr = yy_full_state; /* restore orig. state */ \
-yy_current_state = *yy_state_ptr; /* restore curr. state */ \
-++yy_lp; \
-goto find_rule; \
-}
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
-#line 1 "../parser.l"
-#define INITIAL 0
-#line 8 "../parser.l"
-/*
- * parser.l -- lex parser of algebraic chess moves for XBoard
- * $Id: parser.l,v 2.1 2003/10/27 19:21:00 mann Exp $
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 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 XBoard distributed
- * by the Free Software Foundation:
- * ------------------------------------------------------------------------
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
-
-/* This parser handles all forms of promotion.
- * The parser resolves ambiguous moves by searching and check-testing.
- * It also parses comments of the form [anything] or (anything).
- */
-
-#include "config.h"
-
-#define NO_CONSTRAINT	-1
-#undef YYLMAX
-#define YYLMAX			4096
-#define UNPUT_BUF_SIZE		YYLMAX
-
-#ifdef FLEX_SCANNER
-/* yytext is probably a char*, but could be a char[].  yy_text is set
-   in YY_DECL below, because if yytext is a char*, its value is not
-   constant. */
-char *yy_text;
-#else /*!FLEX_SCANNER*/
-/* yytext is definitely a char[], so yy_text can be set here, statically. */
-char *yy_text = (char *) yytext;
-#endif
-
-#ifdef FLEX_SCANNER
-/* This is flex */
-#undef YY_INPUT
-#define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
-#undef YY_DECL
-#define YY_DECL                     \
-    int _yylex YY_PROTO((void));    \
-    int yylex YY_PROTO((void))      \
-    {                               \
-	int result = _yylex();      \
-	yy_text = (char *) yytext;  \
-	return(result);             \
-    }                               \
-    int _yylex YY_PROTO((void))
-#else
-/* This is lex */
-#undef input
-#undef output
-#undef unput
-#endif
-
-/* The includes must be here, below the #undef input */
-
-#include <ctype.h>
-
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <string.h>
-#else /* not STDC_HEADERS */
-# if HAVE_STRING_H
-#  include <string.h>
-# else /* not HAVE_STRING_H */
-#  include <strings.h>
-# endif /* not HAVE_STRING_H */
-#endif /* not STDC_HEADERS */
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#if defined(_amigados)
-# include <errno.h>
-# if HAVE_FCNTL_H
-#  include <fcntl.h>    /*  isatty() prototype  */
-# endif /*  HAVE_FCNTL_H        */
-#endif  /*  defined(_amigados)  */
-
-#include "common.h"
-#include "backend.h"
-#include "frontend.h"
-#include "parser.h"
-#include "moves.h"
-
-extern int PosFlags P((int));
-
-extern Board	boards[MAX_MOVES];
-int		yyboardindex;
-int             yyskipmoves = FALSE;
-char		currentMoveString[YYLMAX];
-#ifndef FLEX_SCANNER
-char		unputBuffer[UNPUT_BUF_SIZE];
-int		unputCount = 0;
-#endif
-
-#ifdef FLEX_SCANNER
-void my_yy_input P((char *buf, int *result, int max_size));
-#else /*!FLEX_SCANNER*/
-static int input P((void));
-static void output P((int ch));
-static void unput P((int ch));
-int yylook P((void));
-int yyback P((int *, int));
-#endif
-#undef yywrap
-int yywrap P((void));
-extern void CopyBoard P((Board to, Board from));
-
-#line 1835 "lex.yy.c"
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int yywrap YY_PROTO(( void ));
-#else
-extern int yywrap YY_PROTO(( void ));
-#endif
-#endif
-
-#ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO(( int c, char *buf_ptr ));
-#endif
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
-#endif
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ));
-#else
-static int input YY_PROTO(( void ));
-#endif
-#endif
-
-#if YY_STACK_USED
-static int yy_start_stack_ptr = 0;
-static int yy_start_stack_depth = 0;
-static int *yy_start_stack = 0;
-#ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO(( int new_state ));
-#endif
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( void ));
-#endif
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ));
-#endif
-
-#else
-#define YY_NO_PUSH_STATE 1
-#define YY_NO_POP_STATE 1
-#define YY_NO_TOP_STATE 1
-#endif
-
-#ifdef YY_MALLOC_DECL
-YY_MALLOC_DECL
-#else
-#if __STDC__
-#ifndef __cplusplus
-#include <stdlib.h>
-#endif
-#else
-/* Just try to get by without declaring the routines.  This will fail
- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
- * or sizeof(void*) != sizeof(int).
- */
-#endif
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-	if ( yy_current_buffer->yy_is_interactive ) \
-		{ \
-		int c = '*', n; \
-		for ( n = 0; n < max_size && \
-			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
-			buf[n] = (char) c; \
-		if ( c == '\n' ) \
-			buf[n++] = (char) c; \
-		if ( c == EOF && ferror( yyin ) ) \
-			YY_FATAL_ERROR( "input in flex scanner failed" ); \
-		result = n; \
-		} \
-	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
-		  && ferror( yyin ) ) \
-		YY_FATAL_ERROR( "input in flex scanner failed" );
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL int yylex YY_PROTO(( void ))
-#endif
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
-	if ( yyleng > 0 ) \
-		yy_current_buffer->yy_at_bol = \
-				(yytext[yyleng - 1] == '\n'); \
-	YY_USER_ACTION
-
-YY_DECL
-	{
-	register yy_state_type yy_current_state;
-	register char *yy_cp = NULL, *yy_bp = NULL;
-	register int yy_act;
-
-#line 156 "../parser.l"
-
-
-#line 1992 "lex.yy.c"
-
-	if ( yy_init )
-		{
-		yy_init = 0;
-
-#ifdef YY_USER_INIT
-		YY_USER_INIT;
-#endif
-
-		if ( ! yy_start )
-			yy_start = 1;	/* first start state */
-
-		if ( ! yyin )
-			yyin = stdin;
-
-		if ( ! yyout )
-			yyout = stdout;
-
-		if ( ! yy_current_buffer )
-			yy_current_buffer =
-				yy_create_buffer( yyin, YY_BUF_SIZE );
-
-		yy_load_buffer_state();
-		}
-
-	while ( 1 )		/* loops until end-of-file is reached */
-		{
-		yy_cp = yy_c_buf_p;
-
-		/* Support of yytext. */
-		*yy_cp = yy_hold_char;
-
-		/* yy_bp points to the position in yy_ch_buf of the start of
-		 * the current run.
-		 */
-		yy_bp = yy_cp;
-
-		yy_current_state = yy_start;
-		yy_current_state += YY_AT_BOL();
-		yy_state_ptr = yy_state_buf;
-		*yy_state_ptr++ = yy_current_state;
-yy_match:
-		do
-			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
-			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-				{
-				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 711 )
-					yy_c = yy_meta[(unsigned int) yy_c];
-				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-			*yy_state_ptr++ = yy_current_state;
-			++yy_cp;
-			}
-		while ( yy_base[yy_current_state] != 4394 );
-
-yy_find_action:
-		yy_current_state = *--yy_state_ptr;
-		yy_lp = yy_accept[yy_current_state];
-find_rule: /* we branch to this label when backing up */
-		for ( ; ; ) /* until we find what rule we matched */
-			{
-			if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
-				{
-				yy_act = yy_acclist[yy_lp];
-				if ( yy_act & YY_TRAILING_HEAD_MASK ||
-				     yy_looking_for_trail_begin )
-					{
-					if ( yy_act == yy_looking_for_trail_begin )
-						{
-						yy_looking_for_trail_begin = 0;
-						yy_act &= ~YY_TRAILING_HEAD_MASK;
-						break;
-						}
-					}
-				else if ( yy_act & YY_TRAILING_MASK )
-					{
-					yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
-					yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
-					}
-				else
-					{
-					yy_full_match = yy_cp;
-					yy_full_state = yy_state_ptr;
-					yy_full_lp = yy_lp;
-					break;
-					}
-				++yy_lp;
-				goto find_rule;
-				}
-			--yy_cp;
-			yy_current_state = *--yy_state_ptr;
-			yy_lp = yy_accept[yy_current_state];
-			}
-
-		YY_DO_BEFORE_ACTION;
-
-
-do_action:	/* This label is used only to access EOF actions. */
-
-
-		switch ( yy_act )
-	{ /* beginning of action switch */
-case 1:
-YY_RULE_SETUP
-#line 158 "../parser.l"
-{
-    /*
-     * Fully-qualified algebraic move, possibly with promotion
-     */
-    int skip1 = 0, skip2 = 0;
-    ChessSquare piece;
-    ChessMove result;
-    
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove the / */
-    if (yytext[1] == '/') skip1 = 1;
-    
-    /* remove the [xX:-] */
-    if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
-	(yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
-    
-    currentMoveString[0] = yytext[1+skip1];
-    currentMoveString[1] = yytext[2+skip1];
-    currentMoveString[2] = yytext[3+skip1+skip2];
-    currentMoveString[3] = yytext[4+skip1+skip2];
-    currentMoveString[4] = NULLCHAR;
-    
-    if (yyleng-skip1-skip2 > 5) {
-	if (yytext[yyleng-1] == ')') {
-	    currentMoveString[4] = ToLower(yytext[yyleng-2]);
-	} else {
-	    currentMoveString[4] = ToLower(yytext[yyleng-1]);
-	}
-	currentMoveString[5] = NULLCHAR;
-    }
-
-    piece = boards[yyboardindex]
-      [currentMoveString[1] - '1'][currentMoveString[0] - 'a'];
-    if (ToLower(yytext[0]) != ToLower(PieceToChar(piece)))
-      return (int) IllegalMove;
-
-    result = LegalityTest(boards[yyboardindex],
-			  PosFlags(yyboardindex), EP_UNKNOWN,
-			  currentMoveString[1] - '1',
-			  currentMoveString[0] - 'a',
-			  currentMoveString[3] - '1',
-			  currentMoveString[2] - 'a',
-			  currentMoveString[4]);
-
-    if (currentMoveString[4] == NULLCHAR &&
-	(result == WhitePromotionQueen || result == BlackPromotionQueen)) {
-	currentMoveString[4] = 'q';
-	currentMoveString[5] = NULLCHAR;
-    }
-
-    return (int) result;
-}
-	YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 212 "../parser.l"
-{
-    /*
-     * Simple algebraic move, possibly with promotion
-     */
-    int skip = 0;
-    ChessMove result;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove the [xX:-] */
-    if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
-	(yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
-
-    currentMoveString[0] = yytext[0];
-    currentMoveString[1] = yytext[1];
-    currentMoveString[2] = yytext[2+skip];
-    currentMoveString[3] = yytext[3+skip];
-    currentMoveString[4] = NULLCHAR;
-
-    if (yyleng-skip > 4) {
-	if (yytext[yyleng-1] == ')') {
-	    currentMoveString[4] = ToLower(yytext[yyleng-2]);
-	} else {
-	    currentMoveString[4] = ToLower(yytext[yyleng-1]);
-	}
-	currentMoveString[5] = NULLCHAR;
-    }
-
-    result = LegalityTest(boards[yyboardindex],
-			  PosFlags(yyboardindex), EP_UNKNOWN,
-			  currentMoveString[1] - '1',
-			  currentMoveString[0] - 'a',
-			  currentMoveString[3] - '1',
-			  currentMoveString[2] - 'a',
-			  currentMoveString[4]);
-
-    if (currentMoveString[4] == NULLCHAR &&
-	(result == WhitePromotionQueen || result == BlackPromotionQueen)) {
-	currentMoveString[4] = 'q';
-	currentMoveString[5] = NULLCHAR;
-    }
-
-    return (int) result;
-}
-	YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 257 "../parser.l"
-{
-    /*
-     * Pawn move, possibly with promotion
-     */
-    DisambiguateClosure cl;
-    int skip = 0;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove the =() */
-    if (yytext[2] == '=') skip++;
-    if (yytext[2+skip] == '(') skip++;
-
-    cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
-    cl.rfIn = -1;
-    cl.ffIn = yytext[0] - 'a';
-    cl.rtIn = yytext[1] - '1';
-    cl.ftIn = yytext[0] - 'a';
-    cl.promoCharIn = yytext[2+skip];
-    Disambiguate(boards[yyboardindex],
-		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
-
-    currentMoveString[0] = cl.ff + 'a';
-    currentMoveString[1] = cl.rf + '1';
-    currentMoveString[2] = cl.ft + 'a';
-    currentMoveString[3] = cl.rt + '1';
-    currentMoveString[4] = cl.promoChar;
-    currentMoveString[5] = NULLCHAR;
-
-    return (int) cl.kind;
-}
-	YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 290 "../parser.l"
-{
-    /*
-     * Pawn capture, possibly with promotion, possibly ambiguous
-     */
-    DisambiguateClosure cl;
-    int skip1 = 0, skip2 = 0;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove trailing ep or e.p. (nonstandard PGN) */
-    if (yytext[yyleng-1] == 'p') {
-      yyleng -= 2;
-      yytext[yyleng] = NULLCHAR;
-    } else if (yytext[yyleng-1] == '.') {
-      yyleng -= 4;
-      yytext[yyleng] = NULLCHAR;
-    }
-
-    /* remove the [xX:-] and =() */
-    if ((yytext[1] == 'x') || (yytext[1] == 'X')
-	|| (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
-    if (yytext[2+skip1] == '=') skip2++;
-    if (yytext[2+skip1+skip2] == '(') skip2++;
-
-    cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
-    cl.rfIn = -1;
-    cl.ffIn = yytext[0] - 'a';
-    cl.rtIn = -1;
-    cl.ftIn = yytext[1+skip1] - 'a';
-    cl.promoCharIn = yytext[2+skip1+skip2];
-    Disambiguate(boards[yyboardindex],
-		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
-
-    currentMoveString[0] = cl.ff + 'a';
-    currentMoveString[1] = cl.rf + '1';
-    currentMoveString[2] = cl.ft + 'a';
-    currentMoveString[3] = cl.rt + '1';
-    currentMoveString[4] = cl.promoChar;
-    currentMoveString[5] = NULLCHAR;
-
-    return (int) cl.kind;
-}
-	YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 333 "../parser.l"
-{
-    /*
-     * unambiguously abbreviated Pawn capture, possibly with promotion
-     */
-    int skip = 0;
-    ChessMove result;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove trailing ep or e.p. (nonstandard PGN) */
-    if (yytext[yyleng-1] == 'p') {
-      yyleng -= 2;
-      yytext[yyleng] = NULLCHAR;
-    } else if (yytext[yyleng-1] == '.') {
-      yyleng -= 4;
-      yytext[yyleng] = NULLCHAR;
-    }
-
-    /* remove the [xX:-] */
-    if ((yytext[1] == 'x') || (yytext[1] == 'X')
-	|| (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
-
-    currentMoveString[0] = yytext[0];
-    currentMoveString[2] = yytext[1+skip];
-    currentMoveString[3] = yytext[2+skip];
-    if (WhiteOnMove(yyboardindex)) {
-	if (yytext[2+skip] == '1') return (int) ImpossibleMove;
-	currentMoveString[1] = yytext[2+skip] - 1;
-    } else {
-	if (yytext[2+skip] == '8') return (int) ImpossibleMove;
-	currentMoveString[1] = yytext[2+skip] + 1;
-    }
-    if (yyleng-skip > 3) {
-	if (yytext[yyleng-1] == ')')
-	  currentMoveString[4] = ToLower(yytext[yyleng-2]);
-	else
-	  currentMoveString[4] = ToLower(yytext[yyleng-1]);
-	currentMoveString[5] = NULLCHAR;
-    } else {
-	currentMoveString[4] = NULLCHAR;
-    }
-
-    result = LegalityTest(boards[yyboardindex],
-			  PosFlags(yyboardindex), EP_UNKNOWN,
-			  currentMoveString[1] - '1',
-			  currentMoveString[0] - 'a',
-			  currentMoveString[3] - '1',
-			  currentMoveString[2] - 'a',
-			  currentMoveString[4]);
-
-    if (currentMoveString[4] == NULLCHAR &&
-	(result == WhitePromotionQueen || result == BlackPromotionQueen)) {
-	currentMoveString[4] = 'q';
-	currentMoveString[5] = NULLCHAR;
-    }
-
-    if (result != IllegalMove) return (int) result;
-
-    /* Special case: improperly written en passant capture */
-    if (WhiteOnMove(yyboardindex)) {
-	if (currentMoveString[3] == '5') {
-	    currentMoveString[1] = '5';
-	    currentMoveString[3] = '6';
-	} else {
-	    return (int) IllegalMove;
-	}
-    } else {
-	if (currentMoveString[3] == '4') {
-	    currentMoveString[1] = '4';
-	    currentMoveString[3] = '3';
-	} else {
-	    return (int) IllegalMove;
-	}
-    }
-
-    result = LegalityTest(boards[yyboardindex],
-			  PosFlags(yyboardindex), EP_UNKNOWN,
-			  currentMoveString[1] - '1',
-			  currentMoveString[0] - 'a',
-			  currentMoveString[3] - '1',
-			  currentMoveString[2] - 'a',
-			  currentMoveString[4]);
-
-    if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
-      return (int) result;
-    else
-      return (int) IllegalMove;
-}
-	YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 422 "../parser.l"
-{
-    /*
-     * piece move, possibly ambiguous
-     */
-    DisambiguateClosure cl;
-    int skip = 0;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove the [xX:-] */
-    if ((yytext[1] == 'x') || (yytext[1] == 'X')
-	|| (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
-
-    if (WhiteOnMove(yyboardindex)) {
-	cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
-    } else {
-	cl.pieceIn = CharToPiece(ToLower(yytext[0]));
-    }
-    cl.rfIn = -1;
-    cl.ffIn = -1;
-    cl.rtIn = yytext[2+skip] - '1';
-    cl.ftIn = yytext[1+skip] - 'a';
-    cl.promoCharIn = NULLCHAR;
-    Disambiguate(boards[yyboardindex],
-		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
-
-    currentMoveString[0] = cl.ff + 'a';
-    currentMoveString[1] = cl.rf + '1';
-    currentMoveString[2] = cl.ft + 'a';
-    currentMoveString[3] = cl.rt + '1';
-    currentMoveString[4] = cl.promoChar;
-    currentMoveString[5] = NULLCHAR;
-
-    return (int) cl.kind;
-}
-	YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 458 "../parser.l"
-{
-    /*
-     * piece move with rank or file disambiguator
-     */
-    DisambiguateClosure cl;
-    int skip = 0;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove the [xX:-] */
-    if ((yytext[2] == 'x') || (yytext[2] == 'X')
-	|| (yytext[2] == ':') || (yytext[2] == '-')) skip = 1;
-
-    if (WhiteOnMove(yyboardindex)) {
-	cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
-    } else {
-	cl.pieceIn = CharToPiece(ToLower(yytext[0]));
-    }
-    if (isalpha(yytext[1])) {
-	cl.rfIn = -1;
-	cl.ffIn = yytext[1] - 'a';
-    } else {
-	cl.rfIn = yytext[1] - '1';
-	cl.ffIn = -1;
-    }
-    cl.rtIn = yytext[3+skip] - '1';
-    cl.ftIn = yytext[2+skip] - 'a';
-    cl.promoCharIn = NULLCHAR;
-    Disambiguate(boards[yyboardindex],
-		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
-
-    currentMoveString[0] = cl.ff + 'a';
-    currentMoveString[1] = cl.rf + '1';
-    currentMoveString[2] = cl.ft + 'a';
-    currentMoveString[3] = cl.rt + '1';
-    currentMoveString[4] = cl.promoChar;
-    currentMoveString[5] = NULLCHAR;
-
-    return (int) cl.kind;
-}
-	YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 499 "../parser.l"
-{
-    int rf, ff, rt, ft;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    if (WhiteOnMove(yyboardindex)) {
-	if (boards[yyboardindex][0][3] == WhiteKing) {
-	    /* ICS wild castling */
-	    strcpy(currentMoveString, "d1f1");
-	    rf = 0;
-	    ff = 3;
-	    rt = 0;
-	    ft = 5;
-	} else {
-	    strcpy(currentMoveString, "e1c1");
-	    rf = 0;
-	    ff = 4;
-	    rt = 0;
-	    ft = 2;
-	}
-    } else{ 
-	if (boards[yyboardindex][7][3] == BlackKing) {
-	    /* ICS wild castling */
-	    strcpy(currentMoveString, "d8f8");
-	    rf = 7;
-	    ff = 3;
-	    rt = 7;
-	    ft = 5;
-	} else {
-	    strcpy(currentMoveString, "e8c8");
-	    rf = 7;
-	    ff = 4;
-	    rt = 7;
-	    ft = 2;
-	}
-    }
-    return (int) LegalityTest(boards[yyboardindex],
-			      PosFlags(yyboardindex), EP_UNKNOWN,
-			      rf, ff, rt, ft, NULLCHAR);
-}
-	YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 540 "../parser.l"
-{
-    int rf, ff, rt, ft;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    if (WhiteOnMove(yyboardindex)) {
-	if (boards[yyboardindex][0][3] == WhiteKing) {
-	    /* ICS wild castling */
-	    strcpy(currentMoveString, "d1b1");
-	    rf = 0;
-	    ff = 3;
-	    rt = 0;
-	    ft = 1;
-	} else {
-	    strcpy(currentMoveString, "e1g1");
-	    rf = 0;
-	    ff = 4;
-	    rt = 0;
-	    ft = 6;
-	}
-    } else {
-	if (boards[yyboardindex][7][3] == BlackKing) {
-	    /* ICS wild castling */
-	    strcpy(currentMoveString, "d8b8");
-	    rf = 7;
-	    ff = 3;
-	    rt = 7;
-	    ft = 1;
-	} else {
-	    strcpy(currentMoveString, "e8g8");
-	    rf = 7;
-	    ff = 4;
-	    rt = 7;
-	    ft = 6;
-	}
-    }
-    return (int) LegalityTest(boards[yyboardindex],
-			      PosFlags(yyboardindex), EP_UNKNOWN,
-			      rf, ff, rt, ft, NULLCHAR);
-}
-	YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 581 "../parser.l"
-{
-    /* Bughouse piece drop.  No legality checking for now. */
-    currentMoveString[1] = '@';
-    currentMoveString[2] = yytext[2];
-    currentMoveString[3] = yytext[3];
-    currentMoveString[4] = NULLCHAR;
-    if (WhiteOnMove(yyboardindex)) {
-	currentMoveString[0] = ToUpper(yytext[0]);
-	return (int) WhiteDrop;
-    } else {
-	currentMoveString[0] = ToLower(yytext[0]);
-	return (int) BlackDrop;
-    }
-}
-	YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 596 "../parser.l"
-{
-    if (WhiteOnMove(yyboardindex))
-      return (int) BlackWins;
-    else
-      return (int) WhiteWins;
-}
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 603 "../parser.l"
-{
-    return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
-}
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 607 "../parser.l"
-{
-    return (int) GameUnfinished;
-}
-	YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 611 "../parser.l"
-{
-    return (int) GameIsDrawn;
-}
-	YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 615 "../parser.l"
-{
-    return (int) GameIsDrawn;
-}
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 619 "../parser.l"
-{
-    if (WhiteOnMove(yyboardindex))
-      return (int) BlackWins;
-    else
-      return (int) WhiteWins;
-}
-	YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 626 "../parser.l"
-{
-    if (WhiteOnMove(yyboardindex))
-      return (int) BlackWins;
-    else
-      return (int) WhiteWins;
-}
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 633 "../parser.l"
-{
-    return (int) GameIsDrawn;
-}
-	YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 637 "../parser.l"
-{
-    return (int) GameIsDrawn;
-}
-	YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 641 "../parser.l"
-{
-    return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
-}
-	YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 645 "../parser.l"
-{
-    return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
-}
-	YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 649 "../parser.l"
-{ 
-    return (int) WhiteWins;
-}
-	YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 653 "../parser.l"
-{ 
-    return (int) BlackWins;
-}
-	YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 657 "../parser.l"
-{
-    return (int) GameIsDrawn;
-}
-	YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 661 "../parser.l"
-{
-    return (int) GameUnfinished;
-}
-	YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 665 "../parser.l"
-{
-    /* move numbers */
-    if ((yyleng == 1) && (yytext[0] == '1'))
-      return (int) MoveNumberOne;
-}
-	YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 671 "../parser.l"
-{
-    /* elapsed time indication, e.g. (0:12) or {10:21.071} */ 
-    return (int) ElapsedTime;
-}
-	YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 676 "../parser.l"
-{
-    /* position diagram enclosed in [-- --] */
-    return (int) PositionDiagram;
-}
-	YY_BREAK
-case 29:
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
-yy_c_buf_p = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
-YY_RULE_SETUP
-#line 681 "../parser.l"
-{
-    /* position diagram enclosed in {-- --} */
-    return (int) PositionDiagram;
-}
-	YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 686 "../parser.l"
-{
-    return (int) PGNTag;
-}    
-	YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 690 "../parser.l"
-{
-    return (int) GNUChessGame;
-}
-	YY_BREAK
-case 32:
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
-yy_c_buf_p = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
-YY_RULE_SETUP
-#line 694 "../parser.l"
-{
-    return (int) XBoardGame;
-}
-	YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 698 "../parser.l"
-{				/* numeric annotation glyph */
-    return (int) NAG;
-}
-	YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 702 "../parser.l"
-{        			/* anything in {} */
-    return (int) Comment; 
-}
-	YY_BREAK
-case 35:
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
-yy_c_buf_p = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
-YY_RULE_SETUP
-#line 706 "../parser.l"
-{                                          /* ; to end of line */
-    return (int) Comment;
-}
-	YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 710 "../parser.l"
-{        			/* anything in [] */
-    return (int) Comment; 
-}
-	YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 714 "../parser.l"
-{ 	  	/* nested () */
-    return (int) Comment; 
-}
-	YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 718 "../parser.l"
-{ 				/* >=2 chars in () */
-    return (int) Comment; 
-}       
-	YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 722 "../parser.l"
-{
-        /* Skip mail headers */
-}
-	YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 726 "../parser.l"
-{
-        /* Skip random words */
-}
-	YY_BREAK
-case 41:
-YY_RULE_SETUP
-#line 730 "../parser.l"
-{
-        /* Skip everything else */
-}
-	YY_BREAK
-case 42:
-YY_RULE_SETUP
-#line 734 "../parser.l"
-ECHO;
-	YY_BREAK
-#line 2809 "lex.yy.c"
-			case YY_STATE_EOF(INITIAL):
-				yyterminate();
-
-	case YY_END_OF_BUFFER:
-		{
-		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
-
-		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = yy_hold_char;
-		YY_RESTORE_YY_MORE_OFFSET
-
-		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
-			{
-			/* We're scanning a new file or input source.  It's
-			 * possible that this happened because the user
-			 * just pointed yyin at a new source and called
-			 * yylex().  If so, then we have to assure
-			 * consistency between yy_current_buffer and our
-			 * globals.  Here is the right place to do so, because
-			 * this is the first action (other than possibly a
-			 * back-up) that will match for the new input source.
-			 */
-			yy_n_chars = yy_current_buffer->yy_n_chars;
-			yy_current_buffer->yy_input_file = yyin;
-			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
-			}
-
-		/* Note that here we test for yy_c_buf_p "<=" to the position
-		 * of the first EOB in the buffer, since yy_c_buf_p will
-		 * already have been incremented past the NUL character
-		 * (since all states make transitions on EOB to the
-		 * end-of-buffer state).  Contrast this with the test
-		 * in input().
-		 */
-		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
-			{ /* This was really a NUL. */
-			yy_state_type yy_next_state;
-
-			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
-
-			yy_current_state = yy_get_previous_state();
-
-			/* Okay, we're now positioned to make the NUL
-			 * transition.  We couldn't have
-			 * yy_get_previous_state() go ahead and do it
-			 * for us because it doesn't know how to deal
-			 * with the possibility of jamming (and we don't
-			 * want to build jamming into it because then it
-			 * will run more slowly).
-			 */
-
-			yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-			yy_bp = yytext_ptr + YY_MORE_ADJ;
-
-			if ( yy_next_state )
-				{
-				/* Consume the NUL. */
-				yy_cp = ++yy_c_buf_p;
-				yy_current_state = yy_next_state;
-				goto yy_match;
-				}
-
-			else
-				{
-				yy_cp = yy_c_buf_p;
-				goto yy_find_action;
-				}
-			}
-
-		else switch ( yy_get_next_buffer() )
-			{
-			case EOB_ACT_END_OF_FILE:
-				{
-				yy_did_buffer_switch_on_eof = 0;
-
-				if ( yywrap() )
-					{
-					/* Note: because we've taken care in
-					 * yy_get_next_buffer() to have set up
-					 * yytext, we can now set up
-					 * yy_c_buf_p so that if some total
-					 * hoser (like flex itself) wants to
-					 * call the scanner after we return the
-					 * YY_NULL, it'll still work - another
-					 * YY_NULL will get returned.
-					 */
-					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
-
-					yy_act = YY_STATE_EOF(YY_START);
-					goto do_action;
-					}
-
-				else
-					{
-					if ( ! yy_did_buffer_switch_on_eof )
-						YY_NEW_FILE;
-					}
-				break;
-				}
-
-			case EOB_ACT_CONTINUE_SCAN:
-				yy_c_buf_p =
-					yytext_ptr + yy_amount_of_matched_text;
-
-				yy_current_state = yy_get_previous_state();
-
-				yy_cp = yy_c_buf_p;
-				yy_bp = yytext_ptr + YY_MORE_ADJ;
-				goto yy_match;
-
-			case EOB_ACT_LAST_MATCH:
-				yy_c_buf_p =
-				&yy_current_buffer->yy_ch_buf[yy_n_chars];
-
-				yy_current_state = yy_get_previous_state();
-
-				yy_cp = yy_c_buf_p;
-				yy_bp = yytext_ptr + YY_MORE_ADJ;
-				goto yy_find_action;
-			}
-		break;
-		}
-
-	default:
-		YY_FATAL_ERROR(
-			"fatal flex scanner internal error--no action found" );
-	} /* end of action switch */
-		} /* end of scanning one token */
-	} /* end of yylex */
-
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *	EOB_ACT_LAST_MATCH -
- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *	EOB_ACT_END_OF_FILE - end of file
- */
-
-static int yy_get_next_buffer()
-	{
-	register char *dest = yy_current_buffer->yy_ch_buf;
-	register char *source = yytext_ptr;
-	register int number_to_move, i;
-	int ret_val;
-
-	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
-		YY_FATAL_ERROR(
-		"fatal flex scanner internal error--end of buffer missed" );
-
-	if ( yy_current_buffer->yy_fill_buffer == 0 )
-		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
-			{
-			/* We matched a single character, the EOB, so
-			 * treat this as a final EOF.
-			 */
-			return EOB_ACT_END_OF_FILE;
-			}
-
-		else
-			{
-			/* We matched some text prior to the EOB, first
-			 * process it.
-			 */
-			return EOB_ACT_LAST_MATCH;
-			}
-		}
-
-	/* Try to read more data. */
-
-	/* First move last chars to start of buffer. */
-	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
-
-	for ( i = 0; i < number_to_move; ++i )
-		*(dest++) = *(source++);
-
-	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-		/* don't do the read, it's not guaranteed to return an EOF,
-		 * just force an EOF
-		 */
-		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
-
-	else
-		{
-		int num_to_read =
-			yy_current_buffer->yy_buf_size - number_to_move - 1;
-
-		while ( num_to_read <= 0 )
-			{ /* Not enough room in the buffer - grow it. */
-#ifdef YY_USES_REJECT
-			YY_FATAL_ERROR(
-"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
-#else
-
-			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = yy_current_buffer;
-
-			int yy_c_buf_p_offset =
-				(int) (yy_c_buf_p - b->yy_ch_buf);
-
-			if ( b->yy_is_our_buffer )
-				{
-				int new_size = b->yy_buf_size * 2;
-
-				if ( new_size <= 0 )
-					b->yy_buf_size += b->yy_buf_size / 8;
-				else
-					b->yy_buf_size *= 2;
-
-				b->yy_ch_buf = (char *)
-					/* Include room in for 2 EOB chars. */
-					yy_flex_realloc( (void *) b->yy_ch_buf,
-							 b->yy_buf_size + 2 );
-				}
-			else
-				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
-
-			if ( ! b->yy_ch_buf )
-				YY_FATAL_ERROR(
-				"fatal error - scanner input buffer overflow" );
-
-			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-			num_to_read = yy_current_buffer->yy_buf_size -
-						number_to_move - 1;
-#endif
-			}
-
-		if ( num_to_read > YY_READ_BUF_SIZE )
-			num_to_read = YY_READ_BUF_SIZE;
-
-		/* Read in more data. */
-		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
-			yy_n_chars, num_to_read );
-
-		yy_current_buffer->yy_n_chars = yy_n_chars;
-		}
-
-	if ( yy_n_chars == 0 )
-		{
-		if ( number_to_move == YY_MORE_ADJ )
-			{
-			ret_val = EOB_ACT_END_OF_FILE;
-			yyrestart( yyin );
-			}
-
-		else
-			{
-			ret_val = EOB_ACT_LAST_MATCH;
-			yy_current_buffer->yy_buffer_status =
-				YY_BUFFER_EOF_PENDING;
-			}
-		}
-
-	else
-		ret_val = EOB_ACT_CONTINUE_SCAN;
-
-	yy_n_chars += number_to_move;
-	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
-	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
-
-	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
-
-	return ret_val;
-	}
-
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-static yy_state_type yy_get_previous_state()
-	{
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
-
-	yy_current_state = yy_start;
-	yy_current_state += YY_AT_BOL();
-	yy_state_ptr = yy_state_buf;
-	*yy_state_ptr++ = yy_current_state;
-
-	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
-		{
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-			{
-			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 711 )
-				yy_c = yy_meta[(unsigned int) yy_c];
-			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-		*yy_state_ptr++ = yy_current_state;
-		}
-
-	return yy_current_state;
-	}
-
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *	next_state = yy_try_NUL_trans( current_state );
- */
-
-#ifdef YY_USE_PROTOS
-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
-#else
-static yy_state_type yy_try_NUL_trans( yy_current_state )
-yy_state_type yy_current_state;
-#endif
-	{
-	register int yy_is_jam;
-
-	register YY_CHAR yy_c = 1;
-	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-		{
-		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 711 )
-			yy_c = yy_meta[(unsigned int) yy_c];
-		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 710);
-	if ( ! yy_is_jam )
-		*yy_state_ptr++ = yy_current_state;
-
-	return yy_is_jam ? 0 : yy_current_state;
-	}
-
-
-#ifndef YY_NO_UNPUT
-#ifdef YY_USE_PROTOS
-static void yyunput( int c, register char *yy_bp )
-#else
-static void yyunput( c, yy_bp )
-int c;
-register char *yy_bp;
-#endif
-	{
-	register char *yy_cp = yy_c_buf_p;
-
-	/* undo effects of setting up yytext */
-	*yy_cp = yy_hold_char;
-
-	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
-		{ /* need to shift things up to make room */
-		/* +2 for EOB chars. */
-		register int number_to_move = yy_n_chars + 2;
-		register char *dest = &yy_current_buffer->yy_ch_buf[
-					yy_current_buffer->yy_buf_size + 2];
-		register char *source =
-				&yy_current_buffer->yy_ch_buf[number_to_move];
-
-		while ( source > yy_current_buffer->yy_ch_buf )
-			*--dest = *--source;
-
-		yy_cp += (int) (dest - source);
-		yy_bp += (int) (dest - source);
-		yy_current_buffer->yy_n_chars =
-			yy_n_chars = yy_current_buffer->yy_buf_size;
-
-		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
-			YY_FATAL_ERROR( "flex scanner push-back overflow" );
-		}
-
-	*--yy_cp = (char) c;
-
-
-	yytext_ptr = yy_bp;
-	yy_hold_char = *yy_cp;
-	yy_c_buf_p = yy_cp;
-	}
-#endif	/* ifndef YY_NO_UNPUT */
-
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-static int yyinput()
-#else
-static int input()
-#endif
-	{
-	int c;
-
-	*yy_c_buf_p = yy_hold_char;
-
-	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
-		{
-		/* yy_c_buf_p now points to the character we want to return.
-		 * If this occurs *before* the EOB characters, then it's a
-		 * valid NUL; if not, then we've hit the end of the buffer.
-		 */
-		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
-			/* This was really a NUL. */
-			*yy_c_buf_p = '\0';
-
-		else
-			{ /* need more input */
-			int offset = yy_c_buf_p - yytext_ptr;
-			++yy_c_buf_p;
-
-			switch ( yy_get_next_buffer() )
-				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					yyrestart( yyin );
-
-					/* fall through */
-
-				case EOB_ACT_END_OF_FILE:
-					{
-					if ( yywrap() )
-						return EOF;
-
-					if ( ! yy_did_buffer_switch_on_eof )
-						YY_NEW_FILE;
-#ifdef __cplusplus
-					return yyinput();
-#else
-					return input();
-#endif
-					}
-
-				case EOB_ACT_CONTINUE_SCAN:
-					yy_c_buf_p = yytext_ptr + offset;
-					break;
-				}
-			}
-		}
-
-	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
-	*yy_c_buf_p = '\0';	/* preserve yytext */
-	yy_hold_char = *++yy_c_buf_p;
-
-	yy_current_buffer->yy_at_bol = (c == '\n');
-
-	return c;
-	}
-#endif /* YY_NO_INPUT */
-
-#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file )
-#else
-void yyrestart( input_file )
-FILE *input_file;
-#endif
-	{
-	if ( ! yy_current_buffer )
-		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
-
-	yy_init_buffer( yy_current_buffer, input_file );
-	yy_load_buffer_state();
-	}
-
-
-#ifdef YY_USE_PROTOS
-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-#else
-void yy_switch_to_buffer( new_buffer )
-YY_BUFFER_STATE new_buffer;
-#endif
-	{
-	if ( yy_current_buffer == new_buffer )
-		return;
-
-	if ( yy_current_buffer )
-		{
-		/* Flush out information for old buffer. */
-		*yy_c_buf_p = yy_hold_char;
-		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
-		yy_current_buffer->yy_n_chars = yy_n_chars;
-		}
-
-	yy_current_buffer = new_buffer;
-	yy_load_buffer_state();
-
-	/* We don't actually know whether we did this switch during
-	 * EOF (yywrap()) processing, but the only time this flag
-	 * is looked at is after yywrap() is called, so it's safe
-	 * to go ahead and always set it.
-	 */
-	yy_did_buffer_switch_on_eof = 1;
-	}
-
-
-#ifdef YY_USE_PROTOS
-void yy_load_buffer_state( void )
-#else
-void yy_load_buffer_state()
-#endif
-	{
-	yy_n_chars = yy_current_buffer->yy_n_chars;
-	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
-	yyin = yy_current_buffer->yy_input_file;
-	yy_hold_char = *yy_c_buf_p;
-	}
-
-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
-#else
-YY_BUFFER_STATE yy_create_buffer( file, size )
-FILE *file;
-int size;
-#endif
-	{
-	YY_BUFFER_STATE b;
-
-	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_buf_size = size;
-
-	/* yy_ch_buf has to be 2 characters longer than the size given because
-	 * we need to put in 2 end-of-buffer characters.
-	 */
-	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
-	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_is_our_buffer = 1;
-
-	yy_init_buffer( b, file );
-
-	return b;
-	}
-
-
-#ifdef YY_USE_PROTOS
-void yy_delete_buffer( YY_BUFFER_STATE b )
-#else
-void yy_delete_buffer( b )
-YY_BUFFER_STATE b;
-#endif
-	{
-	if ( ! b )
-		return;
-
-	if ( b == yy_current_buffer )
-		yy_current_buffer = (YY_BUFFER_STATE) 0;
-
-	if ( b->yy_is_our_buffer )
-		yy_flex_free( (void *) b->yy_ch_buf );
-
-	yy_flex_free( (void *) b );
-	}
-
-
-
-#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
-#else
-void yy_init_buffer( b, file )
-YY_BUFFER_STATE b;
-FILE *file;
-#endif
-
-
-	{
-	yy_flush_buffer( b );
-
-	b->yy_input_file = file;
-	b->yy_fill_buffer = 1;
-
-#if YY_ALWAYS_INTERACTIVE
-	b->yy_is_interactive = 1;
-#else
-#if YY_NEVER_INTERACTIVE
-	b->yy_is_interactive = 0;
-#else
-	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif
-#endif
-	}
-
-
-#ifdef YY_USE_PROTOS
-void yy_flush_buffer( YY_BUFFER_STATE b )
-#else
-void yy_flush_buffer( b )
-YY_BUFFER_STATE b;
-#endif
-
-	{
-	if ( ! b )
-		return;
-
-	b->yy_n_chars = 0;
-
-	/* We always need two end-of-buffer characters.  The first causes
-	 * a transition to the end-of-buffer state.  The second causes
-	 * a jam in that state.
-	 */
-	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-	b->yy_buf_pos = &b->yy_ch_buf[0];
-
-	b->yy_at_bol = 1;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	if ( b == yy_current_buffer )
-		yy_load_buffer_state();
-	}
-
-
-#ifndef YY_NO_SCAN_BUFFER
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
-#else
-YY_BUFFER_STATE yy_scan_buffer( base, size )
-char *base;
-yy_size_t size;
-#endif
-	{
-	YY_BUFFER_STATE b;
-
-	if ( size < 2 ||
-	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
-	     base[size-1] != YY_END_OF_BUFFER_CHAR )
-		/* They forgot to leave room for the EOB's. */
-		return 0;
-
-	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
-
-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
-	b->yy_buf_pos = b->yy_ch_buf = base;
-	b->yy_is_our_buffer = 0;
-	b->yy_input_file = 0;
-	b->yy_n_chars = b->yy_buf_size;
-	b->yy_is_interactive = 0;
-	b->yy_at_bol = 1;
-	b->yy_fill_buffer = 0;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	yy_switch_to_buffer( b );
-
-	return b;
-	}
-#endif
-
-
-#ifndef YY_NO_SCAN_STRING
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
-#else
-YY_BUFFER_STATE yy_scan_string( yy_str )
-yyconst char *yy_str;
-#endif
-	{
-	int len;
-	for ( len = 0; yy_str[len]; ++len )
-		;
-
-	return yy_scan_bytes( yy_str, len );
-	}
-#endif
-
-
-#ifndef YY_NO_SCAN_BYTES
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
-#else
-YY_BUFFER_STATE yy_scan_bytes( bytes, len )
-yyconst char *bytes;
-int len;
-#endif
-	{
-	YY_BUFFER_STATE b;
-	char *buf;
-	yy_size_t n;
-	int i;
-
-	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = len + 2;
-	buf = (char *) yy_flex_alloc( n );
-	if ( ! buf )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
-
-	for ( i = 0; i < len; ++i )
-		buf[i] = bytes[i];
-
-	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
-
-	b = yy_scan_buffer( buf, n );
-	if ( ! b )
-		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
-
-	/* It's okay to grow etc. this buffer, and we should throw it
-	 * away when we're done.
-	 */
-	b->yy_is_our_buffer = 1;
-
-	return b;
-	}
-#endif
-
-
-#ifndef YY_NO_PUSH_STATE
-#ifdef YY_USE_PROTOS
-static void yy_push_state( int new_state )
-#else
-static void yy_push_state( new_state )
-int new_state;
-#endif
-	{
-	if ( yy_start_stack_ptr >= yy_start_stack_depth )
-		{
-		yy_size_t new_size;
-
-		yy_start_stack_depth += YY_START_STACK_INCR;
-		new_size = yy_start_stack_depth * sizeof( int );
-
-		if ( ! yy_start_stack )
-			yy_start_stack = (int *) yy_flex_alloc( new_size );
-
-		else
-			yy_start_stack = (int *) yy_flex_realloc(
-					(void *) yy_start_stack, new_size );
-
-		if ( ! yy_start_stack )
-			YY_FATAL_ERROR(
-			"out of memory expanding start-condition stack" );
-		}
-
-	yy_start_stack[yy_start_stack_ptr++] = YY_START;
-
-	BEGIN(new_state);
-	}
-#endif
-
-
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state()
-	{
-	if ( --yy_start_stack_ptr < 0 )
-		YY_FATAL_ERROR( "start-condition stack underflow" );
-
-	BEGIN(yy_start_stack[yy_start_stack_ptr]);
-	}
-#endif
-
-
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state()
-	{
-	return yy_start_stack[yy_start_stack_ptr - 1];
-	}
-#endif
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-#ifdef YY_USE_PROTOS
-static void yy_fatal_error( yyconst char msg[] )
-#else
-static void yy_fatal_error( msg )
-char msg[];
-#endif
-	{
-	(void) fprintf( stderr, "%s\n", msg );
-	exit( YY_EXIT_FAILURE );
-	}
-
-
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-		yytext[yyleng] = yy_hold_char; \
-		yy_c_buf_p = yytext + n; \
-		yy_hold_char = *yy_c_buf_p; \
-		*yy_c_buf_p = '\0'; \
-		yyleng = n; \
-		} \
-	while ( 0 )
-
-
-/* Internal utility routines. */
-
-#ifndef yytext_ptr
-#ifdef YY_USE_PROTOS
-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
-#else
-static void yy_flex_strncpy( s1, s2, n )
-char *s1;
-yyconst char *s2;
-int n;
-#endif
-	{
-	register int i;
-	for ( i = 0; i < n; ++i )
-		s1[i] = s2[i];
-	}
-#endif
-
-#ifdef YY_NEED_STRLEN
-#ifdef YY_USE_PROTOS
-static int yy_flex_strlen( yyconst char *s )
-#else
-static int yy_flex_strlen( s )
-yyconst char *s;
-#endif
-	{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-	}
-#endif
-
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_alloc( yy_size_t size )
-#else
-static void *yy_flex_alloc( size )
-yy_size_t size;
-#endif
-	{
-	return (void *) malloc( size );
-	}
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_realloc( void *ptr, yy_size_t size )
-#else
-static void *yy_flex_realloc( ptr, size )
-void *ptr;
-yy_size_t size;
-#endif
-	{
-	/* The cast to (char *) in the following accommodates both
-	 * implementations that use char* generic pointers, and those
-	 * that use void* generic pointers.  It works with the latter
-	 * because both ANSI C and C++ allow castless assignment from
-	 * any pointer type to void*, and deal with argument conversions
-	 * as though doing an assignment.
-	 */
-	return (void *) realloc( (char *) ptr, size );
-	}
-
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
-	{
-	free( ptr );
-	}
-
-#if YY_MAIN
-int main()
-	{
-	yylex();
-	return 0;
-	}
-#endif
-#line 734 "../parser.l"
-
-
-
-static char *StringToLex;
-
-#ifndef FLEX_SCANNER
-static FILE *lexFP;
-
-static int input()
-{
-    int ret;
-    
-    if (StringToLex != NULL) {
-	ret = *StringToLex;
-	if (ret == NULLCHAR)
-	  ret = EOF;
-	else
-	  StringToLex++;
-    } else if (unputCount > 0) {
-	ret = unputBuffer[--unputCount];
-    } else {
-	ret = fgetc(lexFP);
-    }    
-
-    if (ret == EOF) 
-      return 0;
-    else
-      return ret;
-}
-
-/*
- * Return offset of next pattern within current file
- */
-int yyoffset()
-{
-    int offset = ftell(lexFP) - unputCount;
-
-    if (offset < 0) {
-	offset = 0;
-    }
-    return(offset);
-}
- 
-static void output(ch)
-     int ch;
-{
-    fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
-	    ch, ch);
-}
-
-static void unput(ch)
-     int ch;
-{
-    if (ch == 0) return;
-    if (StringToLex != NULL) {
-	StringToLex--;
-    } else {
-	if (unputCount >= UNPUT_BUF_SIZE)
-	  fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
-		  ch, ch);
-	unputBuffer[unputCount++] = ch;
-    }
-}
-
-/* Get ready to lex from a new file.  Kludge below sticks
-   an artificial newline at the front of the file, which the
-   above grammar ignores, but which makes ^ at start of pattern
-   match at the real start of the file.
-*/
-void yynewfile(f)
-     FILE *f;
-{
-    lexFP = f;
-    StringToLex = NULL;
-    unputCount = 0;
-    unput('\n'); /* kludge */
-}
-
-/* Get ready to lex from a string.  ^ at start of pattern WON'T
-   match at the start of the string!
-*/
-void yynewstr(s)
-     char *s;
-{
-    lexFP = NULL;
-    StringToLex = s;
-    unputCount = 0;
-}
-#endif /*!FLEX_SCANNER*/
-
-#ifdef FLEX_SCANNER
-void my_yy_input(buf, result, max_size)
-     char *buf;
-     int *result;
-     int max_size;
-{
-    int count;
-
-    if (StringToLex != NULL) {
-	count = 0;
-	while (*StringToLex != NULLCHAR) {
-	    *buf++ = *StringToLex++;
-	    count++;
-	}
-	*result = count;
-	return;
-    } else {
-	count = fread(buf, 1, max_size, yyin);
-	if (count == 0) {
-	    *result = YY_NULL;
-	} else {
-	    *result = count;
-	}
-	return;
-    }    
-}
-
-static YY_BUFFER_STATE my_file_buffer = NULL;
-
-/*
-    Return offset of next pattern in the current file.
-*/
-int yyoffset()
-{
-    int pos = yy_c_buf_p - yy_current_buffer->yy_ch_buf;
-
-    return(ftell(yy_current_buffer->yy_input_file) -
-         yy_n_chars + pos);
-}
-
-
-void yynewstr(s)
-     char *s;
-{
-    if (my_file_buffer != NULL)
-      yy_delete_buffer(my_file_buffer);
-    StringToLex = s;
-    my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
-    yy_switch_to_buffer(my_file_buffer);
-}
-
-void yynewfile(f)
-     FILE *f;
-{
-    if (my_file_buffer != NULL)
-      yy_delete_buffer(my_file_buffer);
-    StringToLex = NULL;
-    my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
-    yy_switch_to_buffer(my_file_buffer);
-}
-#endif /*FLEX_SCANNER*/
-
-int yywrap()
-{
-    return TRUE;
-}
-
-/* Parse a move from the given string s */
-/* ^ at start of pattern WON'T work here unless using flex */
-ChessMove yylexstr(boardIndex, s)
-     int boardIndex;
-     char *s;
-{
-    ChessMove ret;
-    char *oldStringToLex;
-#ifdef FLEX_SCANNER
-    YY_BUFFER_STATE buffer, oldBuffer;
-#endif
-    
-    yyboardindex = boardIndex;
-    oldStringToLex = StringToLex;
-    StringToLex = s;
-#ifdef FLEX_SCANNER
-    buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
-    oldBuffer = YY_CURRENT_BUFFER;
-    yy_switch_to_buffer(buffer);
-#endif /*FLEX_SCANNER*/
-
-    ret = (ChessMove) yylex();
-
-#ifdef FLEX_SCANNER
-    if (oldBuffer != NULL) 
-      yy_switch_to_buffer(oldBuffer);
-    yy_delete_buffer(buffer);
-#endif /*FLEX_SCANNER*/
-    StringToLex = oldStringToLex;
-
-    return ret;
-}
diff --git a/parser.h b/parser.h
index 434a971..48e1811 100644
--- a/parser.h
+++ b/parser.h
@@ -1,59 +1,64 @@
-/*
- * parser.h -- Interface to XBoard move parser
- * $Id: parser.h,v 2.1 2003/10/27 19:21:00 mann Exp $
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 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 XBoard distributed
- * by the Free Software Foundation:
- * ------------------------------------------------------------------------
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
-
-extern void yynewfile P((FILE *f));
-extern void yynewstr P((char *s));
-extern int yylex P((void));
-extern ChessMove yylexstr P((int boardIndex, char *s));
-extern char currentMoveString[];
-extern int yyboardindex;
-extern int yyskipmoves;  /* If TRUE, all moves are reported as AmbiguousMove
-			    instead of being disambiguated. */
-extern char *yy_text;  /* Needed because yytext can be either a char[]
-			  or a (non-constant) char* */
-extern int yyoffset P((void));
+/*
+ * parser.h -- Interface to XBoard move parser
+ * $Id: parser.h,v 2.1 2003/10/27 19:21:00 mann Exp $
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 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 XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+extern void yynewfile P((FILE *f));
+extern void yynewstr P((char *s));
+extern int yylex P((void));
+extern ChessMove yylexstr P((int boardIndex, char *s));
+extern char currentMoveString[];
+extern int yyboardindex;
+extern int yyskipmoves;  /* If TRUE, all moves are reported as AmbiguousMove
+			    instead of being disambiguated. */
+extern char *yy_text;  /* Needed because yytext can be either a char[]
+			  or a (non-constant) char* */
+extern int yyoffset P((void));
+extern char initialRights[BOARD_SIZE];
+extern char castlingRights[MAX_MOVES][BOARD_SIZE];
diff --git a/parser.l b/parser.l
old mode 100644
new mode 100755
index 1030116..29a2fa9
--- a/parser.l
+++ b/parser.l
@@ -1,922 +1,1126 @@
-%a 10000
-%o 10000
-%e 2000
-%k 2500
-%p 7000
-%n 1000
-%{
-/*
- * parser.l -- lex parser of algebraic chess moves for XBoard
- * $Id: parser.l,v 2.1 2003/10/27 19:21:00 mann Exp $
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 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 XBoard distributed
- * by the Free Software Foundation:
- * ------------------------------------------------------------------------
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
-
-/* This parser handles all forms of promotion.
- * The parser resolves ambiguous moves by searching and check-testing.
- * It also parses comments of the form [anything] or (anything).
- */
-
-#include "config.h"
-
-#define NO_CONSTRAINT	-1
-#undef YYLMAX
-#define YYLMAX			4096
-#define UNPUT_BUF_SIZE		YYLMAX
-
-#ifdef FLEX_SCANNER
-/* yytext is probably a char*, but could be a char[].  yy_text is set
-   in YY_DECL below, because if yytext is a char*, its value is not
-   constant. */
-char *yy_text;
-#else /*!FLEX_SCANNER*/
-/* yytext is definitely a char[], so yy_text can be set here, statically. */
-char *yy_text = (char *) yytext;
-#endif
-
-#ifdef FLEX_SCANNER
-/* This is flex */
-#undef YY_INPUT
-#define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
-#undef YY_DECL
-#define YY_DECL                     \
-    int _yylex YY_PROTO((void));    \
-    int yylex YY_PROTO((void))      \
-    {                               \
-	int result = _yylex();      \
-	yy_text = (char *) yytext;  \
-	return(result);             \
-    }                               \
-    int _yylex YY_PROTO((void))
-#else
-/* This is lex */
-#undef input
-#undef output
-#undef unput
-#endif
-
-/* The includes must be here, below the #undef input */
-
-#include <ctype.h>
-
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <string.h>
-#else /* not STDC_HEADERS */
-# if HAVE_STRING_H
-#  include <string.h>
-# else /* not HAVE_STRING_H */
-#  include <strings.h>
-# endif /* not HAVE_STRING_H */
-#endif /* not STDC_HEADERS */
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#if defined(_amigados)
-# include <errno.h>
-# if HAVE_FCNTL_H
-#  include <fcntl.h>    /*  isatty() prototype  */
-# endif /*  HAVE_FCNTL_H        */
-#endif  /*  defined(_amigados)  */
-
-#include "common.h"
-#include "backend.h"
-#include "frontend.h"
-#include "parser.h"
-#include "moves.h"
-
-extern int PosFlags P((int));
-
-extern Board	boards[MAX_MOVES];
-int		yyboardindex;
-int             yyskipmoves = FALSE;
-char		currentMoveString[YYLMAX];
-#ifndef FLEX_SCANNER
-char		unputBuffer[UNPUT_BUF_SIZE];
-int		unputCount = 0;
-#endif
-
-#ifdef FLEX_SCANNER
-void my_yy_input P((char *buf, int *result, int max_size));
-#else /*!FLEX_SCANNER*/
-static int input P((void));
-static void output P((int ch));
-static void unput P((int ch));
-int yylook P((void));
-int yyback P((int *, int));
-#endif
-#undef yywrap
-int yywrap P((void));
-extern void CopyBoard P((Board to, Board from));
-
-%}
-%%
-
-[RrBbNnQqKkPp][/]?[a-h][1-8][xX:-]?[a-h][1-8](=?\(?[RrBbNnQqKk]\)?)? {
-    /*
-     * Fully-qualified algebraic move, possibly with promotion
-     */
-    int skip1 = 0, skip2 = 0;
-    ChessSquare piece;
-    ChessMove result;
-    
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove the / */
-    if (yytext[1] == '/') skip1 = 1;
-    
-    /* remove the [xX:-] */
-    if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
-	(yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
-    
-    currentMoveString[0] = yytext[1+skip1];
-    currentMoveString[1] = yytext[2+skip1];
-    currentMoveString[2] = yytext[3+skip1+skip2];
-    currentMoveString[3] = yytext[4+skip1+skip2];
-    currentMoveString[4] = NULLCHAR;
-    
-    if (yyleng-skip1-skip2 > 5) {
-	if (yytext[yyleng-1] == ')') {
-	    currentMoveString[4] = ToLower(yytext[yyleng-2]);
-	} else {
-	    currentMoveString[4] = ToLower(yytext[yyleng-1]);
-	}
-	currentMoveString[5] = NULLCHAR;
-    }
-
-    piece = boards[yyboardindex]
-      [currentMoveString[1] - '1'][currentMoveString[0] - 'a'];
-    if (ToLower(yytext[0]) != ToLower(PieceToChar(piece)))
-      return (int) IllegalMove;
-
-    result = LegalityTest(boards[yyboardindex],
-			  PosFlags(yyboardindex), EP_UNKNOWN,
-			  currentMoveString[1] - '1',
-			  currentMoveString[0] - 'a',
-			  currentMoveString[3] - '1',
-			  currentMoveString[2] - 'a',
-			  currentMoveString[4]);
-
-    if (currentMoveString[4] == NULLCHAR &&
-	(result == WhitePromotionQueen || result == BlackPromotionQueen)) {
-	currentMoveString[4] = 'q';
-	currentMoveString[5] = NULLCHAR;
-    }
-
-    return (int) result;
-}
-
-[a-h][1-8][xX:-]?[a-h][1-8](=?\(?[RrBbNnQqKk]\)?)?	{
-    /*
-     * Simple algebraic move, possibly with promotion
-     */
-    int skip = 0;
-    ChessMove result;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove the [xX:-] */
-    if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
-	(yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
-
-    currentMoveString[0] = yytext[0];
-    currentMoveString[1] = yytext[1];
-    currentMoveString[2] = yytext[2+skip];
-    currentMoveString[3] = yytext[3+skip];
-    currentMoveString[4] = NULLCHAR;
-
-    if (yyleng-skip > 4) {
-	if (yytext[yyleng-1] == ')') {
-	    currentMoveString[4] = ToLower(yytext[yyleng-2]);
-	} else {
-	    currentMoveString[4] = ToLower(yytext[yyleng-1]);
-	}
-	currentMoveString[5] = NULLCHAR;
-    }
-
-    result = LegalityTest(boards[yyboardindex],
-			  PosFlags(yyboardindex), EP_UNKNOWN,
-			  currentMoveString[1] - '1',
-			  currentMoveString[0] - 'a',
-			  currentMoveString[3] - '1',
-			  currentMoveString[2] - 'a',
-			  currentMoveString[4]);
-
-    if (currentMoveString[4] == NULLCHAR &&
-	(result == WhitePromotionQueen || result == BlackPromotionQueen)) {
-	currentMoveString[4] = 'q';
-	currentMoveString[5] = NULLCHAR;
-    }
-
-    return (int) result;
-}
-
-[a-h][1-8](=?\(?[RrBbNnQqKk]\)?)?	{
-    /*
-     * Pawn move, possibly with promotion
-     */
-    DisambiguateClosure cl;
-    int skip = 0;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove the =() */
-    if (yytext[2] == '=') skip++;
-    if (yytext[2+skip] == '(') skip++;
-
-    cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
-    cl.rfIn = -1;
-    cl.ffIn = yytext[0] - 'a';
-    cl.rtIn = yytext[1] - '1';
-    cl.ftIn = yytext[0] - 'a';
-    cl.promoCharIn = yytext[2+skip];
-    Disambiguate(boards[yyboardindex],
-		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
-
-    currentMoveString[0] = cl.ff + 'a';
-    currentMoveString[1] = cl.rf + '1';
-    currentMoveString[2] = cl.ft + 'a';
-    currentMoveString[3] = cl.rt + '1';
-    currentMoveString[4] = cl.promoChar;
-    currentMoveString[5] = NULLCHAR;
-
-    return (int) cl.kind;
-}
-
-
-(ab|bc|cd|de|ef|fg|gh|hg|gf|fe|ed|dc|cb|ba|([a-h][xX:-][a-h]))(=?\(?[RrBbNnQqKk]\)?)?(ep|"e.p.")? {
-    /*
-     * Pawn capture, possibly with promotion, possibly ambiguous
-     */
-    DisambiguateClosure cl;
-    int skip1 = 0, skip2 = 0;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove trailing ep or e.p. (nonstandard PGN) */
-    if (yytext[yyleng-1] == 'p') {
-      yyleng -= 2;
-      yytext[yyleng] = NULLCHAR;
-    } else if (yytext[yyleng-1] == '.') {
-      yyleng -= 4;
-      yytext[yyleng] = NULLCHAR;
-    }
-
-    /* remove the [xX:-] and =() */
-    if ((yytext[1] == 'x') || (yytext[1] == 'X')
-	|| (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
-    if (yytext[2+skip1] == '=') skip2++;
-    if (yytext[2+skip1+skip2] == '(') skip2++;
-
-    cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
-    cl.rfIn = -1;
-    cl.ffIn = yytext[0] - 'a';
-    cl.rtIn = -1;
-    cl.ftIn = yytext[1+skip1] - 'a';
-    cl.promoCharIn = yytext[2+skip1+skip2];
-    Disambiguate(boards[yyboardindex],
-		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
-
-    currentMoveString[0] = cl.ff + 'a';
-    currentMoveString[1] = cl.rf + '1';
-    currentMoveString[2] = cl.ft + 'a';
-    currentMoveString[3] = cl.rt + '1';
-    currentMoveString[4] = cl.promoChar;
-    currentMoveString[5] = NULLCHAR;
-
-    return (int) cl.kind;
-}
-
-[a-h][xX:]?[a-h][1-8](=?\(?[RrBbNnQqKk]\)?)?(ep|"e.p.")? {
-    /*
-     * unambiguously abbreviated Pawn capture, possibly with promotion
-     */
-    int skip = 0;
-    ChessMove result;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove trailing ep or e.p. (nonstandard PGN) */
-    if (yytext[yyleng-1] == 'p') {
-      yyleng -= 2;
-      yytext[yyleng] = NULLCHAR;
-    } else if (yytext[yyleng-1] == '.') {
-      yyleng -= 4;
-      yytext[yyleng] = NULLCHAR;
-    }
-
-    /* remove the [xX:-] */
-    if ((yytext[1] == 'x') || (yytext[1] == 'X')
-	|| (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
-
-    currentMoveString[0] = yytext[0];
-    currentMoveString[2] = yytext[1+skip];
-    currentMoveString[3] = yytext[2+skip];
-    if (WhiteOnMove(yyboardindex)) {
-	if (yytext[2+skip] == '1') return (int) ImpossibleMove;
-	currentMoveString[1] = yytext[2+skip] - 1;
-    } else {
-	if (yytext[2+skip] == '8') return (int) ImpossibleMove;
-	currentMoveString[1] = yytext[2+skip] + 1;
-    }
-    if (yyleng-skip > 3) {
-	if (yytext[yyleng-1] == ')')
-	  currentMoveString[4] = ToLower(yytext[yyleng-2]);
-	else
-	  currentMoveString[4] = ToLower(yytext[yyleng-1]);
-	currentMoveString[5] = NULLCHAR;
-    } else {
-	currentMoveString[4] = NULLCHAR;
-    }
-
-    result = LegalityTest(boards[yyboardindex],
-			  PosFlags(yyboardindex), EP_UNKNOWN,
-			  currentMoveString[1] - '1',
-			  currentMoveString[0] - 'a',
-			  currentMoveString[3] - '1',
-			  currentMoveString[2] - 'a',
-			  currentMoveString[4]);
-
-    if (currentMoveString[4] == NULLCHAR &&
-	(result == WhitePromotionQueen || result == BlackPromotionQueen)) {
-	currentMoveString[4] = 'q';
-	currentMoveString[5] = NULLCHAR;
-    }
-
-    if (result != IllegalMove) return (int) result;
-
-    /* Special case: improperly written en passant capture */
-    if (WhiteOnMove(yyboardindex)) {
-	if (currentMoveString[3] == '5') {
-	    currentMoveString[1] = '5';
-	    currentMoveString[3] = '6';
-	} else {
-	    return (int) IllegalMove;
-	}
-    } else {
-	if (currentMoveString[3] == '4') {
-	    currentMoveString[1] = '4';
-	    currentMoveString[3] = '3';
-	} else {
-	    return (int) IllegalMove;
-	}
-    }
-
-    result = LegalityTest(boards[yyboardindex],
-			  PosFlags(yyboardindex), EP_UNKNOWN,
-			  currentMoveString[1] - '1',
-			  currentMoveString[0] - 'a',
-			  currentMoveString[3] - '1',
-			  currentMoveString[2] - 'a',
-			  currentMoveString[4]);
-
-    if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
-      return (int) result;
-    else
-      return (int) IllegalMove;
-}
-
-[RrBbNnQqKk][xX:-]?[a-h][1-8]  {
-    /*
-     * piece move, possibly ambiguous
-     */
-    DisambiguateClosure cl;
-    int skip = 0;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove the [xX:-] */
-    if ((yytext[1] == 'x') || (yytext[1] == 'X')
-	|| (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
-
-    if (WhiteOnMove(yyboardindex)) {
-	cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
-    } else {
-	cl.pieceIn = CharToPiece(ToLower(yytext[0]));
-    }
-    cl.rfIn = -1;
-    cl.ffIn = -1;
-    cl.rtIn = yytext[2+skip] - '1';
-    cl.ftIn = yytext[1+skip] - 'a';
-    cl.promoCharIn = NULLCHAR;
-    Disambiguate(boards[yyboardindex],
-		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
-
-    currentMoveString[0] = cl.ff + 'a';
-    currentMoveString[1] = cl.rf + '1';
-    currentMoveString[2] = cl.ft + 'a';
-    currentMoveString[3] = cl.rt + '1';
-    currentMoveString[4] = cl.promoChar;
-    currentMoveString[5] = NULLCHAR;
-
-    return (int) cl.kind;
-}
-
-[RrBbNnQqKk][a-h1-8][xX:-]?[a-h][1-8]	{
-    /*
-     * piece move with rank or file disambiguator
-     */
-    DisambiguateClosure cl;
-    int skip = 0;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    /* remove the [xX:-] */
-    if ((yytext[2] == 'x') || (yytext[2] == 'X')
-	|| (yytext[2] == ':') || (yytext[2] == '-')) skip = 1;
-
-    if (WhiteOnMove(yyboardindex)) {
-	cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
-    } else {
-	cl.pieceIn = CharToPiece(ToLower(yytext[0]));
-    }
-    if (isalpha(yytext[1])) {
-	cl.rfIn = -1;
-	cl.ffIn = yytext[1] - 'a';
-    } else {
-	cl.rfIn = yytext[1] - '1';
-	cl.ffIn = -1;
-    }
-    cl.rtIn = yytext[3+skip] - '1';
-    cl.ftIn = yytext[2+skip] - 'a';
-    cl.promoCharIn = NULLCHAR;
-    Disambiguate(boards[yyboardindex],
-		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
-
-    currentMoveString[0] = cl.ff + 'a';
-    currentMoveString[1] = cl.rf + '1';
-    currentMoveString[2] = cl.ft + 'a';
-    currentMoveString[3] = cl.rt + '1';
-    currentMoveString[4] = cl.promoChar;
-    currentMoveString[5] = NULLCHAR;
-
-    return (int) cl.kind;
-}
-
-000|0-0-0|ooo|OOO|o-o-o|O-O-O	{
-    int rf, ff, rt, ft;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    if (WhiteOnMove(yyboardindex)) {
-	if (boards[yyboardindex][0][3] == WhiteKing) {
-	    /* ICS wild castling */
-	    strcpy(currentMoveString, "d1f1");
-	    rf = 0;
-	    ff = 3;
-	    rt = 0;
-	    ft = 5;
-	} else {
-	    strcpy(currentMoveString, "e1c1");
-	    rf = 0;
-	    ff = 4;
-	    rt = 0;
-	    ft = 2;
-	}
-    } else{ 
-	if (boards[yyboardindex][7][3] == BlackKing) {
-	    /* ICS wild castling */
-	    strcpy(currentMoveString, "d8f8");
-	    rf = 7;
-	    ff = 3;
-	    rt = 7;
-	    ft = 5;
-	} else {
-	    strcpy(currentMoveString, "e8c8");
-	    rf = 7;
-	    ff = 4;
-	    rt = 7;
-	    ft = 2;
-	}
-    }
-    return (int) LegalityTest(boards[yyboardindex],
-			      PosFlags(yyboardindex), EP_UNKNOWN,
-			      rf, ff, rt, ft, NULLCHAR);
-}
-
-00|0-0|oo|OO|o-o|O-O	{
-    int rf, ff, rt, ft;
-
-    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
-
-    if (WhiteOnMove(yyboardindex)) {
-	if (boards[yyboardindex][0][3] == WhiteKing) {
-	    /* ICS wild castling */
-	    strcpy(currentMoveString, "d1b1");
-	    rf = 0;
-	    ff = 3;
-	    rt = 0;
-	    ft = 1;
-	} else {
-	    strcpy(currentMoveString, "e1g1");
-	    rf = 0;
-	    ff = 4;
-	    rt = 0;
-	    ft = 6;
-	}
-    } else {
-	if (boards[yyboardindex][7][3] == BlackKing) {
-	    /* ICS wild castling */
-	    strcpy(currentMoveString, "d8b8");
-	    rf = 7;
-	    ff = 3;
-	    rt = 7;
-	    ft = 1;
-	} else {
-	    strcpy(currentMoveString, "e8g8");
-	    rf = 7;
-	    ff = 4;
-	    rt = 7;
-	    ft = 6;
-	}
-    }
-    return (int) LegalityTest(boards[yyboardindex],
-			      PosFlags(yyboardindex), EP_UNKNOWN,
-			      rf, ff, rt, ft, NULLCHAR);
-}
-
-[PpNnBbRrQq]@[a-h][1-8] {
-    /* Bughouse piece drop.  No legality checking for now. */
-    currentMoveString[1] = '@';
-    currentMoveString[2] = yytext[2];
-    currentMoveString[3] = yytext[3];
-    currentMoveString[4] = NULLCHAR;
-    if (WhiteOnMove(yyboardindex)) {
-	currentMoveString[0] = ToUpper(yytext[0]);
-	return (int) WhiteDrop;
-    } else {
-	currentMoveString[0] = ToLower(yytext[0]);
-	return (int) BlackDrop;
-    }
-}
-
-[Rr]esign(s|ed)?  {
-    if (WhiteOnMove(yyboardindex))
-      return (int) BlackWins;
-    else
-      return (int) WhiteWins;
-}
-
-(([Ww](hite)?)|([Bb](lack)?))" "(([Rr]esign)|([Ff]orfeit))(s|ed)?  {
-    return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
-}
-
-(([Ww](hite)?)|([Bb](lack)?))" "[Dd]isconnect(s|ed)  {
-    return (int) GameUnfinished;
-}
-
-[Ss]talemate  {
-    return (int) GameIsDrawn;
-}
-
-"+-+"  {
-    return (int) GameIsDrawn;
-}
-
-([Cc]heck)?[Mm]ate {
-    if (WhiteOnMove(yyboardindex))
-      return (int) BlackWins;
-    else
-      return (int) WhiteWins;
-}
-
-"++"  {
-    if (WhiteOnMove(yyboardindex))
-      return (int) BlackWins;
-    else
-      return (int) WhiteWins;
-}
-
-[Dd]raw(n)?(" "by)?(" "[Rr]epetition)|(" "[Aa]gree(d|ment))  {
-    return (int) GameIsDrawn;
-}
-
-[Dd]raw(n)?(" (".*")")?  {
-    return (int) GameIsDrawn;
-}
-
-(([Ww](hite)?)|([Bb](lack)?))" "([Mm]ate(s|ed)?)|([Ww][io]n(s)?.*)  {
-    return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
-}
-
-(([Ww](hite)?)|([Bb](lack)?))" "([Mm]ate(s|ed)?)|([Ll]os[tes]+.*)  {
-    return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
-}
-
-("{"[^\}\n]*"} ")?(1-0|"1 - 0"|"1/0"|"1 / 0"|"1:0"|"1 : 0")(" (".*")"|" {".*"}")? { 
-    return (int) WhiteWins;
-}
-
-("{"[^\}\n]*"} ")?(0-1|"0 - 1"|"0/1"|"0 / 1"|"0:1"|"0 : 1")(" (".*")"|" {".*"}")? { 
-    return (int) BlackWins;
-}
-
-("{"[^\}\n]*"} ")?("1/2"|"1 / 2")(" "?[-:]" "?("1/2"|"1 / 2"))?(" (".*")"|" {".*"}")? {
-    return (int) GameIsDrawn;
-}
-
-("{"[^\}\n]*"} ")?"*"(" (".*")"|" {".*"}")? {
-    return (int) GameUnfinished;
-}
-
-[1-9][0-9]*/"."?[ \t\n]*[a-hNnPpRrBQqKkOo]    {
-    /* move numbers */
-    if ((yyleng == 1) && (yytext[0] == '1'))
-      return (int) MoveNumberOne;
-}
-
-\([0-9]+:[0-9][0-9](\.[0-9]+)?\)|\{[0-9]+:[0-9][0-9](\.[0-9]+)?\} {
-    /* elapsed time indication, e.g. (0:12) or {10:21.071} */ 
-    return (int) ElapsedTime;
-}
-
-"[--"[^\]]*"--]" {
-    /* position diagram enclosed in [-- --] */
-    return (int) PositionDiagram;
-}
-
-^"{--------------"\n[^\}]*\n"--------------}"$ {
-    /* position diagram enclosed in {-- --} */
-    return (int) PositionDiagram;
-}
-
-\[[ \t\n]*[A-Za-z0-9][A-Za-z0-9_+#=-]*[ \t\n]*\"[^"]*\"[ \t\n]*\] {
-    return (int) PGNTag;
-}    
-
-[Gg](nu|NU)" "?[Cc](hess|HESS).*[Gg](ame|AME) {
-    return (int) GNUChessGame;
-}
-
-^[#;%]" "[^ ]*(" game file"|" position file").*$ {
-    return (int) XBoardGame;
-}
-
-\$[0-9]+	{				/* numeric annotation glyph */
-    return (int) NAG;
-}
-
-\{[^\}]*\}	{        			/* anything in {} */
-    return (int) Comment; 
-}
-
-;.*$ {                                          /* ; to end of line */
-    return (int) Comment;
-}
-
-\[[^\]]*\]	{        			/* anything in [] */
-    return (int) Comment; 
-}
-
-\([^()]*(\([^()]*\)[^()]*)+[^()]*\)  { 	  	/* nested () */
-    return (int) Comment; 
-}
-
-\([^)][^)]+\)   { 				/* >=2 chars in () */
-    return (int) Comment; 
-}       
-
-^[-a-zA-Z0-9]+:" ".*(\n[ \t]+.*)*  {
-        /* Skip mail headers */
-}
-
-[a-zA-Z0-9'-]+			{
-        /* Skip random words */
-}
-
-.|\n				{
-        /* Skip everything else */
-}
-
-%%
-
-
-static char *StringToLex;
-
-#ifndef FLEX_SCANNER
-static FILE *lexFP;
-
-static int input()
-{
-    int ret;
-    
-    if (StringToLex != NULL) {
-	ret = *StringToLex;
-	if (ret == NULLCHAR)
-	  ret = EOF;
-	else
-	  StringToLex++;
-    } else if (unputCount > 0) {
-	ret = unputBuffer[--unputCount];
-    } else {
-	ret = fgetc(lexFP);
-    }    
-
-    if (ret == EOF) 
-      return 0;
-    else
-      return ret;
-}
-
-/*
- * Return offset of next pattern within current file
- */
-int yyoffset()
-{
-    int offset = ftell(lexFP) - unputCount;
-
-    if (offset < 0) {
-	offset = 0;
-    }
-    return(offset);
-}
- 
-static void output(ch)
-     int ch;
-{
-    fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
-	    ch, ch);
-}
-
-static void unput(ch)
-     int ch;
-{
-    if (ch == 0) return;
-    if (StringToLex != NULL) {
-	StringToLex--;
-    } else {
-	if (unputCount >= UNPUT_BUF_SIZE)
-	  fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
-		  ch, ch);
-	unputBuffer[unputCount++] = ch;
-    }
-}
-
-/* Get ready to lex from a new file.  Kludge below sticks
-   an artificial newline at the front of the file, which the
-   above grammar ignores, but which makes ^ at start of pattern
-   match at the real start of the file.
-*/
-void yynewfile(f)
-     FILE *f;
-{
-    lexFP = f;
-    StringToLex = NULL;
-    unputCount = 0;
-    unput('\n'); /* kludge */
-}
-
-/* Get ready to lex from a string.  ^ at start of pattern WON'T
-   match at the start of the string!
-*/
-void yynewstr(s)
-     char *s;
-{
-    lexFP = NULL;
-    StringToLex = s;
-    unputCount = 0;
-}
-#endif /*!FLEX_SCANNER*/
-
-#ifdef FLEX_SCANNER
-void my_yy_input(buf, result, max_size)
-     char *buf;
-     int *result;
-     int max_size;
-{
-    int count;
-
-    if (StringToLex != NULL) {
-	count = 0;
-	while (*StringToLex != NULLCHAR) {
-	    *buf++ = *StringToLex++;
-	    count++;
-	}
-	*result = count;
-	return;
-    } else {
-	count = fread(buf, 1, max_size, yyin);
-	if (count == 0) {
-	    *result = YY_NULL;
-	} else {
-	    *result = count;
-	}
-	return;
-    }    
-}
-
-static YY_BUFFER_STATE my_file_buffer = NULL;
-
-/*
-    Return offset of next pattern in the current file.
-*/
-int yyoffset()
-{
-    int pos = yy_c_buf_p - yy_current_buffer->yy_ch_buf;
-
-    return(ftell(yy_current_buffer->yy_input_file) -
-         yy_n_chars + pos);
-}
-
-
-void yynewstr(s)
-     char *s;
-{
-    if (my_file_buffer != NULL)
-      yy_delete_buffer(my_file_buffer);
-    StringToLex = s;
-    my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
-    yy_switch_to_buffer(my_file_buffer);
-}
-
-void yynewfile(f)
-     FILE *f;
-{
-    if (my_file_buffer != NULL)
-      yy_delete_buffer(my_file_buffer);
-    StringToLex = NULL;
-    my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
-    yy_switch_to_buffer(my_file_buffer);
-}
-#endif /*FLEX_SCANNER*/
-
-int yywrap()
-{
-    return TRUE;
-}
-
-/* Parse a move from the given string s */
-/* ^ at start of pattern WON'T work here unless using flex */
-ChessMove yylexstr(boardIndex, s)
-     int boardIndex;
-     char *s;
-{
-    ChessMove ret;
-    char *oldStringToLex;
-#ifdef FLEX_SCANNER
-    YY_BUFFER_STATE buffer, oldBuffer;
-#endif
-    
-    yyboardindex = boardIndex;
-    oldStringToLex = StringToLex;
-    StringToLex = s;
-#ifdef FLEX_SCANNER
-    buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
-    oldBuffer = YY_CURRENT_BUFFER;
-    yy_switch_to_buffer(buffer);
-#endif /*FLEX_SCANNER*/
-
-    ret = (ChessMove) yylex();
-
-#ifdef FLEX_SCANNER
-    if (oldBuffer != NULL) 
-      yy_switch_to_buffer(oldBuffer);
-    yy_delete_buffer(buffer);
-#endif /*FLEX_SCANNER*/
-    StringToLex = oldStringToLex;
-
-    return ret;
-}
+%a 10000
+%o 10000
+%e 2000
+%k 2500
+%p 7000
+%n 1000
+%{
+/*
+ * parser.l -- lex parser of algebraic chess moves for XBoard
+ * $Id: parser.l,v 2.1 2003/10/27 19:21:00 mann Exp $
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 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 XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+/* This parser handles all forms of promotion.
+ * The parser resolves ambiguous moves by searching and check-testing.
+ * It also parses comments of the form [anything] or (anything).
+ *
+ * [HGM] Parser extensively modified for bigger boards, Shogi-like syntax,
+ * and unknow pieces. All pieces are now mandatory upper case, but can be
+ * any letter A-Z. Files must be lower case (as before), but can run upto 'l'.
+ * Ranks can be 0-9. The parser returns 0 for off-board files and ranks.
+ * For an unknown piece (as mover or promotion piece) it returns
+ * IllegalMove, like it does when the piece doesn't match.
+ * Promotions can now also be appended Shogi-style, a bare '=' or '+',
+ * and this is then returned as promotion character. The piece indicator
+ * can be prefixed by a '+' to indicate it is a promoted piece.
+ */
+
+#include "config.h"
+
+#define NO_CONSTRAINT	-1
+#undef YYLMAX
+#define YYLMAX			4096
+#define UNPUT_BUF_SIZE		YYLMAX
+
+#ifdef FLEX_SCANNER
+/* yytext is probably a char*, but could be a char[].  yy_text is set
+   in YY_DECL below, because if yytext is a char*, its value is not
+   constant. */
+char *yy_text;
+#else /*!FLEX_SCANNER*/
+/* yytext is definitely a char[], so yy_text can be set here, statically. */
+char *yy_text = (char *) yytext;
+#endif
+
+#ifdef FLEX_SCANNER
+/* This is flex */
+/* [AP] use prototypes in function declarations */
+#define YY_USE_PROTOS
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+/* end of [AP] fix */
+
+#undef YY_INPUT
+#define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
+#undef YY_DECL
+#define YY_DECL                     \
+    int _yylex YY_PROTO((void));    \
+    int yylex YY_PROTO((void))      \
+    {                               \
+	int result = _yylex();      \
+	yy_text = (char *) yytext;  \
+	return(result);             \
+    }                               \
+    int _yylex YY_PROTO((void))
+#else
+/* This is lex */
+#undef input
+#undef output
+#undef unput
+#endif
+
+/* The includes must be here, below the #undef input */
+
+#include <ctype.h>
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else /* not STDC_HEADERS */
+# if HAVE_STRING_H
+#  include <string.h>
+# else /* not HAVE_STRING_H */
+#  include <strings.h>
+# endif /* not HAVE_STRING_H */
+#endif /* not STDC_HEADERS */
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if defined(_amigados)
+# include <errno.h>
+# if HAVE_FCNTL_H
+#  include <fcntl.h>    /*  isatty() prototype  */
+# endif /*  HAVE_FCNTL_H        */
+#endif  /*  defined(_amigados)  */
+
+#include "common.h"
+#include "backend.h"
+#include "frontend.h"
+#include "parser.h"
+#include "moves.h"
+
+extern int PosFlags P((int));
+
+extern Board	boards[MAX_MOVES];
+int		yyboardindex;
+int             yyskipmoves = FALSE;
+char		currentMoveString[YYLMAX];
+#ifndef FLEX_SCANNER
+char		unputBuffer[UNPUT_BUF_SIZE];
+int		unputCount = 0;
+#endif
+
+#ifdef FLEX_SCANNER
+void my_yy_input P((char *buf, int *result, int max_size));
+#else /*!FLEX_SCANNER*/
+static int input P((void));
+static void output P((int ch));
+static void unput P((int ch));
+int yylook P((void));
+int yyback P((int *, int));
+#endif
+#undef yywrap
+int yywrap P((void));
+extern void CopyBoard P((Board to, Board from));
+
+%}
+%%
+
+"+"?[A-Z][/]?[a-l][0-9][xX:-]?[a-l][0-9]((=?\(?[A-Z]\)?)|=)? {
+    /*
+     * Fully-qualified algebraic move, possibly with promotion
+     */
+    int skip1 = 0, skip2 = 0, skip3 = 0, promoted = 0;
+    ChessSquare piece;
+    ChessMove result;
+    char c;
+    
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    if (yytext[0] == '+') skip1 = skip3 = promoted = 1; /* [HGM] Shogi promoted */
+
+    /* remove the / */
+    if (yytext[1+skip1] == '/')  skip1++; 
+    
+    /* remove the [xX:-] */
+    if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
+        (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
+    
+    currentMoveString[0] = yytext[1+skip1];
+    currentMoveString[1] = yytext[2+skip1];
+    currentMoveString[2] = yytext[3+skip1+skip2];
+    currentMoveString[3] = yytext[4+skip1+skip2];
+    currentMoveString[4] = NULLCHAR;
+    
+    if (appData.debugMode) {
+        fprintf(debugFP, "Parser Qa1b2: yyleng=%d\n",
+        yyleng);
+    }
+
+    if (yyleng-skip1-skip2 > 5) { char c;
+        if (yytext[yyleng-1] == ')') {
+            c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
+	} else {
+            c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
+	}
+	currentMoveString[5] = NULLCHAR;
+        if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
+            return IllegalMove; /* [HGM] promotion to invalid piece */
+    }
+
+    if (appData.debugMode) {
+        fprintf(debugFP, "parser: %s\n", currentMoveString);
+    }
+    /* [HGM] do not allow values beyond board size */
+    if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[1] - ONE <  0            ||
+       currentMoveString[0] - AAA >= BOARD_RGHT   ||
+       currentMoveString[3] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[3] - ONE <  0            ||
+       currentMoveString[2] - AAA >= BOARD_RGHT   ||
+       currentMoveString[0] - AAA <  BOARD_LEFT   ||
+       currentMoveString[2] - AAA <  BOARD_LEFT     )
+      return 0;
+
+    piece = boards[yyboardindex]
+      [currentMoveString[1] - ONE][currentMoveString[0] - AAA];
+    if(promoted) piece = (ChessSquare) (DEMOTED piece);
+    c = PieceToChar(piece);
+    if(c == '~') c = PieceToChar((ChessSquare) (DEMOTED piece));
+    if (ToLower(yytext[skip3]) != ToLower(c))
+      return (int) IllegalMove;
+
+    result = LegalityTest(boards[yyboardindex],
+			  PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
+			  EP_UNKNOWN,
+                          initialRights, /* [HGM] assume all castlings allowed */
+                          currentMoveString[1] - ONE,
+                          currentMoveString[0] - AAA,
+                          currentMoveString[3] - ONE,
+                          currentMoveString[2] - AAA,
+			  currentMoveString[4]);
+
+    if (currentMoveString[4] == NULLCHAR &&
+        (result == WhitePromotionKnight || result == BlackPromotionKnight ||
+         result == WhitePromotionQueen  || result == BlackPromotionQueen)) {
+        currentMoveString[4] = PieceToChar(BlackQueen);
+	currentMoveString[5] = NULLCHAR;
+    }
+
+    return (int) result;
+}
+
+[a-l][0-9][xX:-]?[a-l][0-9]((=?\(?[A-Za-z]\)?)|=)?      {
+    /*
+     * Simple algebraic move, possibly with promotion
+     * [HGM] Engine moves are received in this format, with lower-case promoChar!
+     */
+    int skip = 0;
+    ChessMove result;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    /* remove the [xX:-] */
+    if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
+	(yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
+
+    currentMoveString[0] = yytext[0];
+    currentMoveString[1] = yytext[1];
+    currentMoveString[2] = yytext[2+skip];
+    currentMoveString[3] = yytext[3+skip];
+    currentMoveString[4] = NULLCHAR;
+
+    if (yyleng-skip > 4) { char c;
+	if (yytext[yyleng-1] == ')') {
+            c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
+	} else {
+            c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
+	}
+	currentMoveString[5] = NULLCHAR;
+        if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
+            return IllegalMove;
+    }
+
+    /* [HGM] do not allow values beyond board size */
+    if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[1] - ONE <  0            ||
+       currentMoveString[0] - AAA >= BOARD_RGHT   ||
+       currentMoveString[3] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[3] - ONE <  0            ||
+       currentMoveString[2] - AAA >= BOARD_RGHT   ||
+       currentMoveString[0] - AAA <  BOARD_LEFT   ||
+       currentMoveString[2] - AAA <  BOARD_LEFT     )
+      return 0;
+
+    result = LegalityTest(boards[yyboardindex],
+			  PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
+			  EP_UNKNOWN,
+                          initialRights, /* [HGM] assume all castlings allowed */
+                          currentMoveString[1] - ONE,
+                          currentMoveString[0] - AAA,
+                          currentMoveString[3] - ONE,
+                          currentMoveString[2] - AAA,
+			  currentMoveString[4]);
+
+    if (currentMoveString[4] == NULLCHAR &&
+        (result == WhitePromotionKnight || result == BlackPromotionKnight ||
+         result == WhitePromotionQueen  || result == BlackPromotionQueen)) {
+        if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
+            currentMoveString[4] = PieceToChar(BlackFerz);
+        else if(gameInfo.variant == VariantGreat)
+            currentMoveString[4] = PieceToChar(BlackMan);
+        else
+            currentMoveString[4] = PieceToChar(BlackQueen);
+	currentMoveString[5] = NULLCHAR;
+    }
+
+    return (int) result;
+}
+
+[a-l][0-9]((=?\(?[A-Z]\)?)|=)?       {
+    /*
+     * Pawn move, possibly with promotion
+     */
+    DisambiguateClosure cl;
+    int skip = 0; char c;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    /* remove the =() */
+    if (yytext[2] == '=' && yytext[3] != NULLCHAR) skip++;
+    if (yytext[2+skip] == '(') skip++;
+
+    cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
+    cl.rfIn = -1;
+    cl.ffIn = yytext[0] - AAA;
+    cl.rtIn = yytext[1] - ONE;
+    cl.ftIn = yytext[0] - AAA;
+    c = cl.promoCharIn = yytext[2+skip];
+
+    /* [HGM] do not allow values beyond board size */
+    if(cl.rtIn >= BOARD_HEIGHT ||
+       cl.rtIn <  0            ||
+       cl.ffIn >= BOARD_RGHT   ||
+       cl.ftIn <  BOARD_LEFT     )
+      return 0;
+
+    if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
+      return IllegalMove;
+
+
+    Disambiguate(boards[yyboardindex],
+		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
+
+    currentMoveString[0] = cl.ff + AAA;
+    currentMoveString[1] = cl.rf + ONE;
+    currentMoveString[2] = cl.ft + AAA;
+    currentMoveString[3] = cl.rt + ONE;
+    currentMoveString[4] = cl.promoChar;
+    currentMoveString[5] = NULLCHAR;
+
+    return (int) cl.kind;
+}
+
+
+(ab|bc|cd|de|ef|fg|gh|hi|ij|jk|kl|lk|kj|ji|ih|hg|gf|fe|ed|dc|cb|ba|aa|bb|cc|dd|ee|ff|gg|hh|ii|jj|kk|ll|([a-l][xX:-][a-l]))((=?\(?[A-Z]\)?)|ep|"e.p."|=)? {
+    /*
+     * Pawn capture, possibly with promotion, possibly ambiguous
+     */
+    DisambiguateClosure cl;
+    int skip1 = 0, skip2 = 0; char c;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    /* remove trailing ep or e.p. (nonstandard PGN) */
+    if (yytext[yyleng-1] == 'p') {
+      yyleng -= 2;
+      yytext[yyleng] = NULLCHAR;
+    } else if (yytext[yyleng-1] == '.') {
+      yyleng -= 4;
+      yytext[yyleng] = NULLCHAR;
+    }
+
+    /* remove the [xX:-] and =() */
+    if ((yytext[1] == 'x') || (yytext[1] == 'X')
+	|| (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
+    if (yytext[2+skip1] == '=' && yytext[3+skip1] != NULLCHAR) skip2++;
+    if (yytext[2+skip1+skip2] == '(') skip2++;
+
+    cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
+    cl.rfIn = -1;
+    cl.ffIn = yytext[0] - AAA;
+    cl.rtIn = -1;
+    cl.ftIn = yytext[1+skip1] - AAA;
+    c = cl.promoCharIn = yytext[2+skip1+skip2];
+
+    /* [HGM] do not allow values beyond board size */
+    if(cl.ffIn >= BOARD_RGHT  ||
+       cl.ffIn <  BOARD_LEFT  ||
+       cl.ftIn >= BOARD_RGHT  ||
+       cl.ftIn <  BOARD_LEFT     )
+      return 0;
+
+    if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
+      return IllegalMove;
+
+    Disambiguate(boards[yyboardindex],
+		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
+
+    currentMoveString[0] = cl.ff + AAA;
+    currentMoveString[1] = cl.rf + ONE;
+    currentMoveString[2] = cl.ft + AAA;
+    currentMoveString[3] = cl.rt + ONE;
+    currentMoveString[4] = cl.promoChar;
+    currentMoveString[5] = NULLCHAR;
+
+    return (int) cl.kind;
+}
+
+[a-l][xX:]?[a-l][0-9]((=?\(?[A-Z]\)?)|ep|"e.p."|=)? {
+    /*
+     * unambiguously abbreviated Pawn capture, possibly with promotion
+     */
+    int skip = 0;
+    ChessMove result; char c;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    /* remove trailing ep or e.p. (nonstandard PGN) */
+    if (yytext[yyleng-1] == 'p') {
+      yyleng -= 2;
+      yytext[yyleng] = NULLCHAR;
+    } else if (yytext[yyleng-1] == '.') {
+      yyleng -= 4;
+      yytext[yyleng] = NULLCHAR;
+    }
+
+    /* remove the [xX:-] */
+    if ((yytext[1] == 'x') || (yytext[1] == 'X')
+	|| (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
+
+    currentMoveString[0] = yytext[0];
+    currentMoveString[2] = yytext[1+skip];
+    currentMoveString[3] = yytext[2+skip];
+
+    /* [HGM] do not allow values beyond board size */
+    if(currentMoveString[0] - AAA >= BOARD_RGHT   ||
+       currentMoveString[3] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[3] - ONE <  0            ||
+       currentMoveString[2] - AAA >= BOARD_RGHT   ||
+       currentMoveString[0] - AAA <  BOARD_LEFT   ||
+       currentMoveString[2] - AAA <  BOARD_LEFT     )
+      return 0;
+
+    if (gameInfo.variant == VariantXiangqi && /* [HGM] In Xiangqi rank stays same */
+         currentMoveString[0] != currentMoveString[2] ) {
+        currentMoveString[1] = yytext[2+skip];
+    } else 
+    if (WhiteOnMove(yyboardindex)) {
+        if (yytext[2+skip] == ONE) return (int) ImpossibleMove;
+	currentMoveString[1] = yytext[2+skip] - 1;
+    } else {
+        currentMoveString[1] = currentMoveString[3] + 1;
+        if (currentMoveString[3] == ONE+BOARD_HEIGHT-1) return (int) ImpossibleMove;
+    }
+    if (yyleng-skip > 3) {
+	if (yytext[yyleng-1] == ')')
+          c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
+	else
+          c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
+	currentMoveString[5] = NULLCHAR;
+        if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
+            return IllegalMove;
+    } else {
+	currentMoveString[4] = NULLCHAR;
+    }
+
+    result = LegalityTest(boards[yyboardindex],
+			  PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
+			  EP_UNKNOWN,
+                          initialRights, /* [HGM] assume all castlings allowed */
+                          currentMoveString[1] - ONE,
+                          currentMoveString[0] - AAA,
+                          currentMoveString[3] - ONE,
+                          currentMoveString[2] - AAA,
+			  currentMoveString[4]);
+
+    if (currentMoveString[4] == NULLCHAR &&
+        (result == WhitePromotionQueen  || result == BlackPromotionQueen ||
+         result == WhitePromotionKnight || result == BlackPromotionKnight)) {
+        currentMoveString[4] = PieceToChar(BlackQueen);
+	// [HGM] shatranj: take care of variants without Queen
+	if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
+            currentMoveString[4] = PieceToChar(BlackFerz);
+	if(gameInfo.variant == VariantGreat)
+            currentMoveString[4] = PieceToChar(BlackMan);
+	currentMoveString[5] = NULLCHAR;
+    }
+
+    if (result != IllegalMove) return (int) result;
+
+    /* Special case: improperly written en passant capture */
+    if (WhiteOnMove(yyboardindex)) {
+	if (currentMoveString[3] == '5') {
+	    currentMoveString[1] = '5';
+	    currentMoveString[3] = '6';
+	} else {
+	    return (int) IllegalMove;
+	}
+    } else {
+	if (currentMoveString[3] == '4') {
+	    currentMoveString[1] = '4';
+	    currentMoveString[3] = '3';
+	} else {
+	    return (int) IllegalMove;
+	}
+    }
+
+    result = LegalityTest(boards[yyboardindex],
+			  PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
+			  EP_UNKNOWN,
+                          initialRights, /* [HGM] assume all castlings allowed */
+                          currentMoveString[1] - ONE,
+                          currentMoveString[0] - AAA,
+                          currentMoveString[3] - ONE,
+                          currentMoveString[2] - AAA,
+			  currentMoveString[4]);
+
+    if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
+      return (int) result;
+    else
+      return (int) IllegalMove;
+}
+
+"+"?[A-Z][xX:-]?[a-l][0-9]=?  {
+    /*
+     * piece move, possibly ambiguous
+     */
+    DisambiguateClosure cl;
+    int skip = 0, skip2 = 0, promoted = 0;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    if(yytext[0] == '+') promoted = skip = skip2 = 1;
+
+    /* remove the [xX:-] */
+    if ((yytext[1+skip] == 'x') || (yytext[1+skip] == 'X')
+        || (yytext[1+skip] == ':') || (yytext[1+skip] == '-')) skip++;
+
+    if (WhiteOnMove(yyboardindex)) {
+        cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
+    } else {
+        cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
+    }
+    if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
+
+    cl.rfIn = -1;
+    cl.ffIn = -1;
+    cl.rtIn = yytext[2+skip] - ONE;
+    cl.ftIn = yytext[1+skip] - AAA;
+    cl.promoCharIn = NULLCHAR;
+
+    if(yyleng-skip > 3) /* [HGM] can have Shogi-style promotion */
+        cl.promoCharIn = yytext[yyleng-1];
+
+    if (appData.debugMode) {
+        fprintf(debugFP, "Parser Qa1: yyleng=%d,  %d(%d,%d)-(%d,%d) = %d (%c)\n",
+        yyleng,
+        cl.pieceIn,cl.ffIn,cl.rfIn,cl.ftIn,cl.rtIn,cl.promoCharIn,cl.promoCharIn?cl.promoCharIn:' ');
+    }
+
+    /* [HGM] but do not allow values beyond board size */
+    if(cl.rtIn >= BOARD_HEIGHT ||
+       cl.rtIn <  0            ||
+       cl.ftIn >= BOARD_RGHT   ||
+       cl.ftIn <  BOARD_LEFT     )
+      return 0;
+
+    Disambiguate(boards[yyboardindex],
+		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
+
+    currentMoveString[0] = cl.ff + AAA;
+    currentMoveString[1] = cl.rf + ONE;
+    currentMoveString[2] = cl.ft + AAA;
+    currentMoveString[3] = cl.rt + ONE;
+    currentMoveString[4] = cl.promoChar;
+    currentMoveString[5] = NULLCHAR;
+
+    return (int) cl.kind;
+}
+
+"+"?[A-Z][a-l0-9][xX:-]?[a-l][0-9]=?   {
+    /*
+     * piece move with rank or file disambiguator
+     */
+    DisambiguateClosure cl;
+    int skip = 0, skip2 = 0; int promoted=0;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    if(yytext[0]=='+') promoted = skip = skip2 = 1;
+
+    /* remove the [xX:-] */
+    if ((yytext[2+skip] == 'x') || (yytext[2+skip] == 'X')
+        || (yytext[2+skip] == ':') || (yytext[2+skip] == '-')) skip++;
+
+    if (WhiteOnMove(yyboardindex)) {
+        cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
+    } else {
+        cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
+    }
+    if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
+
+    if (isalpha(yytext[1+skip2])) {
+	cl.rfIn = -1;
+        cl.ffIn = yytext[1+skip2] - AAA;
+       
+        if(cl.ffIn >= BOARD_RGHT ||
+           cl.ffIn <  BOARD_LEFT   ) return 0;
+    } else {
+        cl.rfIn = yytext[1+skip2] - ONE;
+	cl.ffIn = -1;
+        if(cl.rfIn >= BOARD_HEIGHT ||
+           cl.rfIn <  0) return 0;
+    }
+    cl.rtIn = yytext[3+skip] - ONE;
+    cl.ftIn = yytext[2+skip] - AAA;
+    cl.promoCharIn = NULLCHAR;
+
+    if(yyleng-skip > 4) /* [HGM] can have Shogi-style promotion */
+        cl.promoCharIn = yytext[yyleng-1];
+
+    /* [HGM] do not allow values beyond board size */
+    if(cl.rtIn >= BOARD_HEIGHT ||
+       cl.rtIn <  0            ||
+       cl.ftIn >= BOARD_RGHT   ||
+       cl.ftIn <  BOARD_LEFT     )
+      return 0;
+
+    Disambiguate(boards[yyboardindex],
+		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
+
+    currentMoveString[0] = cl.ff + AAA;
+    currentMoveString[1] = cl.rf + ONE;
+    currentMoveString[2] = cl.ft + AAA;
+    currentMoveString[3] = cl.rt + ONE;
+    currentMoveString[4] = cl.promoChar;
+    currentMoveString[5] = NULLCHAR;
+
+    return (int) cl.kind;
+}
+
+000|0-0-0|ooo|OOO|o-o-o|O-O-O	{
+    int rf, ff, rt, ft;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    /* [HGM] all squares referenced to board edges in stead of absolute */
+    if (WhiteOnMove(yyboardindex)) {
+        if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
+	    /* ICS wild castling */
+	    rf = 0;
+            ff = (BOARD_WIDTH-1)>>1;
+	    rt = 0;
+            ft = BOARD_RGHT-3;
+	} else {
+	    rf = 0;
+            ff = BOARD_WIDTH>>1;
+	    rt = 0;
+            ft = BOARD_LEFT+2;
+	}
+    } else{ 
+        if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
+	    /* ICS wild castling */
+            rf = BOARD_HEIGHT-1;
+            ff = (BOARD_WIDTH-1)>>1;
+            rt = BOARD_HEIGHT-1;
+            ft = BOARD_RGHT-3;
+	} else {
+            rf = BOARD_HEIGHT-1;
+            ff = BOARD_WIDTH>>1;
+            rt = BOARD_HEIGHT-1;
+            ft = BOARD_LEFT+2;
+	}
+    }
+    if(gameInfo.variant == VariantFischeRandom) {
+        if (WhiteOnMove(yyboardindex)) {
+            ff = initialRights[2];
+            ft = initialRights[1];
+        } else {
+            ff = initialRights[5];
+            ft = initialRights[4];
+        }
+        fprintf(debugFP, "Parser FRC long %d %d\n", ff, ft);
+        if(ff < 0 || ft < 0) return 0;
+    }
+    sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
+    if (appData.debugMode) {
+        fprintf(debugFP, "long castling %d %d\n", ff, ft);
+    }
+    return (int) LegalityTest(boards[yyboardindex],
+			      PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: e.p.!
+			      EP_UNKNOWN,
+                              castlingRights[yyboardindex], /* [HGM] use true castling rights */
+			      rf, ff, rt, ft, NULLCHAR);
+}
+
+00|0-0|oo|OO|o-o|O-O	{
+    int rf, ff, rt, ft;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    if (WhiteOnMove(yyboardindex)) {
+        if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
+	    /* ICS wild castling */
+	    rf = 0;
+            ff = (BOARD_WIDTH-1)>>1;
+	    rt = 0;
+            ft = BOARD_LEFT+1;
+	} else {
+	    rf = 0;
+            ff = BOARD_WIDTH>>1;
+	    rt = 0;
+            ft = BOARD_RGHT-2;
+	}
+    } else {
+        if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
+	    /* ICS wild castling */
+            rf = BOARD_HEIGHT-1;
+            ff = (BOARD_WIDTH-1)>>1;
+            rt = BOARD_HEIGHT-1;
+            ft = BOARD_LEFT+1;
+	} else {
+            rf = BOARD_HEIGHT-1;
+            ff = BOARD_WIDTH>>1;
+            rt = BOARD_HEIGHT-1;
+            ft = BOARD_RGHT-2;
+	}
+    }
+    if(gameInfo.variant == VariantFischeRandom) {
+        if (WhiteOnMove(yyboardindex)) {
+            ff = initialRights[2];
+            ft = initialRights[0];
+        } else {
+            ff = initialRights[5];
+            ft = initialRights[3];
+        }
+    if (appData.debugMode) {
+        fprintf(debugFP, "Parser FRC short %d %d\n", ff, ft);
+    }
+        if(ff < 0 || ft < 0) return 0;
+    }
+    sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
+    if (appData.debugMode) {
+        fprintf(debugFP, "short castling %d %d\n", ff, ft);
+    }
+
+    return (int) LegalityTest(boards[yyboardindex],
+			      PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: e.p.!
+			      EP_UNKNOWN,
+                              castlingRights[yyboardindex], /* [HGM] use true castling rights */
+			      rf, ff, rt, ft, NULLCHAR);
+}
+
+[A-Z][@*][a-l][0-9] {
+    /* Bughouse piece drop.  No legality checking for now. */
+    currentMoveString[1] = '@';
+    currentMoveString[2] = yytext[2];
+    currentMoveString[3] = yytext[3];
+    currentMoveString[4] = NULLCHAR;
+
+    if (appData.debugMode) {
+        fprintf(debugFP, "Drop: %s\n", currentMoveString);
+    }
+    /* [HGM] do not allow values beyond board size */
+    if(currentMoveString[3] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[2] - AAA >= BOARD_WIDTH     )
+      return 0;
+
+    if (WhiteOnMove(yyboardindex)) {
+	currentMoveString[0] = ToUpper(yytext[0]);
+	return (int) WhiteDrop;
+    } else {
+	currentMoveString[0] = ToLower(yytext[0]);
+	return (int) BlackDrop;
+    }
+}
+
+[Rr]esign(s|ed)?  {
+    if (WhiteOnMove(yyboardindex))
+      return (int) BlackWins;
+    else
+      return (int) WhiteWins;
+}
+
+(([Ww](hite)?)|([Bb](lack)?))" "(([Rr]esign)|([Ff]orfeit))(s|ed)?  {
+    return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
+}
+
+(([Ww](hite)?)|([Bb](lack)?))" "[Dd]isconnect(s|ed)  {
+    return (int) GameUnfinished;
+}
+
+[Ss]talemate  {
+    return (int) GameIsDrawn;
+}
+
+"+-+"  {
+    return (int) GameIsDrawn;
+}
+
+([Cc]heck)?[Mm]ate {
+    if (WhiteOnMove(yyboardindex))
+      return (int) BlackWins;
+    else
+      return (int) WhiteWins;
+}
+
+"++"  {
+    if (WhiteOnMove(yyboardindex))
+      return (int) BlackWins;
+    else
+      return (int) WhiteWins;
+}
+
+[Dd]raw(n)?(" "by)?(" "[Rr]epetition)|(" "[Aa]gree(d|ment))  {
+    return (int) GameIsDrawn;
+}
+
+[Dd]raw(n)?(" (".*")")?  {
+    return (int) GameIsDrawn;
+}
+
+(([Ww](hite)?)|([Bb](lack)?))" "([Mm]ate(s|ed)?)|([Ww][io]n(s)?.*)  {
+    return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
+}
+
+(([Ww](hite)?)|([Bb](lack)?))" "([Mm]ate(s|ed)?)|([Ll]os[tes]+.*)  {
+    return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
+}
+
+("{"[^\}\n]*"} ")?(1-0|"1 - 0"|"1/0"|"1 / 0"|"1:0"|"1 : 0")(" (".*")"|" {".*"}")? { 
+    return (int) WhiteWins;
+}
+
+("{"[^\}\n]*"} ")?(0-1|"0 - 1"|"0/1"|"0 / 1"|"0:1"|"0 : 1")(" (".*")"|" {".*"}")? { 
+    return (int) BlackWins;
+}
+
+("{"[^\}\n]*"} ")?("1/2"|"1 / 2")(" "?[-:]" "?("1/2"|"1 / 2"))?(" (".*")"|" {".*"}")? {
+    return (int) GameIsDrawn;
+}
+
+("{"[^\}\n]*"} ")?"*"(" (".*")"|" {".*"}")? {
+    return (int) GameUnfinished;
+}
+
+[1-9][0-9]*/"."?[ \t\n]*[a-lNnPpRrBQqKACFEWDGHOo]    {
+    /* move numbers */
+    if ((yyleng == 1) && (yytext[0] == '1'))
+      return (int) MoveNumberOne;
+}
+
+\([0-9]+:[0-9][0-9](\.[0-9]+)?\)|\{[0-9]+:[0-9][0-9](\.[0-9]+)?\} {
+    /* elapsed time indication, e.g. (0:12) or {10:21.071} */ 
+    return (int) ElapsedTime;
+}
+
+"[--"[^\]]*"--]" {
+    /* position diagram enclosed in [-- --] */
+    return (int) PositionDiagram;
+}
+
+^"{--------------"\n[^\}]*\n"--------------}"$ {
+    /* position diagram enclosed in {-- --} */
+    return (int) PositionDiagram;
+}
+
+\[[ \t\n]*[A-Za-z0-9][A-Za-z0-9_+#=-]*[ \t\n]*\"[^"]*\"[ \t\n]*\] {
+    return (int) PGNTag;
+}    
+
+[Gg](nu|NU)" "?[Cc](hess|HESS).*[Gg](ame|AME) {
+    return (int) GNUChessGame;
+}
+
+^[#;%]" "[^ ]*(" game file"|" position file").*$ {
+    return (int) XBoardGame;
+}
+
+\$[0-9]+	{				/* numeric annotation glyph */
+    return (int) NAG;
+}
+
+\{[^\}]*\}	{        			/* anything in {} */
+    return (int) Comment; 
+}
+
+;.*$ {                                          /* ; to end of line */
+    return (int) Comment;
+}
+
+\[[^\]]*\]	{        			/* anything in [] */
+    return (int) Comment; 
+}
+
+\([^()]*(\([^()]*\)[^()]*)+[^()]*\)  { 	  	/* nested () */
+    return (int) Comment; 
+}
+
+\([^)][^)]+\)   { 				/* >=2 chars in () */
+    return (int) Comment; 
+}       
+
+^[-a-zA-Z0-9]+:" ".*(\n[ \t]+.*)*  {
+        /* Skip mail headers */
+}
+
+[a-zA-Z0-9'-]+			{
+        /* Skip random words */
+}
+
+.|\n				{
+        /* Skip everything else */
+}
+
+%%
+
+
+static char *StringToLex;
+
+#ifndef FLEX_SCANNER
+static FILE *lexFP;
+
+static int input()
+{
+    int ret;
+    
+    if (StringToLex != NULL) {
+	ret = *StringToLex;
+	if (ret == NULLCHAR)
+	  ret = EOF;
+	else
+	  StringToLex++;
+    } else if (unputCount > 0) {
+	ret = unputBuffer[--unputCount];
+    } else {
+	ret = fgetc(lexFP);
+    }    
+
+    if (ret == EOF) 
+      return 0;
+    else
+      return ret;
+}
+
+/*
+ * Return offset of next pattern within current file
+ */
+int yyoffset()
+{
+    int offset = ftell(lexFP) - unputCount;
+
+    if (offset < 0) {
+	offset = 0;
+    }
+    return(offset);
+}
+ 
+static void output(ch)
+     int ch;
+{
+    fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
+	    ch, ch);
+}
+
+static void unput(ch)
+     int ch;
+{
+    if (ch == 0) return;
+    if (StringToLex != NULL) {
+	StringToLex--;
+    } else {
+	if (unputCount >= UNPUT_BUF_SIZE)
+	  fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
+		  ch, ch);
+	unputBuffer[unputCount++] = ch;
+    }
+}
+
+/* Get ready to lex from a new file.  Kludge below sticks
+   an artificial newline at the front of the file, which the
+   above grammar ignores, but which makes ^ at start of pattern
+   match at the real start of the file.
+*/
+void yynewfile(f)
+     FILE *f;
+{
+    lexFP = f;
+    StringToLex = NULL;
+    unputCount = 0;
+    unput('\n'); /* kludge */
+}
+
+/* Get ready to lex from a string.  ^ at start of pattern WON'T
+   match at the start of the string!
+*/
+void yynewstr(s)
+     char *s;
+{
+    lexFP = NULL;
+    StringToLex = s;
+    unputCount = 0;
+}
+#endif /*!FLEX_SCANNER*/
+
+#ifdef FLEX_SCANNER
+void my_yy_input(buf, result, max_size)
+     char *buf;
+     int *result;
+     int max_size;
+{
+    int count;
+
+    if (StringToLex != NULL) {
+	count = 0;
+	while (*StringToLex != NULLCHAR) {
+	    *buf++ = *StringToLex++;
+	    count++;
+	}
+	*result = count;
+	return;
+    } else {
+	count = fread(buf, 1, max_size, yyin);
+	if (count == 0) {
+	    *result = YY_NULL;
+	} else {
+	    *result = count;
+	}
+	return;
+    }    
+}
+
+static YY_BUFFER_STATE my_file_buffer = NULL;
+
+/*
+    Return offset of next pattern in the current file.
+*/
+int yyoffset()
+{
+    int pos = yy_c_buf_p - YY_CURRENT_BUFFER->yy_ch_buf;
+
+    return(ftell(YY_CURRENT_BUFFER->yy_input_file) -
+         yy_n_chars + pos);
+}
+
+
+void yynewstr(s)
+     char *s;
+{
+    if (my_file_buffer != NULL)
+      yy_delete_buffer(my_file_buffer);
+    StringToLex = s;
+    my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
+    yy_switch_to_buffer(my_file_buffer);
+}
+
+void yynewfile(f)
+     FILE *f;
+{
+    if (my_file_buffer != NULL)
+      yy_delete_buffer(my_file_buffer);
+    StringToLex = NULL;
+    my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
+    yy_switch_to_buffer(my_file_buffer);
+}
+#endif /*FLEX_SCANNER*/
+
+int yywrap()
+{
+    return TRUE;
+}
+
+/* Parse a move from the given string s */
+/* ^ at start of pattern WON'T work here unless using flex */
+ChessMove yylexstr(boardIndex, s)
+     int boardIndex;
+     char *s;
+{
+    ChessMove ret;
+    char *oldStringToLex;
+#ifdef FLEX_SCANNER
+    YY_BUFFER_STATE buffer, oldBuffer;
+#endif
+    
+    yyboardindex = boardIndex;
+    oldStringToLex = StringToLex;
+    StringToLex = s;
+#ifdef FLEX_SCANNER
+    buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
+    oldBuffer = YY_CURRENT_BUFFER;
+    yy_switch_to_buffer(buffer);
+#endif /*FLEX_SCANNER*/
+
+    ret = (ChessMove) yylex();
+
+#ifdef FLEX_SCANNER
+    if (oldBuffer != NULL) 
+      yy_switch_to_buffer(oldBuffer);
+    yy_delete_buffer(buffer);
+#endif /*FLEX_SCANNER*/
+    StringToLex = oldStringToLex;
+
+    return ret;
+}
diff --git a/pgntags.c b/pgntags.c
index cd8f0d8..d532172 100644
--- a/pgntags.c
+++ b/pgntags.c
@@ -2,22 +2,23 @@
  * pgntags.c -- Functions to manage PGN tags
  * XBoard $Id: pgntags.c,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
  * ------------------------------------------------------------------------
  *
  * This file could well be a part of backend.c, but I prefer it this
@@ -114,6 +115,9 @@ int ParsePGNTag(tag, gameInfo)
         /* xboard-defined extension */
         gameInfo->variant = StringToVariant(value);
 	success = TRUE;
+    } else if (StrCaseCmp(name, PGN_OUT_OF_BOOK) == 0) {
+        /* [AS] Out of book annotation */
+        success = StrSavePtr(value, &gameInfo->outOfBook) != NULL;
     } else {
 	if (gameInfo->extraTags == NULL) {
 	    oldTags = "";
diff --git a/pixmaps/ANALYZING_14.xpm b/pixmaps/ANALYZING_14.xpm
new file mode 100644
index 0000000..b43e871
--- /dev/null
+++ b/pixmaps/ANALYZING_14.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char *ANALYZE_14[] = {
+/* columns rows colors chars-per-pixel */
+"14 14 3 1",
+"  c white",
+"* c black",
+". c None",
+/* pixels */
+".......   ....",
+".....  ...  ..",
+".... ....... .",
+".... .. .... .",
+"... ..  ..... ",
+"... ......... ",
+"... ......... ",
+".... ....... .",
+".... ....... .",
+"... .  ...  ..",
+".. . ..   ....",
+". . ..........",
+"   ...........",
+".............."
+};
diff --git a/pixmaps/BLACK_14.xpm b/pixmaps/BLACK_14.xpm
new file mode 100644
index 0000000..cab2a1e
--- /dev/null
+++ b/pixmaps/BLACK_14.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char *BLACK_14[] = {
+/* columns rows colors chars-per-pixel */
+"14 14 3 1",
+"  c white",
+"* c black",
+". c None",
+/* pixels */
+".....****.....",
+"...**    **...",
+"..*        *..",
+".*          *.",
+".*          *.",
+"*            *",
+"*            *",
+"*            *",
+"*            *",
+".*          *.",
+".*          *.",
+"..*        *..",
+"...**    **...",
+".....****....."
+};
diff --git a/pixmaps/CLEAR_14.xpm b/pixmaps/CLEAR_14.xpm
new file mode 100644
index 0000000..68a0efd
--- /dev/null
+++ b/pixmaps/CLEAR_14.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char *CLEAR_14[] = {
+/* columns rows colors chars-per-pixel */
+"14 14 3 1",
+"  c white",
+"* c black",
+". c None",
+/* pixels */
+"..............",
+"..............",
+"..............",
+"..............",
+"..............",
+"..............",
+"..............",
+"..............",
+"..............",
+"..............",
+"..............",
+"..............",
+"..............",
+".............."
+};
diff --git a/pixmaps/CVS/Entries b/pixmaps/CVS/Entries
deleted file mode 100644
index c254881..0000000
--- a/pixmaps/CVS/Entries
+++ /dev/null
@@ -1,438 +0,0 @@
-/README.pixmaps/2.0/Sun Dec 17 02:24:49 2000//
-/bdd108.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd116.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd129.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd21.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd25.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd29.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd33.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd37.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd40.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd45.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd49.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd54.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd58.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd64.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd72.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd80.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd87.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdd95.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdl108.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdl116.xpm/2.0/Sun Dec 17 02:24:49 2000//
-/bdl129.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl21.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl25.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl29.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl33.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl37.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl40.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl45.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl49.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl54.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl58.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl64.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl72.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl80.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl87.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bdl95.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld108.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld116.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld129.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld21.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld25.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld29.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld33.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld37.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld40.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld45.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld49.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld54.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld58.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld64.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld72.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld80.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld87.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bld95.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bll108.xpm/2.0/Sun Dec 17 02:24:50 2000//
-/bll116.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll129.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll21.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll25.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll29.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll33.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll37.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll40.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll45.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll49.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll54.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll58.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll64.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll72.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll80.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll87.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/bll95.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/convbm/2.0/Sun Dec 17 02:24:49 2000//
-/convbm.sed/2.0/Sun Dec 17 02:24:49 2000//
-/convbm2.sed/2.0/Sun Dec 17 02:24:49 2000//
-/kdd108.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd116.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd129.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd21.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd25.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd29.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd33.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd37.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd40.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd45.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd49.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd54.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd58.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd64.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd72.xpm/2.0/Sun Dec 17 02:24:51 2000//
-/kdd80.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdd87.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdd95.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl108.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl116.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl129.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl21.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl25.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl29.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl33.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl37.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl40.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl45.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl49.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl54.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl58.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl64.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl72.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl80.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl87.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kdl95.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kld108.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kld116.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kld129.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kld21.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kld25.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kld29.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kld33.xpm/2.0/Sun Dec 17 02:24:52 2000//
-/kld37.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kld40.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kld45.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kld49.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kld54.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kld58.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kld64.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kld72.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kld80.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kld87.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kld95.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll108.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll116.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll129.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll21.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll25.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll29.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll33.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll37.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll40.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll45.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll49.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll54.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll58.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll64.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll72.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll80.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll87.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/kll95.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/ndd108.xpm/2.0/Sun Dec 17 02:24:53 2000//
-/ndd116.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd129.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd21.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd25.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd29.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd33.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd37.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd40.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd45.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd49.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd54.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd58.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd64.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd72.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd80.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd87.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndd95.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl108.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl116.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl129.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl21.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl25.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl29.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl33.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl37.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl40.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl45.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl49.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl54.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl58.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl64.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl72.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl80.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl87.xpm/2.0/Sun Dec 17 02:24:54 2000//
-/ndl95.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld108.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld116.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld129.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld21.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld25.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld29.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld33.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld37.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld40.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld45.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld49.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld54.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld58.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld64.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld72.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld80.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld87.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nld95.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll108.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll116.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll129.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll21.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll25.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll29.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll33.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll37.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll40.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll45.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll49.xpm/2.0/Sun Dec 17 02:24:55 2000//
-/nll54.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/nll58.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/nll64.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/nll72.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/nll80.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/nll87.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/nll95.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd108.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd116.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd129.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd21.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd25.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd29.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd33.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd37.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd40.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd45.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd49.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd54.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd58.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd64.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd72.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd80.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd87.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdd95.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdl108.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdl116.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdl129.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdl21.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdl25.xpm/2.0/Sun Dec 17 02:24:56 2000//
-/pdl29.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl33.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl37.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl40.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl45.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl49.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl54.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl58.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl64.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl72.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl80.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl87.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pdl95.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld108.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld116.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld129.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld21.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld25.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld29.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld33.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld37.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld40.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld45.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld49.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld54.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld58.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld64.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld72.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld80.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld87.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pld95.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pll108.xpm/2.0/Sun Dec 17 02:24:57 2000//
-/pll116.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll129.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll21.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll25.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll29.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll33.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll37.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll40.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll45.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll49.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll54.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll58.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll64.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll72.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll80.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll87.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/pll95.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd108.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd116.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd129.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd21.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd25.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd29.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd33.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd37.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd40.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd45.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd49.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd54.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd58.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd64.xpm/2.0/Sun Dec 17 02:24:58 2000//
-/qdd72.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdd80.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdd87.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdd95.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl108.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl116.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl129.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl21.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl25.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl29.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl33.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl37.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl40.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl45.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl49.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl54.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl58.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl64.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl72.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl80.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl87.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qdl95.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld108.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld116.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld129.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld21.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld25.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld29.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld33.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld37.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld40.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld45.xpm/2.0/Sun Dec 17 02:24:59 2000//
-/qld49.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qld54.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qld58.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qld64.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qld72.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qld80.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qld87.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qld95.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll108.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll116.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll129.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll21.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll25.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll29.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll33.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll37.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll40.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll45.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll49.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll54.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll58.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll64.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll72.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll80.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll87.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/qll95.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/rdd108.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/rdd116.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/rdd129.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/rdd21.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/rdd25.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/rdd29.xpm/2.0/Sun Dec 17 02:25:00 2000//
-/rdd33.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd37.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd40.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd45.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd49.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd54.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd58.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd64.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd72.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd80.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd87.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdd95.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl108.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl116.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl129.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl21.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl25.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl29.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl33.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl37.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl40.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl45.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl49.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl54.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl58.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl64.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl72.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl80.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl87.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rdl95.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rld108.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rld116.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rld129.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rld21.xpm/2.0/Sun Dec 17 02:25:01 2000//
-/rld25.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld29.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld33.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld37.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld40.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld45.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld49.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld54.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld58.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld64.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld72.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld80.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld87.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rld95.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll108.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll116.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll129.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll21.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll25.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll29.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll33.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll37.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll40.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll45.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll49.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll54.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll58.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll64.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll72.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll80.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll87.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/rll95.xpm/2.0/Sun Dec 17 02:25:02 2000//
-/pixmaps.h/2.1/Mon Oct 27 19:21:02 2003//
-D
diff --git a/pixmaps/CVS/Repository b/pixmaps/CVS/Repository
deleted file mode 100644
index 296236d..0000000
--- a/pixmaps/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-xboard/pixmaps
diff --git a/pixmaps/CVS/Root b/pixmaps/CVS/Root
deleted file mode 100644
index 489b0fb..0000000
--- a/pixmaps/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-mann at subversions.gnu.org:/cvsroot/xboard
diff --git a/pixmaps/PONDER_14.xpm b/pixmaps/PONDER_14.xpm
new file mode 100644
index 0000000..2f732ab
--- /dev/null
+++ b/pixmaps/PONDER_14.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char *PONDER_14[] = {
+/* columns rows colors chars-per-pixel */
+"14 14 3 1",
+"  c white",
+"* c black",
+". c None",
+/* pixels */
+"....  ..  ....",
+"..  ... ..  ..",
+". .......... .",
+" .......... ..",
+" ........... .",
+".  .......... ",
+".. .......... ",
+". .......... .",
+".. .......  ..",
+"... ..  .. ...",
+".. .  ..  ....",
+".   ..........",
+" .............",
+".............."
+};
diff --git a/pixmaps/README.pixmaps b/pixmaps/README.pixmaps
index e2fb412..98f6ef7 100644
--- a/pixmaps/README.pixmaps
+++ b/pixmaps/README.pixmaps
@@ -1,2 +1,8 @@
-See ../bitmaps/README.  These pixmaps were converted from the bitmaps there,
-and the same notices apply.
+See ../bitmaps/README.  These pixmaps were converted from the bitmaps there,
+and the same notices apply.
+
+[HGM] The non-orthodox pieces were converted from ../winboard/bitmaps/*.bmp,
+by the program 'convert.c' in this folder. If you like the WinBoard pieces
+better than the traditional xboard bitmaps, you could run that program again
+to convert the orthodox pieces from their WinBoard bitmaps, and overwrite
+the xboard pixmaps with them.
diff --git a/pixmaps/THINKING_14.xpm b/pixmaps/THINKING_14.xpm
new file mode 100644
index 0000000..4b28f19
--- /dev/null
+++ b/pixmaps/THINKING_14.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char *THINK_14[] = {
+/* columns rows colors chars-per-pixel */
+"14 14 3 1",
+"  c white",
+"* c black",
+". c None",
+/* pixels */
+".....   ......",
+"...  ...  ....",
+".. ... ... ...",
+". .... .... ..",
+". .... .... ..",
+" ..... ..... .",
+" ....     .. .",
+" ..... ..... .",
+". ......... ..",
+". ......... ..",
+".. ....... ...",
+"...  ...  ....",
+".....   ......",
+".............."
+};
diff --git a/pixmaps/UNKNOWN_14.xpm b/pixmaps/UNKNOWN_14.xpm
new file mode 100644
index 0000000..9f4c241
--- /dev/null
+++ b/pixmaps/UNKNOWN_14.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char *UNKNOWN_14[] = {
+/* columns rows colors chars-per-pixel */
+"14 14 3 1",
+"  c white",
+"* c black",
+". c None",
+/* pixels */
+".....****.....",
+"...**    **...",
+"..*  . .   *..",
+".* . . . .  *.",
+".*  . . . . *.",
+"*  . . . . . *",
+"* . . . . .  *",
+"*  . . . . . *",
+"* . . . . .  *",
+".* . . . .  *.",
+".*  . . . . *.",
+"..*  . .   *..",
+"...**    **...",
+".....****....."
+};
diff --git a/pixmaps/WHITE_14.xpm b/pixmaps/WHITE_14.xpm
new file mode 100644
index 0000000..3f13936
--- /dev/null
+++ b/pixmaps/WHITE_14.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char *WHITE_14[] = {
+/* columns rows colors chars-per-pixel */
+"14 14 3 1",
+"  c white",
+"* c black",
+". c None",
+/* pixels */
+".....****.....",
+"...**    **...",
+"..*  ....  *..",
+".* ........ *.",
+".* ........ *.",
+"* .......... *",
+"* .......... *",
+"* .......... *",
+"* .......... *",
+".* ........ *.",
+".* ........ *.",
+"..*  ....  *..",
+"...**    **...",
+".....****....."
+};
diff --git a/pixmaps/add33.xpm b/pixmaps/add33.xpm
new file mode 100644
index 0000000..6463900
--- /dev/null
+++ b/pixmaps/add33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *add33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............     ..............",
+".............       .............",
+"............         ............",
+"..........             ..........",
+"........                 ........",
+"......          .          ......",
+"....            .            ....",
+"...             .             ...",
+"...           .....           ...",
+"....            .            ....",
+"......          .          ......",
+"........                 ........",
+".........               .........",
+"..........             ..........",
+"........... ......... ...........",
+"...........           ...........",
+"..........  .........  ..........",
+".......... .         . ..........",
+"..........             ..........",
+"...........           ...........",
+".............. ... ..............",
+"....                         ....",
+"...                           ...",
+"...             .             ...",
+"....          .....          ....",
+".... ....................... ....",
+".................................",
+"................................."
+};
diff --git a/pixmaps/add37.xpm b/pixmaps/add37.xpm
new file mode 100644
index 0000000..db60d50
--- /dev/null
+++ b/pixmaps/add37.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char *add37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".....................................",
+".....................................",
+".....................................",
+".....................................",
+".....................................",
+".................   .................",
+"...............       ...............",
+"............             ............",
+".........                   .........",
+".......                       .......",
+".....                           .....",
+"....                             ....",
+"...                               ...",
+"...               .               ...",
+"...               .               ...",
+"....           .......           ....",
+"....              .              ....",
+".....             .             .....",
+".......           .           .......",
+".........                   .........",
+"...........               ...........",
+"............             ............",
+"............ ........... ............",
+"............             ............",
+"............             ............",
+"............ ........... ............",
+"...........               ...........",
+"...........               ...........",
+".............           .............",
+"................ ... ................",
+"........  ....         ....  ........",
+"....                             ....",
+"...               .               ...",
+"....            .....            ....",
+"....  .........................  ....",
+".....................................",
+"....................................."
+};
diff --git a/pixmaps/add40.xpm b/pixmaps/add40.xpm
new file mode 100644
index 0000000..61d58bc
--- /dev/null
+++ b/pixmaps/add40.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char *add40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"..................     .................",
+"................         ...............",
+"...............           ..............",
+".............               ............",
+"...........                   ..........",
+".........                       ........",
+".......             .             ......",
+"......              .              .....",
+".....               .               ....",
+".....            .......            ....",
+"......              .              .....",
+".......             .             ......",
+"........            .            .......",
+"..........                     .........",
+"...........                   ..........",
+"............                 ...........",
+".............   .........   ............",
+".............. .         . .............",
+"..............             .............",
+".............               ............",
+"............. ............. ............",
+"............                 ...........",
+"............                 ...........",
+"...............           ..............",
+"...................   ..................",
+".................       ................",
+"......                             .....",
+"....                                 ...",
+"...                 .                 ..",
+"....              .....              ...",
+"..... ............................. ....",
+"........................................",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/add45.xpm b/pixmaps/add45.xpm
new file mode 100644
index 0000000..90d9e6a
--- /dev/null
+++ b/pixmaps/add45.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *add45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+"....................     ....................",
+"...................       ...................",
+".................           .................",
+"...............               ...............",
+".............                   .............",
+"...........                       ...........",
+".........                           .........",
+".......               .               .......",
+".....                 .                 .....",
+"....                  .                  ....",
+"....              .........              ....",
+"....                  .                  ....",
+".....                 .                 .....",
+".....                 .                 .....",
+"......                .                ......",
+"........                             ........",
+"..........                         ..........",
+"............                     ............",
+"..............                 ..............",
+".............. ............... ..............",
+"...............               ...............",
+"...............               ...............",
+"..............                 ..............",
+"..............  .............  ..............",
+".............. .             . ..............",
+".............                   .............",
+".............                   .............",
+"................             ................",
+".................... ... ....................",
+"..................         ..................",
+".......                               .......",
+"....                  .                  ....",
+"...                 .....                 ...",
+"...                .......                ...",
+"....  .................................  ....",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/add49.xpm b/pixmaps/add49.xpm
new file mode 100644
index 0000000..75dd13d
--- /dev/null
+++ b/pixmaps/add49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *add49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".......................   .......................",
+"....................         ....................",
+"...................           ...................",
+".................               .................",
+"................                 ................",
+"..............                     ..............",
+"............                         ............",
+"..........                             ..........",
+"........                .                ........",
+"......                  .                  ......",
+".....                   .                   .....",
+"....                    .                    ....",
+".....               .........               .....",
+"......                  .                  ......",
+".......                 .                 .......",
+".........               .               .........",
+"...........             .             ...........",
+"............                         ............",
+".............                       .............",
+"..............                     ..............",
+"...............                   ...............",
+"................   ...........   ................",
+"................ ..           .. ................",
+"................                 ................",
+"................                 ................",
+"................                 ................",
+"...............  ...............  ...............",
+"...............                   ...............",
+"..............                     ..............",
+"..............                     ..............",
+"..................     ...     ..................",
+"......................     ......................",
+"....................         ....................",
+"........                                 ........",
+".....                   .                   .....",
+"....                  .....                  ....",
+"....                .........                ....",
+"....    .................................    ....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/add54.xpm b/pixmaps/add54.xpm
new file mode 100644
index 0000000..e097455
--- /dev/null
+++ b/pixmaps/add54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *add54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................          ......................",
+"....................              ....................",
+"...................                ...................",
+"..................                  ..................",
+".................                    .................",
+"..............                          ..............",
+"...........                                ...........",
+".........                                    .........",
+"........                  ..                  ........",
+".......                   ..                   .......",
+"......                    ..                    ......",
+".....                     ..                     .....",
+".....                 ..........                 .....",
+".....                 ..........                 .....",
+"......                    ..                    ......",
+"......                    ..                    ......",
+".......                   ..                   .......",
+".........                 ..                 .........",
+"...........                                ...........",
+".............                            .............",
+"...............                        ...............",
+"................     ............     ................",
+".................   ..............   .................",
+"..................  .            .  ..................",
+"..................                  ..................",
+".................                    .................",
+".................   ..............   .................",
+"................  .................   ................",
+"................  ..              ..  ................",
+"................                      ................",
+"...............                        ...............",
+"................                      ................",
+"....................    ......    ....................",
+"......................  ......  ......................",
+".......                                        .......",
+".....                                            .....",
+"...                                                ...",
+"....                                              ....",
+"....                                              ....",
+".....                     ..                     .....",
+"......                 ........                 ......",
+"....... ...................................... .......",
+"......................................................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/add58.xpm b/pixmaps/add58.xpm
new file mode 100644
index 0000000..1594b34
--- /dev/null
+++ b/pixmaps/add58.xpm
@@ -0,0 +1,66 @@
+/* XPM */
+static char *add58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................      ..........................",
+".......................            .......................",
+".....................                .....................",
+"....................                  ....................",
+"..................                      ..................",
+".................                        .................",
+"...............                            ...............",
+".............                                .............",
+"...........                                    ...........",
+".........                   ..                   .........",
+".......                     ..                     .......",
+"......                      ..                      ......",
+".....                       ..                       .....",
+".....                   ..........                   .....",
+".....                   ..........                   .....",
+"......                      ..                      ......",
+".......                     ..                     .......",
+"........                    ..                    ........",
+"..........                  ..                  ..........",
+"............                ..                ............",
+"..............                              ..............",
+"................                          ................",
+".................                        .................",
+"..................                      ..................",
+"...................  ................  ...................",
+"...................  ................  ...................",
+"...................                    ...................",
+"..................                      ..................",
+"..................                      ..................",
+"..................  ..................  ..................",
+".................   ..................   .................",
+".................                        .................",
+".................                        .................",
+".................                        .................",
+"......................              ......................",
+"..........................  ..  ..........................",
+"........................          ........................",
+"........                                          ........",
+"......                                              ......",
+"....                                                  ....",
+"....                                                  ....",
+".....                                                .....",
+".....                       ..                       .....",
+"......                    ......                    ......",
+".......  ........       ..........       ........  .......",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/add64.xpm b/pixmaps/add64.xpm
new file mode 100644
index 0000000..cfa345e
--- /dev/null
+++ b/pixmaps/add64.xpm
@@ -0,0 +1,72 @@
+/* XPM */
+static char *add64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"............................        ............................",
+".........................              .........................",
+".......................                  .......................",
+"......................                    ......................",
+".....................                      .....................",
+"...................                          ...................",
+".................                              .................",
+"..............                                    ..............",
+"............                                        ............",
+"..........                     ..                     ..........",
+"........                       ..                       ........",
+".......                        ..                        .......",
+"......                         ..                         ......",
+"......                    ............                    ......",
+"......                    ............                    ......",
+"......                         ..                         ......",
+".......                        ..                        .......",
+".........                      ..                      .........",
+"..........                     ..                     ..........",
+"............                                        ............",
+"..............                                     .............",
+"...............                                  ...............",
+".................                              .................",
+"...................                          ...................",
+"....................     ..............     ....................",
+".....................  ................... .....................",
+".....................  ..              ... .....................",
+".....................                      .....................",
+".....................                      .....................",
+"....................                        ....................",
+"....................   ..................   ....................",
+"....................  ....................  ....................",
+"...................  ..                  ..  ...................",
+"...................                          ...................",
+"...................                          ...................",
+"....................                        ....................",
+".........................              .........................",
+"............................  ....  ............................",
+"..........................    ....    ..........................",
+".........                                              .........",
+".......                                                  .......",
+".....                                                      .....",
+"....                                                        ....",
+".....                                                      .....",
+"......                         ..                         ......",
+"......                       ......                       ......",
+".......    ........        ..........        ........    .......",
+"........ .............................................. ........",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/add72.xpm b/pixmaps/add72.xpm
new file mode 100644
index 0000000..13749d6
--- /dev/null
+++ b/pixmaps/add72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *add72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"...............................          ...............................",
+".............................              .............................",
+"............................                ............................",
+"...........................                  ...........................",
+"..........................                    ..........................",
+"........................                        ........................",
+"......................                            ......................",
+"....................                                ....................",
+"..................                                    ..................",
+"................                                        ................",
+"..............                                            ..............",
+".............                                              .............",
+"...........                                                  ...........",
+".........                          ..                          .........",
+"........                           ..                           ........",
+"......                             ..                             ......",
+"......                             ..                             ......",
+".....                              ..                              .....",
+".....                              ..                              .....",
+".....                        ..............                        .....",
+".......                      ..............                       ......",
+".......                            ..                            .......",
+".........                          ..                          .........",
+"............                       ..                        ...........",
+"..............                     ..                      .............",
+"...............                    ..                    ...............",
+"................                                        ................",
+".................                                      .................",
+"..................                                    ..................",
+"...................                                  ...................",
+"....................                                ....................",
+".....................                              .....................",
+"......................      ................      ......................",
+".......................   .....................  .......................",
+"........................  ..                ... ........................",
+".......................                          .......................",
+".......................                          .......................",
+".......................                          .......................",
+"......................                            ......................",
+"......................     ..................     ......................",
+".....................  ..........................  .....................",
+".....................  ....                  ....  .....................",
+".....................                              .....................",
+"....................                                ....................",
+"....................                                ....................",
+"......................                            ......................",
+"............................                ............................",
+"................................        ................................",
+"...............................          ...............................",
+".............................              .............................",
+"...........                                                  ...........",
+".......                                                          .......",
+".....                                                              .....",
+"....                                                                ....",
+"....                               ..                               ....",
+"....                             ......                             ....",
+".....                         ............                         .....",
+"......      ................................................      ......",
+".......  ......................................................  .......",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/adl33.xpm b/pixmaps/adl33.xpm
new file mode 100644
index 0000000..fe06352
--- /dev/null
+++ b/pixmaps/adl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *adl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............     ..............",
+".............       .............",
+"............         ............",
+"..........             ..........",
+"........                 ........",
+"......          .          ......",
+"....            .            ....",
+"...             .             ...",
+"...           .....           ...",
+"....            .            ....",
+"......          .          ......",
+"........                 ........",
+".........               .........",
+"..........             ..........",
+"........... ......... ...........",
+"...........           ...........",
+"..........  .........  ..........",
+".......... .         . ..........",
+"..........             ..........",
+"...........           ...........",
+".............. ... ..............",
+"....                         ....",
+"...                           ...",
+"...             .             ...",
+"....          .....          ....",
+".... ....................... ....",
+".................................",
+"................................."
+};
diff --git a/pixmaps/adl37.xpm b/pixmaps/adl37.xpm
new file mode 100644
index 0000000..c4d85b3
--- /dev/null
+++ b/pixmaps/adl37.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char *adl37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".....................................",
+".....................................",
+".....................................",
+".....................................",
+".....................................",
+".................   .................",
+"...............       ...............",
+"............             ............",
+".........                   .........",
+".......                       .......",
+".....                           .....",
+"....                             ....",
+"...                               ...",
+"...               .               ...",
+"...               .               ...",
+"....           .......           ....",
+"....              .              ....",
+".....             .             .....",
+".......           .           .......",
+".........                   .........",
+"...........               ...........",
+"............             ............",
+"............ ........... ............",
+"............             ............",
+"............             ............",
+"............ ........... ............",
+"...........               ...........",
+"...........               ...........",
+".............           .............",
+"................ ... ................",
+"........  ....         ....  ........",
+"....                             ....",
+"...               .               ...",
+"....            .....            ....",
+"....  .........................  ....",
+".....................................",
+"....................................."
+};
diff --git a/pixmaps/adl40.xpm b/pixmaps/adl40.xpm
new file mode 100644
index 0000000..0485369
--- /dev/null
+++ b/pixmaps/adl40.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char *adl40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"..................     .................",
+"................         ...............",
+"...............           ..............",
+".............               ............",
+"...........                   ..........",
+".........                       ........",
+".......             .             ......",
+"......              .              .....",
+".....               .               ....",
+".....            .......            ....",
+"......              .              .....",
+".......             .             ......",
+"........            .            .......",
+"..........                     .........",
+"...........                   ..........",
+"............                 ...........",
+".............   .........   ............",
+".............. .         . .............",
+"..............             .............",
+".............               ............",
+"............. ............. ............",
+"............                 ...........",
+"............                 ...........",
+"...............           ..............",
+"...................   ..................",
+".................       ................",
+"......                             .....",
+"....                                 ...",
+"...                 .                 ..",
+"....              .....              ...",
+"..... ............................. ....",
+"........................................",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/adl45.xpm b/pixmaps/adl45.xpm
new file mode 100644
index 0000000..898b725
--- /dev/null
+++ b/pixmaps/adl45.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *adl45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+"....................     ....................",
+"...................       ...................",
+".................           .................",
+"...............               ...............",
+".............                   .............",
+"...........                       ...........",
+".........                           .........",
+".......               .               .......",
+".....                 .                 .....",
+"....                  .                  ....",
+"....              .........              ....",
+"....                  .                  ....",
+".....                 .                 .....",
+".....                 .                 .....",
+"......                .                ......",
+"........                             ........",
+"..........                         ..........",
+"............                     ............",
+"..............                 ..............",
+".............. ............... ..............",
+"...............               ...............",
+"...............               ...............",
+"..............                 ..............",
+"..............  .............  ..............",
+".............. .             . ..............",
+".............                   .............",
+".............                   .............",
+"................             ................",
+".................... ... ....................",
+"..................         ..................",
+".......                               .......",
+"....                  .                  ....",
+"...                 .....                 ...",
+"...                .......                ...",
+"....  .................................  ....",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/adl49.xpm b/pixmaps/adl49.xpm
new file mode 100644
index 0000000..c40f67d
--- /dev/null
+++ b/pixmaps/adl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *adl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".......................   .......................",
+"....................         ....................",
+"...................           ...................",
+".................               .................",
+"................                 ................",
+"..............                     ..............",
+"............                         ............",
+"..........                             ..........",
+"........                .                ........",
+"......                  .                  ......",
+".....                   .                   .....",
+"....                    .                    ....",
+".....               .........               .....",
+"......                  .                  ......",
+".......                 .                 .......",
+".........               .               .........",
+"...........             .             ...........",
+"............                         ............",
+".............                       .............",
+"..............                     ..............",
+"...............                   ...............",
+"................   ...........   ................",
+"................ ..           .. ................",
+"................                 ................",
+"................                 ................",
+"................                 ................",
+"...............  ...............  ...............",
+"...............                   ...............",
+"..............                     ..............",
+"..............                     ..............",
+"..................     ...     ..................",
+"......................     ......................",
+"....................         ....................",
+"........                                 ........",
+".....                   .                   .....",
+"....                  .....                  ....",
+"....                .........                ....",
+"....    .................................    ....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/adl54.xpm b/pixmaps/adl54.xpm
new file mode 100644
index 0000000..8a0d3da
--- /dev/null
+++ b/pixmaps/adl54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *adl54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................          ......................",
+"....................              ....................",
+"...................                ...................",
+"..................                  ..................",
+".................                    .................",
+"..............                          ..............",
+"...........                                ...........",
+".........                                    .........",
+"........                  ..                  ........",
+".......                   ..                   .......",
+"......                    ..                    ......",
+".....                     ..                     .....",
+".....                 ..........                 .....",
+".....                 ..........                 .....",
+"......                    ..                    ......",
+"......                    ..                    ......",
+".......                   ..                   .......",
+".........                 ..                 .........",
+"...........                                ...........",
+".............                            .............",
+"...............                        ...............",
+"................     ............     ................",
+".................   ..............   .................",
+"..................  .            .  ..................",
+"..................                  ..................",
+".................                    .................",
+".................   ..............   .................",
+"................  .................   ................",
+"................  ..              ..  ................",
+"................                      ................",
+"...............                        ...............",
+"................                      ................",
+"....................    ......    ....................",
+"......................  ......  ......................",
+".......                                        .......",
+".....                                            .....",
+"...                                                ...",
+"....                                              ....",
+"....                                              ....",
+".....                     ..                     .....",
+"......                 ........                 ......",
+"....... ...................................... .......",
+"......................................................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/adl58.xpm b/pixmaps/adl58.xpm
new file mode 100644
index 0000000..83c92d7
--- /dev/null
+++ b/pixmaps/adl58.xpm
@@ -0,0 +1,66 @@
+/* XPM */
+static char *adl58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................      ..........................",
+".......................            .......................",
+".....................                .....................",
+"....................                  ....................",
+"..................                      ..................",
+".................                        .................",
+"...............                            ...............",
+".............                                .............",
+"...........                                    ...........",
+".........                   ..                   .........",
+".......                     ..                     .......",
+"......                      ..                      ......",
+".....                       ..                       .....",
+".....                   ..........                   .....",
+".....                   ..........                   .....",
+"......                      ..                      ......",
+".......                     ..                     .......",
+"........                    ..                    ........",
+"..........                  ..                  ..........",
+"............                ..                ............",
+"..............                              ..............",
+"................                          ................",
+".................                        .................",
+"..................                      ..................",
+"...................  ................  ...................",
+"...................  ................  ...................",
+"...................                    ...................",
+"..................                      ..................",
+"..................                      ..................",
+"..................  ..................  ..................",
+".................   ..................   .................",
+".................                        .................",
+".................                        .................",
+".................                        .................",
+"......................              ......................",
+"..........................  ..  ..........................",
+"........................          ........................",
+"........                                          ........",
+"......                                              ......",
+"....                                                  ....",
+"....                                                  ....",
+".....                                                .....",
+".....                       ..                       .....",
+"......                    ......                    ......",
+".......  ........       ..........       ........  .......",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/adl64.xpm b/pixmaps/adl64.xpm
new file mode 100644
index 0000000..2724965
--- /dev/null
+++ b/pixmaps/adl64.xpm
@@ -0,0 +1,72 @@
+/* XPM */
+static char *adl64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"............................        ............................",
+".........................              .........................",
+".......................                  .......................",
+"......................                    ......................",
+".....................                      .....................",
+"...................                          ...................",
+".................                              .................",
+"..............                                    ..............",
+"............                                        ............",
+"..........                     ..                     ..........",
+"........                       ..                       ........",
+".......                        ..                        .......",
+"......                         ..                         ......",
+"......                    ............                    ......",
+"......                    ............                    ......",
+"......                         ..                         ......",
+".......                        ..                        .......",
+".........                      ..                      .........",
+"..........                     ..                     ..........",
+"............                                        ............",
+"..............                                     .............",
+"...............                                  ...............",
+".................                              .................",
+"...................                          ...................",
+"....................     ..............     ....................",
+".....................  ................... .....................",
+".....................  ..              ... .....................",
+".....................                      .....................",
+".....................                      .....................",
+"....................                        ....................",
+"....................   ..................   ....................",
+"....................  ....................  ....................",
+"...................  ..                  ..  ...................",
+"...................                          ...................",
+"...................                          ...................",
+"....................                        ....................",
+".........................              .........................",
+"............................  ....  ............................",
+"..........................    ....    ..........................",
+".........                                              .........",
+".......                                                  .......",
+".....                                                      .....",
+"....                                                        ....",
+".....                                                      .....",
+"......                         ..                         ......",
+"......                       ......                       ......",
+".......    ........        ..........        ........    .......",
+"........ .............................................. ........",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/adl72.xpm b/pixmaps/adl72.xpm
new file mode 100644
index 0000000..ec46e92
--- /dev/null
+++ b/pixmaps/adl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *adl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"...............................          ...............................",
+".............................              .............................",
+"............................                ............................",
+"...........................                  ...........................",
+"..........................                    ..........................",
+"........................                        ........................",
+"......................                            ......................",
+"....................                                ....................",
+"..................                                    ..................",
+"................                                        ................",
+"..............                                            ..............",
+".............                                              .............",
+"...........                                                  ...........",
+".........                          ..                          .........",
+"........                           ..                           ........",
+"......                             ..                             ......",
+"......                             ..                             ......",
+".....                              ..                              .....",
+".....                              ..                              .....",
+".....                        ..............                        .....",
+".......                      ..............                       ......",
+".......                            ..                            .......",
+".........                          ..                          .........",
+"............                       ..                        ...........",
+"..............                     ..                      .............",
+"...............                    ..                    ...............",
+"................                                        ................",
+".................                                      .................",
+"..................                                    ..................",
+"...................                                  ...................",
+"....................                                ....................",
+".....................                              .....................",
+"......................      ................      ......................",
+".......................   .....................  .......................",
+"........................  ..                ... ........................",
+".......................                          .......................",
+".......................                          .......................",
+".......................                          .......................",
+"......................                            ......................",
+"......................     ..................     ......................",
+".....................  ..........................  .....................",
+".....................  ....                  ....  .....................",
+".....................                              .....................",
+"....................                                ....................",
+"....................                                ....................",
+"......................                            ......................",
+"............................                ............................",
+"................................        ................................",
+"...............................          ...............................",
+".............................              .............................",
+"...........                                                  ...........",
+".......                                                          .......",
+".....                                                              .....",
+"....                                                                ....",
+"....                               ..                               ....",
+"....                             ......                             ....",
+".....                         ............                         .....",
+"......      ................................................      ......",
+".......  ......................................................  .......",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/ald33.xpm b/pixmaps/ald33.xpm
new file mode 100644
index 0000000..0390229
--- /dev/null
+++ b/pixmaps/ald33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *ald33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............     ..............",
+"............. XXXXX .............",
+"............ XXXXXXX ............",
+"..........  XXXXXXXXX  ..........",
+"........  XXXXXXXXXXXXX  ........",
+"......  XXXXXXXX XXXXXXXX  ......",
+"....  XXXXXXXXXX XXXXXXXXXX  ....",
+"... XXXXXXXXXXXX XXXXXXXXXXXX ...",
+"... XXXXXXXXXX     XXXXXXXXXX ...",
+"....  XXXXXXXXXX XXXXXXXXXX  ....",
+"......  XXXXXXXX XXXXXXXX  ......",
+"........ XXXXXXXXXXXXXXX ........",
+"......... XXXXXXXXXXXXX .........",
+".......... XXXXXXXXXXX ..........",
+"...........           ...........",
+"........... XXXXXXXXX ...........",
+".......... X         X ..........",
+"..........  XXXXXXXXX  ..........",
+".......... XXXXXXXXXXX ..........",
+"...........           ...........",
+"..............  X  ..............",
+"....          XXXXX          ....",
+"... XXXXXXXXXXXX XXXXXXXXXXXX ...",
+"... XXXXXXXXXX  .  XXXXXXXXXX ...",
+"....          .....          ....",
+".... ....................... ....",
+".................................",
+"................................."
+};
diff --git a/pixmaps/ald37.xpm b/pixmaps/ald37.xpm
new file mode 100644
index 0000000..7286277
--- /dev/null
+++ b/pixmaps/ald37.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char *ald37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".....................................",
+".....................................",
+".....................................",
+".....................................",
+".....................................",
+".................   .................",
+"...............  XXX  ...............",
+"............   XXXXXXX   ............",
+".........   XXXXXXXXXXXXX   .........",
+".......  XXXXXXXXXXXXXXXXXXX  .......",
+"..... XXXXXXXXXXXXXXXXXXXXXXXX  .....",
+".... XXXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...",
+"... XXXXXXXXXXXXXX XXXXXXXXXXXXXX ...",
+"... XXXXXXXXXXXXXX XXXXXXXXXXXXXX ...",
+".... XXXXXXXXXX       XXXXXXXXXX ....",
+".... XXXXXXXXXXXXX XXXXXXXXXXXXX ....",
+".....  XXXXXXXXXXX XXXXXXXXXXX  .....",
+".......  XXXXXXXXX XXXXXXXXX  .......",
+".........  XXXXXXXXXXXXXXX  .........",
+"........... XXXXXXXXXXXXX ...........",
+"............ XXXXXXXXXXX ............",
+"............             ............",
+"............ XXXXXXXXXXX ............",
+"............ XXXXXXXXXXX ............",
+"............             ............",
+"...........  XXXXXXXXXXX  ...........",
+"...........  XXXXXXXXXXX  ...........",
+".............           .............",
+"................  X X................",
+"........  ....  XXXXX  ....  ........",
+"....    XX    XXXX XXXX    XX    ....",
+"... XXXXXXXXXXXX  .  XXXXXXXXXXXX ...",
+".... X          .....          X ....",
+"....  .........................  ....",
+".....................................",
+"....................................."
+};
diff --git a/pixmaps/ald40.xpm b/pixmaps/ald40.xpm
new file mode 100644
index 0000000..7a6a764
--- /dev/null
+++ b/pixmaps/ald40.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char *ald40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"..................     .................",
+"................  XXXXX  ...............",
+"............... XXXXXXXXX ..............",
+".............  XXXXXXXXXXX  ............",
+"...........  XXXXXXXXXXXXXXX  ..........",
+".........  XXXXXXXXXXXXXXXXXXX  ........",
+".......  XXXXXXXXXXX XXXXXXXXXXX  ......",
+"...... XXXXXXXXXXXXX XXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXX XXXXXXXXXXXXXX ....",
+"..... XXXXXXXXXXX       XXXXXXXXXXX ....",
+"...... XXXXXXXXXXXXX XXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXX XXXXXXXXXXXX ......",
+"........  XXXXXXXXXX XXXXXXXXXX  .......",
+".......... XXXXXXXXXXXXXXXXXXX .........",
+"........... XXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXX ...........",
+"............. XX         XX ............",
+"..............  XXXXXXXXX  .............",
+".............. XXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXX ............",
+".............               ............",
+"............  XXXXXXXXXXXXX  ...........",
+"............   XXXXXXXXXXX   ...........",
+"...............           ..............",
+"................... X ..................",
+".................  XXX  ................",
+"......           XXXXXXX           .....",
+"....  XXXXXXXXXXXXXX XXXXXXXXXXXXXX  ...",
+"... XXXXXXXXXXXXXX  .  XXXXXXXXXXXXXX ..",
+".... X            .....            X ...",
+"..... ............................. ....",
+"........................................",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/ald45.xpm b/pixmaps/ald45.xpm
new file mode 100644
index 0000000..3ab06a5
--- /dev/null
+++ b/pixmaps/ald45.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *ald45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+"....................     ....................",
+"................... XXXXX ...................",
+".................  XXXXXXX  .................",
+"...............  XXXXXXXXXXX  ...............",
+".............  XXXXXXXXXXXXXXX  .............",
+"...........  XXXXXXXXXXXXXXXXXXX  ...........",
+".........  XXXXXXXXXXXXXXXXXXXXXXX  .........",
+".......  XXXXXXXXXXXXX XXXXXXXXXXXXX  .......",
+".....  XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX  .....",
+".... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXX         XXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX ....",
+"..... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX .....",
+"......  XXXXXXXXXXXXXX XXXXXXXXXXXXXX  ......",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXX  ........",
+"..........  XXXXXXXXXXXXXXXXXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXX  ............",
+".............. XXXXXXXXXXXXXXX ..............",
+"..............                 ..............",
+"............... XXXXXXXXXXXXX ...............",
+"............... XXXXXXXXXXXXX ...............",
+".............. XXXXXXXXXXXXXXX ..............",
+".............. X             X ..............",
+"..............  XXXXXXXXXXXXX  ..............",
+"............. XXXXXXXXXXXXXXXXX .............",
+".............   XXXXXXXXXXXXX   .............",
+"................             ................",
+"....................  X  ....................",
+"..................  XXXXX  ..................",
+".......           XXXX XXXX           .......",
+"....   XXXXXXXXXXXXX  .  XXXXXXXXXXXXX   ....",
+"... XXXXXXXXXXXXXXX ..... XXXXXXXXXXXXXXX ...",
+"... XX             .......             XX ...",
+"....  .................................  ....",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/ald49.xpm b/pixmaps/ald49.xpm
new file mode 100644
index 0000000..d9ddb67
--- /dev/null
+++ b/pixmaps/ald49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *ald49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".......................   .......................",
+"....................   XXX   ....................",
+"................... XXXXXXXXX ...................",
+".................  XXXXXXXXXXX  .................",
+"................ XXXXXXXXXXXXXXX ................",
+"..............  XXXXXXXXXXXXXXXXX  ..............",
+"............  XXXXXXXXXXXXXXXXXXXXX  ............",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXX  ..........",
+"........  XXXXXXXXXXXXXX XXXXXXXXXXXXXX  ........",
+"......  XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX  ......",
+"..... XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX .....",
+".... XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX ....",
+"..... XXXXXXXXXXXXXX         XXXXXXXXXXXXXX .....",
+"...... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX ......",
+".......  XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX  .......",
+".........  XXXXXXXXXXXXX XXXXXXXXXXXXX  .........",
+"........... XXXXXXXXXXXX XXXXXXXXXXXX ...........",
+"............ XXXXXXXXXXXXXXXXXXXXXXX ............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+".............. XXXXXXXXXXXXXXXXXXX ..............",
+"............... XXXXXXXXXXXXXXXXX ...............",
+"................ XX           XX ................",
+"................   XXXXXXXXXXX   ................",
+"................ XXXXXXXXXXXXXXX ................",
+"................ XXXXXXXXXXXXXXX ................",
+"................ XXXXXXXXXXXXXXX ................",
+"...............                   ...............",
+"............... XXXXXXXXXXXXXXXXX ...............",
+".............. XXXXXXXXXXXXXXXXXXX ..............",
+"..............    XXXXXXXXXXXXX    ..............",
+"..................             ..................",
+"......................  X  ......................",
+"....................  XXXXX  ....................",
+"........            XXXX XXXX            ........",
+".....   XXXXXXXXXXXXXX  .  XXXXXXXXXXXXXX   .....",
+".... XXXXXXXXXXXXXXX  .....  XXXXXXXXXXXXXXX ....",
+".... XXX            .........            XXX ....",
+"....    .................................    ....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/ald54.xpm b/pixmaps/ald54.xpm
new file mode 100644
index 0000000..b33900a
--- /dev/null
+++ b/pixmaps/ald54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *ald54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................          ......................",
+"....................              ....................",
+"...................   XXXXXXXXXX   ...................",
+"..................   XXXXXXXXXXXX   ..................",
+".................   XXXXXXXXXXXXXX   .................",
+"..............     XXXXXXXXXXXXXXXX     ..............",
+"...........      XXXXXXXXXXXXXXXXXXXX      ...........",
+".........     XXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"........   XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX   ........",
+".......   XXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXX   .......",
+"......   XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX   ......",
+".....   XXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX   .....",
+".....  XXXXXXXXXXXXXXX          XXXXXXXXXXXXXXX  .....",
+".....   XXXXXXXXXXXXXX          XXXXXXXXXXXXXX   .....",
+"......  XXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX  ......",
+"......   XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX   ......",
+".......    XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX    .......",
+".........    XXXXXXXXXXXXX  XXXXXXXXXXXXX    .........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXX    ...........",
+".............    XXXXXXXXXXXXXXXXXXXX    .............",
+"...............   XXXXXXXXXXXXXXXXXX   ...............",
+"................   XX            XX   ................",
+".................                    .................",
+"..................   XXXXXXXXXXXX   ..................",
+"..................  XXXXXXXXXXXXXX  ..................",
+".................   XXXXXXXXXXXXXX   .................",
+".................  X              X  .................",
+"................                      ................",
+"................    XXXXXXXXXXXXXX    ................",
+"................  XXXXXXXXXXXXXXXXXX  ................",
+"...............     XXXXXXXXXXXXXX     ...............",
+"................                      ................",
+"....................              ....................",
+"......................    XX    ......................",
+".......                 XXXXXX                 .......",
+".....                 XXXXXXXXXX                 .....",
+"...    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...",
+"....  XXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX  ....",
+"....   XXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXXX   ....",
+".....                     ..                     .....",
+"......                 ........                 ......",
+"....... ...................................... .......",
+"......................................................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/ald58.xpm b/pixmaps/ald58.xpm
new file mode 100644
index 0000000..c92fe22
--- /dev/null
+++ b/pixmaps/ald58.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *ald58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................      ..........................",
+".......................            .......................",
+".....................     XXXXXX     .....................",
+"....................   XXXXXXXXXXXX   ....................",
+"..................    XXXXXXXXXXXXXX    ..................",
+".................   XXXXXXXXXXXXXXXXXX   .................",
+"...............    XXXXXXXXXXXXXXXXXXXX    ...............",
+".............    XXXXXXXXXXXXXXXXXXXXXXXX    .............",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...........",
+".........    XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX    .........",
+".......    XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX    .......",
+"......   XXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX   ......",
+".....  XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXX  .....",
+".....  XXXXXXXXXXXXXXXXX          XXXXXXXXXXXXXXXXX  .....",
+".....   XXXXXXXXXXXXXXXX          XXXXXXXXXXXXXXXX   .....",
+"......   XXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX   ......",
+".......   XXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX   .......",
+"........    XXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXX    ........",
+"..........    XXXXXXXXXXXXXX  XXXXXXXXXXXXXX    ..........",
+"............    XXXXXXXXXXXX  XXXXXXXXXXXX    ............",
+"..............    XXXXXXXXXXXXXXXXXXXXXX    ..............",
+"................   XXXXXXXXXXXXXXXXXXXX   ................",
+".................   XXXXXXXXXXXXXXXXXX   .................",
+"..................   XXXXXXXXXXXXXXXX   ..................",
+"...................                    ...................",
+"...................                    ...................",
+"...................  XXXXXXXXXXXXXXXX  ...................",
+"..................   XXXXXXXXXXXXXXXX   ..................",
+"..................  XXXXXXXXXXXXXXXXXX  ..................",
+"..................                      ..................",
+".................                        .................",
+".................   XXXXXXXXXXXXXXXXXX   .................",
+".................     XXXXXXXXXXXXXX     .................",
+".................                        .................",
+"......................              ......................",
+"..........................      ..........................",
+"........................    XX    ........................",
+"........                  XXXXXX                  ........",
+"......                  XXXXXXXXXX                  ......",
+"....    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ....",
+"....   XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXX   ....",
+".....  XXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXX  .....",
+".....   X        XXXXXXX    ..    XXXXXXX        X   .....",
+"......                    ......                    ......",
+".......  ........       ..........       ........  .......",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/ald64.xpm b/pixmaps/ald64.xpm
new file mode 100644
index 0000000..4584002
--- /dev/null
+++ b/pixmaps/ald64.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char *ald64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"............................        ............................",
+".........................              .........................",
+".......................     XXXXXXXX     .......................",
+"......................    XXXXXXXXXXXX    ......................",
+".....................   XXXXXXXXXXXXXXXX   .....................",
+"...................    XXXXXXXXXXXXXXXXXX    ...................",
+".................    XXXXXXXXXXXXXXXXXXXXXX    .................",
+"..............     XXXXXXXXXXXXXXXXXXXXXXXXXX     ..............",
+"............     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ............",
+"..........    XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX    ..........",
+"........    XXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX    ........",
+".......   XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXX   .......",
+"......   XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXX   ......",
+"......  XXXXXXXXXXXXXXXXXX            XXXXXXXXXXXXXXXXXX  ......",
+"......  XXXXXXXXXXXXXXXXXX            XXXXXXXXXXXXXXXXXX  ......",
+"......   XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXX   ......",
+".......    XXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX    .......",
+".........   XXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX   .........",
+"..........    XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX   ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .............",
+"...............    XXXXXXXXXXXXXXXXXXXXXXXXXX    ...............",
+".................    XXXXXXXXXXXXXXXXXXXXXX    .................",
+"...................   XXXXXXXXXXXXXXXXXXXX   ...................",
+"....................   XX              XX   ....................",
+".....................                      .....................",
+".....................    XXXXXXXXXXXXXX    .....................",
+".....................  XXXXXXXXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXXXXXXXXXXX  .....................",
+"....................   XXXXXXXXXXXXXXXXXX   ....................",
+"....................  X                  X  ....................",
+"....................                        ....................",
+"...................    XXXXXXXXXXXXXXXXXX    ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................      XXXXXXXXXXXXXX      ...................",
+"....................                        ....................",
+".........................              .........................",
+"............................        ............................",
+"..........................    XXXX    ..........................",
+".........                   XXXXXXXX                   .........",
+".......                   XXXXXXXXXXXX                   .......",
+".....    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"....   XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXX   ....",
+".....   XXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXX   .....",
+"......  XXX        XXXXXXXX    ..    XXXXXXXX        XXX  ......",
+"......                       ......                       ......",
+".......    ........        ..........        ........    .......",
+"........ .............................................. ........",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/ald72.xpm b/pixmaps/ald72.xpm
new file mode 100644
index 0000000..51aec18
--- /dev/null
+++ b/pixmaps/ald72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *ald72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"...............................          ...............................",
+".............................              .............................",
+"............................    XXXXXXXX    ............................",
+"...........................    XXXXXXXXXX    ...........................",
+"..........................    XXXXXXXXXXXX    ..........................",
+"........................    XXXXXXXXXXXXXXXX    ........................",
+"......................     XXXXXXXXXXXXXXXXXX     ......................",
+"....................     XXXXXXXXXXXXXXXXXXXXXX     ....................",
+"..................     XXXXXXXXXXXXXXXXXXXXXXXXXX     ..................",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ................",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ..............",
+".............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      .............",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ...........",
+".........      XXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX      .........",
+"........     XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXX     ........",
+"......     XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXX     ......",
+"......   XXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXX   ......",
+".....   XXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXX   .....",
+".....   XXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXX   .....",
+".....   XXXXXXXXXXXXXXXXXXXXX              XXXXXXXXXXXXXXXXXXXXX   .....",
+".......  XXXXXXXXXXXXXXXXXXXX              XXXXXXXXXXXXXXXXXXX    ......",
+".......     XXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXX     .......",
+".........     XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX      .........",
+"............    XXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX     ...........",
+"..............   XXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX    .............",
+"...............   XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX   ...............",
+"................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"..................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..................",
+"...................   XXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...................",
+"....................   XXXXXXXXXXXXXXXXXXXXXXXXX    ....................",
+".....................   XXXXXXXXXXXXXXXXXXXXXXXX   .....................",
+"......................   XXX                XXX   ......................",
+".......................                          .......................",
+"........................    XXXXXXXXXXXXXXXX    ........................",
+".......................   XXXXXXXXXXXXXXXXXXXX   .......................",
+".......................  XXXXXXXXXXXXXXXXXXXXXX  .......................",
+".......................  XXXXXXXXXXXXXXXXXXXXXX  .......................",
+"......................   XXXXXXXXXXXXXXXXXXXXXX   ......................",
+"......................  XXX                  XXX  ......................",
+".....................                              .....................",
+".....................      XXXXXXXXXXXXXXXXXX      .....................",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+"....................   XXXXXXXXXXXXXXXXXXXXXXXXXX   ....................",
+"....................        XXXXXXXXXXXXXXXX        ....................",
+"......................                            ......................",
+"............................                ............................",
+"................................        ................................",
+"...............................   XXXX   ...............................",
+".............................    XXXXXX    .............................",
+"...........                    XXXXXXXXXX                    ...........",
+".......                      XXXXXXXXXXXXXX                      .......",
+".....      XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXX      .....",
+"....   XXXXXXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXX   ....",
+"....  XXXXXXXXXXXXXXXXXXXXXXXX     ..     XXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"....   XXXXX                     ......                     XXXXX   ....",
+".....   X                     ............                     X   .....",
+"......      ................................................      ......",
+".......  ......................................................  .......",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/all33.xpm b/pixmaps/all33.xpm
new file mode 100644
index 0000000..fae3a2f
--- /dev/null
+++ b/pixmaps/all33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *all33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............     ..............",
+"............. XXXXX .............",
+"............ XXXXXXX ............",
+"..........  XXXXXXXXX  ..........",
+"........  XXXXXXXXXXXXX  ........",
+"......  XXXXXXXX XXXXXXXX  ......",
+"....  XXXXXXXXXX XXXXXXXXXX  ....",
+"... XXXXXXXXXXXX XXXXXXXXXXXX ...",
+"... XXXXXXXXXX     XXXXXXXXXX ...",
+"....  XXXXXXXXXX XXXXXXXXXX  ....",
+"......  XXXXXXXX XXXXXXXX  ......",
+"........ XXXXXXXXXXXXXXX ........",
+"......... XXXXXXXXXXXXX .........",
+".......... XXXXXXXXXXX ..........",
+"...........           ...........",
+"........... XXXXXXXXX ...........",
+".......... X         X ..........",
+"..........  XXXXXXXXX  ..........",
+".......... XXXXXXXXXXX ..........",
+"...........           ...........",
+"..............  X  ..............",
+"....          XXXXX          ....",
+"... XXXXXXXXXXXX XXXXXXXXXXXX ...",
+"... XXXXXXXXXX  .  XXXXXXXXXX ...",
+"....          .....          ....",
+".... ....................... ....",
+".................................",
+"................................."
+};
diff --git a/pixmaps/all37.xpm b/pixmaps/all37.xpm
new file mode 100644
index 0000000..866f4cc
--- /dev/null
+++ b/pixmaps/all37.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char *all37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".....................................",
+".....................................",
+".....................................",
+".....................................",
+".....................................",
+".................   .................",
+"...............  XXX  ...............",
+"............   XXXXXXX   ............",
+".........   XXXXXXXXXXXXX   .........",
+".......  XXXXXXXXXXXXXXXXXXX  .......",
+"..... XXXXXXXXXXXXXXXXXXXXXXXX  .....",
+".... XXXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...",
+"... XXXXXXXXXXXXXX XXXXXXXXXXXXXX ...",
+"... XXXXXXXXXXXXXX XXXXXXXXXXXXXX ...",
+".... XXXXXXXXXX       XXXXXXXXXX ....",
+".... XXXXXXXXXXXXX XXXXXXXXXXXXX ....",
+".....  XXXXXXXXXXX XXXXXXXXXXX  .....",
+".......  XXXXXXXXX XXXXXXXXX  .......",
+".........  XXXXXXXXXXXXXXX  .........",
+"........... XXXXXXXXXXXXX ...........",
+"............ XXXXXXXXXXX ............",
+"............             ............",
+"............ XXXXXXXXXXX ............",
+"............ XXXXXXXXXXX ............",
+"............             ............",
+"...........  XXXXXXXXXXX  ...........",
+"...........  XXXXXXXXXXX  ...........",
+".............           .............",
+"................  X X................",
+"........  ....  XXXXX  ....  ........",
+"....    XX    XXXX XXXX    XX    ....",
+"... XXXXXXXXXXXX  .  XXXXXXXXXXXX ...",
+".... X          .....          X ....",
+"....  .........................  ....",
+".....................................",
+"....................................."
+};
diff --git a/pixmaps/all40.xpm b/pixmaps/all40.xpm
new file mode 100644
index 0000000..b3cf44b
--- /dev/null
+++ b/pixmaps/all40.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char *all40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"........................................",
+"..................     .................",
+"................  XXXXX  ...............",
+"............... XXXXXXXXX ..............",
+".............  XXXXXXXXXXX  ............",
+"...........  XXXXXXXXXXXXXXX  ..........",
+".........  XXXXXXXXXXXXXXXXXXX  ........",
+".......  XXXXXXXXXXX XXXXXXXXXXX  ......",
+"...... XXXXXXXXXXXXX XXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXX XXXXXXXXXXXXXX ....",
+"..... XXXXXXXXXXX       XXXXXXXXXXX ....",
+"...... XXXXXXXXXXXXX XXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXX XXXXXXXXXXXX ......",
+"........  XXXXXXXXXX XXXXXXXXXX  .......",
+".......... XXXXXXXXXXXXXXXXXXX .........",
+"........... XXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXX ...........",
+"............. XX         XX ............",
+"..............  XXXXXXXXX  .............",
+".............. XXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXX ............",
+".............               ............",
+"............  XXXXXXXXXXXXX  ...........",
+"............   XXXXXXXXXXX   ...........",
+"...............           ..............",
+"................... X ..................",
+".................  XXX  ................",
+"......           XXXXXXX           .....",
+"....  XXXXXXXXXXXXXX XXXXXXXXXXXXXX  ...",
+"... XXXXXXXXXXXXXX  .  XXXXXXXXXXXXXX ..",
+".... X            .....            X ...",
+"..... ............................. ....",
+"........................................",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/all45.xpm b/pixmaps/all45.xpm
new file mode 100644
index 0000000..53f6395
--- /dev/null
+++ b/pixmaps/all45.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *all45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+"....................     ....................",
+"................... XXXXX ...................",
+".................  XXXXXXX  .................",
+"...............  XXXXXXXXXXX  ...............",
+".............  XXXXXXXXXXXXXXX  .............",
+"...........  XXXXXXXXXXXXXXXXXXX  ...........",
+".........  XXXXXXXXXXXXXXXXXXXXXXX  .........",
+".......  XXXXXXXXXXXXX XXXXXXXXXXXXX  .......",
+".....  XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX  .....",
+".... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXX         XXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX ....",
+"..... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX .....",
+"......  XXXXXXXXXXXXXX XXXXXXXXXXXXXX  ......",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXX  ........",
+"..........  XXXXXXXXXXXXXXXXXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXX  ............",
+".............. XXXXXXXXXXXXXXX ..............",
+"..............                 ..............",
+"............... XXXXXXXXXXXXX ...............",
+"............... XXXXXXXXXXXXX ...............",
+".............. XXXXXXXXXXXXXXX ..............",
+".............. X             X ..............",
+"..............  XXXXXXXXXXXXX  ..............",
+"............. XXXXXXXXXXXXXXXXX .............",
+".............   XXXXXXXXXXXXX   .............",
+"................             ................",
+"....................  X  ....................",
+"..................  XXXXX  ..................",
+".......           XXXX XXXX           .......",
+"....   XXXXXXXXXXXXX  .  XXXXXXXXXXXXX   ....",
+"... XXXXXXXXXXXXXXX ..... XXXXXXXXXXXXXXX ...",
+"... XX             .......             XX ...",
+"....  .................................  ....",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/all49.xpm b/pixmaps/all49.xpm
new file mode 100644
index 0000000..5300de0
--- /dev/null
+++ b/pixmaps/all49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *all49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".......................   .......................",
+"....................   XXX   ....................",
+"................... XXXXXXXXX ...................",
+".................  XXXXXXXXXXX  .................",
+"................ XXXXXXXXXXXXXXX ................",
+"..............  XXXXXXXXXXXXXXXXX  ..............",
+"............  XXXXXXXXXXXXXXXXXXXXX  ............",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXX  ..........",
+"........  XXXXXXXXXXXXXX XXXXXXXXXXXXXX  ........",
+"......  XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX  ......",
+"..... XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX .....",
+".... XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX ....",
+"..... XXXXXXXXXXXXXX         XXXXXXXXXXXXXX .....",
+"...... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX ......",
+".......  XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX  .......",
+".........  XXXXXXXXXXXXX XXXXXXXXXXXXX  .........",
+"........... XXXXXXXXXXXX XXXXXXXXXXXX ...........",
+"............ XXXXXXXXXXXXXXXXXXXXXXX ............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+".............. XXXXXXXXXXXXXXXXXXX ..............",
+"............... XXXXXXXXXXXXXXXXX ...............",
+"................ XX           XX ................",
+"................   XXXXXXXXXXX   ................",
+"................ XXXXXXXXXXXXXXX ................",
+"................ XXXXXXXXXXXXXXX ................",
+"................ XXXXXXXXXXXXXXX ................",
+"...............                   ...............",
+"............... XXXXXXXXXXXXXXXXX ...............",
+".............. XXXXXXXXXXXXXXXXXXX ..............",
+"..............    XXXXXXXXXXXXX    ..............",
+"..................             ..................",
+"......................  X  ......................",
+"....................  XXXXX  ....................",
+"........            XXXX XXXX            ........",
+".....   XXXXXXXXXXXXXX  .  XXXXXXXXXXXXXX   .....",
+".... XXXXXXXXXXXXXXX  .....  XXXXXXXXXXXXXXX ....",
+".... XXX            .........            XXX ....",
+"....    .................................    ....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/all54.xpm b/pixmaps/all54.xpm
new file mode 100644
index 0000000..4f2c6c4
--- /dev/null
+++ b/pixmaps/all54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *all54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................          ......................",
+"....................              ....................",
+"...................   XXXXXXXXXX   ...................",
+"..................   XXXXXXXXXXXX   ..................",
+".................   XXXXXXXXXXXXXX   .................",
+"..............     XXXXXXXXXXXXXXXX     ..............",
+"...........      XXXXXXXXXXXXXXXXXXXX      ...........",
+".........     XXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"........   XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX   ........",
+".......   XXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXX   .......",
+"......   XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX   ......",
+".....   XXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX   .....",
+".....  XXXXXXXXXXXXXXX          XXXXXXXXXXXXXXX  .....",
+".....   XXXXXXXXXXXXXX          XXXXXXXXXXXXXX   .....",
+"......  XXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX  ......",
+"......   XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX   ......",
+".......    XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX    .......",
+".........    XXXXXXXXXXXXX  XXXXXXXXXXXXX    .........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXX    ...........",
+".............    XXXXXXXXXXXXXXXXXXXX    .............",
+"...............   XXXXXXXXXXXXXXXXXX   ...............",
+"................   XX            XX   ................",
+".................                    .................",
+"..................   XXXXXXXXXXXX   ..................",
+"..................  XXXXXXXXXXXXXX  ..................",
+".................   XXXXXXXXXXXXXX   .................",
+".................  X              X  .................",
+"................                      ................",
+"................    XXXXXXXXXXXXXX    ................",
+"................  XXXXXXXXXXXXXXXXXX  ................",
+"...............     XXXXXXXXXXXXXX     ...............",
+"................                      ................",
+"....................              ....................",
+"......................    XX    ......................",
+".......                 XXXXXX                 .......",
+".....                 XXXXXXXXXX                 .....",
+"...    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...",
+"....  XXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX  ....",
+"....   XXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXXX   ....",
+".....                     ..                     .....",
+"......                 ........                 ......",
+"....... ...................................... .......",
+"......................................................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/all58.xpm b/pixmaps/all58.xpm
new file mode 100644
index 0000000..8f69b46
--- /dev/null
+++ b/pixmaps/all58.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *all58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+"..........................      ..........................",
+".......................            .......................",
+".....................     XXXXXX     .....................",
+"....................   XXXXXXXXXXXX   ....................",
+"..................    XXXXXXXXXXXXXX    ..................",
+".................   XXXXXXXXXXXXXXXXXX   .................",
+"...............    XXXXXXXXXXXXXXXXXXXX    ...............",
+".............    XXXXXXXXXXXXXXXXXXXXXXXX    .............",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...........",
+".........    XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX    .........",
+".......    XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX    .......",
+"......   XXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX   ......",
+".....  XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXX  .....",
+".....  XXXXXXXXXXXXXXXXX          XXXXXXXXXXXXXXXXX  .....",
+".....   XXXXXXXXXXXXXXXX          XXXXXXXXXXXXXXXX   .....",
+"......   XXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX   ......",
+".......   XXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX   .......",
+"........    XXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXX    ........",
+"..........    XXXXXXXXXXXXXX  XXXXXXXXXXXXXX    ..........",
+"............    XXXXXXXXXXXX  XXXXXXXXXXXX    ............",
+"..............    XXXXXXXXXXXXXXXXXXXXXX    ..............",
+"................   XXXXXXXXXXXXXXXXXXXX   ................",
+".................   XXXXXXXXXXXXXXXXXX   .................",
+"..................   XXXXXXXXXXXXXXXX   ..................",
+"...................                    ...................",
+"...................                    ...................",
+"...................  XXXXXXXXXXXXXXXX  ...................",
+"..................   XXXXXXXXXXXXXXXX   ..................",
+"..................  XXXXXXXXXXXXXXXXXX  ..................",
+"..................                      ..................",
+".................                        .................",
+".................   XXXXXXXXXXXXXXXXXX   .................",
+".................     XXXXXXXXXXXXXX     .................",
+".................                        .................",
+"......................              ......................",
+"..........................      ..........................",
+"........................    XX    ........................",
+"........                  XXXXXX                  ........",
+"......                  XXXXXXXXXX                  ......",
+"....    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ....",
+"....   XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXX   ....",
+".....  XXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXX  .....",
+".....   X        XXXXXXX    ..    XXXXXXX        X   .....",
+"......                    ......                    ......",
+".......  ........       ..........       ........  .......",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/all64.xpm b/pixmaps/all64.xpm
new file mode 100644
index 0000000..92751f7
--- /dev/null
+++ b/pixmaps/all64.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char *all64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................",
+"............................        ............................",
+".........................              .........................",
+".......................     XXXXXXXX     .......................",
+"......................    XXXXXXXXXXXX    ......................",
+".....................   XXXXXXXXXXXXXXXX   .....................",
+"...................    XXXXXXXXXXXXXXXXXX    ...................",
+".................    XXXXXXXXXXXXXXXXXXXXXX    .................",
+"..............     XXXXXXXXXXXXXXXXXXXXXXXXXX     ..............",
+"............     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ............",
+"..........    XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX    ..........",
+"........    XXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX    ........",
+".......   XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXX   .......",
+"......   XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXX   ......",
+"......  XXXXXXXXXXXXXXXXXX            XXXXXXXXXXXXXXXXXX  ......",
+"......  XXXXXXXXXXXXXXXXXX            XXXXXXXXXXXXXXXXXX  ......",
+"......   XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXX   ......",
+".......    XXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX    .......",
+".........   XXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX   .........",
+"..........    XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX   ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .............",
+"...............    XXXXXXXXXXXXXXXXXXXXXXXXXX    ...............",
+".................    XXXXXXXXXXXXXXXXXXXXXX    .................",
+"...................   XXXXXXXXXXXXXXXXXXXX   ...................",
+"....................   XX              XX   ....................",
+".....................                      .....................",
+".....................    XXXXXXXXXXXXXX    .....................",
+".....................  XXXXXXXXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXXXXXXXXXXX  .....................",
+"....................   XXXXXXXXXXXXXXXXXX   ....................",
+"....................  X                  X  ....................",
+"....................                        ....................",
+"...................    XXXXXXXXXXXXXXXXXX    ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................      XXXXXXXXXXXXXX      ...................",
+"....................                        ....................",
+".........................              .........................",
+"............................        ............................",
+"..........................    XXXX    ..........................",
+".........                   XXXXXXXX                   .........",
+".......                   XXXXXXXXXXXX                   .......",
+".....    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"....   XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXX   ....",
+".....   XXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXX   .....",
+"......  XXX        XXXXXXXX    ..    XXXXXXXX        XXX  ......",
+"......                       ......                       ......",
+".......    ........        ..........        ........    .......",
+"........ .............................................. ........",
+"................................................................",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/all72.xpm b/pixmaps/all72.xpm
new file mode 100644
index 0000000..288ddba
--- /dev/null
+++ b/pixmaps/all72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *all72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"...............................          ...............................",
+".............................              .............................",
+"............................    XXXXXXXX    ............................",
+"...........................    XXXXXXXXXX    ...........................",
+"..........................    XXXXXXXXXXXX    ..........................",
+"........................    XXXXXXXXXXXXXXXX    ........................",
+"......................     XXXXXXXXXXXXXXXXXX     ......................",
+"....................     XXXXXXXXXXXXXXXXXXXXXX     ....................",
+"..................     XXXXXXXXXXXXXXXXXXXXXXXXXX     ..................",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ................",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ..............",
+".............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      .............",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ...........",
+".........      XXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX      .........",
+"........     XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXX     ........",
+"......     XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXX     ......",
+"......   XXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXX   ......",
+".....   XXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXX   .....",
+".....   XXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXX   .....",
+".....   XXXXXXXXXXXXXXXXXXXXX              XXXXXXXXXXXXXXXXXXXXX   .....",
+".......  XXXXXXXXXXXXXXXXXXXX              XXXXXXXXXXXXXXXXXXX    ......",
+".......     XXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXX     .......",
+".........     XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX      .........",
+"............    XXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX     ...........",
+"..............   XXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX    .............",
+"...............   XXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX   ...............",
+"................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"..................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..................",
+"...................   XXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...................",
+"....................   XXXXXXXXXXXXXXXXXXXXXXXXX    ....................",
+".....................   XXXXXXXXXXXXXXXXXXXXXXXX   .....................",
+"......................   XXX                XXX   ......................",
+".......................                          .......................",
+"........................    XXXXXXXXXXXXXXXX    ........................",
+".......................   XXXXXXXXXXXXXXXXXXXX   .......................",
+".......................  XXXXXXXXXXXXXXXXXXXXXX  .......................",
+".......................  XXXXXXXXXXXXXXXXXXXXXX  .......................",
+"......................   XXXXXXXXXXXXXXXXXXXXXX   ......................",
+"......................  XXX                  XXX  ......................",
+".....................                              .....................",
+".....................      XXXXXXXXXXXXXXXXXX      .....................",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+"....................   XXXXXXXXXXXXXXXXXXXXXXXXXX   ....................",
+"....................        XXXXXXXXXXXXXXXX        ....................",
+"......................                            ......................",
+"............................                ............................",
+"................................        ................................",
+"...............................   XXXX   ...............................",
+".............................    XXXXXX    .............................",
+"...........                    XXXXXXXXXX                    ...........",
+".......                      XXXXXXXXXXXXXX                      .......",
+".....      XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXX      .....",
+"....   XXXXXXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXX   ....",
+"....  XXXXXXXXXXXXXXXXXXXXXXXX     ..     XXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"....   XXXXX                     ......                     XXXXX   ....",
+".....   X                     ............                     X   .....",
+"......      ................................................      ......",
+".......  ......................................................  .......",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/asdd33.xpm b/pixmaps/asdd33.xpm
new file mode 100644
index 0000000..0dd075a
--- /dev/null
+++ b/pixmaps/asdd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *asdd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+"...      ...............      ...",
+"...       .............       ...",
+"...        ...........     .  ...",
+"...   .     .........     .   ...",
+"...    .     .......     .    ...",
+"...     .     .....     .     ...",
+"....     .     ...     .     ....",
+".....     .     .     .     .....",
+"......     .     .   .     ......",
+".......     .     .       .......",
+"........     .     .     ........",
+".........     .     .   .........",
+"..........     .     . ..........",
+"...........     .     ...........",
+".......... .     .     ..........",
+"...   ...   .     .     ...   ...",
+"..     .     .     .     .     ..",
+"..      .   . .     .   .      ..",
+"...      . .   .       .      ...",
+"....      .     .     .      ....",
+"......     .   ...   .     ......",
+"..... .     . ..... .     . .....",
+"....   .     .......     .   ....",
+"...     .     .....     .     ...",
+"..       .     ...     .       ..",
+".       ..     ...     ..       .",
+".      ....    ...    ....      .",
+"..    ......  .....  ......    ..",
+"...  .......................  ...",
+"................................."
+};
diff --git a/pixmaps/asdd45.xpm b/pixmaps/asdd45.xpm
new file mode 100644
index 0000000..a7052b5
--- /dev/null
+++ b/pixmaps/asdd45.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *asdd45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+"......        .................        ......",
+"......         ...............         ......",
+"......          .............          ......",
+"......           ...........           ......",
+"......    .       .........       .    ......",
+"......     .       .......       .     ......",
+"......      .       .....       .      ......",
+"......       .       ...       .       ......",
+".......       .       .       .       .......",
+"........       .       .     .       ........",
+".........       .       .   .       .........",
+"..........       .       . .       ..........",
+"...........       .       .       ...........",
+"............       .       .     ............",
+".............       .       .   .............",
+"..............       .       . ..............",
+"...............       .       ...............",
+".............. .       .       ..............",
+".............   .       .       .............",
+".....  .....     .       .       .....  .....",
+"....    ...       .       .       ...    ....",
+"...      .       . .       .       .      ...",
+"...       .     .   .       .     .       ...",
+"....       .   .     .       .   .       ....",
+".....       .         .         .       .....",
+".......      .       ...       .      .......",
+"........      .     .....     .      ........",
+"....... .      .   .......   .      . .......",
+"......   .      . ......... .      .   ......",
+".....     .      ...........      .     .....",
+"....       .      .........      .       ....",
+"...         .      .......      .         ...",
+"..         ...      .....      ...         ..",
+"..        ....      .....      ....        ..",
+"..       ......    .......    ......       ..",
+"...     ........  .........  ........     ...",
+"....   ...............................   ....",
+".............................................",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/asdd49.xpm b/pixmaps/asdd49.xpm
new file mode 100644
index 0000000..153cba9
--- /dev/null
+++ b/pixmaps/asdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *asdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".......        ...................        .......",
+".......         .................         .......",
+".......          ...............          .......",
+".......           .............           .......",
+".......            ...........       .    .......",
+".......     .       .........       .     .......",
+".......      .       .......       .      .......",
+".......       .       .....       .       .......",
+"........       .       ...       .       ........",
+".........       .       .       .       .........",
+"..........       .       .     .       ..........",
+"...........       .       .   .       ...........",
+"............       .       . .       ............",
+".............       .       .       .............",
+"..............       .       .     ..............",
+"...............       .       .   ...............",
+"................       .       . ................",
+".................       .       .................",
+"................ .       .       ................",
+"...............   .       .       ...............",
+"..............     .       .       .....  .......",
+"......  .....       .       .       ...    ......",
+".....    ...       . .       .       .      .....",
+"....      .       .   .       .     .       .....",
+"....       .     .     .       .   .       ......",
+".....       .   .       .         .       .......",
+"......       .         ...       .      .........",
+"........      .       .....     .      ..........",
+".........      .     .......   .      . .........",
+"........ .      .   ......... .      .   ........",
+".......   .      . ...........      .     .......",
+"......     .      ...........      .       ......",
+".....       .      .........      .         .....",
+"....         .      .......      ...         ....",
+"...         ...      ......      ....        ....",
+"...        ....      .......    ......       ....",
+"...       ......    .........  ........     .....",
+"....     ........  .....................   ......",
+".....   .........................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/asdd72.xpm b/pixmaps/asdd72.xpm
new file mode 100644
index 0000000..313020b
--- /dev/null
+++ b/pixmaps/asdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *asdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........             ...................................................",
+"........              ............................             .........",
+"........               ..........................              .........",
+"........                ........................               .........",
+"........                 ......................                .........",
+"........                  ....................                 .........",
+"........      .            ..................                  .........",
+"........      ..            ................            .      .........",
+"........       ..            ..............            ..      .........",
+"........        ..            ............            ..       .........",
+"........         ..            ..........            ..        .........",
+"........          ..            ........            ..         .........",
+"........           ..            ......            ..          .........",
+"........            ..            ....            ..           .........",
+".........            ..            ..            ..            .........",
+"..........            ..                        ..            ..........",
+"...........            ..            ..        ..            ...........",
+"............            ..            ..      ..            ............",
+".............            ..            ..    ..            .............",
+"..............            ..            ..  ..            ..............",
+"...............            ..            ..              ...............",
+"................            ..            ..            ................",
+".................            ..            ..          .................",
+"..................            ..            ..        ..................",
+"...................            ..            ..      ...................",
+"....................            ..            ..    ....................",
+".....................            ..            ..  .....................",
+"......................            ..              ......................",
+".......................            ..            .......................",
+"......................              ..            ......................",
+"........   ..........  ..            ..            ..........   ........",
+".......     ........    ..            ..            ........     .......",
+"......       ......      ..            ..            ......       ......",
+".....         ....        ..            ..            ....         .....",
+"....           ..          ..            ..            ..           ....",
+"....            ..          ..            ..          ..            ....",
+"....             ..          ..            ..        ..             ....",
+"....              ..      .   ..            ..      ..              ....",
+".....              ..    ..    ..            ..    ..              .....",
+"......              ..   .      ..            .   ..              ......",
+".......              ..          .               ..              .......",
+"........              ..                        ..              ........",
+".........              ..          ..          ..              .........",
+"............            ..        ....        ..            ............",
+".............            ..      ......      ..            .............",
+"............ .            ..    ........    ..            . ............",
+"...........   .            ..  ..........  ..            .   ...........",
+"..........     .            ................            .     ..........",
+".........       .            ..............            .       .........",
+"........         .            ............            .         ........",
+".......           .            ..........            .           .......",
+"......             .            ........            .             ......",
+".....              ..            ......            ..              .....",
+"....              ....            ....            ....              ....",
+"...              .....            ....            .....              ...",
+"...             ......            ....            ......             ...",
+"...            ........          ......          ........            ...",
+"....          ..........        ........        ..........          ....",
+".....        ............      ..........      ............        .....",
+"......      ..............    ............    ..............      ......",
+".......    ..................................................    .......",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/asdl33.xpm b/pixmaps/asdl33.xpm
new file mode 100644
index 0000000..898af2b
--- /dev/null
+++ b/pixmaps/asdl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *asdl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+"...      ...............      ...",
+"...       .............       ...",
+"...        ...........     .  ...",
+"...   .     .........     .   ...",
+"...    .     .......     .    ...",
+"...     .     .....     .     ...",
+"....     .     ...     .     ....",
+".....     .     .     .     .....",
+"......     .     .   .     ......",
+".......     .     .       .......",
+"........     .     .     ........",
+".........     .     .   .........",
+"..........     .     . ..........",
+"...........     .     ...........",
+".......... .     .     ..........",
+"...   ...   .     .     ...   ...",
+"..     .     .     .     .     ..",
+"..      .   . .     .   .      ..",
+"...      . .   .       .      ...",
+"....      .     .     .      ....",
+"......     .   ...   .     ......",
+"..... .     . ..... .     . .....",
+"....   .     .......     .   ....",
+"...     .     .....     .     ...",
+"..       .     ...     .       ..",
+".       ..     ...     ..       .",
+".      ....    ...    ....      .",
+"..    ......  .....  ......    ..",
+"...  .......................  ...",
+"................................."
+};
diff --git a/pixmaps/asdl45.xpm b/pixmaps/asdl45.xpm
new file mode 100644
index 0000000..fc81752
--- /dev/null
+++ b/pixmaps/asdl45.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *asdl45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+"......        .................        ......",
+"......         ...............         ......",
+"......          .............          ......",
+"......           ...........           ......",
+"......    .       .........       .    ......",
+"......     .       .......       .     ......",
+"......      .       .....       .      ......",
+"......       .       ...       .       ......",
+".......       .       .       .       .......",
+"........       .       .     .       ........",
+".........       .       .   .       .........",
+"..........       .       . .       ..........",
+"...........       .       .       ...........",
+"............       .       .     ............",
+".............       .       .   .............",
+"..............       .       . ..............",
+"...............       .       ...............",
+".............. .       .       ..............",
+".............   .       .       .............",
+".....  .....     .       .       .....  .....",
+"....    ...       .       .       ...    ....",
+"...      .       . .       .       .      ...",
+"...       .     .   .       .     .       ...",
+"....       .   .     .       .   .       ....",
+".....       .         .         .       .....",
+".......      .       ...       .      .......",
+"........      .     .....     .      ........",
+"....... .      .   .......   .      . .......",
+"......   .      . ......... .      .   ......",
+".....     .      ...........      .     .....",
+"....       .      .........      .       ....",
+"...         .      .......      .         ...",
+"..         ...      .....      ...         ..",
+"..        ....      .....      ....        ..",
+"..       ......    .......    ......       ..",
+"...     ........  .........  ........     ...",
+"....   ...............................   ....",
+".............................................",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/asdl49.xpm b/pixmaps/asdl49.xpm
new file mode 100644
index 0000000..a61f0bb
--- /dev/null
+++ b/pixmaps/asdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *asdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".......        ...................        .......",
+".......         .................         .......",
+".......          ...............          .......",
+".......           .............           .......",
+".......            ...........       .    .......",
+".......     .       .........       .     .......",
+".......      .       .......       .      .......",
+".......       .       .....       .       .......",
+"........       .       ...       .       ........",
+".........       .       .       .       .........",
+"..........       .       .     .       ..........",
+"...........       .       .   .       ...........",
+"............       .       . .       ............",
+".............       .       .       .............",
+"..............       .       .     ..............",
+"...............       .       .   ...............",
+"................       .       . ................",
+".................       .       .................",
+"................ .       .       ................",
+"...............   .       .       ...............",
+"..............     .       .       .....  .......",
+"......  .....       .       .       ...    ......",
+".....    ...       . .       .       .      .....",
+"....      .       .   .       .     .       .....",
+"....       .     .     .       .   .       ......",
+".....       .   .       .         .       .......",
+"......       .         ...       .      .........",
+"........      .       .....     .      ..........",
+".........      .     .......   .      . .........",
+"........ .      .   ......... .      .   ........",
+".......   .      . ...........      .     .......",
+"......     .      ...........      .       ......",
+".....       .      .........      .         .....",
+"....         .      .......      ...         ....",
+"...         ...      ......      ....        ....",
+"...        ....      .......    ......       ....",
+"...       ......    .........  ........     .....",
+"....     ........  .....................   ......",
+".....   .........................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/asdl72.xpm b/pixmaps/asdl72.xpm
new file mode 100644
index 0000000..7f987f2
--- /dev/null
+++ b/pixmaps/asdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *asdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........             ...................................................",
+"........              ............................             .........",
+"........               ..........................              .........",
+"........                ........................               .........",
+"........                 ......................                .........",
+"........                  ....................                 .........",
+"........      .            ..................                  .........",
+"........      ..            ................            .      .........",
+"........       ..            ..............            ..      .........",
+"........        ..            ............            ..       .........",
+"........         ..            ..........            ..        .........",
+"........          ..            ........            ..         .........",
+"........           ..            ......            ..          .........",
+"........            ..            ....            ..           .........",
+".........            ..            ..            ..            .........",
+"..........            ..                        ..            ..........",
+"...........            ..            ..        ..            ...........",
+"............            ..            ..      ..            ............",
+".............            ..            ..    ..            .............",
+"..............            ..            ..  ..            ..............",
+"...............            ..            ..              ...............",
+"................            ..            ..            ................",
+".................            ..            ..          .................",
+"..................            ..            ..        ..................",
+"...................            ..            ..      ...................",
+"....................            ..            ..    ....................",
+".....................            ..            ..  .....................",
+"......................            ..              ......................",
+".......................            ..            .......................",
+"......................              ..            ......................",
+"........   ..........  ..            ..            ..........   ........",
+".......     ........    ..            ..            ........     .......",
+"......       ......      ..            ..            ......       ......",
+".....         ....        ..            ..            ....         .....",
+"....           ..          ..            ..            ..           ....",
+"....            ..          ..            ..          ..            ....",
+"....             ..          ..            ..        ..             ....",
+"....              ..      .   ..            ..      ..              ....",
+".....              ..    ..    ..            ..    ..              .....",
+"......              ..   .      ..            .   ..              ......",
+".......              ..          .               ..              .......",
+"........              ..                        ..              ........",
+".........              ..          ..          ..              .........",
+"............            ..        ....        ..            ............",
+".............            ..      ......      ..            .............",
+"............ .            ..    ........    ..            . ............",
+"...........   .            ..  ..........  ..            .   ...........",
+"..........     .            ................            .     ..........",
+".........       .            ..............            .       .........",
+"........         .            ............            .         ........",
+".......           .            ..........            .           .......",
+"......             .            ........            .             ......",
+".....              ..            ......            ..              .....",
+"....              ....            ....            ....              ....",
+"...              .....            ....            .....              ...",
+"...             ......            ....            ......             ...",
+"...            ........          ......          ........            ...",
+"....          ..........        ........        ..........          ....",
+".....        ............      ..........      ............        .....",
+"......      ..............    ............    ..............      ......",
+".......    ..................................................    .......",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/asld33.xpm b/pixmaps/asld33.xpm
new file mode 100644
index 0000000..23936aa
--- /dev/null
+++ b/pixmaps/asld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *asld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+"...      ...............      ...",
+"... XXXXX ............. XXXXX ...",
+"... XXXXXX ........... XXXXXX ...",
+"... XX XXXX ......... XXXX XX ...",
+"... XXX XXXX ....... XXXX XXX ...",
+"... XXXX XXXX ..... XXXX XXXX ...",
+".... XXXX XXXX ... XXXX XXXX ....",
+"..... XXXX XXXX . XXXX XXXX .....",
+"...... XXXX XXXX XXXX XXXX ......",
+"....... XXXX XXXX XX XXXX .......",
+"........ XXXX XXXX XXXXX ........",
+"......... XXXX XXXX XXX .........",
+".......... XXXX XXXX X ..........",
+"........... XXXX XXXX ...........",
+".......... X XXXX XXXX ..........",
+"...   ... XXX XXXX XXXX ...   ...",
+".. XXX . XXXXX XXXX XXXX . XXX ..",
+".. XXXX XXXX XX XXXX XXXX XXXX ..",
+"... XXXX XX XXXX XXXX XX XXXX ...",
+"....  XXX XXXXX . XXXXX XXX  ....",
+"...... XXX XXX ... XXX XXX ......",
+"..... X XXX X ..... X XXX X .....",
+".... XXX XXX ....... XXX XXX ....",
+"... XXXXX XXX ..... XXX XXXXX ...",
+".. XXXXX . XXX ... XXX . XXXXX ..",
+". XXXXX .. XXX ... XXX .. XXXXX .",
+". XXXX .... XX ... XX .... XXXX .",
+".. XX ......  .....  ...... XX ..",
+"...  .......................  ...",
+"................................."
+};
diff --git a/pixmaps/asld45.xpm b/pixmaps/asld45.xpm
new file mode 100644
index 0000000..3b019cb
--- /dev/null
+++ b/pixmaps/asld45.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *asld45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+"......        .................        ......",
+"...... XXXXXXX ............... XXXXXXX ......",
+"...... XXXXXXXX ............. XXXXXXXX ......",
+"...... XXXXXXXXX ........... XXXXXXXXX ......",
+"...... XXXXXXXXXX ......... XXXXXX XXX ......",
+"...... XXXX XXXXXX ....... XXXXXX XXXX ......",
+"...... XXXXX XXXXXX ..... XXXXXX XXXXX ......",
+"...... XXXXXX XXXXXX ... XXXXXX XXXXXX ......",
+"....... XXXXXX XXXXXX . XXXXXX XXXXXX .......",
+"........ XXXXXX XXXXXX XXXXXX XXXXXX ........",
+"......... XXXXXX XXXXXX XXXX XXXXXX .........",
+".......... XXXXXX XXXXXX XX XXXXXX ..........",
+"........... XXXXXX XXXXXX XXXXXXX ...........",
+"............ XXXXXX XXXXXX XXXXX ............",
+"............. XXXXXX XXXXXX XXX .............",
+".............. XXXXXX XXXXXX X ..............",
+"............... XXXXXX XXXXXX ...............",
+".............. X XXXXXX XXXXXX ..............",
+"............. XXX XXXXXX XXXXXX .............",
+".....  ..... XXXXX XXXXXX XXXXXX .....  .....",
+".... XX ... XXXXXXX XXXXXX XXXXXX ... XX ....",
+"... XXXX . XXXXXX XX XXXXXX XXXXXX . XXXX ...",
+"... XXXXX XXXXXX XXXX XXXXXX XXXXXX XXXXX ...",
+".... XXXXX XXXX XXXXXX XXXXXX XXXX XXXXX ....",
+".....  XXXX XX XXXXXX . XXXXXX XX XXXX  .....",
+"....... XXXX XXXXXXX ... XXXXXXX XXXX .......",
+"........ XXXX XXXXX ..... XXXXX XXXX ........",
+"....... X XXXX XXX ....... XXX XXXX X .......",
+"...... XXX XXXX X ......... X XXXX XXX ......",
+"..... XXXXX XXXX ........... XXXX XXXXX .....",
+".... XXXXXXX XXXX ......... XXXX XXXXXXX ....",
+"... XXXXXXX . XXXX ....... XXXX . XXXXXXX ...",
+".. XXXXXXX ... XXXX ..... XXXX ... XXXXXXX ..",
+".. XXXXXX .... XXXX ..... XXXX .... XXXXXX ..",
+".. XXXXX ...... XX ....... XX ...... XXXXX ..",
+"... XXX ........  .........  ........ XXX ...",
+"....   ...............................   ....",
+".............................................",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/asld49.xpm b/pixmaps/asld49.xpm
new file mode 100644
index 0000000..85b9e52
--- /dev/null
+++ b/pixmaps/asld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *asld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".......        ...................        .......",
+"....... XXXXXXX ................. XXXXXXX .......",
+"....... XXXXXXXX ............... XXXXXXXX .......",
+"....... XXXXXXXXX ............. XXXXXXXXX .......",
+"....... XXXXXXXXXX ........... XXXXXX XXX .......",
+"....... XXXX XXXXXX ......... XXXXXX XXXX .......",
+"....... XXXXX XXXXXX ....... XXXXXX XXXXX .......",
+"....... XXXXXX XXXXXX ..... XXXXXX XXXXXX .......",
+"........ XXXXXX XXXXXX ... XXXXXX XXXXXX ........",
+"......... XXXXXX XXXXXX . XXXXXX XXXXXX .........",
+".......... XXXXXX XXXXXX XXXXXX XXXXXX ..........",
+"........... XXXXXX XXXXXX XXXX XXXXXX ...........",
+"............ XXXXXX XXXXXX XX XXXXXX ............",
+"............. XXXXXX XXXXXX XXXXXXX .............",
+".............. XXXXXX XXXXXX XXXXX ..............",
+"............... XXXXXX XXXXXX XXX ...............",
+"................ XXXXXX XXXXXX X ................",
+"................. XXXXXX XXXXXX .................",
+"................ X XXXXXX XXXXXX ................",
+"............... XXX XXXXXX XXXXXX ...............",
+".............. XXXXX XXXXXX XXXXXX .....  .......",
+"......  ..... XXXXXXX XXXXXX XXXXXX ... XX ......",
+"..... XX ... XXXXXX XX XXXXXX XXXXXX . XXXX .....",
+".... XXXX . XXXXXX XXXX XXXXXX XXXXXX XXXXX .....",
+".... XXXXX XXXXXX XXXXXX XXXXXX XXXX XXXXX ......",
+"..... XXXXX XXXX XXXXXX . XXXXXX XX XXXX  .......",
+"......  XXXX XX XXXXXX ... XXXXXXX XXXX .........",
+"........ XXXX XXXXXXX ..... XXXXX XXXX ..........",
+"......... XXXX XXXXX ....... XXX XXXX X .........",
+"........ X XXXX XXX ......... X XXXX XXX ........",
+"....... XXX XXXX X ........... XXXX XXXXX .......",
+"...... XXXXX XXXX ........... XXXX XXXXXXX ......",
+"..... XXXXXXX XXXX ......... XXXX . XXXXXXX .....",
+".... XXXXXXX . XXXX ....... XXXX ... XXXXXXX ....",
+"... XXXXXXX ... XXXX ...... XXXX .... XXXXXX ....",
+"... XXXXXX .... XXXX ....... XX ...... XXXXX ....",
+"... XXXXX ...... XX .........  ........ XXX .....",
+".... XXX ........  .....................   ......",
+".....   .........................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/asld72.xpm b/pixmaps/asld72.xpm
new file mode 100644
index 0000000..c47054f
--- /dev/null
+++ b/pixmaps/asld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *asld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........ ...............................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........              ..................................................",
+"........               ..........................              .........",
+"........  XXXXXXXXXXX   ........................               .........",
+"........  XXXXXXXXXXXX   ......................  XXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXX   ....................  XXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXX   ..................  XXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXX   ................  XXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXX   ..............  XXXXXXXXXXXXXXXX  .........",
+"........  XXXXXX XXXXXXXXXX   ............  XXXXXXXXXX  XXXXX  .........",
+"........  XXXXXX  XXXXXXXXXX   ..........  XXXXXXXXXX  XXXXXX  .........",
+"........  XXXXXXX  XXXXXXXXXX   ........  XXXXXXXXXX  XXXXXXX  .........",
+"........  XXXXXXXX  XXXXXXXXXX   ......  XXXXXXXXXX  XXXXXXXX  .........",
+"........  XXXXXXXXX  XXXXXXXXXX   ....  XXXXXXXXXX  XXXXXXXXX  .........",
+"........  XXXXXXXXXX  XXXXXXXXXX   ..  XXXXXXXXXX  XXXXXXXXXX  .........",
+".........  XXXXXXXXXX  XXXXXXXXXX     XXXXXXXXXX  XXXXXXXXXX   .........",
+"..........  XXXXXXXXXX  XXXXXXXXXX   XXXXXXXXXX  XXXXXXXXXX   ..........",
+"...........  XXXXXXXXXX  XXXXXXXXXX   XXXXXXXX  XXXXXXXXXX   ...........",
+"............  XXXXXXXXXX  XXXXXXXXXX   XXXXXX  XXXXXXXXXX   ............",
+".............  XXXXXXXXXX  XXXXXXXXXX   XXXX  XXXXXXXXXX   .............",
+"..............  XXXXXXXXXX  XXXXXXXXXX   XX  XXXXXXXXXX   ..............",
+"...............  XXXXXXXXXX  XXXXXXXXXX   X XXXXXXXXXX   ...............",
+"................  XXXXXXXXXX  XXXXXXXXXX   XXXXXXXXXX   ................",
+".................  XXXXXXXXXX  XXXXXXXXXX   XXXXXXXX   .................",
+"..................  XXXXXXXXXX  XXXXXXXXXX   XXXXXX   ..................",
+"...................  XXXXXXXXXX  XXXXXXXXXX   XXXX   ...................",
+"....................  XXXXXXXXXX  XXXXXXXXXX   XX   ....................",
+".....................  XXXXXXXXXX  XXXXXXXXXX      .....................",
+"......................  XXXXXXXXXX  XXXXXXXXXX    ......................",
+"......................   XXXXXXXXXX  XXXXXXXXXX   ......................",
+".....................  X  XXXXXXXXXX  XXXXXXXXXX   .....................",
+"........   .........  XXX  XXXXXXXXXX  XXXXXXXXXX   .........   ........",
+".......     .......  XXXXX  XXXXXXXXXX  XXXXXXXXXX   .......     .......",
+"......  XX   .....  XXXXXXX  XXXXXXXXXX  XXXXXXXXXX   .....  XX   ......",
+".....  XXXX   ...  XXXXXXXXX  XXXXXXXXXX  XXXXXXXXXX   ...  XXXX   .....",
+"....  XXXXXX   .  XXXXXXXXXXX  XXXXXXXXXX  XXXXXXXXXX   .  XXXXXX   ....",
+".... XXXXXXXX    XXXXXXXXXX  X  XXXXXXXXXX  XXXXXXXXXX    XXXXXXXX  ....",
+".... XXXXXXXXX   XXXXXXXXX  XXX  XXXXXXXXXX  XXXXXXXXXX  XXXXXXXXX  ....",
+"....  XXXXXXXXX   XXXXXXX  XXXXX  XXXXXXXXXX  XXXXXXXX  XXXXXXXXX   ....",
+".....  XXXXXXXXX   XXXXX  XXXXXXX  XXXXXXXXXX  XXXXXX  XXXXXXXXX   .....",
+"......  XXXXXXXXX   XXX  XXXXXXXXX  XXXXXXXXXX  XXXX  XXXXXXXXX   ......",
+".......  XXXXXXXXX   XXXXXXXXXXXXX   XXXXXXXXXX XXX  XXXXXXXXX   .......",
+"........    XXXXXXX   XXXXXXXXXXX     XXXXXXXXXXXX  XXXXXXX     ........",
+".........    XXXXXXX   XXXXXXXXX   ..  XXXXXXXXXX  XXXXXXX     .........",
+"............  XXXXXXX   XXXXXXX   ....  XXXXXXXX  XXXXXXX   ............",
+".............  XXXXXXX   XXXXX   ......  XXXXXX  XXXXXXX   .............",
+"............    XXXXXXX   XXX   ........  XXXX  XXXXXXX     ............",
+"...........  XX  XXXXXXX   X   ..........  XX  XXXXXXX   X   ...........",
+"..........  XXXX  XXXXXXX     ............    XXXXXXX   XXX   ..........",
+".........  XXXXXX  XXXXXXX   ..............  XXXXXXX   XXXXX   .........",
+"........  XXXXXXXX  XXXXXXX   ............  XXXXXXX   XXXXXXX   ........",
+".......  XXXXXXXXX   XXXXXXX   ..........  XXXXXXX   XXXXXXXXX   .......",
+"......  XXXXXXXXX     XXXXXXX   ........  XXXXXXX     XXXXXXXXX   ......",
+".....  XXXXXXXXX   ..  XXXXXXX   ......  XXXXXXX   ..  XXXXXXXXX   .....",
+"....  XXXXXXXXX   ....  XXXXXXX   ....  XXXXXXXX  ....  XXXXXXXXX   ....",
+"...  XXXXXXXXX   .....  XXXXXXXX  .... XXXXXXXXX  .....  XXXXXXXXX   ...",
+"...  XXXXXXXX   ......  XXXXXXX   ....  XXXXXXX   ......  XXXXXXXXX  ...",
+"...  XXXXXXX   ........  XXXXX   ......  XXXXX   ........  XXXXXXX   ...",
+"....  XXXXX   ..........  XXX   ........  XXX   ..........  XXXXX   ....",
+".....  XXX   ............  X   ..........  X   ............  XXX   .....",
+"......  X   ..............    ............    ..............  X   ......",
+".......    ..................................................    .......",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/asll33.xpm b/pixmaps/asll33.xpm
new file mode 100644
index 0000000..90d4a94
--- /dev/null
+++ b/pixmaps/asll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *asll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+"...      ...............      ...",
+"... XXXXX ............. XXXXX ...",
+"... XXXXXX ........... XXXXXX ...",
+"... XX XXXX ......... XXXX XX ...",
+"... XXX XXXX ....... XXXX XXX ...",
+"... XXXX XXXX ..... XXXX XXXX ...",
+".... XXXX XXXX ... XXXX XXXX ....",
+"..... XXXX XXXX . XXXX XXXX .....",
+"...... XXXX XXXX XXXX XXXX ......",
+"....... XXXX XXXX XX XXXX .......",
+"........ XXXX XXXX XXXXX ........",
+"......... XXXX XXXX XXX .........",
+".......... XXXX XXXX X ..........",
+"........... XXXX XXXX ...........",
+".......... X XXXX XXXX ..........",
+"...   ... XXX XXXX XXXX ...   ...",
+".. XXX . XXXXX XXXX XXXX . XXX ..",
+".. XXXX XXXX XX XXXX XXXX XXXX ..",
+"... XXXX XX XXXX XXXX XX XXXX ...",
+"....  XXX XXXXX . XXXXX XXX  ....",
+"...... XXX XXX ... XXX XXX ......",
+"..... X XXX X ..... X XXX X .....",
+".... XXX XXX ....... XXX XXX ....",
+"... XXXXX XXX ..... XXX XXXXX ...",
+".. XXXXX . XXX ... XXX . XXXXX ..",
+". XXXXX .. XXX ... XXX .. XXXXX .",
+". XXXX .... XX ... XX .... XXXX .",
+".. XX ......  .....  ...... XX ..",
+"...  .......................  ...",
+"................................."
+};
diff --git a/pixmaps/asll45.xpm b/pixmaps/asll45.xpm
new file mode 100644
index 0000000..85201b4
--- /dev/null
+++ b/pixmaps/asll45.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *asll45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+".............................................",
+"......        .................        ......",
+"...... XXXXXXX ............... XXXXXXX ......",
+"...... XXXXXXXX ............. XXXXXXXX ......",
+"...... XXXXXXXXX ........... XXXXXXXXX ......",
+"...... XXXXXXXXXX ......... XXXXXX XXX ......",
+"...... XXXX XXXXXX ....... XXXXXX XXXX ......",
+"...... XXXXX XXXXXX ..... XXXXXX XXXXX ......",
+"...... XXXXXX XXXXXX ... XXXXXX XXXXXX ......",
+"....... XXXXXX XXXXXX . XXXXXX XXXXXX .......",
+"........ XXXXXX XXXXXX XXXXXX XXXXXX ........",
+"......... XXXXXX XXXXXX XXXX XXXXXX .........",
+".......... XXXXXX XXXXXX XX XXXXXX ..........",
+"........... XXXXXX XXXXXX XXXXXXX ...........",
+"............ XXXXXX XXXXXX XXXXX ............",
+"............. XXXXXX XXXXXX XXX .............",
+".............. XXXXXX XXXXXX X ..............",
+"............... XXXXXX XXXXXX ...............",
+".............. X XXXXXX XXXXXX ..............",
+"............. XXX XXXXXX XXXXXX .............",
+".....  ..... XXXXX XXXXXX XXXXXX .....  .....",
+".... XX ... XXXXXXX XXXXXX XXXXXX ... XX ....",
+"... XXXX . XXXXXX XX XXXXXX XXXXXX . XXXX ...",
+"... XXXXX XXXXXX XXXX XXXXXX XXXXXX XXXXX ...",
+".... XXXXX XXXX XXXXXX XXXXXX XXXX XXXXX ....",
+".....  XXXX XX XXXXXX . XXXXXX XX XXXX  .....",
+"....... XXXX XXXXXXX ... XXXXXXX XXXX .......",
+"........ XXXX XXXXX ..... XXXXX XXXX ........",
+"....... X XXXX XXX ....... XXX XXXX X .......",
+"...... XXX XXXX X ......... X XXXX XXX ......",
+"..... XXXXX XXXX ........... XXXX XXXXX .....",
+".... XXXXXXX XXXX ......... XXXX XXXXXXX ....",
+"... XXXXXXX . XXXX ....... XXXX . XXXXXXX ...",
+".. XXXXXXX ... XXXX ..... XXXX ... XXXXXXX ..",
+".. XXXXXX .... XXXX ..... XXXX .... XXXXXX ..",
+".. XXXXX ...... XX ....... XX ...... XXXXX ..",
+"... XXX ........  .........  ........ XXX ...",
+"....   ...............................   ....",
+".............................................",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/asll49.xpm b/pixmaps/asll49.xpm
new file mode 100644
index 0000000..dae6af5
--- /dev/null
+++ b/pixmaps/asll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *asll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".......        ...................        .......",
+"....... XXXXXXX ................. XXXXXXX .......",
+"....... XXXXXXXX ............... XXXXXXXX .......",
+"....... XXXXXXXXX ............. XXXXXXXXX .......",
+"....... XXXXXXXXXX ........... XXXXXX XXX .......",
+"....... XXXX XXXXXX ......... XXXXXX XXXX .......",
+"....... XXXXX XXXXXX ....... XXXXXX XXXXX .......",
+"....... XXXXXX XXXXXX ..... XXXXXX XXXXXX .......",
+"........ XXXXXX XXXXXX ... XXXXXX XXXXXX ........",
+"......... XXXXXX XXXXXX . XXXXXX XXXXXX .........",
+".......... XXXXXX XXXXXX XXXXXX XXXXXX ..........",
+"........... XXXXXX XXXXXX XXXX XXXXXX ...........",
+"............ XXXXXX XXXXXX XX XXXXXX ............",
+"............. XXXXXX XXXXXX XXXXXXX .............",
+".............. XXXXXX XXXXXX XXXXX ..............",
+"............... XXXXXX XXXXXX XXX ...............",
+"................ XXXXXX XXXXXX X ................",
+"................. XXXXXX XXXXXX .................",
+"................ X XXXXXX XXXXXX ................",
+"............... XXX XXXXXX XXXXXX ...............",
+".............. XXXXX XXXXXX XXXXXX .....  .......",
+"......  ..... XXXXXXX XXXXXX XXXXXX ... XX ......",
+"..... XX ... XXXXXX XX XXXXXX XXXXXX . XXXX .....",
+".... XXXX . XXXXXX XXXX XXXXXX XXXXXX XXXXX .....",
+".... XXXXX XXXXXX XXXXXX XXXXXX XXXX XXXXX ......",
+"..... XXXXX XXXX XXXXXX . XXXXXX XX XXXX  .......",
+"......  XXXX XX XXXXXX ... XXXXXXX XXXX .........",
+"........ XXXX XXXXXXX ..... XXXXX XXXX ..........",
+"......... XXXX XXXXX ....... XXX XXXX X .........",
+"........ X XXXX XXX ......... X XXXX XXX ........",
+"....... XXX XXXX X ........... XXXX XXXXX .......",
+"...... XXXXX XXXX ........... XXXX XXXXXXX ......",
+"..... XXXXXXX XXXX ......... XXXX . XXXXXXX .....",
+".... XXXXXXX . XXXX ....... XXXX ... XXXXXXX ....",
+"... XXXXXXX ... XXXX ...... XXXX .... XXXXXX ....",
+"... XXXXXX .... XXXX ....... XX ...... XXXXX ....",
+"... XXXXX ...... XX .........  ........ XXX .....",
+".... XXX ........  .....................   ......",
+".....   .........................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/asll72.xpm b/pixmaps/asll72.xpm
new file mode 100644
index 0000000..7b1bbc0
--- /dev/null
+++ b/pixmaps/asll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *asll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........ ...............................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........              ..................................................",
+"........               ..........................              .........",
+"........  XXXXXXXXXXX   ........................               .........",
+"........  XXXXXXXXXXXX   ......................  XXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXX   ....................  XXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXX   ..................  XXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXX   ................  XXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXX   ..............  XXXXXXXXXXXXXXXX  .........",
+"........  XXXXXX XXXXXXXXXX   ............  XXXXXXXXXX  XXXXX  .........",
+"........  XXXXXX  XXXXXXXXXX   ..........  XXXXXXXXXX  XXXXXX  .........",
+"........  XXXXXXX  XXXXXXXXXX   ........  XXXXXXXXXX  XXXXXXX  .........",
+"........  XXXXXXXX  XXXXXXXXXX   ......  XXXXXXXXXX  XXXXXXXX  .........",
+"........  XXXXXXXXX  XXXXXXXXXX   ....  XXXXXXXXXX  XXXXXXXXX  .........",
+"........  XXXXXXXXXX  XXXXXXXXXX   ..  XXXXXXXXXX  XXXXXXXXXX  .........",
+".........  XXXXXXXXXX  XXXXXXXXXX     XXXXXXXXXX  XXXXXXXXXX   .........",
+"..........  XXXXXXXXXX  XXXXXXXXXX   XXXXXXXXXX  XXXXXXXXXX   ..........",
+"...........  XXXXXXXXXX  XXXXXXXXXX   XXXXXXXX  XXXXXXXXXX   ...........",
+"............  XXXXXXXXXX  XXXXXXXXXX   XXXXXX  XXXXXXXXXX   ............",
+".............  XXXXXXXXXX  XXXXXXXXXX   XXXX  XXXXXXXXXX   .............",
+"..............  XXXXXXXXXX  XXXXXXXXXX   XX  XXXXXXXXXX   ..............",
+"...............  XXXXXXXXXX  XXXXXXXXXX   X XXXXXXXXXX   ...............",
+"................  XXXXXXXXXX  XXXXXXXXXX   XXXXXXXXXX   ................",
+".................  XXXXXXXXXX  XXXXXXXXXX   XXXXXXXX   .................",
+"..................  XXXXXXXXXX  XXXXXXXXXX   XXXXXX   ..................",
+"...................  XXXXXXXXXX  XXXXXXXXXX   XXXX   ...................",
+"....................  XXXXXXXXXX  XXXXXXXXXX   XX   ....................",
+".....................  XXXXXXXXXX  XXXXXXXXXX      .....................",
+"......................  XXXXXXXXXX  XXXXXXXXXX    ......................",
+"......................   XXXXXXXXXX  XXXXXXXXXX   ......................",
+".....................  X  XXXXXXXXXX  XXXXXXXXXX   .....................",
+"........   .........  XXX  XXXXXXXXXX  XXXXXXXXXX   .........   ........",
+".......     .......  XXXXX  XXXXXXXXXX  XXXXXXXXXX   .......     .......",
+"......  XX   .....  XXXXXXX  XXXXXXXXXX  XXXXXXXXXX   .....  XX   ......",
+".....  XXXX   ...  XXXXXXXXX  XXXXXXXXXX  XXXXXXXXXX   ...  XXXX   .....",
+"....  XXXXXX   .  XXXXXXXXXXX  XXXXXXXXXX  XXXXXXXXXX   .  XXXXXX   ....",
+".... XXXXXXXX    XXXXXXXXXX  X  XXXXXXXXXX  XXXXXXXXXX    XXXXXXXX  ....",
+".... XXXXXXXXX   XXXXXXXXX  XXX  XXXXXXXXXX  XXXXXXXXXX  XXXXXXXXX  ....",
+"....  XXXXXXXXX   XXXXXXX  XXXXX  XXXXXXXXXX  XXXXXXXX  XXXXXXXXX   ....",
+".....  XXXXXXXXX   XXXXX  XXXXXXX  XXXXXXXXXX  XXXXXX  XXXXXXXXX   .....",
+"......  XXXXXXXXX   XXX  XXXXXXXXX  XXXXXXXXXX  XXXX  XXXXXXXXX   ......",
+".......  XXXXXXXXX   XXXXXXXXXXXXX   XXXXXXXXXX XXX  XXXXXXXXX   .......",
+"........    XXXXXXX   XXXXXXXXXXX     XXXXXXXXXXXX  XXXXXXX     ........",
+".........    XXXXXXX   XXXXXXXXX   ..  XXXXXXXXXX  XXXXXXX     .........",
+"............  XXXXXXX   XXXXXXX   ....  XXXXXXXX  XXXXXXX   ............",
+".............  XXXXXXX   XXXXX   ......  XXXXXX  XXXXXXX   .............",
+"............    XXXXXXX   XXX   ........  XXXX  XXXXXXX     ............",
+"...........  XX  XXXXXXX   X   ..........  XX  XXXXXXX   X   ...........",
+"..........  XXXX  XXXXXXX     ............    XXXXXXX   XXX   ..........",
+".........  XXXXXX  XXXXXXX   ..............  XXXXXXX   XXXXX   .........",
+"........  XXXXXXXX  XXXXXXX   ............  XXXXXXX   XXXXXXX   ........",
+".......  XXXXXXXXX   XXXXXXX   ..........  XXXXXXX   XXXXXXXXX   .......",
+"......  XXXXXXXXX     XXXXXXX   ........  XXXXXXX     XXXXXXXXX   ......",
+".....  XXXXXXXXX   ..  XXXXXXX   ......  XXXXXXX   ..  XXXXXXXXX   .....",
+"....  XXXXXXXXX   ....  XXXXXXX   ....  XXXXXXXX  ....  XXXXXXXXX   ....",
+"...  XXXXXXXXX   .....  XXXXXXXX  .... XXXXXXXXX  .....  XXXXXXXXX   ...",
+"...  XXXXXXXX   ......  XXXXXXX   ....  XXXXXXX   ......  XXXXXXXXX  ...",
+"...  XXXXXXX   ........  XXXXX   ......  XXXXX   ........  XXXXXXX   ...",
+"....  XXXXX   ..........  XXX   ........  XXX   ..........  XXXXX   ....",
+".....  XXX   ............  X   ..........  X   ............  XXX   .....",
+"......  X   ..............    ............    ..............  X   ......",
+".......    ..................................................    .......",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/cdd33.xpm b/pixmaps/cdd33.xpm
new file mode 100644
index 0000000..3847077
--- /dev/null
+++ b/pixmaps/cdd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *cdd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+"...............  ................",
+".............. .. ...............",
+".............. .. ...............",
+"...............  ................",
+"..............    ...............",
+".............      ..............",
+"....  ......        ......  .....",
+"... ..                    .. ....",
+"... ..        ....        .. ....",
+"....        ..    ..        .....",
+"......      .      .      .......",
+"......     .        .     .......",
+".......    .        .    ........",
+".......   .          .   ........",
+"........  .          .  .........",
+".......   .          .   ........",
+".......    .        .    ........",
+"......     .        .     .......",
+"......      .      .      .......",
+"....        ..    ..        .....",
+"... ..        ....        .. ....",
+"... ..                    .. ....",
+"....  ......        ......  .....",
+".............      ..............",
+"..............    ...............",
+"...............  ................",
+".............. .. ...............",
+".............. .. ...............",
+"...............  ................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/cdd37.xpm b/pixmaps/cdd37.xpm
new file mode 100644
index 0000000..61297c7
--- /dev/null
+++ b/pixmaps/cdd37.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char *cdd37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".....................................",
+".................   .................",
+"................ ... ................",
+"................ ... ................",
+"................ ... ................",
+".................   .................",
+"................     ................",
+"...............       ...............",
+"...   .........       .........   ...",
+".. ... .......         ....... ... ..",
+".. ...                         ... ..",
+".. ...          .....          ... ..",
+"...           ..     ..           ...",
+"......       .         .       ......",
+".......     .           .     .......",
+".......     .           .     .......",
+"........   .             .   ........",
+"........   .             .   ........",
+".........  .             .  .........",
+"........   .             .   ........",
+"........   .             .   ........",
+".......     .           .     .......",
+".......     .           .     .......",
+"......       .         .       ......",
+"...           ..     ..           ...",
+".. ...          .....          ... ..",
+".. ...                         ... ..",
+".. ... .......         ....... ... ..",
+"...   .........       .........   ...",
+"...............       ...............",
+"................     ................",
+".................   .................",
+"................ ... ................",
+"................ ... ................",
+"................ ... ................",
+".................   .................",
+"....................................."
+};
diff --git a/pixmaps/cdd40.xpm b/pixmaps/cdd40.xpm
new file mode 100644
index 0000000..1728fc0
--- /dev/null
+++ b/pixmaps/cdd40.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char *cdd40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................",
+"...................   ..................",
+".................. ... .................",
+".................. ... .................",
+".................. ... .................",
+"...................   ..................",
+"...................   ..................",
+"..................     .................",
+"..................     .................",
+".....   .........       ........   .....",
+".... ...                        ... ....",
+".... ...                        ... ....",
+".... ...         ......         ... ....",
+".....           .      .           .....",
+"........       .        .        .......",
+".........     .          .      ........",
+".........    .            .     ........",
+"..........   .            .    .........",
+"...........  .            .   ..........",
+"...........  .            .  ...........",
+"..........   .            .  ...........",
+".........    .            .   ..........",
+"........      .          .     .........",
+"........       .        .      .........",
+".......         .      .        ........",
+".....            ......            .....",
+".... ...                        ... ....",
+".... ...                        ... ....",
+".... ... ........        ...... ... ....",
+".....   .........       ........   .....",
+"..................     .................",
+"..................     .................",
+"...................   ..................",
+"...................   ..................",
+".................. ... .................",
+".................. ... .................",
+".................. ... .................",
+"...................   ..................",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/cdd45.xpm b/pixmaps/cdd45.xpm
new file mode 100644
index 0000000..19399d5
--- /dev/null
+++ b/pixmaps/cdd45.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *cdd45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".............................................",
+".............................................",
+".....................   .....................",
+".................... ... ....................",
+".................... ... ....................",
+".................... ... ....................",
+".....................   .....................",
+"....................     ....................",
+"...................       ...................",
+"...................       ...................",
+"..................         ..................",
+"....   ...........         ...........   ....",
+"... ... .........           ......... ... ...",
+"... ...                               ... ...",
+"... ...             .....             ... ...",
+"....              ..     ..              ....",
+".......          .         .          .......",
+"........        .           .        ........",
+"........       .             .       ........",
+".........      .             .      .........",
+".........     .               .     .........",
+"..........    .               .    ..........",
+"...........   .               .   ...........",
+"..........    .               .    ..........",
+".........     .               .     .........",
+".........      .             .      .........",
+"........       .             .       ........",
+"........        .           .        ........",
+".......          .         .          .......",
+"....              ..     ..              ....",
+"... ...             .....             ... ...",
+"... ...                               ... ...",
+"... ... .........           ......... ... ...",
+"....   ...........         ...........   ....",
+"..................         ..................",
+"...................       ...................",
+"...................       ...................",
+"....................     ....................",
+".....................   .....................",
+".................... ... ....................",
+".................... ... ....................",
+".................... ... ....................",
+".....................   .....................",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/cdd49.xpm b/pixmaps/cdd49.xpm
new file mode 100644
index 0000000..f988e1c
--- /dev/null
+++ b/pixmaps/cdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *cdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".......................   .......................",
+"...................... ... ......................",
+"...................... ... ......................",
+"...................... ... ......................",
+".......................   .......................",
+"......................     ......................",
+".....................       .....................",
+".....................       .....................",
+"....................         ....................",
+"....................         ....................",
+"......   ..........           .........   .......",
+"..... ...                              ... ......",
+"..... ...                              ... ......",
+"..... ...             ....             ... ......",
+"......             ...    ...             .......",
+".........         .          .         ..........",
+"..........       .            .       ...........",
+"..........      .              .      ...........",
+"...........     .              .     ............",
+"...........     .              .    .............",
+"............   .                .   .............",
+"............   .                .  ..............",
+".............  .                .  ..............",
+".............  .                .   .............",
+"............    .              .    .............",
+"............    .              .     ............",
+"...........     .              .      ...........",
+"..........       .            .       ...........",
+"..........        .          .         ..........",
+".........          ...    ...          ..........",
+"......                ....                .......",
+"..... ...                              ... ......",
+"..... ...                              ... ......",
+"..... ... .........           ........ ... ......",
+"......   ...........         ..........   .......",
+"....................         ....................",
+".....................       .....................",
+".....................       .....................",
+"......................     ......................",
+".......................   .......................",
+"...................... ... ......................",
+"...................... ... ......................",
+"...................... ... ......................",
+".......................   .......................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/cdd54.xpm b/pixmaps/cdd54.xpm
new file mode 100644
index 0000000..815bcef
--- /dev/null
+++ b/pixmaps/cdd54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *cdd54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"......................................................",
+"..........................  ..........................",
+"........................      ........................",
+".......................   ..   .......................",
+".......................  ....  .......................",
+".......................  ....  .......................",
+".......................   ..   .......................",
+"........................      ........................",
+".......................        .......................",
+"......................         .......................",
+"......................          ......................",
+".....................           ......................",
+"......  .............            .............  ......",
+"....      ..........             ...........      ....",
+"...   ..   .........              .........   ..   ...",
+"...  ....                                    ....  ...",
+"...  ....               ......               ....  ...",
+"...   ..              ..........              ..   ...",
+"....                .....    .....                ....",
+"......             ...          ...          .  ......",
+".........         ...            ...        ..........",
+".........         ..              ..        ..........",
+"..........       ..                ..      ...........",
+"..........       ..                ..      ...........",
+"...........     ...                ..     ............",
+"...........     ..                  ..    ............",
+"............    ..                  ..   .............",
+".............   ..                  ..    ............",
+"............    ..                  ..    ............",
+"............    ...                ..      ...........",
+"...........      ..                ..       ..........",
+"...........      ..                ..       ..........",
+"..........        ..              ..         .........",
+"..........        ...            ...         .........",
+"......  .          ...          ...             ......",
+"....                .....    .....                ....",
+"...   ..              ..........              ..   ...",
+"...  ....                ....                ....  ...",
+"...  ....                                    ....  ...",
+"...   ..   .........              .........   ..   ...",
+"....      ..........              ..........      ....",
+"......  .............            .............  ......",
+".....................           ......................",
+"......................          ......................",
+"......................         .......................",
+".......................       ........................",
+".......................   ..   .......................",
+".......................  ....  .......................",
+".......................  ....  .......................",
+".......................   ..   .......................",
+"........................      ........................",
+"..........................  ..........................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/cdd58.xpm b/pixmaps/cdd58.xpm
new file mode 100644
index 0000000..f0c3e3a
--- /dev/null
+++ b/pixmaps/cdd58.xpm
@@ -0,0 +1,66 @@
+/* XPM */
+static char *cdd58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"..........................................................",
+"..........................     ...........................",
+".........................       ..........................",
+".........................  ...  ..........................",
+".........................  ...  ..........................",
+".........................  ...  ..........................",
+".........................       ..........................",
+"..........................     ...........................",
+".........................       ..........................",
+"........................         .........................",
+"........................         .........................",
+".......................           ........................",
+".......................           ........................",
+"....     .............             .............     .....",
+"...       ............             ............       ....",
+"...  ...                                         ...  ....",
+"...  ...                                         ...  ....",
+"...  ...                  .....                  ...  ....",
+"...                    ...........                    ....",
+"....                 .....     .....                 .....",
+"........            ...           ...            .........",
+".........          ...             ...          ..........",
+".........         ...               ...         ..........",
+"..........        ..                 ..        ...........",
+"..........       ..                   ..       ...........",
+"...........      ..                   ..      ............",
+"............     ..                   ..     .............",
+"............    ..                     ..    .............",
+".............   ..                     ..   ..............",
+".............   ..                     ..   ..............",
+".............   ..                     ..   ..............",
+"............    ..                     ..    .............",
+"...........      ..                   ..      ............",
+"...........      ..                   ..      ............",
+"..........       ..                   ..       ...........",
+"..........        ..                 ..        ...........",
+".........         ...               ...         ..........",
+".........          ...             ...          ..........",
+"........            ...           ...            .........",
+"....                 .....     .....                 .....",
+"...                    ...........                    ....",
+"...  ...                  .....                  ...  ....",
+"...  ...                                         ...  ....",
+"...  ...                                         ...  ....",
+"...       ............             ............       ....",
+"....     ..............           ..............     .....",
+".......................           ........................",
+"........................         .........................",
+"........................         .........................",
+".........................       ..........................",
+"..........................     ...........................",
+".........................       ..........................",
+".........................  ...  ..........................",
+".........................  ...  ..........................",
+".........................  ...  ..........................",
+".........................       ..........................",
+"..........................     ...........................",
+".........................................................."
+};
diff --git a/pixmaps/cdd64.xpm b/pixmaps/cdd64.xpm
new file mode 100644
index 0000000..a372823
--- /dev/null
+++ b/pixmaps/cdd64.xpm
@@ -0,0 +1,72 @@
+/* XPM */
+static char *cdd64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+"...............................  ...............................",
+".............................      .............................",
+"............................   ..   ............................",
+"............................  ....  ............................",
+"............................  ....  ............................",
+"............................   ..   ............................",
+".............................      .............................",
+"..............................    ..............................",
+".............................      .............................",
+"............................        ............................",
+"............................        ............................",
+"...........................          ...........................",
+".......  ..................          ..................  .......",
+".....      ...............            ...............      .....",
+"....   ..   .............              .............   ..   ....",
+"....  ....                                            ....  ....",
+"....  ....                                            ....  ....",
+"....   ..                     ....                     ..   ....",
+".....                     ............                     .....",
+"......                   .....    .....                   ......",
+".........              ....          ....              .........",
+"..........            ...              ...            ..........",
+"..........            ..                ..            ..........",
+"...........          ..                  ..          ...........",
+"............        ...                  ...        ............",
+"............        ..                    ..        ............",
+".............       ..                    ..       .............",
+".............       .                      .       .............",
+"..............     ..                      ..     ..............",
+"...............    ..                      ..    ...............",
+"...............    ..                      ..    ...............",
+"...............    ..                      ..    ...............",
+"..............      .                      .      ..............",
+"..............      ..                    ..      ..............",
+".............       ..                    ..       .............",
+"............        ...                  ...        ............",
+"............         ..                  ..         ............",
+"...........           ..                ..           ...........",
+"...........           ...              ...           ...........",
+".......  .             ....          ....             .  .......",
+".....                    .....    .....                    .....",
+"....   ..                 ............                 ..   ....",
+"....  ....                    ....                    ....  ....",
+"....  ....                                            ....  ....",
+"....   ..   ............                ............   ..   ....",
+".....      ..............              ..............      .....",
+"......    ...............              ...............    ......",
+"..........................            ..........................",
+"...........................          ...........................",
+"...........................          ...........................",
+"............................        ............................",
+".............................      .............................",
+"............................   ..   ............................",
+"............................  ....  ............................",
+"............................  ....  ............................",
+"............................   ..   ............................",
+".............................      .............................",
+"..............................    ..............................",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/cdd72.xpm b/pixmaps/cdd72.xpm
new file mode 100644
index 0000000..7dd3f36
--- /dev/null
+++ b/pixmaps/cdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *cdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................     .................................",
+".................................       ................................",
+"................................   ...   ...............................",
+"................................  .....  ...............................",
+"................................  .....  ...............................",
+"................................  .....  ...............................",
+"................................   ...   ...............................",
+".................................       ................................",
+"..................................      ................................",
+".................................       ................................",
+"................................         ...............................",
+"................................         ...............................",
+"...............................           ..............................",
+".........     ................            ..............................",
+"........       ...............             ...............     .........",
+".......   ...   .............              ..............       ........",
+".......  .....  ............                ............   ...   .......",
+".......  .....                                            .....  .......",
+".......  .....                                            .....  .......",
+".......   ...                                             .....  .......",
+"........                                                   ...   .......",
+".........                        .......                        ........",
+"..............                 ...........                     .........",
+"..............                ....     ....               ..............",
+"...............              ...         ...              ..............",
+"...............             ...           ...            ...............",
+"................           ...             ...           ...............",
+"................           ...              ...         ................",
+".................         ...                ..         ................",
+".................         ..                 ...       .................",
+"..................       ...                  ..       .................",
+"..................       ..                   ..      ..................",
+"...................      ..                   ..      ..................",
+"...................      ..                   ..     ...................",
+"..................       ..                   ..      ..................",
+"..................       ...                 ...      ..................",
+".................         ..                 ..        .................",
+".................         ..                 ..        .................",
+"................           ..               ..          ................",
+"...............            ...             ...          ................",
+"...............             ...           ...            ...............",
+"..............               ...         ...             ...............",
+".........                     ....     ...                   ...........",
+"........                       ...........                    ..........",
+".......   ...                    .......                 ...   .........",
+".......  .....                                          .....  .........",
+".......  .....                                          .....  .........",
+".......  .....                                          .....  .........",
+".......   ...   ...........                 ..........   ...   .........",
+"........       .............                ...........       ..........",
+".........     ..............               .............     ...........",
+".............................              .............................",
+".............................             ..............................",
+"..............................            ..............................",
+"..............................           ...............................",
+"...............................          ...............................",
+"...............................         ................................",
+"................................       .................................",
+"................................       .................................",
+"...............................   ...   ................................",
+"...............................  .....  ................................",
+"...............................  .....  ................................",
+"...............................  .....  ................................",
+"...............................   ...   ................................",
+"................................       .................................",
+".................................     ..................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/cdl33.xpm b/pixmaps/cdl33.xpm
new file mode 100644
index 0000000..46af57e
--- /dev/null
+++ b/pixmaps/cdl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *cdl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+"...............  ................",
+".............. .. ...............",
+".............. .. ...............",
+"...............  ................",
+"..............    ...............",
+".............      ..............",
+"....  ......        ......  .....",
+"... ..                    .. ....",
+"... ..        ....        .. ....",
+"....        ..    ..        .....",
+"......      .      .      .......",
+"......     .        .     .......",
+".......    .        .    ........",
+".......   .          .   ........",
+"........  .          .  .........",
+".......   .          .   ........",
+".......    .        .    ........",
+"......     .        .     .......",
+"......      .      .      .......",
+"....        ..    ..        .....",
+"... ..        ....        .. ....",
+"... ..                    .. ....",
+"....  ......        ......  .....",
+".............      ..............",
+"..............    ...............",
+"...............  ................",
+".............. .. ...............",
+".............. .. ...............",
+"...............  ................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/cdl37.xpm b/pixmaps/cdl37.xpm
new file mode 100644
index 0000000..be292b4
--- /dev/null
+++ b/pixmaps/cdl37.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char *cdl37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".....................................",
+".................   .................",
+"................ ... ................",
+"................ ... ................",
+"................ ... ................",
+".................   .................",
+"................     ................",
+"...............       ...............",
+"...   .........       .........   ...",
+".. ... .......         ....... ... ..",
+".. ...                         ... ..",
+".. ...          .....          ... ..",
+"...           ..     ..           ...",
+"......       .         .       ......",
+".......     .           .     .......",
+".......     .           .     .......",
+"........   .             .   ........",
+"........   .             .   ........",
+".........  .             .  .........",
+"........   .             .   ........",
+"........   .             .   ........",
+".......     .           .     .......",
+".......     .           .     .......",
+"......       .         .       ......",
+"...           ..     ..           ...",
+".. ...          .....          ... ..",
+".. ...                         ... ..",
+".. ... .......         ....... ... ..",
+"...   .........       .........   ...",
+"...............       ...............",
+"................     ................",
+".................   .................",
+"................ ... ................",
+"................ ... ................",
+"................ ... ................",
+".................   .................",
+"....................................."
+};
diff --git a/pixmaps/cdl40.xpm b/pixmaps/cdl40.xpm
new file mode 100644
index 0000000..da28ae9
--- /dev/null
+++ b/pixmaps/cdl40.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char *cdl40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................",
+"...................   ..................",
+".................. ... .................",
+".................. ... .................",
+".................. ... .................",
+"...................   ..................",
+"...................   ..................",
+"..................     .................",
+"..................     .................",
+".....   .........       ........   .....",
+".... ...                        ... ....",
+".... ...                        ... ....",
+".... ...         ......         ... ....",
+".....           .      .           .....",
+"........       .        .        .......",
+".........     .          .      ........",
+".........    .            .     ........",
+"..........   .            .    .........",
+"...........  .            .   ..........",
+"...........  .            .  ...........",
+"..........   .            .  ...........",
+".........    .            .   ..........",
+"........      .          .     .........",
+"........       .        .      .........",
+".......         .      .        ........",
+".....            ......            .....",
+".... ...                        ... ....",
+".... ...                        ... ....",
+".... ... ........        ...... ... ....",
+".....   .........       ........   .....",
+"..................     .................",
+"..................     .................",
+"...................   ..................",
+"...................   ..................",
+".................. ... .................",
+".................. ... .................",
+".................. ... .................",
+"...................   ..................",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/cdl45.xpm b/pixmaps/cdl45.xpm
new file mode 100644
index 0000000..97cff7b
--- /dev/null
+++ b/pixmaps/cdl45.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *cdl45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".............................................",
+".............................................",
+".....................   .....................",
+".................... ... ....................",
+".................... ... ....................",
+".................... ... ....................",
+".....................   .....................",
+"....................     ....................",
+"...................       ...................",
+"...................       ...................",
+"..................         ..................",
+"....   ...........         ...........   ....",
+"... ... .........           ......... ... ...",
+"... ...                               ... ...",
+"... ...             .....             ... ...",
+"....              ..     ..              ....",
+".......          .         .          .......",
+"........        .           .        ........",
+"........       .             .       ........",
+".........      .             .      .........",
+".........     .               .     .........",
+"..........    .               .    ..........",
+"...........   .               .   ...........",
+"..........    .               .    ..........",
+".........     .               .     .........",
+".........      .             .      .........",
+"........       .             .       ........",
+"........        .           .        ........",
+".......          .         .          .......",
+"....              ..     ..              ....",
+"... ...             .....             ... ...",
+"... ...                               ... ...",
+"... ... .........           ......... ... ...",
+"....   ...........         ...........   ....",
+"..................         ..................",
+"...................       ...................",
+"...................       ...................",
+"....................     ....................",
+".....................   .....................",
+".................... ... ....................",
+".................... ... ....................",
+".................... ... ....................",
+".....................   .....................",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/cdl49.xpm b/pixmaps/cdl49.xpm
new file mode 100644
index 0000000..81efd4d
--- /dev/null
+++ b/pixmaps/cdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *cdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".......................   .......................",
+"...................... ... ......................",
+"...................... ... ......................",
+"...................... ... ......................",
+".......................   .......................",
+"......................     ......................",
+".....................       .....................",
+".....................       .....................",
+"....................         ....................",
+"....................         ....................",
+"......   ..........           .........   .......",
+"..... ...                              ... ......",
+"..... ...                              ... ......",
+"..... ...             ....             ... ......",
+"......             ...    ...             .......",
+".........         .          .         ..........",
+"..........       .            .       ...........",
+"..........      .              .      ...........",
+"...........     .              .     ............",
+"...........     .              .    .............",
+"............   .                .   .............",
+"............   .                .  ..............",
+".............  .                .  ..............",
+".............  .                .   .............",
+"............    .              .    .............",
+"............    .              .     ............",
+"...........     .              .      ...........",
+"..........       .            .       ...........",
+"..........        .          .         ..........",
+".........          ...    ...          ..........",
+"......                ....                .......",
+"..... ...                              ... ......",
+"..... ...                              ... ......",
+"..... ... .........           ........ ... ......",
+"......   ...........         ..........   .......",
+"....................         ....................",
+".....................       .....................",
+".....................       .....................",
+"......................     ......................",
+".......................   .......................",
+"...................... ... ......................",
+"...................... ... ......................",
+"...................... ... ......................",
+".......................   .......................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/cdl54.xpm b/pixmaps/cdl54.xpm
new file mode 100644
index 0000000..9b8d859
--- /dev/null
+++ b/pixmaps/cdl54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *cdl54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"......................................................",
+"..........................  ..........................",
+"........................      ........................",
+".......................   ..   .......................",
+".......................  ....  .......................",
+".......................  ....  .......................",
+".......................   ..   .......................",
+"........................      ........................",
+".......................        .......................",
+"......................         .......................",
+"......................          ......................",
+".....................           ......................",
+"......  .............            .............  ......",
+"....      ..........             ...........      ....",
+"...   ..   .........              .........   ..   ...",
+"...  ....                                    ....  ...",
+"...  ....               ......               ....  ...",
+"...   ..              ..........              ..   ...",
+"....                .....    .....                ....",
+"......             ...          ...          .  ......",
+".........         ...            ...        ..........",
+".........         ..              ..        ..........",
+"..........       ..                ..      ...........",
+"..........       ..                ..      ...........",
+"...........     ...                ..     ............",
+"...........     ..                  ..    ............",
+"............    ..                  ..   .............",
+".............   ..                  ..    ............",
+"............    ..                  ..    ............",
+"............    ...                ..      ...........",
+"...........      ..                ..       ..........",
+"...........      ..                ..       ..........",
+"..........        ..              ..         .........",
+"..........        ...            ...         .........",
+"......  .          ...          ...             ......",
+"....                .....    .....                ....",
+"...   ..              ..........              ..   ...",
+"...  ....                ....                ....  ...",
+"...  ....                                    ....  ...",
+"...   ..   .........              .........   ..   ...",
+"....      ..........              ..........      ....",
+"......  .............            .............  ......",
+".....................           ......................",
+"......................          ......................",
+"......................         .......................",
+".......................       ........................",
+".......................   ..   .......................",
+".......................  ....  .......................",
+".......................  ....  .......................",
+".......................   ..   .......................",
+"........................      ........................",
+"..........................  ..........................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/cdl58.xpm b/pixmaps/cdl58.xpm
new file mode 100644
index 0000000..8842800
--- /dev/null
+++ b/pixmaps/cdl58.xpm
@@ -0,0 +1,66 @@
+/* XPM */
+static char *cdl58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"..........................................................",
+"..........................     ...........................",
+".........................       ..........................",
+".........................  ...  ..........................",
+".........................  ...  ..........................",
+".........................  ...  ..........................",
+".........................       ..........................",
+"..........................     ...........................",
+".........................       ..........................",
+"........................         .........................",
+"........................         .........................",
+".......................           ........................",
+".......................           ........................",
+"....     .............             .............     .....",
+"...       ............             ............       ....",
+"...  ...                                         ...  ....",
+"...  ...                                         ...  ....",
+"...  ...                  .....                  ...  ....",
+"...                    ...........                    ....",
+"....                 .....     .....                 .....",
+"........            ...           ...            .........",
+".........          ...             ...          ..........",
+".........         ...               ...         ..........",
+"..........        ..                 ..        ...........",
+"..........       ..                   ..       ...........",
+"...........      ..                   ..      ............",
+"............     ..                   ..     .............",
+"............    ..                     ..    .............",
+".............   ..                     ..   ..............",
+".............   ..                     ..   ..............",
+".............   ..                     ..   ..............",
+"............    ..                     ..    .............",
+"...........      ..                   ..      ............",
+"...........      ..                   ..      ............",
+"..........       ..                   ..       ...........",
+"..........        ..                 ..        ...........",
+".........         ...               ...         ..........",
+".........          ...             ...          ..........",
+"........            ...           ...            .........",
+"....                 .....     .....                 .....",
+"...                    ...........                    ....",
+"...  ...                  .....                  ...  ....",
+"...  ...                                         ...  ....",
+"...  ...                                         ...  ....",
+"...       ............             ............       ....",
+"....     ..............           ..............     .....",
+".......................           ........................",
+"........................         .........................",
+"........................         .........................",
+".........................       ..........................",
+"..........................     ...........................",
+".........................       ..........................",
+".........................  ...  ..........................",
+".........................  ...  ..........................",
+".........................  ...  ..........................",
+".........................       ..........................",
+"..........................     ...........................",
+".........................................................."
+};
diff --git a/pixmaps/cdl64.xpm b/pixmaps/cdl64.xpm
new file mode 100644
index 0000000..f07a4a8
--- /dev/null
+++ b/pixmaps/cdl64.xpm
@@ -0,0 +1,72 @@
+/* XPM */
+static char *cdl64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+"...............................  ...............................",
+".............................      .............................",
+"............................   ..   ............................",
+"............................  ....  ............................",
+"............................  ....  ............................",
+"............................   ..   ............................",
+".............................      .............................",
+"..............................    ..............................",
+".............................      .............................",
+"............................        ............................",
+"............................        ............................",
+"...........................          ...........................",
+".......  ..................          ..................  .......",
+".....      ...............            ...............      .....",
+"....   ..   .............              .............   ..   ....",
+"....  ....                                            ....  ....",
+"....  ....                                            ....  ....",
+"....   ..                     ....                     ..   ....",
+".....                     ............                     .....",
+"......                   .....    .....                   ......",
+".........              ....          ....              .........",
+"..........            ...              ...            ..........",
+"..........            ..                ..            ..........",
+"...........          ..                  ..          ...........",
+"............        ...                  ...        ............",
+"............        ..                    ..        ............",
+".............       ..                    ..       .............",
+".............       .                      .       .............",
+"..............     ..                      ..     ..............",
+"...............    ..                      ..    ...............",
+"...............    ..                      ..    ...............",
+"...............    ..                      ..    ...............",
+"..............      .                      .      ..............",
+"..............      ..                    ..      ..............",
+".............       ..                    ..       .............",
+"............        ...                  ...        ............",
+"............         ..                  ..         ............",
+"...........           ..                ..           ...........",
+"...........           ...              ...           ...........",
+".......  .             ....          ....             .  .......",
+".....                    .....    .....                    .....",
+"....   ..                 ............                 ..   ....",
+"....  ....                    ....                    ....  ....",
+"....  ....                                            ....  ....",
+"....   ..   ............                ............   ..   ....",
+".....      ..............              ..............      .....",
+"......    ...............              ...............    ......",
+"..........................            ..........................",
+"...........................          ...........................",
+"...........................          ...........................",
+"............................        ............................",
+".............................      .............................",
+"............................   ..   ............................",
+"............................  ....  ............................",
+"............................  ....  ............................",
+"............................   ..   ............................",
+".............................      .............................",
+"..............................    ..............................",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/cdl72.xpm b/pixmaps/cdl72.xpm
new file mode 100644
index 0000000..7dab174
--- /dev/null
+++ b/pixmaps/cdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *cdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................     .................................",
+".................................       ................................",
+"................................   ...   ...............................",
+"................................  .....  ...............................",
+"................................  .....  ...............................",
+"................................  .....  ...............................",
+"................................   ...   ...............................",
+".................................       ................................",
+"..................................      ................................",
+".................................       ................................",
+"................................         ...............................",
+"................................         ...............................",
+"...............................           ..............................",
+".........     ................            ..............................",
+"........       ...............             ...............     .........",
+".......   ...   .............              ..............       ........",
+".......  .....  ............                ............   ...   .......",
+".......  .....                                            .....  .......",
+".......  .....                                            .....  .......",
+".......   ...                                             .....  .......",
+"........                                                   ...   .......",
+".........                        .......                        ........",
+"..............                 ...........                     .........",
+"..............                ....     ....               ..............",
+"...............              ...         ...              ..............",
+"...............             ...           ...            ...............",
+"................           ...             ...           ...............",
+"................           ...              ...         ................",
+".................         ...                ..         ................",
+".................         ..                 ...       .................",
+"..................       ...                  ..       .................",
+"..................       ..                   ..      ..................",
+"...................      ..                   ..      ..................",
+"...................      ..                   ..     ...................",
+"..................       ..                   ..      ..................",
+"..................       ...                 ...      ..................",
+".................         ..                 ..        .................",
+".................         ..                 ..        .................",
+"................           ..               ..          ................",
+"...............            ...             ...          ................",
+"...............             ...           ...            ...............",
+"..............               ...         ...             ...............",
+".........                     ....     ...                   ...........",
+"........                       ...........                    ..........",
+".......   ...                    .......                 ...   .........",
+".......  .....                                          .....  .........",
+".......  .....                                          .....  .........",
+".......  .....                                          .....  .........",
+".......   ...   ...........                 ..........   ...   .........",
+"........       .............                ...........       ..........",
+".........     ..............               .............     ...........",
+".............................              .............................",
+".............................             ..............................",
+"..............................            ..............................",
+"..............................           ...............................",
+"...............................          ...............................",
+"...............................         ................................",
+"................................       .................................",
+"................................       .................................",
+"...............................   ...   ................................",
+"...............................  .....  ................................",
+"...............................  .....  ................................",
+"...............................  .....  ................................",
+"...............................   ...   ................................",
+"................................       .................................",
+".................................     ..................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/cld33.xpm b/pixmaps/cld33.xpm
new file mode 100644
index 0000000..c25f2e0
--- /dev/null
+++ b/pixmaps/cld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *cld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+"...............  ................",
+".............. XX ...............",
+".............. XX ...............",
+"...............  ................",
+".............. XX ...............",
+"............. XXXX ..............",
+"....  ...... XXXXXX ......  .....",
+"... XX      XXXXXXXX      XX ....",
+"... XX XXXXXXX    XXXXXXX XX ....",
+"....  XXXXXX  XXXX  XXXXXX  .....",
+"...... XXXXX XXXXXX XXXXX .......",
+"...... XXXX XXXXXXXX XXXX .......",
+"....... XXX XXXXXXXX XXX ........",
+"....... XX XXXXXXXXXX XX ........",
+"........ X XXXXXXXXXX X .........",
+"....... XX XXXXXXXXXX XX ........",
+"....... XXX XXXXXXXX XXX ........",
+"...... XXXX XXXXXXXX XXXX .......",
+"...... XXXXX XXXXXX XXXXX .......",
+"....  XXXXXX  XXXX  XXXXXX  .....",
+"... XX XXXXXXX    XXXXXXX XX ....",
+"... XX      XXXXXXXX      XX ....",
+"....  ...... XXXXXX ......  .....",
+"............. XXXX ..............",
+".............. XX ...............",
+"...............  ................",
+".............. XX ...............",
+".............. XX ...............",
+"...............  ................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/cld37.xpm b/pixmaps/cld37.xpm
new file mode 100644
index 0000000..c5a97c2
--- /dev/null
+++ b/pixmaps/cld37.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char *cld37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".....................................",
+".................   .................",
+"................ XXX ................",
+"................ XXX ................",
+"................ XXX ................",
+".................   .................",
+"................ XXX ................",
+"............... XXXXX ...............",
+"...   ......... XXXXX .........   ...",
+".. XXX ....... XXXXXXX ....... XXX ..",
+".. XXX        XXXXXXXXX        XXX ..",
+".. XXX XXXXXXXXX     XXXXXXXXX XXX ..",
+"...   XXXXXXXX  XXXXX  XXXXXXXX   ...",
+"...... XXXXXX XXXXXXXXX XXXXXX ......",
+"....... XXXX XXXXXXXXXXX XXXX .......",
+"....... XXXX XXXXXXXXXXX XXXX .......",
+"........ XX XXXXXXXXXXXXX XX ........",
+"........ XX XXXXXXXXXXXXX XX ........",
+"......... X XXXXXXXXXXXXX X .........",
+"........ XX XXXXXXXXXXXXX XX ........",
+"........ XX XXXXXXXXXXXXX XX ........",
+"....... XXXX XXXXXXXXXXX XXXX .......",
+"....... XXXX XXXXXXXXXXX XXXX .......",
+"...... XXXXXX XXXXXXXXX XXXXXX ......",
+"...   XXXXXXXX  XXXXX  XXXXXXXX   ...",
+".. XXX XXXXXXXXX     XXXXXXXXX XXX ..",
+".. XXX        XXXXXXXXX        XXX ..",
+".. XXX ....... XXXXXXX ....... XXX ..",
+"...   ......... XXXXX .........   ...",
+"............... XXXXX ...............",
+"................ XXX ................",
+".................   .................",
+"................ XXX ................",
+"................ XXX ................",
+"................ XXX ................",
+".................   .................",
+"....................................."
+};
diff --git a/pixmaps/cld40.xpm b/pixmaps/cld40.xpm
new file mode 100644
index 0000000..85c5d31
--- /dev/null
+++ b/pixmaps/cld40.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char *cld40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................",
+"...................   ..................",
+".................. XXX .................",
+".................. XXX .................",
+".................. XXX .................",
+"...................   ..................",
+"................... X ..................",
+".................. XXX .................",
+".................. XXX .................",
+".....   ......... XXXXX ........   .....",
+".... XXX         XXXXXXX        XXX ....",
+".... XXX XXXXXXXXXXXXXXXXXXXXXX XXX ....",
+".... XXX XXXXXXXX      XXXXXXXX XXX ....",
+".....   XXXXXXXX XXXXXX XXXXXXXX   .....",
+"........ XXXXXX XXXXXXXX XXXXXXX .......",
+"......... XXXX XXXXXXXXXX XXXXX ........",
+"......... XXX XXXXXXXXXXX XXXXX ........",
+".......... XX XXXXXXXXXXXX XXX .........",
+"........... X XXXXXXXXXXXX XX ..........",
+"........... X XXXXXXXXXXXX X ...........",
+".......... XX XXXXXXXXXXXX X ...........",
+"......... XXX XXXXXXXXXXX XXX ..........",
+"........ XXXXX XXXXXXXXXX XXXX .........",
+"........ XXXXXX XXXXXXXX XXXXX .........",
+"....... XXXXXXXX XXXXXX XXXXXXX ........",
+".....   XXXXXXXXX      XXXXXXXXX   .....",
+".... XXX XXXXXXXXXXXXXXXXXXXXXX XXX ....",
+".... XXX         XXXXXXX        XXX ....",
+".... XXX ........ XXXXXX ...... XXX ....",
+".....   ......... XXXXX ........   .....",
+".................. XXX .................",
+".................. XXX .................",
+"................... X ..................",
+"...................   ..................",
+".................. XXX .................",
+".................. XXX .................",
+".................. XXX .................",
+"...................   ..................",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/cld45.xpm b/pixmaps/cld45.xpm
new file mode 100644
index 0000000..8cb34dc
--- /dev/null
+++ b/pixmaps/cld45.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *cld45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".............................................",
+".............................................",
+".....................   .....................",
+".................... XXX ....................",
+".................... XXX ....................",
+".................... XXX ....................",
+".....................   .....................",
+".................... XXX ....................",
+"................... XXXXX ...................",
+"................... XXXXX ...................",
+".................. XXXXXXX ..................",
+"....   ........... XXXXXXX ...........   ....",
+"... XXX ......... XXXXXXXXX ......... XXX ...",
+"... XXX          XXXXXXXXXXX          XXX ...",
+"... XXX XXXXXXXXXXXX     XXXXXXXXXXXX XXX ...",
+"....   XXXXXXXXXXX  XXXXX  XXXXXXXXXXX   ....",
+"....... XXXXXXXXX XXXXXXXXX XXXXXXXXX .......",
+"........ XXXXXXX XXXXXXXXXXX XXXXXXX ........",
+"........ XXXXXX XXXXXXXXXXXXX XXXXXX ........",
+"......... XXXXX XXXXXXXXXXXXX XXXXX .........",
+"......... XXXX XXXXXXXXXXXXXXX XXXX .........",
+".......... XXX XXXXXXXXXXXXXXX XXX ..........",
+"........... XX XXXXXXXXXXXXXXX XX ...........",
+".......... XXX XXXXXXXXXXXXXXX XXX ..........",
+"......... XXXX XXXXXXXXXXXXXXX XXXX .........",
+"......... XXXXX XXXXXXXXXXXXX XXXXX .........",
+"........ XXXXXX XXXXXXXXXXXXX XXXXXX ........",
+"........ XXXXXXX XXXXXXXXXXX XXXXXXX ........",
+"....... XXXXXXXXX XXXXXXXXX XXXXXXXXX .......",
+"....   XXXXXXXXXXX  XXXXX  XXXXXXXXXXX   ....",
+"... XXX XXXXXXXXXXXX     XXXXXXXXXXXX XXX ...",
+"... XXX          XXXXXXXXXXX          XXX ...",
+"... XXX ......... XXXXXXXXX ......... XXX ...",
+"....   ........... XXXXXXX ...........   ....",
+".................. XXXXXXX ..................",
+"................... XXXXX ...................",
+"................... XXXXX ...................",
+".................... XXX ....................",
+".....................   .....................",
+".................... XXX ....................",
+".................... XXX ....................",
+".................... XXX ....................",
+".....................   .....................",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/cld49.xpm b/pixmaps/cld49.xpm
new file mode 100644
index 0000000..d951d58
--- /dev/null
+++ b/pixmaps/cld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *cld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".......................   .......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+".......................   .......................",
+"...................... XXX ......................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+".................... XXXXXXX ....................",
+".................... XXXXXXX ....................",
+"......   .......... XXXXXXXXX .........   .......",
+"..... XXX          XXXXXXXXXXX         XXX ......",
+"..... XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX XXX ......",
+"..... XXX XXXXXXXXXXXX    XXXXXXXXXXXX XXX ......",
+"......   XXXXXXXXXX   XXXX   XXXXXXXXXX   .......",
+"......... XXXXXXXX XXXXXXXXXX XXXXXXXX ..........",
+".......... XXXXXX XXXXXXXXXXXX XXXXXX ...........",
+".......... XXXXX XXXXXXXXXXXXXX XXXXX ...........",
+"........... XXXX XXXXXXXXXXXXXX XXXX ............",
+"........... XXXX XXXXXXXXXXXXXX XXX .............",
+"............ XX XXXXXXXXXXXXXXXX XX .............",
+"............ XX XXXXXXXXXXXXXXXX X ..............",
+"............. X XXXXXXXXXXXXXXXX X ..............",
+"............. X XXXXXXXXXXXXXXXX XX .............",
+"............ XXX XXXXXXXXXXXXXX XXX .............",
+"............ XXX XXXXXXXXXXXXXX XXXX ............",
+"........... XXXX XXXXXXXXXXXXXX XXXXX ...........",
+".......... XXXXXX XXXXXXXXXXXX XXXXXX ...........",
+".......... XXXXXXX XXXXXXXXXX XXXXXXXX ..........",
+"......... XXXXXXXXX   XXXX   XXXXXXXXX ..........",
+"......   XXXXXXXXXXXXX    XXXXXXXXXXXX    .......",
+"..... XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX XXX ......",
+"..... XXX          XXXXXXXXXXX         XXX ......",
+"..... XXX ......... XXXXXXXXX ........ XXX ......",
+"......   ........... XXXXXXX ..........   .......",
+".................... XXXXXXX ....................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+"...................... XXX ......................",
+".......................   .......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+".......................   .......................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/cld54.xpm b/pixmaps/cld54.xpm
new file mode 100644
index 0000000..928951c
--- /dev/null
+++ b/pixmaps/cld54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *cld54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"......................................................",
+"..........................  ..........................",
+"........................      ........................",
+".......................   XX   .......................",
+".......................  XXXX  .......................",
+".......................  XXXX  .......................",
+".......................   XX   .......................",
+"........................      ........................",
+".......................  X  X  .......................",
+"......................  XXXXX  .......................",
+"......................  XXXXXX  ......................",
+".....................  XXXXXXX  ......................",
+"......  .............  XXXXXXXX  .............  ......",
+"....      ..........  XXXXXXXXX  ...........      ....",
+"...   XX   .........  XXXXXXXXXX  .........   XX   ...",
+"...  XXXX             XXXXXXXXXXX            XXXX  ...",
+"...  XXXX            XXX      XXX            XXXX  ...",
+"...   XX   XXXXXXXXXXX          XXXXXXXXXXX   XX   ...",
+"....      XXXXXXXXXX     XXXX     XXXXXXXXXX      ....",
+"......    XXXXXXXXX   XXXXXXXXXX   XXXXXXXX  .  ......",
+".........  XXXXXXX   XXXXXXXXXXXX   XXXXXX  ..........",
+".........  XXXXXXX  XXXXXXXXXXXXXX  XXXXXX  ..........",
+"..........  XXXXX  XXXXXXXXXXXXXXXX  XXXX  ...........",
+"..........  XXXXX  XXXXXXXXXXXXXXXX  XXXX  ...........",
+"...........  XXX   XXXXXXXXXXXXXXXX  XXX  ............",
+"...........   XX  XXXXXXXXXXXXXXXXXX  X   ............",
+"............   X  XXXXXXXXXXXXXXXXXX  X  .............",
+".............  X  XXXXXXXXXXXXXXXXXX  X   ............",
+"............   X  XXXXXXXXXXXXXXXXXX  XX  ............",
+"............  XX   XXXXXXXXXXXXXXXX  XXXX  ...........",
+"...........  XXXX  XXXXXXXXXXXXXXXX  XXXXX  ..........",
+"...........  XXXX  XXXXXXXXXXXXXXXX  XXXXX  ..........",
+"..........  XXXXXX  XXXXXXXXXXXXXX  XXXXXXX  .........",
+"..........  XXXXXX   XXXXXXXXXXXX   XXXXXXX  .........",
+"......  .  XXXXXXXX   XXXXXXXXXX   XXXXXXXXX    ......",
+"....      XXXXXXXXXX     XXXX     XXXXXXXXXX      ....",
+"...   XX   XXXXXXXXXXX          XXXXXXXXXXX   XX   ...",
+"...  XXXX           XXXXX    XXXXX           XXXX  ...",
+"...  XXXX            XXXXXXXXXXXX            XXXX  ...",
+"...   XX   .........  XXXXXXXXXX  .........   XX   ...",
+"....      ..........  XXXXXXXXX   ..........      ....",
+"......  .............  XXXXXXX   .............  ......",
+".....................   XXXXXX  ......................",
+"......................  XXXXX   ......................",
+"......................   X  X  .......................",
+".......................       ........................",
+".......................   XX   .......................",
+".......................  XXXX  .......................",
+".......................  XXXX  .......................",
+".......................   XX   .......................",
+"........................      ........................",
+"..........................  ..........................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/cld58.xpm b/pixmaps/cld58.xpm
new file mode 100644
index 0000000..2ce9f30
--- /dev/null
+++ b/pixmaps/cld58.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *cld58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"..........................................................",
+"..........................     ...........................",
+".........................       ..........................",
+".........................  XXX  ..........................",
+".........................  XXX  ..........................",
+".........................  XXX  ..........................",
+".........................       ..........................",
+"..........................     ...........................",
+".........................  XXX  ..........................",
+"........................  XXXXX  .........................",
+"........................  XXXXX  .........................",
+".......................  XXXXXXX  ........................",
+".......................  XXXXXXX  ........................",
+"....     .............  XXXXXXXXX  .............     .....",
+"...       ............  XXXXXXXXX  ............       ....",
+"...  XXX               XXXXXXXXXXX               XXX  ....",
+"...  XXX              XXXXXXXXXXXXX              XXX  ....",
+"...  XXX  XXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXX  XXX  ....",
+"...       XXXXXXXXXXXXX           XXXXXXXXXXXXX       ....",
+"....     XXXXXXXXXXXX     XXXXX     XXXXXXXXXXXX     .....",
+"........  XXXXXXXXXX   XXXXXXXXXXX   XXXXXXXXXX  .........",
+".........  XXXXXXXX   XXXXXXXXXXXXX   XXXXXXXX  ..........",
+".........  XXXXXXX   XXXXXXXXXXXXXXX   XXXXXXX  ..........",
+"..........  XXXXXX  XXXXXXXXXXXXXXXXX  XXXXXX  ...........",
+"..........  XXXXX  XXXXXXXXXXXXXXXXXXX  XXXXX  ...........",
+"...........  XXXX  XXXXXXXXXXXXXXXXXXX  XXXX  ............",
+"............  XXX  XXXXXXXXXXXXXXXXXXX  XXX  .............",
+"............  XX  XXXXXXXXXXXXXXXXXXXXX  XX  .............",
+".............  X  XXXXXXXXXXXXXXXXXXXXX  X  ..............",
+".............  X  XXXXXXXXXXXXXXXXXXXXX  X  ..............",
+".............  X  XXXXXXXXXXXXXXXXXXXXX  X  ..............",
+"............  XX  XXXXXXXXXXXXXXXXXXXXX  XX  .............",
+"...........   XXX  XXXXXXXXXXXXXXXXXXX  XXX   ............",
+"...........  XXXX  XXXXXXXXXXXXXXXXXXX  XXXX  ............",
+"..........  XXXXX  XXXXXXXXXXXXXXXXXXX  XXXXX  ...........",
+"..........  XXXXXX  XXXXXXXXXXXXXXXXX  XXXXXX  ...........",
+".........  XXXXXXX   XXXXXXXXXXXXXXX   XXXXXXX  ..........",
+".........  XXXXXXXX   XXXXXXXXXXXXX   XXXXXXXX  ..........",
+"........  XXXXXXXXXX   XXXXXXXXXXX   XXXXXXXXXX  .........",
+"....     XXXXXXXXXXXX     XXXXX     XXXXXXXXXXXX     .....",
+"...       XXXXXXXXXXXXX           XXXXXXXXXXXXX       ....",
+"...  XXX  XXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXX  XXX  ....",
+"...  XXX              XXXXXXXXXXXXX              XXX  ....",
+"...  XXX               XXXXXXXXXXX               XXX  ....",
+"...       ............  XXXXXXXXX  ............       ....",
+"....     ..............  XXXXXXX  ..............     .....",
+".......................  XXXXXXX  ........................",
+"........................  XXXXX  .........................",
+"........................  XXXXX  .........................",
+".........................  XXX  ..........................",
+"..........................     ...........................",
+".........................       ..........................",
+".........................  XXX  ..........................",
+".........................  XXX  ..........................",
+".........................  XXX  ..........................",
+".........................       ..........................",
+"..........................     ...........................",
+".........................................................."
+};
diff --git a/pixmaps/cld64.xpm b/pixmaps/cld64.xpm
new file mode 100644
index 0000000..7158d2b
--- /dev/null
+++ b/pixmaps/cld64.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char *cld64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+"...............................  ...............................",
+".............................      .............................",
+"............................   XX   ............................",
+"............................  XXXX  ............................",
+"............................  XXXX  ............................",
+"............................   XX   ............................",
+".............................      .............................",
+"..............................    ..............................",
+".............................  XX  .............................",
+"............................  XXXX  ............................",
+"............................  XXXX  ............................",
+"...........................  XXXXXX  ...........................",
+".......  ..................  XXXXXX  ..................  .......",
+".....      ...............  XXXXXXXX  ...............      .....",
+"....   XX   .............  XXXXXXXXXX  .............   XX   ....",
+"....  XXXX                 XXXXXXXXXX                 XXXX  ....",
+"....  XXXX                XXXXXXXXXXXX                XXXX  ....",
+"....   XX   XXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXX   XX   ....",
+".....      XXXXXXXXXXXXXXX            XXXXXXXXXXXXXXX      .....",
+"......    XXXXXXXXXXXXXXX     XXXX     XXXXXXXXXXXXXXX    ......",
+".........  XXXXXXXXXXXX    XXXXXXXXXX    XXXXXXXXXXXX  .........",
+"..........  XXXXXXXXXX   XXXXXXXXXXXXXX   XXXXXXXXXX  ..........",
+"..........  XXXXXXXXXX  XXXXXXXXXXXXXXXX  XXXXXXXXXX  ..........",
+"...........  XXXXXXXX  XXXXXXXXXXXXXXXXXX  XXXXXXXX  ...........",
+"............  XXXXXX   XXXXXXXXXXXXXXXXXX   XXXXXX  ............",
+"............  XXXXXX  XXXXXXXXXXXXXXXXXXXX  XXXXXX  ............",
+".............  XXXXX  XXXXXXXXXXXXXXXXXXXX  XXXXX  .............",
+".............  XXXXX XXXXXXXXXXXXXXXXXXXXXX XXXXX  .............",
+"..............  XXX  XXXXXXXXXXXXXXXXXXXXXX  XXX  ..............",
+"...............  XX  XXXXXXXXXXXXXXXXXXXXXX  XX  ...............",
+"...............   X  XXXXXXXXXXXXXXXXXXXXXX  X   ...............",
+"...............  XX  XXXXXXXXXXXXXXXXXXXXXX  XX  ...............",
+"..............  XXXX XXXXXXXXXXXXXXXXXXXXXX XXXX  ..............",
+"..............  XXXX  XXXXXXXXXXXXXXXXXXXX  XXXX  ..............",
+".............  XXXXX  XXXXXXXXXXXXXXXXXXXX  XXXXX  .............",
+"............  XXXXXX   XXXXXXXXXXXXXXXXXX   XXXXXX  ............",
+"............  XXXXXXX  XXXXXXXXXXXXXXXXXX  XXXXXXX  ............",
+"...........  XXXXXXXXX  XXXXXXXXXXXXXXXX  XXXXXXXXX  ...........",
+"...........  XXXXXXXXX   XXXXXXXXXXXXXX   XXXXXXXXX  ...........",
+".......  .  XXXXXXXXXXX    XXXXXXXXXX    XXXXXXXXXXX  .  .......",
+".....      XXXXXXXXXXXXXX     XXXX     XXXXXXXXXXXXXX      .....",
+"....   XX   XXXXXXXXXXXXXX            XXXXXXXXXXXXXX   XX   ....",
+"....  XXXX               XXXXX    XXXXX               XXXX  ....",
+"....  XXXX                XXXXXXXXXXXX                XXXX  ....",
+"....   XX   ............  XXXXXXXXXXXX  ............   XX   ....",
+".....      ..............  XXXXXXXXXX  ..............      .....",
+"......    ...............  XXXXXXXXXX  ...............    ......",
+"..........................  XXXXXXXX  ..........................",
+"...........................  XXXXXX  ...........................",
+"...........................  XXXXXX  ...........................",
+"............................  X  X  ............................",
+".............................      .............................",
+"............................   XX   ............................",
+"............................  XXXX  ............................",
+"............................  XXXX  ............................",
+"............................   XX   ............................",
+".............................      .............................",
+"..............................    ..............................",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/cld72.xpm b/pixmaps/cld72.xpm
new file mode 100644
index 0000000..4870425
--- /dev/null
+++ b/pixmaps/cld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *cld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................     .................................",
+".................................       ................................",
+"................................   XXX   ...............................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+"................................   XXX   ...............................",
+".................................       ................................",
+"..................................      ................................",
+".................................   XX  ................................",
+"................................   XXX   ...............................",
+"................................  XXXXX  ...............................",
+"...............................   XXXXX   ..............................",
+".........     ................   XXXXXXX  ..............................",
+"........       ...............  XXXXXXXXX  ...............     .........",
+".......   XXX   .............   XXXXXXXXX  ..............       ........",
+".......  XXXXX  ............   XXXXXXXXXXX  ............   XXX   .......",
+".......  XXXXX                 XXXXXXXXXXX                XXXXX  .......",
+".......  XXXXX                XXXXXXXXXXXXX               XXXXX  .......",
+".......   XXX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXX  .......",
+"........       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XXX   .......",
+".........       XXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXX       ........",
+"..............  XXXXXXXXXXXXXXX           XXXXXXXXXXXXXX       .........",
+"..............   XXXXXXXXXXXXX    XXXXX    XXXXXXXXXXXXX  ..............",
+"...............  XXXXXXXXXXXX   XXXXXXXXX   XXXXXXXXXXX   ..............",
+"...............   XXXXXXXXXX   XXXXXXXXXXX   XXXXXXXXXX  ...............",
+"................  XXXXXXXXX   XXXXXXXXXXXXX   XXXXXXXX   ...............",
+"................   XXXXXXXX   XXXXXXXXXXXXXX   XXXXXXX  ................",
+".................  XXXXXXX   XXXXXXXXXXXXXXXX  XXXXXX   ................",
+".................   XXXXXX  XXXXXXXXXXXXXXXXX   XXXXX  .................",
+"..................  XXXXX   XXXXXXXXXXXXXXXXXX  XXXX   .................",
+"..................   XXXX  XXXXXXXXXXXXXXXXXXX  XXXX  ..................",
+"...................   XXX  XXXXXXXXXXXXXXXXXXX  XXX   ..................",
+"...................   XXX  XXXXXXXXXXXXXXXXXXX  XXX  ...................",
+"..................   XXXX  XXXXXXXXXXXXXXXXXXX  XXXX  ..................",
+"..................  XXXXX   XXXXXXXXXXXXXXXXX   XXXX  ..................",
+".................   XXXXXX  XXXXXXXXXXXXXXXXX  XXXXXX  .................",
+".................  XXXXXXX  XXXXXXXXXXXXXXXXX  XXXXXX  .................",
+"................   XXXXXXXX  XXXXXXXXXXXXXXX  XXXXXXXX  ................",
+"...............   XXXXXXXXX   XXXXXXXXXXXXX   XXXXXXXX  ................",
+"...............   XXXXXXXXXX   XXXXXXXXXXX   XXXXXXXXX   ...............",
+"..............   XXXXXXXXXXXX   XXXXXXXXX   XXXXXXXXXXX  ...............",
+".........        XXXXXXXXXXXXX    XXXXX   XXXXXXXXXXXXX      ...........",
+"........        XXXXXXXXXXXXXXX           XXXXXXXXXXXXX       ..........",
+".......   XXX   XXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXX   XXX   .........",
+".......  XXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXX  .........",
+".......  XXXXX               XXXXXXXXXXXXXX             XXXXX  .........",
+".......  XXXXX               XXXXXXXXXXXXX              XXXXX  .........",
+".......   XXX   ...........   XXXXXXXXXXXX  ..........   XXX   .........",
+"........       .............  XXXXXXXXXXX   ...........       ..........",
+".........     ..............   XXXXXXXXXX  .............     ...........",
+".............................  XXXXXXXXX   .............................",
+".............................   XXXXXXXX  ..............................",
+"..............................  XXXXXXX   ..............................",
+"..............................   XXXXXX  ...............................",
+"...............................  XXXXX   ...............................",
+"...............................   XXXX  ................................",
+"................................       .................................",
+"................................       .................................",
+"...............................   XXX   ................................",
+"...............................  XXXXX  ................................",
+"...............................  XXXXX  ................................",
+"...............................  XXXXX  ................................",
+"...............................   XXX   ................................",
+"................................       .................................",
+".................................     ..................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/cll33.xpm b/pixmaps/cll33.xpm
new file mode 100644
index 0000000..5d7bf00
--- /dev/null
+++ b/pixmaps/cll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *cll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+"...............  ................",
+".............. XX ...............",
+".............. XX ...............",
+"...............  ................",
+".............. XX ...............",
+"............. XXXX ..............",
+"....  ...... XXXXXX ......  .....",
+"... XX      XXXXXXXX      XX ....",
+"... XX XXXXXXX    XXXXXXX XX ....",
+"....  XXXXXX  XXXX  XXXXXX  .....",
+"...... XXXXX XXXXXX XXXXX .......",
+"...... XXXX XXXXXXXX XXXX .......",
+"....... XXX XXXXXXXX XXX ........",
+"....... XX XXXXXXXXXX XX ........",
+"........ X XXXXXXXXXX X .........",
+"....... XX XXXXXXXXXX XX ........",
+"....... XXX XXXXXXXX XXX ........",
+"...... XXXX XXXXXXXX XXXX .......",
+"...... XXXXX XXXXXX XXXXX .......",
+"....  XXXXXX  XXXX  XXXXXX  .....",
+"... XX XXXXXXX    XXXXXXX XX ....",
+"... XX      XXXXXXXX      XX ....",
+"....  ...... XXXXXX ......  .....",
+"............. XXXX ..............",
+".............. XX ...............",
+"...............  ................",
+".............. XX ...............",
+".............. XX ...............",
+"...............  ................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/cll37.xpm b/pixmaps/cll37.xpm
new file mode 100644
index 0000000..87b0c9a
--- /dev/null
+++ b/pixmaps/cll37.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char *cll37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".....................................",
+".................   .................",
+"................ XXX ................",
+"................ XXX ................",
+"................ XXX ................",
+".................   .................",
+"................ XXX ................",
+"............... XXXXX ...............",
+"...   ......... XXXXX .........   ...",
+".. XXX ....... XXXXXXX ....... XXX ..",
+".. XXX        XXXXXXXXX        XXX ..",
+".. XXX XXXXXXXXX     XXXXXXXXX XXX ..",
+"...   XXXXXXXX  XXXXX  XXXXXXXX   ...",
+"...... XXXXXX XXXXXXXXX XXXXXX ......",
+"....... XXXX XXXXXXXXXXX XXXX .......",
+"....... XXXX XXXXXXXXXXX XXXX .......",
+"........ XX XXXXXXXXXXXXX XX ........",
+"........ XX XXXXXXXXXXXXX XX ........",
+"......... X XXXXXXXXXXXXX X .........",
+"........ XX XXXXXXXXXXXXX XX ........",
+"........ XX XXXXXXXXXXXXX XX ........",
+"....... XXXX XXXXXXXXXXX XXXX .......",
+"....... XXXX XXXXXXXXXXX XXXX .......",
+"...... XXXXXX XXXXXXXXX XXXXXX ......",
+"...   XXXXXXXX  XXXXX  XXXXXXXX   ...",
+".. XXX XXXXXXXXX     XXXXXXXXX XXX ..",
+".. XXX        XXXXXXXXX        XXX ..",
+".. XXX ....... XXXXXXX ....... XXX ..",
+"...   ......... XXXXX .........   ...",
+"............... XXXXX ...............",
+"................ XXX ................",
+".................   .................",
+"................ XXX ................",
+"................ XXX ................",
+"................ XXX ................",
+".................   .................",
+"....................................."
+};
diff --git a/pixmaps/cll40.xpm b/pixmaps/cll40.xpm
new file mode 100644
index 0000000..6ab7c22
--- /dev/null
+++ b/pixmaps/cll40.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char *cll40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................",
+"...................   ..................",
+".................. XXX .................",
+".................. XXX .................",
+".................. XXX .................",
+"...................   ..................",
+"................... X ..................",
+".................. XXX .................",
+".................. XXX .................",
+".....   ......... XXXXX ........   .....",
+".... XXX         XXXXXXX        XXX ....",
+".... XXX XXXXXXXXXXXXXXXXXXXXXX XXX ....",
+".... XXX XXXXXXXX      XXXXXXXX XXX ....",
+".....   XXXXXXXX XXXXXX XXXXXXXX   .....",
+"........ XXXXXX XXXXXXXX XXXXXXX .......",
+"......... XXXX XXXXXXXXXX XXXXX ........",
+"......... XXX XXXXXXXXXXX XXXXX ........",
+".......... XX XXXXXXXXXXXX XXX .........",
+"........... X XXXXXXXXXXXX XX ..........",
+"........... X XXXXXXXXXXXX X ...........",
+".......... XX XXXXXXXXXXXX X ...........",
+"......... XXX XXXXXXXXXXX XXX ..........",
+"........ XXXXX XXXXXXXXXX XXXX .........",
+"........ XXXXXX XXXXXXXX XXXXX .........",
+"....... XXXXXXXX XXXXXX XXXXXXX ........",
+".....   XXXXXXXXX      XXXXXXXXX   .....",
+".... XXX XXXXXXXXXXXXXXXXXXXXXX XXX ....",
+".... XXX         XXXXXXX        XXX ....",
+".... XXX ........ XXXXXX ...... XXX ....",
+".....   ......... XXXXX ........   .....",
+".................. XXX .................",
+".................. XXX .................",
+"................... X ..................",
+"...................   ..................",
+".................. XXX .................",
+".................. XXX .................",
+".................. XXX .................",
+"...................   ..................",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/cll45.xpm b/pixmaps/cll45.xpm
new file mode 100644
index 0000000..1af3623
--- /dev/null
+++ b/pixmaps/cll45.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *cll45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".............................................",
+".............................................",
+".....................   .....................",
+".................... XXX ....................",
+".................... XXX ....................",
+".................... XXX ....................",
+".....................   .....................",
+".................... XXX ....................",
+"................... XXXXX ...................",
+"................... XXXXX ...................",
+".................. XXXXXXX ..................",
+"....   ........... XXXXXXX ...........   ....",
+"... XXX ......... XXXXXXXXX ......... XXX ...",
+"... XXX          XXXXXXXXXXX          XXX ...",
+"... XXX XXXXXXXXXXXX     XXXXXXXXXXXX XXX ...",
+"....   XXXXXXXXXXX  XXXXX  XXXXXXXXXXX   ....",
+"....... XXXXXXXXX XXXXXXXXX XXXXXXXXX .......",
+"........ XXXXXXX XXXXXXXXXXX XXXXXXX ........",
+"........ XXXXXX XXXXXXXXXXXXX XXXXXX ........",
+"......... XXXXX XXXXXXXXXXXXX XXXXX .........",
+"......... XXXX XXXXXXXXXXXXXXX XXXX .........",
+".......... XXX XXXXXXXXXXXXXXX XXX ..........",
+"........... XX XXXXXXXXXXXXXXX XX ...........",
+".......... XXX XXXXXXXXXXXXXXX XXX ..........",
+"......... XXXX XXXXXXXXXXXXXXX XXXX .........",
+"......... XXXXX XXXXXXXXXXXXX XXXXX .........",
+"........ XXXXXX XXXXXXXXXXXXX XXXXXX ........",
+"........ XXXXXXX XXXXXXXXXXX XXXXXXX ........",
+"....... XXXXXXXXX XXXXXXXXX XXXXXXXXX .......",
+"....   XXXXXXXXXXX  XXXXX  XXXXXXXXXXX   ....",
+"... XXX XXXXXXXXXXXX     XXXXXXXXXXXX XXX ...",
+"... XXX          XXXXXXXXXXX          XXX ...",
+"... XXX ......... XXXXXXXXX ......... XXX ...",
+"....   ........... XXXXXXX ...........   ....",
+".................. XXXXXXX ..................",
+"................... XXXXX ...................",
+"................... XXXXX ...................",
+".................... XXX ....................",
+".....................   .....................",
+".................... XXX ....................",
+".................... XXX ....................",
+".................... XXX ....................",
+".....................   .....................",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/cll49.xpm b/pixmaps/cll49.xpm
new file mode 100644
index 0000000..410d59f
--- /dev/null
+++ b/pixmaps/cll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *cll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".......................   .......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+".......................   .......................",
+"...................... XXX ......................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+".................... XXXXXXX ....................",
+".................... XXXXXXX ....................",
+"......   .......... XXXXXXXXX .........   .......",
+"..... XXX          XXXXXXXXXXX         XXX ......",
+"..... XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX XXX ......",
+"..... XXX XXXXXXXXXXXX    XXXXXXXXXXXX XXX ......",
+"......   XXXXXXXXXX   XXXX   XXXXXXXXXX   .......",
+"......... XXXXXXXX XXXXXXXXXX XXXXXXXX ..........",
+".......... XXXXXX XXXXXXXXXXXX XXXXXX ...........",
+".......... XXXXX XXXXXXXXXXXXXX XXXXX ...........",
+"........... XXXX XXXXXXXXXXXXXX XXXX ............",
+"........... XXXX XXXXXXXXXXXXXX XXX .............",
+"............ XX XXXXXXXXXXXXXXXX XX .............",
+"............ XX XXXXXXXXXXXXXXXX X ..............",
+"............. X XXXXXXXXXXXXXXXX X ..............",
+"............. X XXXXXXXXXXXXXXXX XX .............",
+"............ XXX XXXXXXXXXXXXXX XXX .............",
+"............ XXX XXXXXXXXXXXXXX XXXX ............",
+"........... XXXX XXXXXXXXXXXXXX XXXXX ...........",
+".......... XXXXXX XXXXXXXXXXXX XXXXXX ...........",
+".......... XXXXXXX XXXXXXXXXX XXXXXXXX ..........",
+"......... XXXXXXXXX   XXXX   XXXXXXXXX ..........",
+"......   XXXXXXXXXXXXX    XXXXXXXXXXXX    .......",
+"..... XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX XXX ......",
+"..... XXX          XXXXXXXXXXX         XXX ......",
+"..... XXX ......... XXXXXXXXX ........ XXX ......",
+"......   ........... XXXXXXX ..........   .......",
+".................... XXXXXXX ....................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+"...................... XXX ......................",
+".......................   .......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+".......................   .......................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/cll54.xpm b/pixmaps/cll54.xpm
new file mode 100644
index 0000000..a25a2ab
--- /dev/null
+++ b/pixmaps/cll54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *cll54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"......................................................",
+"..........................  ..........................",
+"........................      ........................",
+".......................   XX   .......................",
+".......................  XXXX  .......................",
+".......................  XXXX  .......................",
+".......................   XX   .......................",
+"........................      ........................",
+".......................  X  X  .......................",
+"......................  XXXXX  .......................",
+"......................  XXXXXX  ......................",
+".....................  XXXXXXX  ......................",
+"......  .............  XXXXXXXX  .............  ......",
+"....      ..........  XXXXXXXXX  ...........      ....",
+"...   XX   .........  XXXXXXXXXX  .........   XX   ...",
+"...  XXXX             XXXXXXXXXXX            XXXX  ...",
+"...  XXXX            XXX      XXX            XXXX  ...",
+"...   XX   XXXXXXXXXXX          XXXXXXXXXXX   XX   ...",
+"....      XXXXXXXXXX     XXXX     XXXXXXXXXX      ....",
+"......    XXXXXXXXX   XXXXXXXXXX   XXXXXXXX  .  ......",
+".........  XXXXXXX   XXXXXXXXXXXX   XXXXXX  ..........",
+".........  XXXXXXX  XXXXXXXXXXXXXX  XXXXXX  ..........",
+"..........  XXXXX  XXXXXXXXXXXXXXXX  XXXX  ...........",
+"..........  XXXXX  XXXXXXXXXXXXXXXX  XXXX  ...........",
+"...........  XXX   XXXXXXXXXXXXXXXX  XXX  ............",
+"...........   XX  XXXXXXXXXXXXXXXXXX  X   ............",
+"............   X  XXXXXXXXXXXXXXXXXX  X  .............",
+".............  X  XXXXXXXXXXXXXXXXXX  X   ............",
+"............   X  XXXXXXXXXXXXXXXXXX  XX  ............",
+"............  XX   XXXXXXXXXXXXXXXX  XXXX  ...........",
+"...........  XXXX  XXXXXXXXXXXXXXXX  XXXXX  ..........",
+"...........  XXXX  XXXXXXXXXXXXXXXX  XXXXX  ..........",
+"..........  XXXXXX  XXXXXXXXXXXXXX  XXXXXXX  .........",
+"..........  XXXXXX   XXXXXXXXXXXX   XXXXXXX  .........",
+"......  .  XXXXXXXX   XXXXXXXXXX   XXXXXXXXX    ......",
+"....      XXXXXXXXXX     XXXX     XXXXXXXXXX      ....",
+"...   XX   XXXXXXXXXXX          XXXXXXXXXXX   XX   ...",
+"...  XXXX           XXXXX    XXXXX           XXXX  ...",
+"...  XXXX            XXXXXXXXXXXX            XXXX  ...",
+"...   XX   .........  XXXXXXXXXX  .........   XX   ...",
+"....      ..........  XXXXXXXXX   ..........      ....",
+"......  .............  XXXXXXX   .............  ......",
+".....................   XXXXXX  ......................",
+"......................  XXXXX   ......................",
+"......................   X  X  .......................",
+".......................       ........................",
+".......................   XX   .......................",
+".......................  XXXX  .......................",
+".......................  XXXX  .......................",
+".......................   XX   .......................",
+"........................      ........................",
+"..........................  ..........................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/cll58.xpm b/pixmaps/cll58.xpm
new file mode 100644
index 0000000..40fbc26
--- /dev/null
+++ b/pixmaps/cll58.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *cll58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"..........................................................",
+"..........................     ...........................",
+".........................       ..........................",
+".........................  XXX  ..........................",
+".........................  XXX  ..........................",
+".........................  XXX  ..........................",
+".........................       ..........................",
+"..........................     ...........................",
+".........................  XXX  ..........................",
+"........................  XXXXX  .........................",
+"........................  XXXXX  .........................",
+".......................  XXXXXXX  ........................",
+".......................  XXXXXXX  ........................",
+"....     .............  XXXXXXXXX  .............     .....",
+"...       ............  XXXXXXXXX  ............       ....",
+"...  XXX               XXXXXXXXXXX               XXX  ....",
+"...  XXX              XXXXXXXXXXXXX              XXX  ....",
+"...  XXX  XXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXX  XXX  ....",
+"...       XXXXXXXXXXXXX           XXXXXXXXXXXXX       ....",
+"....     XXXXXXXXXXXX     XXXXX     XXXXXXXXXXXX     .....",
+"........  XXXXXXXXXX   XXXXXXXXXXX   XXXXXXXXXX  .........",
+".........  XXXXXXXX   XXXXXXXXXXXXX   XXXXXXXX  ..........",
+".........  XXXXXXX   XXXXXXXXXXXXXXX   XXXXXXX  ..........",
+"..........  XXXXXX  XXXXXXXXXXXXXXXXX  XXXXXX  ...........",
+"..........  XXXXX  XXXXXXXXXXXXXXXXXXX  XXXXX  ...........",
+"...........  XXXX  XXXXXXXXXXXXXXXXXXX  XXXX  ............",
+"............  XXX  XXXXXXXXXXXXXXXXXXX  XXX  .............",
+"............  XX  XXXXXXXXXXXXXXXXXXXXX  XX  .............",
+".............  X  XXXXXXXXXXXXXXXXXXXXX  X  ..............",
+".............  X  XXXXXXXXXXXXXXXXXXXXX  X  ..............",
+".............  X  XXXXXXXXXXXXXXXXXXXXX  X  ..............",
+"............  XX  XXXXXXXXXXXXXXXXXXXXX  XX  .............",
+"...........   XXX  XXXXXXXXXXXXXXXXXXX  XXX   ............",
+"...........  XXXX  XXXXXXXXXXXXXXXXXXX  XXXX  ............",
+"..........  XXXXX  XXXXXXXXXXXXXXXXXXX  XXXXX  ...........",
+"..........  XXXXXX  XXXXXXXXXXXXXXXXX  XXXXXX  ...........",
+".........  XXXXXXX   XXXXXXXXXXXXXXX   XXXXXXX  ..........",
+".........  XXXXXXXX   XXXXXXXXXXXXX   XXXXXXXX  ..........",
+"........  XXXXXXXXXX   XXXXXXXXXXX   XXXXXXXXXX  .........",
+"....     XXXXXXXXXXXX     XXXXX     XXXXXXXXXXXX     .....",
+"...       XXXXXXXXXXXXX           XXXXXXXXXXXXX       ....",
+"...  XXX  XXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXX  XXX  ....",
+"...  XXX              XXXXXXXXXXXXX              XXX  ....",
+"...  XXX               XXXXXXXXXXX               XXX  ....",
+"...       ............  XXXXXXXXX  ............       ....",
+"....     ..............  XXXXXXX  ..............     .....",
+".......................  XXXXXXX  ........................",
+"........................  XXXXX  .........................",
+"........................  XXXXX  .........................",
+".........................  XXX  ..........................",
+"..........................     ...........................",
+".........................       ..........................",
+".........................  XXX  ..........................",
+".........................  XXX  ..........................",
+".........................  XXX  ..........................",
+".........................       ..........................",
+"..........................     ...........................",
+".........................................................."
+};
diff --git a/pixmaps/cll64.xpm b/pixmaps/cll64.xpm
new file mode 100644
index 0000000..bc26cc3
--- /dev/null
+++ b/pixmaps/cll64.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char *cll64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+"...............................  ...............................",
+".............................      .............................",
+"............................   XX   ............................",
+"............................  XXXX  ............................",
+"............................  XXXX  ............................",
+"............................   XX   ............................",
+".............................      .............................",
+"..............................    ..............................",
+".............................  XX  .............................",
+"............................  XXXX  ............................",
+"............................  XXXX  ............................",
+"...........................  XXXXXX  ...........................",
+".......  ..................  XXXXXX  ..................  .......",
+".....      ...............  XXXXXXXX  ...............      .....",
+"....   XX   .............  XXXXXXXXXX  .............   XX   ....",
+"....  XXXX                 XXXXXXXXXX                 XXXX  ....",
+"....  XXXX                XXXXXXXXXXXX                XXXX  ....",
+"....   XX   XXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXX   XX   ....",
+".....      XXXXXXXXXXXXXXX            XXXXXXXXXXXXXXX      .....",
+"......    XXXXXXXXXXXXXXX     XXXX     XXXXXXXXXXXXXXX    ......",
+".........  XXXXXXXXXXXX    XXXXXXXXXX    XXXXXXXXXXXX  .........",
+"..........  XXXXXXXXXX   XXXXXXXXXXXXXX   XXXXXXXXXX  ..........",
+"..........  XXXXXXXXXX  XXXXXXXXXXXXXXXX  XXXXXXXXXX  ..........",
+"...........  XXXXXXXX  XXXXXXXXXXXXXXXXXX  XXXXXXXX  ...........",
+"............  XXXXXX   XXXXXXXXXXXXXXXXXX   XXXXXX  ............",
+"............  XXXXXX  XXXXXXXXXXXXXXXXXXXX  XXXXXX  ............",
+".............  XXXXX  XXXXXXXXXXXXXXXXXXXX  XXXXX  .............",
+".............  XXXXX XXXXXXXXXXXXXXXXXXXXXX XXXXX  .............",
+"..............  XXX  XXXXXXXXXXXXXXXXXXXXXX  XXX  ..............",
+"...............  XX  XXXXXXXXXXXXXXXXXXXXXX  XX  ...............",
+"...............   X  XXXXXXXXXXXXXXXXXXXXXX  X   ...............",
+"...............  XX  XXXXXXXXXXXXXXXXXXXXXX  XX  ...............",
+"..............  XXXX XXXXXXXXXXXXXXXXXXXXXX XXXX  ..............",
+"..............  XXXX  XXXXXXXXXXXXXXXXXXXX  XXXX  ..............",
+".............  XXXXX  XXXXXXXXXXXXXXXXXXXX  XXXXX  .............",
+"............  XXXXXX   XXXXXXXXXXXXXXXXXX   XXXXXX  ............",
+"............  XXXXXXX  XXXXXXXXXXXXXXXXXX  XXXXXXX  ............",
+"...........  XXXXXXXXX  XXXXXXXXXXXXXXXX  XXXXXXXXX  ...........",
+"...........  XXXXXXXXX   XXXXXXXXXXXXXX   XXXXXXXXX  ...........",
+".......  .  XXXXXXXXXXX    XXXXXXXXXX    XXXXXXXXXXX  .  .......",
+".....      XXXXXXXXXXXXXX     XXXX     XXXXXXXXXXXXXX      .....",
+"....   XX   XXXXXXXXXXXXXX            XXXXXXXXXXXXXX   XX   ....",
+"....  XXXX               XXXXX    XXXXX               XXXX  ....",
+"....  XXXX                XXXXXXXXXXXX                XXXX  ....",
+"....   XX   ............  XXXXXXXXXXXX  ............   XX   ....",
+".....      ..............  XXXXXXXXXX  ..............      .....",
+"......    ...............  XXXXXXXXXX  ...............    ......",
+"..........................  XXXXXXXX  ..........................",
+"...........................  XXXXXX  ...........................",
+"...........................  XXXXXX  ...........................",
+"............................  X  X  ............................",
+".............................      .............................",
+"............................   XX   ............................",
+"............................  XXXX  ............................",
+"............................  XXXX  ............................",
+"............................   XX   ............................",
+".............................      .............................",
+"..............................    ..............................",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/cll72.xpm b/pixmaps/cll72.xpm
new file mode 100644
index 0000000..143cd94
--- /dev/null
+++ b/pixmaps/cll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *cll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................     .................................",
+".................................       ................................",
+"................................   XXX   ...............................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+"................................   XXX   ...............................",
+".................................       ................................",
+"..................................      ................................",
+".................................   XX  ................................",
+"................................   XXX   ...............................",
+"................................  XXXXX  ...............................",
+"...............................   XXXXX   ..............................",
+".........     ................   XXXXXXX  ..............................",
+"........       ...............  XXXXXXXXX  ...............     .........",
+".......   XXX   .............   XXXXXXXXX  ..............       ........",
+".......  XXXXX  ............   XXXXXXXXXXX  ............   XXX   .......",
+".......  XXXXX                 XXXXXXXXXXX                XXXXX  .......",
+".......  XXXXX                XXXXXXXXXXXXX               XXXXX  .......",
+".......   XXX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXX  .......",
+"........       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XXX   .......",
+".........       XXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXX       ........",
+"..............  XXXXXXXXXXXXXXX           XXXXXXXXXXXXXX       .........",
+"..............   XXXXXXXXXXXXX    XXXXX    XXXXXXXXXXXXX  ..............",
+"...............  XXXXXXXXXXXX   XXXXXXXXX   XXXXXXXXXXX   ..............",
+"...............   XXXXXXXXXX   XXXXXXXXXXX   XXXXXXXXXX  ...............",
+"................  XXXXXXXXX   XXXXXXXXXXXXX   XXXXXXXX   ...............",
+"................   XXXXXXXX   XXXXXXXXXXXXXX   XXXXXXX  ................",
+".................  XXXXXXX   XXXXXXXXXXXXXXXX  XXXXXX   ................",
+".................   XXXXXX  XXXXXXXXXXXXXXXXX   XXXXX  .................",
+"..................  XXXXX   XXXXXXXXXXXXXXXXXX  XXXX   .................",
+"..................   XXXX  XXXXXXXXXXXXXXXXXXX  XXXX  ..................",
+"...................   XXX  XXXXXXXXXXXXXXXXXXX  XXX   ..................",
+"...................   XXX  XXXXXXXXXXXXXXXXXXX  XXX  ...................",
+"..................   XXXX  XXXXXXXXXXXXXXXXXXX  XXXX  ..................",
+"..................  XXXXX   XXXXXXXXXXXXXXXXX   XXXX  ..................",
+".................   XXXXXX  XXXXXXXXXXXXXXXXX  XXXXXX  .................",
+".................  XXXXXXX  XXXXXXXXXXXXXXXXX  XXXXXX  .................",
+"................   XXXXXXXX  XXXXXXXXXXXXXXX  XXXXXXXX  ................",
+"...............   XXXXXXXXX   XXXXXXXXXXXXX   XXXXXXXX  ................",
+"...............   XXXXXXXXXX   XXXXXXXXXXX   XXXXXXXXX   ...............",
+"..............   XXXXXXXXXXXX   XXXXXXXXX   XXXXXXXXXXX  ...............",
+".........        XXXXXXXXXXXXX    XXXXX   XXXXXXXXXXXXX      ...........",
+"........        XXXXXXXXXXXXXXX           XXXXXXXXXXXXX       ..........",
+".......   XXX   XXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXX   XXX   .........",
+".......  XXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXX  .........",
+".......  XXXXX               XXXXXXXXXXXXXX             XXXXX  .........",
+".......  XXXXX               XXXXXXXXXXXXX              XXXXX  .........",
+".......   XXX   ...........   XXXXXXXXXXXX  ..........   XXX   .........",
+"........       .............  XXXXXXXXXXX   ...........       ..........",
+".........     ..............   XXXXXXXXXX  .............     ...........",
+".............................  XXXXXXXXX   .............................",
+".............................   XXXXXXXX  ..............................",
+"..............................  XXXXXXX   ..............................",
+"..............................   XXXXXX  ...............................",
+"...............................  XXXXX   ...............................",
+"...............................   XXXX  ................................",
+"................................       .................................",
+"................................       .................................",
+"...............................   XXX   ................................",
+"...............................  XXXXX  ................................",
+"...............................  XXXXX  ................................",
+"...............................  XXXXX  ................................",
+"...............................   XXX   ................................",
+"................................       .................................",
+".................................     ..................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/convert.c b/pixmaps/convert.c
new file mode 100644
index 0000000..dcdcd47
--- /dev/null
+++ b/pixmaps/convert.c
@@ -0,0 +1,143 @@
+#include <stdio.h>
+
+// [HGM] This program converts the WinBoard monochrome .bmp piece-symbol bitmap files
+//       to .xpm C-source files suitable for inclusion in xboard as buit-in pixmap.
+//       It tries all bitmaps in bulk. Run it once in an empty subdirectory 'pixmaps'of the
+//       root directory of the source tree, and it will fill it with pixmaps.
+//       It overwrites any pixmaps of the same name that already exist. So if you want to
+//       keep the pixmaps you already have, move them elsewhere, run convert, and move them back.
+
+
+int sizeList[] = { 21, 25, 29, 33, 37, 40, 45, 49, 54, 58, 64, 72, 80, 87, 95, 108, 116, 129 };
+char *(pieceList[]) = {"p", "n", "b", "r", "q", "f", "e", "as", "c", "w", "m", 
+		       "o", "h", "a", "dk", "g", "d", "v", "l", "s", "u", "k", 
+		       "wp", "wl", "wn", "ws", "cv", NULL };
+char kindList[] = "sow";
+
+void Load(FILE *f, char data[130][130], char*name)
+{
+	int i, j, k; char h, w, c;
+
+	if(fscanf(f, "BM%c", &i) != 1) { printf("%s does not have bitmap format\n", name); exit(0); }
+	for(i=0; i<15; i++) fgetc(f); fscanf(f, "%c%c%c%c%c", &h, &i, &i, &i, &w);
+	for(i=0; i<39; i++) fgetc(f); // no checking is done to see if the format is as we expect!!!
+
+// printf("h=%d, w=%d\n", h, w);
+	for(i=0; i<h; i++) {
+		for(j=0; j<w; j+=32) {
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+			    data[i][j+k] = c&0x80; c <<= 1;
+			}
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+			    data[i][j+k+8] = c&0x80; c <<= 1;
+			}
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+			    data[i][j+k+16] = c&0x80; c <<= 1;
+			}
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+			    data[i][j+k+24] = c&0x80; c <<= 1;
+			}
+		}
+	}
+
+	fclose(f);
+}
+
+void Paint(char dest[130][130], char src[130][130], int size, char c)
+{	// copy monochrome pixmap to destination as if (transparent, c)
+	int i, j;
+
+	for(i=0; i<size; i++) for(j=0; j<size; j++) if(!src[i][j]) dest[i][j] = c;
+}
+
+void Save(FILE *f, char *name, char data[130][130], int size, char *col, int depth)
+{	// write out data in source format for d x d pixmap with specified square color
+	int i, j;
+
+	fprintf(f, "/* XPM */\n");
+	fprintf(f, "static char *%s[] = {\n", name);
+	fprintf(f, "/* columns rows colors chars-per-pixel */\n");
+	fprintf(f, "\"%d %d %d 1\",\n", size, size, depth);
+	fprintf(f, "\"  c black s dark_piece\",\n");
+	fprintf(f, "\". %s\",\n", col);
+	if(depth==3) fprintf(f, "\"X c white s light_piece\",\n");
+	fprintf(f, "/* pixels */\n");
+	for(i=size-1; i>=0; i--) {
+		fprintf(f, "\"%s\"%s\n", data[i], i==0 ? "" : ",");
+	}
+	fprintf(f, "};\n");
+
+	fclose(f);
+}
+
+
+char data[130][130], oData[130][130], sData[130][130], wData[130][130];
+
+main(int argc, char **argv)
+{
+	int i, j, k, d, cnt, p, s, t; char c, h, w, *name, buf[80];
+	FILE *f;
+
+    for(s=0; s<18; s++) for(p=0; pieceList[p] != NULL; p++) {
+
+	// Load the 3 kinds of Windows monochrome bitmaps (outline, solid, white fill)
+
+	sprintf(buf, "../winboard/bitmaps/%s%d%c.bmp", pieceList[p], sizeList[s], 'o');
+	printf("try %s\n", buf);
+	f = fopen(buf, "rb");
+	if(f == NULL) continue;
+	Load(f, oData, buf);
+
+	sprintf(buf, "../winboard/bitmaps/%s%d%c.bmp", pieceList[p], sizeList[s], 's');
+	f = fopen(buf, "rb");
+	if(f == NULL) continue;
+	Load(f, sData, buf);
+
+	sprintf(buf, "../winboard/bitmaps/%s%d%c.bmp", pieceList[p], sizeList[s], 'w');
+	if(pieceList[p][0]=='w')
+	sprintf(buf, "../winboard/bitmaps/%s%d%c.bmp", "w", sizeList[s], 'w');
+	f = fopen(buf, "rb");
+	if(f == NULL) continue;
+	Load(f, wData, buf);
+
+	printf("%s loaded\n", buf);
+	// construct pixmaps as character arrays
+	d = sizeList[s];
+	for(i=0; i<d; i++) { for(j=0; j<d; j++) data[i][j] = '.'; data[i][d] = 0; } // fill square
+
+	Paint(data, sData, d, ' '); // overay with solid piece bitmap
+
+	sprintf(buf, "%s%s%d.xpm", pieceList[p], "dd", d);
+	sprintf(name, "%s%s%d", pieceList[p], "dd", d);
+	f = fopen(buf, "w");
+	Save(f, name, data, d, "c green s dark_square", 2);
+
+	sprintf(buf, "%s%s%d.xpm", pieceList[p], "dl", d);
+	sprintf(name, "%s%s%d", pieceList[p], "dl", d);
+	f = fopen(buf, "w");
+	Save(f, name, data, d, "c gray s light_square", 2); // silly duplication; pixmap is te same, but other color
+
+	// now the light piece
+	for(i=0; i<d; i++) { for(j=0; j<d; j++) data[i][j] = '.'; data[i][d] = 0; } // fill square
+
+	Paint(data, wData, d, 'X'); // overay with white-filler piece bitmap
+	Paint(data, oData, d, ' '); // overay with outline piece bitmaps
+
+	sprintf(buf, "%s%s%d.xpm", pieceList[p], "ld", d);
+	sprintf(name, "%s%s%d", pieceList[p], "ld", d);
+	f = fopen(buf, "w");
+	Save(f, name, data, d, "c green s dark_square", 3);
+
+	sprintf(buf, "%s%s%d.xpm", pieceList[p], "ll", d);
+	sprintf(name, "%s%s%d", pieceList[p], "ll", d);
+	f = fopen(buf, "w");
+	Save(f, name, data, d, "c gray s light_square", 3);
+
+	printf("%s saved\n", buf);
+    }
+}
+
diff --git a/pixmaps/cvdd33.xpm b/pixmaps/cvdd33.xpm
new file mode 100644
index 0000000..09b6e5e
--- /dev/null
+++ b/pixmaps/cvdd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *cvdd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+"................... ... .........",
+"..................   .  .........",
+"...............         .........",
+".............  ...   ..  ........",
+"...........  ..       .. ........",
+"........... ..        . . .......",
+".......... ..          .. .......",
+".........  .               ......",
+".........  .     .         ......",
+"......... ..                .....",
+"........  .                 .....",
+"........  .       ..      .. ....",
+"........ ..       ....     . ....",
+"........ ..        ....      ....",
+".......  .          ....    .....",
+".......  .           ...  .......",
+"....... ..            ...........",
+"....... ..            ...........",
+"....... ..             ..........",
+".......                ..........",
+".......                ..........",
+"........ ............. ..........",
+".......                 .........",
+"......                   ........",
+".....  .................  .......",
+".....                     .......",
+".....                     .......",
+".....     ...     ...     .......",
+".....     ...     ...     .......",
+".................................",
+"................................."
+};
diff --git a/pixmaps/cvdd37.xpm b/pixmaps/cvdd37.xpm
new file mode 100644
index 0000000..b0d453c
--- /dev/null
+++ b/pixmaps/cvdd37.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char *cvdd37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".....................................",
+"..................... .... ..........",
+"....................   ..  ..........",
+"....................   .   ..........",
+"................           ..........",
+"...............  ...   ..  ..........",
+"..............  .           .........",
+".............  .        ..  .........",
+"............  .           .  ........",
+"............ ..           .  ........",
+"...........  .                .......",
+"........... ..     .          .......",
+"........... .                  ......",
+".......... ..                  ......",
+".......... ..       ..          .....",
+".......... .        ....     .. .....",
+"............         ....     . .....",
+"......... ..          ....  .   .....",
+"......... ..          .....    ......",
+"......... ..           ..............",
+"......... ..            .............",
+"......... ..             ............",
+"......... ..              ...........",
+"......... .               ...........",
+".........                 ...........",
+".......... .............. ...........",
+".........                  ..........",
+"........                    .........",
+".....................................",
+"......                        .......",
+"......                        .......",
+"......                        .......",
+"......     ....      ....     .......",
+"......     ....      ....     .......",
+"......     ....      ....     .......",
+".....................................",
+"....................................."
+};
diff --git a/pixmaps/cvdd40.xpm b/pixmaps/cvdd40.xpm
new file mode 100644
index 0000000..d1dec06
--- /dev/null
+++ b/pixmaps/cvdd40.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char *cvdd40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................",
+"........................................",
+"...................... .... ............",
+".....................   ..  ............",
+".....................   .   ............",
+"..................          ............",
+"................  ...   ..  ............",
+"............... ..           ...........",
+".............  ..        ..  ...........",
+"............  ..           .  ..........",
+"............ ..            .  ..........",
+"...........  .                 .........",
+"........... ..      .          .........",
+"........... .                   ........",
+".......... ..                   ........",
+".......... ..        ..          .......",
+".......... .         ....     .. .......",
+".......... .          ....     . .......",
+"......... ..           ....  .   .......",
+"......... ..            ....    ........",
+"......... ..             ...............",
+"......... ..              ..............",
+"......... ..               .............",
+"......... ..               .............",
+"......... ..                ............",
+"......... ..                ............",
+"......... ..                ............",
+".........                  .............",
+"..........  ..............  ............",
+".........                    ...........",
+"........                      ..........",
+"....... ...................... .........",
+"......                          ........",
+"......                          ........",
+"......                          ........",
+"......      ....      ....      ........",
+"......      ....      ....      ........",
+"......      ....      ....      ........",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/cvdd45.xpm b/pixmaps/cvdd45.xpm
new file mode 100644
index 0000000..90eebf7
--- /dev/null
+++ b/pixmaps/cvdd45.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *cvdd45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".............................................",
+".............................................",
+".........................  ..... ............",
+".........................  ...   ............",
+"........................    .    ............",
+".....................            ............",
+"...................  ...    ..   ............",
+".................  ..         .   ...........",
+"................  .               ...........",
+"...............  .            .    ..........",
+"..............  .             ..   ..........",
+".............. ..              ..  ..........",
+".............  .                    .........",
+"............. ..                    .........",
+"............  .                     .........",
+"............ ..        .             ........",
+"............ .                       ........",
+"..............          .             .......",
+"........... ..          ..             ......",
+"........... ..          ....        .. ......",
+"........... .            .....       . ......",
+".............            ......        ......",
+".............             ......  .    ......",
+".......... ..              .....      .......",
+".......... ..              ...... ...........",
+".......... ..               .................",
+".......... ..                ................",
+".......... ..                 ...............",
+".......... ..                 ...............",
+".......... ..                  ..............",
+".......... .                   ..............",
+"..........                     ..............",
+".......... ................... ..............",
+".........                       .............",
+"........                         ............",
+".......                           ...........",
+"......  .........................  ..........",
+"......                             ..........",
+"......                             ..........",
+"......                             ..........",
+"......       .....      .....      ..........",
+"......       .....      .....      ..........",
+"......       .....      .....      ..........",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/cvdd49.xpm b/pixmaps/cvdd49.xpm
new file mode 100644
index 0000000..ac7fbe1
--- /dev/null
+++ b/pixmaps/cvdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *cvdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+"...........................  ...... .............",
+"...........................  ....   .............",
+"..........................    ..    .............",
+"..........................    .     .............",
+".....................              ..............",
+"...................   ...     ...   .............",
+"..................  ..               ............",
+".................  .                 ............",
+"................  .             ..    ...........",
+"...............  .               ..   ...........",
+"............... ..                ..  ...........",
+".............. ..                  .  ...........",
+".............. ..                      ..........",
+"............. ..                       ..........",
+"............. ..                        .........",
+"............  .          .               ........",
+"............ ..                          ........",
+"............ ..           .               .......",
+"............ .            ..              .......",
+"........... ..            ....         ..  ......",
+"........... ..             .....       ..  ......",
+"........... ..             ......       .  ......",
+"........... .               ......   .     ......",
+"........... .               .......       .......",
+".............                .......     ........",
+".......... ..                 ....... ...........",
+".......... ..                  ..................",
+".......... ..                   .................",
+".......... ..                   .................",
+".......... ..                    ................",
+".......... ..                    ................",
+".......... ...                    ...............",
+"........... ..................... ...............",
+"...........                       ...............",
+"...........                       ...............",
+"........... ..................... ...............",
+"..........                         ..............",
+".........                           .............",
+"........                             ............",
+"....... ............................. ...........",
+".......                               ...........",
+".......                               ...........",
+".......                               ...........",
+".......       .....       .....       ...........",
+".......       .....       .....       ...........",
+".......       .....       .....       ...........",
+".......       .....       .....       ...........",
+"................................................."
+};
diff --git a/pixmaps/cvdd54.xpm b/pixmaps/cvdd54.xpm
new file mode 100644
index 0000000..b5ff5b2
--- /dev/null
+++ b/pixmaps/cvdd54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *cvdd54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"......................................................",
+"......................................................",
+"..............................  ...... ...............",
+"..............................  ....   ...............",
+".............................    ..    ...............",
+".............................    .     ...............",
+"........................              ................",
+"......................   ...     ...   ...............",
+"....................   ....             ..............",
+"...................  ...                ..............",
+"..................  ...            ..    .............",
+".................  ...              ..   .............",
+".................  ..                ..  .............",
+"................  ...                 .  .............",
+"................  ..                      ............",
+"................ ...                      ............",
+"...............  ..        ..              ...........",
+"...............  ..         .               ..........",
+"............... ..                          ..........",
+"..............  ..           .               .........",
+"..............  ..           ..              .........",
+".............. ..            ....         ..  ........",
+".............  ..             .....       ..  ........",
+".............  ..             ......       .  ........",
+".............  ..              ......   .     ........",
+".............  ..              .......  ..   .........",
+".............  .                .......     ..........",
+"............. ..                 ....... .............",
+"............  ..                  ....................",
+"............  ..                   ...................",
+"............  ..                   ...................",
+"............  ..                    ..................",
+"............  ..                    ..................",
+"............  ..                     .................",
+"............  ..                     .................",
+"............                         .................",
+"............                         .................",
+".............  ....................  .................",
+"............   ....................   ................",
+"...........                            ...............",
+"..........                              ..............",
+".........                                .............",
+"........   ............................   ............",
+"........   ............................   ............",
+"........                                  ............",
+"........                                  ............",
+"........                                  ............",
+"........        .....        .....        ............",
+"........        .....        .....        ............",
+"........        .....        .....        ............",
+"........        .....        .....        ............",
+"......................................................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/cvdd58.xpm b/pixmaps/cvdd58.xpm
new file mode 100644
index 0000000..7ef841e
--- /dev/null
+++ b/pixmaps/cvdd58.xpm
@@ -0,0 +1,66 @@
+/* XPM */
+static char *cvdd58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"..........................................................",
+"................................. ........ ...............",
+"................................   .....   ...............",
+"...............................    ....    ...............",
+"...............................     ..     ...............",
+"...........................                ...............",
+"........................    ...     ...   ................",
+".......................  .....      ....   ...............",
+"......................  ...                 ..............",
+".....................  ..                    .............",
+"....................  .                      .............",
+"...................  .                 .      ............",
+"..................  ..                 ...    ............",
+".................. ..                   ..    ............",
+"................. ...                    ..   ............",
+"................  ..                           ...........",
+"................ ...                           ...........",
+"...............  ..         .                  ...........",
+"............... ...         ..                  ..........",
+"............... ..           .                  ..........",
+"..............  ..                               .........",
+".............. ..                                 ........",
+".............. ..             .                   ........",
+".............  ..             ..                   .......",
+".............  ..             ....                 .......",
+"............. ..               .....           ..   ......",
+"............  ..               .......         ..   ......",
+"............  ..                .......             ......",
+"............  ..                 .......            ......",
+"............  ..                 ........    ..     ......",
+"............  ..                  ........    ..   .......",
+"............  ..                   ........       ........",
+"...........  ...                    .......  .............",
+"...........  ..                      .....................",
+"...........  ..                       ....................",
+"...........  ..                        ...................",
+"...........  ..                        ...................",
+"...........  ..                        ...................",
+"...........  ..                         ..................",
+"...........                             ..................",
+"...........                             ..................",
+"...........    ........................  .................",
+"............   ........................  .................",
+"...........                               ................",
+".........                                  ...............",
+"........                                    ..............",
+".......   ................................   .............",
+".......   ................................   .............",
+".......                                      .............",
+".......                                      .............",
+".......                                      .............",
+".......        ......          ......        .............",
+".......        ......          ......        .............",
+".......        ......          ......        .............",
+".......        ......          ......        .............",
+"..........................................................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/cvdd64.xpm b/pixmaps/cvdd64.xpm
new file mode 100644
index 0000000..49591c3
--- /dev/null
+++ b/pixmaps/cvdd64.xpm
@@ -0,0 +1,72 @@
+/* XPM */
+static char *cvdd64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+"................................... ........ ...................",
+"..................................   .....   ...................",
+".................................    ....    ...................",
+".................................     ..     ...................",
+".............................                ...................",
+"..........................    ...     ...   ....................",
+".........................  .....      ....   ...................",
+"........................  ...                 ..................",
+".......................  ..                    .................",
+"......................  .                      .................",
+".....................  .                 .      ................",
+"....................  ..                 ...    ................",
+".................... ..                   ..    ................",
+"................... ...                    ..   ................",
+"..................  ..                           ...............",
+".................. ...                           ...............",
+".................  ..         .                  ...............",
+"................. ...         ..                  ..............",
+"................. ..           .                  ..............",
+"................  ..                               .............",
+"................ ..                                 ............",
+"................ ..             .                   ............",
+"...............  ..             ..                   ...........",
+"...............  ..             ....                 ...........",
+"...............  .              ......           ..   ..........",
+"............... ..               .......         ..   ..........",
+"..............  ..               ........             ..........",
+"..............  ..                ........            ..........",
+"..............  ..                 ........    ..     ..........",
+"..............  ..                 .........    ..   ...........",
+"..............  ..                  .........       ............",
+"..............  ..                   ........  .................",
+".............  ...                    ..........................",
+".............  ..                      .........................",
+".............  ..                       ........................",
+".............  ..                        .......................",
+".............  ..                        .......................",
+".............  ..                        .......................",
+".............  ..                         ......................",
+".............                             ......................",
+"..............                            ......................",
+"..............   ......................   ......................",
+".............   ........................   .....................",
+"............                                ....................",
+"..........                                    ..................",
+".........                                      .................",
+"........   ..................................   ................",
+"........  ....................................  ................",
+"........                                        ................",
+"........                                        ................",
+"........                                        ................",
+"........                                        ................",
+"........                                        ................",
+"........         .......        .......         ................",
+"........         .......        .......         ................",
+"........         .......        .......         ................",
+"........         .......        .......         ................",
+"........         .......        .......         ................",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/cvdd72.xpm b/pixmaps/cvdd72.xpm
new file mode 100644
index 0000000..0c9150a
--- /dev/null
+++ b/pixmaps/cvdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *cvdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................  ......... ....................",
+".......................................    .......   ...................",
+".......................................    .....     ...................",
+"......................................      ...     ....................",
+"......................................      ..      ....................",
+"..................................                  ....................",
+"...............................                     ....................",
+".............................      ....     ..      ....................",
+"...........................      .....      .....    ...................",
+"..........................     .....          ...     ..................",
+".........................     ....                     .................",
+"........................    ....                       .................",
+".......................    ....                ....     ................",
+"......................    ....                  ....    ................",
+"......................   ....                   ....    ................",
+".....................    ...                     ...    ................",
+".....................   ....                       .     ...............",
+"....................   ....                              ...............",
+"....................   ....                              ...............",
+"...................   ....          .                     ..............",
+"...................   ....          .                     ..............",
+"...................  ....           ..                     .............",
+"..................   ....            .                      ............",
+"..................   ....                                    ...........",
+"..................  ....                                     ...........",
+".................   ....              .                       ..........",
+".................   ....              ...                     ..........",
+".................  ....               .....              ..    .........",
+".................  ....                .....             ...   .........",
+"................   ....                .......           ...   .........",
+"................   ....                 .......           ..   .........",
+"................  .....                 ........     ..        .........",
+"................  ....                   ........     .        .........",
+"................  ....                    ........    ..       .........",
+"................  ....                     ........           ..........",
+"................  ....                      .......         ............",
+"...............   ....                       .......   .................",
+"...............   ....                        ..........................",
+"...............   ....                         .........................",
+"...............   ....                         .........................",
+"...............   ....                          ........................",
+"...............  .....                           .......................",
+"...............  .....                           .......................",
+"...............  ....                             ......................",
+"...............  ....                             ......................",
+"...............                                   ......................",
+"...............                                   ......................",
+"...............  ..............................   ......................",
+"..............   ..............................   ......................",
+".............                                      .....................",
+"...........                                          ...................",
+"..........                                            ..................",
+".........   ........................................   .................",
+".........   ........................................   .................",
+".........                                              .................",
+".........                                              .................",
+".........                                              .................",
+".........                                              .................",
+".........                                              .................",
+".........           .......          .......           .................",
+".........           .......          .......           .................",
+".........           .......          .......           .................",
+".........           .......          .......           .................",
+".........           .......          .......           .................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/cvdl33.xpm b/pixmaps/cvdl33.xpm
new file mode 100644
index 0000000..f7d3786
--- /dev/null
+++ b/pixmaps/cvdl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *cvdl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+"................... ... .........",
+"..................   .  .........",
+"...............         .........",
+".............  ...   ..  ........",
+"...........  ..       .. ........",
+"........... ..        . . .......",
+".......... ..          .. .......",
+".........  .               ......",
+".........  .     .         ......",
+"......... ..                .....",
+"........  .                 .....",
+"........  .       ..      .. ....",
+"........ ..       ....     . ....",
+"........ ..        ....      ....",
+".......  .          ....    .....",
+".......  .           ...  .......",
+"....... ..            ...........",
+"....... ..            ...........",
+"....... ..             ..........",
+".......                ..........",
+".......                ..........",
+"........ ............. ..........",
+".......                 .........",
+"......                   ........",
+".....  .................  .......",
+".....                     .......",
+".....                     .......",
+".....     ...     ...     .......",
+".....     ...     ...     .......",
+".................................",
+"................................."
+};
diff --git a/pixmaps/cvdl37.xpm b/pixmaps/cvdl37.xpm
new file mode 100644
index 0000000..cbaea28
--- /dev/null
+++ b/pixmaps/cvdl37.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char *cvdl37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".....................................",
+"..................... .... ..........",
+"....................   ..  ..........",
+"....................   .   ..........",
+"................           ..........",
+"...............  ...   ..  ..........",
+"..............  .           .........",
+".............  .        ..  .........",
+"............  .           .  ........",
+"............ ..           .  ........",
+"...........  .                .......",
+"........... ..     .          .......",
+"........... .                  ......",
+".......... ..                  ......",
+".......... ..       ..          .....",
+".......... .        ....     .. .....",
+"............         ....     . .....",
+"......... ..          ....  .   .....",
+"......... ..          .....    ......",
+"......... ..           ..............",
+"......... ..            .............",
+"......... ..             ............",
+"......... ..              ...........",
+"......... .               ...........",
+".........                 ...........",
+".......... .............. ...........",
+".........                  ..........",
+"........                    .........",
+".....................................",
+"......                        .......",
+"......                        .......",
+"......                        .......",
+"......     ....      ....     .......",
+"......     ....      ....     .......",
+"......     ....      ....     .......",
+".....................................",
+"....................................."
+};
diff --git a/pixmaps/cvdl40.xpm b/pixmaps/cvdl40.xpm
new file mode 100644
index 0000000..58aadb1
--- /dev/null
+++ b/pixmaps/cvdl40.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char *cvdl40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................",
+"........................................",
+"...................... .... ............",
+".....................   ..  ............",
+".....................   .   ............",
+"..................          ............",
+"................  ...   ..  ............",
+"............... ..           ...........",
+".............  ..        ..  ...........",
+"............  ..           .  ..........",
+"............ ..            .  ..........",
+"...........  .                 .........",
+"........... ..      .          .........",
+"........... .                   ........",
+".......... ..                   ........",
+".......... ..        ..          .......",
+".......... .         ....     .. .......",
+".......... .          ....     . .......",
+"......... ..           ....  .   .......",
+"......... ..            ....    ........",
+"......... ..             ...............",
+"......... ..              ..............",
+"......... ..               .............",
+"......... ..               .............",
+"......... ..                ............",
+"......... ..                ............",
+"......... ..                ............",
+".........                  .............",
+"..........  ..............  ............",
+".........                    ...........",
+"........                      ..........",
+"....... ...................... .........",
+"......                          ........",
+"......                          ........",
+"......                          ........",
+"......      ....      ....      ........",
+"......      ....      ....      ........",
+"......      ....      ....      ........",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/cvdl45.xpm b/pixmaps/cvdl45.xpm
new file mode 100644
index 0000000..9cdfc12
--- /dev/null
+++ b/pixmaps/cvdl45.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *cvdl45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".............................................",
+".............................................",
+".........................  ..... ............",
+".........................  ...   ............",
+"........................    .    ............",
+".....................            ............",
+"...................  ...    ..   ............",
+".................  ..         .   ...........",
+"................  .               ...........",
+"...............  .            .    ..........",
+"..............  .             ..   ..........",
+".............. ..              ..  ..........",
+".............  .                    .........",
+"............. ..                    .........",
+"............  .                     .........",
+"............ ..        .             ........",
+"............ .                       ........",
+"..............          .             .......",
+"........... ..          ..             ......",
+"........... ..          ....        .. ......",
+"........... .            .....       . ......",
+".............            ......        ......",
+".............             ......  .    ......",
+".......... ..              .....      .......",
+".......... ..              ...... ...........",
+".......... ..               .................",
+".......... ..                ................",
+".......... ..                 ...............",
+".......... ..                 ...............",
+".......... ..                  ..............",
+".......... .                   ..............",
+"..........                     ..............",
+".......... ................... ..............",
+".........                       .............",
+"........                         ............",
+".......                           ...........",
+"......  .........................  ..........",
+"......                             ..........",
+"......                             ..........",
+"......                             ..........",
+"......       .....      .....      ..........",
+"......       .....      .....      ..........",
+"......       .....      .....      ..........",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/cvdl49.xpm b/pixmaps/cvdl49.xpm
new file mode 100644
index 0000000..c978373
--- /dev/null
+++ b/pixmaps/cvdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *cvdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+"...........................  ...... .............",
+"...........................  ....   .............",
+"..........................    ..    .............",
+"..........................    .     .............",
+".....................              ..............",
+"...................   ...     ...   .............",
+"..................  ..               ............",
+".................  .                 ............",
+"................  .             ..    ...........",
+"...............  .               ..   ...........",
+"............... ..                ..  ...........",
+".............. ..                  .  ...........",
+".............. ..                      ..........",
+"............. ..                       ..........",
+"............. ..                        .........",
+"............  .          .               ........",
+"............ ..                          ........",
+"............ ..           .               .......",
+"............ .            ..              .......",
+"........... ..            ....         ..  ......",
+"........... ..             .....       ..  ......",
+"........... ..             ......       .  ......",
+"........... .               ......   .     ......",
+"........... .               .......       .......",
+".............                .......     ........",
+".......... ..                 ....... ...........",
+".......... ..                  ..................",
+".......... ..                   .................",
+".......... ..                   .................",
+".......... ..                    ................",
+".......... ..                    ................",
+".......... ...                    ...............",
+"........... ..................... ...............",
+"...........                       ...............",
+"...........                       ...............",
+"........... ..................... ...............",
+"..........                         ..............",
+".........                           .............",
+"........                             ............",
+"....... ............................. ...........",
+".......                               ...........",
+".......                               ...........",
+".......                               ...........",
+".......       .....       .....       ...........",
+".......       .....       .....       ...........",
+".......       .....       .....       ...........",
+".......       .....       .....       ...........",
+"................................................."
+};
diff --git a/pixmaps/cvdl54.xpm b/pixmaps/cvdl54.xpm
new file mode 100644
index 0000000..3a14562
--- /dev/null
+++ b/pixmaps/cvdl54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *cvdl54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"......................................................",
+"......................................................",
+"..............................  ...... ...............",
+"..............................  ....   ...............",
+".............................    ..    ...............",
+".............................    .     ...............",
+"........................              ................",
+"......................   ...     ...   ...............",
+"....................   ....             ..............",
+"...................  ...                ..............",
+"..................  ...            ..    .............",
+".................  ...              ..   .............",
+".................  ..                ..  .............",
+"................  ...                 .  .............",
+"................  ..                      ............",
+"................ ...                      ............",
+"...............  ..        ..              ...........",
+"...............  ..         .               ..........",
+"............... ..                          ..........",
+"..............  ..           .               .........",
+"..............  ..           ..              .........",
+".............. ..            ....         ..  ........",
+".............  ..             .....       ..  ........",
+".............  ..             ......       .  ........",
+".............  ..              ......   .     ........",
+".............  ..              .......  ..   .........",
+".............  .                .......     ..........",
+"............. ..                 ....... .............",
+"............  ..                  ....................",
+"............  ..                   ...................",
+"............  ..                   ...................",
+"............  ..                    ..................",
+"............  ..                    ..................",
+"............  ..                     .................",
+"............  ..                     .................",
+"............                         .................",
+"............                         .................",
+".............  ....................  .................",
+"............   ....................   ................",
+"...........                            ...............",
+"..........                              ..............",
+".........                                .............",
+"........   ............................   ............",
+"........   ............................   ............",
+"........                                  ............",
+"........                                  ............",
+"........                                  ............",
+"........        .....        .....        ............",
+"........        .....        .....        ............",
+"........        .....        .....        ............",
+"........        .....        .....        ............",
+"......................................................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/cvdl58.xpm b/pixmaps/cvdl58.xpm
new file mode 100644
index 0000000..96ab5b5
--- /dev/null
+++ b/pixmaps/cvdl58.xpm
@@ -0,0 +1,66 @@
+/* XPM */
+static char *cvdl58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"..........................................................",
+"................................. ........ ...............",
+"................................   .....   ...............",
+"...............................    ....    ...............",
+"...............................     ..     ...............",
+"...........................                ...............",
+"........................    ...     ...   ................",
+".......................  .....      ....   ...............",
+"......................  ...                 ..............",
+".....................  ..                    .............",
+"....................  .                      .............",
+"...................  .                 .      ............",
+"..................  ..                 ...    ............",
+".................. ..                   ..    ............",
+"................. ...                    ..   ............",
+"................  ..                           ...........",
+"................ ...                           ...........",
+"...............  ..         .                  ...........",
+"............... ...         ..                  ..........",
+"............... ..           .                  ..........",
+"..............  ..                               .........",
+".............. ..                                 ........",
+".............. ..             .                   ........",
+".............  ..             ..                   .......",
+".............  ..             ....                 .......",
+"............. ..               .....           ..   ......",
+"............  ..               .......         ..   ......",
+"............  ..                .......             ......",
+"............  ..                 .......            ......",
+"............  ..                 ........    ..     ......",
+"............  ..                  ........    ..   .......",
+"............  ..                   ........       ........",
+"...........  ...                    .......  .............",
+"...........  ..                      .....................",
+"...........  ..                       ....................",
+"...........  ..                        ...................",
+"...........  ..                        ...................",
+"...........  ..                        ...................",
+"...........  ..                         ..................",
+"...........                             ..................",
+"...........                             ..................",
+"...........    ........................  .................",
+"............   ........................  .................",
+"...........                               ................",
+".........                                  ...............",
+"........                                    ..............",
+".......   ................................   .............",
+".......   ................................   .............",
+".......                                      .............",
+".......                                      .............",
+".......                                      .............",
+".......        ......          ......        .............",
+".......        ......          ......        .............",
+".......        ......          ......        .............",
+".......        ......          ......        .............",
+"..........................................................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/cvdl64.xpm b/pixmaps/cvdl64.xpm
new file mode 100644
index 0000000..7d2c712
--- /dev/null
+++ b/pixmaps/cvdl64.xpm
@@ -0,0 +1,72 @@
+/* XPM */
+static char *cvdl64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+"................................... ........ ...................",
+"..................................   .....   ...................",
+".................................    ....    ...................",
+".................................     ..     ...................",
+".............................                ...................",
+"..........................    ...     ...   ....................",
+".........................  .....      ....   ...................",
+"........................  ...                 ..................",
+".......................  ..                    .................",
+"......................  .                      .................",
+".....................  .                 .      ................",
+"....................  ..                 ...    ................",
+".................... ..                   ..    ................",
+"................... ...                    ..   ................",
+"..................  ..                           ...............",
+".................. ...                           ...............",
+".................  ..         .                  ...............",
+"................. ...         ..                  ..............",
+"................. ..           .                  ..............",
+"................  ..                               .............",
+"................ ..                                 ............",
+"................ ..             .                   ............",
+"...............  ..             ..                   ...........",
+"...............  ..             ....                 ...........",
+"...............  .              ......           ..   ..........",
+"............... ..               .......         ..   ..........",
+"..............  ..               ........             ..........",
+"..............  ..                ........            ..........",
+"..............  ..                 ........    ..     ..........",
+"..............  ..                 .........    ..   ...........",
+"..............  ..                  .........       ............",
+"..............  ..                   ........  .................",
+".............  ...                    ..........................",
+".............  ..                      .........................",
+".............  ..                       ........................",
+".............  ..                        .......................",
+".............  ..                        .......................",
+".............  ..                        .......................",
+".............  ..                         ......................",
+".............                             ......................",
+"..............                            ......................",
+"..............   ......................   ......................",
+".............   ........................   .....................",
+"............                                ....................",
+"..........                                    ..................",
+".........                                      .................",
+"........   ..................................   ................",
+"........  ....................................  ................",
+"........                                        ................",
+"........                                        ................",
+"........                                        ................",
+"........                                        ................",
+"........                                        ................",
+"........         .......        .......         ................",
+"........         .......        .......         ................",
+"........         .......        .......         ................",
+"........         .......        .......         ................",
+"........         .......        .......         ................",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/cvdl72.xpm b/pixmaps/cvdl72.xpm
new file mode 100644
index 0000000..984d063
--- /dev/null
+++ b/pixmaps/cvdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *cvdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................  ......... ....................",
+".......................................    .......   ...................",
+".......................................    .....     ...................",
+"......................................      ...     ....................",
+"......................................      ..      ....................",
+"..................................                  ....................",
+"...............................                     ....................",
+".............................      ....     ..      ....................",
+"...........................      .....      .....    ...................",
+"..........................     .....          ...     ..................",
+".........................     ....                     .................",
+"........................    ....                       .................",
+".......................    ....                ....     ................",
+"......................    ....                  ....    ................",
+"......................   ....                   ....    ................",
+".....................    ...                     ...    ................",
+".....................   ....                       .     ...............",
+"....................   ....                              ...............",
+"....................   ....                              ...............",
+"...................   ....          .                     ..............",
+"...................   ....          .                     ..............",
+"...................  ....           ..                     .............",
+"..................   ....            .                      ............",
+"..................   ....                                    ...........",
+"..................  ....                                     ...........",
+".................   ....              .                       ..........",
+".................   ....              ...                     ..........",
+".................  ....               .....              ..    .........",
+".................  ....                .....             ...   .........",
+"................   ....                .......           ...   .........",
+"................   ....                 .......           ..   .........",
+"................  .....                 ........     ..        .........",
+"................  ....                   ........     .        .........",
+"................  ....                    ........    ..       .........",
+"................  ....                     ........           ..........",
+"................  ....                      .......         ............",
+"...............   ....                       .......   .................",
+"...............   ....                        ..........................",
+"...............   ....                         .........................",
+"...............   ....                         .........................",
+"...............   ....                          ........................",
+"...............  .....                           .......................",
+"...............  .....                           .......................",
+"...............  ....                             ......................",
+"...............  ....                             ......................",
+"...............                                   ......................",
+"...............                                   ......................",
+"...............  ..............................   ......................",
+"..............   ..............................   ......................",
+".............                                      .....................",
+"...........                                          ...................",
+"..........                                            ..................",
+".........   ........................................   .................",
+".........   ........................................   .................",
+".........                                              .................",
+".........                                              .................",
+".........                                              .................",
+".........                                              .................",
+".........                                              .................",
+".........           .......          .......           .................",
+".........           .......          .......           .................",
+".........           .......          .......           .................",
+".........           .......          .......           .................",
+".........           .......          .......           .................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/cvld33.xpm b/pixmaps/cvld33.xpm
new file mode 100644
index 0000000..fa3b9f2
--- /dev/null
+++ b/pixmaps/cvld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *cvld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................. ... ..........",
+"................. X .  ..........",
+"..............    X  X ..........",
+"............  XXX XXX X .........",
+"...........  XXXXXXXX   .........",
+"..........  XXXXXXXXX X  ........",
+".........  XXXXXXXXXXX   ........",
+"......... XXXXXX XXXXXXXX .......",
+"........  XXXXXX XXXXXXXX .......",
+"........ XXXXXXX XXXXXXXXX ......",
+".......  XXXXXXX  XXXXXXXX ......",
+".......  XXXXXXX .   XXXX   .....",
+".......  XXXXXXX .... XXXX  .....",
+"....... XXXXXXXXX .... X XX .....",
+"......  XXXXXXXXXX ....    ......",
+"......  XXXXXXXXXXX ...  ........",
+"......  XXXXXXXXXXXX ............",
+"......  XXXXXXXXXXXX ............",
+"......  XXXXXXXXXXXXX ...........",
+"......  XXXXXXXXXXXXX ...........",
+"......  XXXXXXXXXXXXX ...........",
+".......               ...........",
+"...... XXXXXXXXXXXXXXX ..........",
+"..... XXXXXXXXXXXXXXXXX .........",
+"....                     ........",
+".... XXXXXXXXXXXXXXXXXXX ........",
+".... XXXXXXXXXXXXXXXXXXX ........",
+".... XXX     XXX     XXX ........",
+".... XXX ... XXX ... XXX ........",
+"....     ...     ...     ........",
+".................................",
+"................................."
+};
diff --git a/pixmaps/cvld37.xpm b/pixmaps/cvld37.xpm
new file mode 100644
index 0000000..16ac4d0
--- /dev/null
+++ b/pixmaps/cvld37.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char *cvld37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".....................................",
+".....................................",
+".................... .... ...........",
+"...................  ...  ...........",
+"................... X . X ...........",
+"...............     X  XX ...........",
+".............  XXXXXXXX   ...........",
+"............  XXXXXXXXXXXX ..........",
+"...........  XXXXXXXXXX  X ..........",
+"........... XXXXXXXXXXXXX X .........",
+"..........  XXXXXX XXXXXX X .........",
+".........  XXXXXXX XXXXXXXXX ........",
+".........  XXXXXXX XXXXXXXXX ........",
+".........  XXXXXXX  XXXXXXXXX .......",
+"........  XXXXXXXX .  XXXXXXX .......",
+"........  XXXXXXXX ... XXXXXXX ......",
+"........  XXXXXXXX .... XXXX   ......",
+"........  XXXXXXXXX .... XXXX  ......",
+"........ XXXXXXXXXXX .... X XX ......",
+".......  XXXXXXXXXXX .....    .......",
+".......  XXXXXXXXXXXX ...............",
+".......  XXXXXXXXXXXXX ..............",
+".......  XXXXXXXXXXXXXX .............",
+".......  XXXXXXXXXXXXXXX ............",
+".......  XXXXXXXXXXXXXXX ............",
+"........                 ............",
+"........ XXXXXXXXXXXXXXXX ...........",
+"....... XXXXXXXXXXXXXXXXXX ..........",
+".....                        ........",
+"..... XXXXXXXXXXXXXXXXXXXXXX ........",
+"..... XXXXXXXXXXXXXXXXXXXXXX ........",
+"..... XXX      XXXX      XXX ........",
+"..... XXX .... XXXX .... XXX ........",
+"..... XXX .... XXXX .... XXX ........",
+".....     ....      ....     ........",
+".....................................",
+"....................................."
+};
diff --git a/pixmaps/cvld40.xpm b/pixmaps/cvld40.xpm
new file mode 100644
index 0000000..1b620d0
--- /dev/null
+++ b/pixmaps/cvld40.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char *cvld40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................",
+"........................................",
+"........................................",
+"...................... .... ............",
+".....................  ...  ............",
+"..................... X . X ............",
+".................     X  XX ............",
+"...............  XXXXXXXX   ............",
+"..............  XXXXXXXXXXXX ...........",
+".............  XXXXXXXXXX  X ...........",
+"............  XXXXXXXXXXXXX X ..........",
+"............  XXXXXX XXXXXX X ..........",
+"...........  XXXXXXX XXXXXXXXX .........",
+"...........  XXXXXXX XXXXXXXXX .........",
+"..........   XXXXXXX  XXXXXXXXX ........",
+"..........  XXXXXXXX .  XXXXXXX ........",
+"..........  XXXXXXXX ... XXXXXXX .......",
+".........   XXXXXXXX .... XXXX   .......",
+".........   XXXXXXXXX .... XXXX  .......",
+".........  XXXXXXXXXXX .... X XX .......",
+"........   XXXXXXXXXXX .....    ........",
+"........   XXXXXXXXXXXX ................",
+"........   XXXXXXXXXXXXX ...............",
+"........   XXXXXXXXXXXXXX ..............",
+"........   XXXXXXXXXXXXXX ..............",
+"........   XXXXXXXXXXXXXXX .............",
+"........   XXXXXXXXXXXXXXXX ............",
+"........   XXXXXXXXXXXXXXXX ............",
+".........                   ............",
+"......... XXXXXXXXXXXXXXXXXX ...........",
+"........ XXXXXXXXXXXXXXXXXXXX ..........",
+"......                          ........",
+"...... XXXXXXXXXXXXXXXXXXXXXXXX ........",
+"...... XXXXXXXXXXXXXXXXXXXXXXXX ........",
+"...... XXXX      XXXX      XXXX ........",
+"...... XXXX .... XXXX .... XXXX ........",
+"...... XXXX .... XXXX .... XXXX ........",
+"......      ....      ....      ........",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/cvld45.xpm b/pixmaps/cvld45.xpm
new file mode 100644
index 0000000..f166f4c
--- /dev/null
+++ b/pixmaps/cvld45.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *cvld45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".............................................",
+".............................................",
+"......................... ...... ............",
+"........................ X ...   ............",
+"........................ XX . XX ............",
+".....................    XX  XXX ............",
+"...................  XXX XX X XX ............",
+".................  XXXXXXXXXXX XX ...........",
+"................  XXXXXXXXXXXXXXX ...........",
+"...............  XXXXXXXXXXXXX XXX ..........",
+"..............  XXXXXXXXXXXXXX  XX ..........",
+".............. XXXXXXXXXXXXXXXX  X ..........",
+".............  XXXXXXX XXXXXXXXXXXX .........",
+"............. XXXXXXXX XXXXXXXXXXXX .........",
+"............  XXXXXXXX XXXXXXXXXXXX .........",
+"............ XXXXXXXXX XXXXXXXXXXXXX ........",
+"...........  XXXXXXXXXX XXXXXXXXXXXX ........",
+"...........  XXXXXXXXXX  XXXXXXXXXXXX .......",
+"........... XXXXXXXXXXX .  XXXXXXXXXXX ......",
+"..........  XXXXXXXXXXX ...  XXXXXXX   ......",
+"..........  XXXXXXXXXXXX .... XXXXXXX  ......",
+"..........  XXXXXXXXXXXX ..... XXXXXXX ......",
+"..........  XXXXXXXXXXXXX ..... XX XXX ......",
+".......... XXXXXXXXXXXXXXX ..... X    .......",
+".........  XXXXXXXXXXXXXXX ...... ...........",
+".........  XXXXXXXXXXXXXXXX .................",
+".........  XXXXXXXXXXXXXXXXX ................",
+".........  XXXXXXXXXXXXXXXXXX ...............",
+".........  XXXXXXXXXXXXXXXXXX ...............",
+".........  XXXXXXXXXXXXXXXXXXX ..............",
+".........  XXXXXXXXXXXXXXXXXXX ..............",
+".........                      ..............",
+"......... XXXXXXXXXXXXXXXXXXXXX .............",
+"........ XXXXXXXXXXXXXXXXXXXXXXX ............",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXX ...........",
+"......                             ..........",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+"...... XXXXX       XXXX       XXXX ..........",
+"...... XXXXX ..... XXXX ..... XXXX ..........",
+"...... XXXXX ..... XXXX ..... XXXX ..........",
+"......       .....      .....      ..........",
+".............................................",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/cvld49.xpm b/pixmaps/cvld49.xpm
new file mode 100644
index 0000000..670ebc3
--- /dev/null
+++ b/pixmaps/cvld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *cvld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+"...........................  ...... .............",
+"...........................  ....   .............",
+".......................... XX .. XX .............",
+".......................... XX   XXX .............",
+".....................      XX X XX ..............",
+"...................  XXXXXXXXXXX XX .............",
+".................  XXXXXXXXXXXXXXXXX ............",
+"................  XXXXXXXXXXXXXXXXXX ............",
+"...............  XXXXXXXXXXXXXXX  XXX ...........",
+"..............  XXXXXXXXXXXXXXXXX  XX ...........",
+"..............  XXXXXXXXXXXXXXXXXX  X ...........",
+".............  XXXXXXXXX XXXXXXXXXX X ...........",
+".............  XXXXXXXXX XXXXXXXXXXXXX ..........",
+"............  XXXXXXXXXX XXXXXXXXXXXXX ..........",
+"............  XXXXXXXXXX XXXXXXXXXXXXXX .........",
+"...........  XXXXXXXXXXXX XXXXXXXXXXXXXX ........",
+"...........  XXXXXXXXXXXX XXXXXXXXXXXXXX ........",
+"...........  XXXXXXXXXXXX   XXXXXXXXXXXXX .......",
+"........... XXXXXXXXXXXXX .. XXXXXXXXXXXX .......",
+"..........  XXXXXXXXXXXXX ...  XXXXXXXX  X ......",
+"..........  XXXXXXXXXXXXX .....  XXXXXX  X ......",
+"..........  XXXXXXXXXXXXXX ...... XXXXXX X ......",
+"..........  XXXXXXXXXXXXXX ....... XX XXXX ......",
+"..........  XXXXXXXXXXXXXXX ....... X XXX .......",
+".......... XXXXXXXXXXXXXXXXX ....... .   ........",
+".........  XXXXXXXXXXXXXXXXXX ....... ...........",
+".........  XXXXXXXXXXXXXXXXXXX ..................",
+".........  XXXXXXXXXXXXXXXXXXXX .................",
+".........  XXXXXXXXXXXXXXXXXXXX .................",
+".........  XXXXXXXXXXXXXXXXXXXXX ................",
+".........  XXXXXXXXXXXXXXXXXXXXX ................",
+".......... XXXXXXXXXXXXXXXXXXXXX ................",
+"..........                       ................",
+".......... XXXXXXXXXXXXXXXXXXXXX ................",
+".......... XXXXXXXXXXXXXXXXXXXXX ................",
+"..........                       ................",
+"......... XXXXXXXXXXXXXXXXXXXXXXX ...............",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXX ..............",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXX .............",
+"......                               ............",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ............",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ............",
+"...... XXXXX       XXXXX       XXXXX ............",
+"...... XXXXX ..... XXXXX ..... XXXXX ............",
+"...... XXXXX ..... XXXXX ..... XXXXX ............",
+"...... XXXXX ..... XXXXX ..... XXXXX ............",
+"......       .....       .....       ............",
+"................................................."
+};
diff --git a/pixmaps/cvld54.xpm b/pixmaps/cvld54.xpm
new file mode 100644
index 0000000..5717c92
--- /dev/null
+++ b/pixmaps/cvld54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *cvld54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"..... ................................................",
+"......................................................",
+"......................................................",
+".............................  ...... ................",
+".............................  ....   ................",
+"............................  X ..  X ................",
+"............................ XX    XX ................",
+"........................     XX   XX .................",
+".....................      XXXXXX  X  ................",
+"...................    XXXXXXXXXXXXXX  ...............",
+"..................    XXXXXXXXXXXXXXX  ...............",
+".................   XXXXXXXXXXXXXX  XX  ..............",
+"................   XXXXXXXXXXXXXXXX  X  ..............",
+"...............    XXXXXXXXXXXXXXXXX  X ..............",
+"..............    XXXXXXXX XXXXXXXXXX X  .............",
+"..............    XXXXXXX  XXXXXXXXXXXX  .............",
+".............     XXXXXXX  XXXXXXXXXXXXX .............",
+".............    XXXXXXXX  XXXXXXXXXXXXX  ............",
+".............    XXXXXXXXX  XXXXXXXXXXXXX  ...........",
+"............    XXXXXXXXXXX   XXXXXXXXXXXX ...........",
+"............    XXXXXXXXXX     XXXXXXXXXXX  ..........",
+"............    XXXXXXXXXX  ..   XXXXXXXXXX ..........",
+"............   XXXXXXXXXXX  ...    XXXXXX    .........",
+"...........    XXXXXXXXXXXX .....   XXXXX  X .........",
+"...........    XXXXXXXXXXXX  ......  XX XX X .........",
+"...........    XXXXXXXXXXXXX .......  X  XX  .........",
+"...........    XXXXXXXXXXXXX  .......  X    ..........",
+"...........    XXXXXXXXXXXXXX  .......     ...........",
+"..........    XXXXXXXXXXXXXXXX  ....... ..............",
+"..........    XXXXXXXXXXXXXXXXX  .....................",
+"..........    XXXXXXXXXXXXXXXXXX  ....................",
+"..........    XXXXXXXXXXXXXXXXXXX ....................",
+"..........    XXXXXXXXXXXXXXXXXXX  ...................",
+"..........    XXXXXXXXXXXXXXXXXXXX ...................",
+"..........    XXXXXXXXXXXXXXXXXXXX  ..................",
+"..........    XXXXXXXXXXXXXXXXXXXXX ..................",
+"..........    XXXXXXXXXXXXXXXXXXXXX ..................",
+"...........                         ..................",
+"...........                          .................",
+"..........   XXXXXXXXXXXXXXXXXXXXXX   ........ .......",
+".........   XXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"........   XXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+".......                                  .............",
+".......                                  .............",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".......  XXXX         XXXX        XXXXX  .............",
+".......  XXXX         XXXX        XXXXX  .............",
+".......  XXXX  .....  XXXX  ....  XXXXX  .............",
+".......  XXXX  .....  XXXX  ....  XXXXX  .............",
+".......        .....        ....         .............",
+".......        .....        ....         .............",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/cvld58.xpm b/pixmaps/cvld58.xpm
new file mode 100644
index 0000000..e55e602
--- /dev/null
+++ b/pixmaps/cvld58.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *cvld58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"..........................................................",
+"..........................................................",
+"................................ ........ ................",
+"...............................   .....   ................",
+"..............................  X ....    ................",
+".............................  XX  ..  X  ................",
+"..........................     XXX    XX  ................",
+"........................       XXX    XX  ................",
+"......................    XXX XXXX XX  XX ................",
+"....................    XXXXXXXXXXXXXXXXX  ...............",
+"...................   XXXXXXXXXXXXXXXXXXXX  ..............",
+"..................   XXXXXXXXXXXXXXXXXXXXX  ..............",
+".................   XXXXXXXXXXXXXXXXXX XXXX  .............",
+"................   XXXXXXXXXXXXXXXXXXX   XX  .............",
+"................  XXXXXXXXXXXXXXXXXXXXX  XX  .............",
+"...............   XXXXXXXXXXXXXXXXXXXXXX  XX .............",
+"..............   XXXXXXXXXX XXXXXXXXXXXXXXXX  ............",
+"..............   XXXXXXXXXX  XXXXXXXXXXXXXXX  ............",
+".............   XXXXXXXXXXX  XXXXXXXXXXXXXXXX ............",
+".............   XXXXXXXXXXX  XXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXX  XXXXXXXXXXXXXXXX ...........",
+"............   XXXXXXXXXXXXX   XXXXXXXXXXXXXXX  ..........",
+"............   XXXXXXXXXXXX  .  XXXXXXXXXXXXXXX  .........",
+"............   XXXXXXXXXXXX  ..  XXXXXXXXXXXXXXX .........",
+"...........    XXXXXXXXXXXX  ...   XXXXXXXXXXXXX  ........",
+"...........   XXXXXXXXXXXXX  .....  XXXXXXXXXXXXX ........",
+"...........   XXXXXXXXXXXXXX  .....   XXXXXXXX  X  .......",
+"..........    XXXXXXXXXXXXXX  .......  XXXXXXX  X  .......",
+"..........    XXXXXXXXXXXXXXX  .......  XXXXXXXXX  .......",
+"..........   XXXXXXXXXXXXXXXXX  .......  XX  XXXX  .......",
+"..........   XXXXXXXXXXXXXXXXXX  .......  XX  XXX  .......",
+"..........   XXXXXXXXXXXXXXXXXXX  .......  X  XX  ........",
+"..........   XXXXXXXXXXXXXXXXXXXX  .......       .........",
+".........    XXXXXXXXXXXXXXXXXXXXX  ......................",
+".........    XXXXXXXXXXXXXXXXXXXXX  ......................",
+".........   XXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".........   XXXXXXXXXXXXXXXXXXXXXXXX  ....................",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXX  ..................",
+".........                               ..................",
+"..........                              ..................",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXXX  .................",
+"........   XXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".......   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"......                                      ..............",
+"......                                      ..............",
+"......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"......  XXXXX         XXXXXX         XXXXX  ..............",
+"......  XXXXX         XXXXXX         XXXXX  ..............",
+"......  XXXXX  .....  XXXXXX  .....  XXXXX  ..............",
+"......  XXXXX  .....  XXXXXX  .....  XXXXX  ..............",
+"......         .....          .....         ..............",
+"......         .....          .....         ..............",
+"..........................................................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/cvld64.xpm b/pixmaps/cvld64.xpm
new file mode 100644
index 0000000..02016f0
--- /dev/null
+++ b/pixmaps/cvld64.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char *cvld64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+".................................... ........ ..................",
+"...................................   .....   ..................",
+"..................................  X ....    ..................",
+".................................  XX  ..  X  ..................",
+"..............................     XXX    XX  ..................",
+"............................       XXX    XX  ..................",
+"..........................    XXX XXXX XX  XX ..................",
+"........................    XXXXXXXXXXXXXXXXX  .................",
+".......................   XXXXXXXXXXXXXXXXXXXX  ................",
+"......................   XXXXXXXXXXXXXXXXXXXXX  ................",
+".....................   XXXXXXXXXXXXXXXXXX XXXX  ...............",
+"....................   XXXXXXXXXXXXXXXXXXX   XX  ...............",
+"....................  XXXXXXXXXXXXXXXXXXXXX  XX  ...............",
+"...................   XXXXXXXXXXXXXXXXXXXXXX  XX ...............",
+"..................   XXXXXXXXXX XXXXXXXXXXXXXXXX  ..............",
+"..................   XXXXXXXXXX  XXXXXXXXXXXXXXX  ..............",
+".................   XXXXXXXXXXX  XXXXXXXXXXXXXXXX ..............",
+".................   XXXXXXXXXXX  XXXXXXXXXXXXXXXX  .............",
+".................   XXXXXXXXXXXX  XXXXXXXXXXXXXXXX .............",
+"................   XXXXXXXXXXXXX   XXXXXXXXXXXXXXX  ............",
+"................   XXXXXXXXXXXX  .  XXXXXXXXXXXXXXX  ...........",
+"................   XXXXXXXXXXXX  ..  XXXXXXXXXXXXXXX ...........",
+"...............    XXXXXXXXXXXX  ...   XXXXXXXXXXXXX  ..........",
+"...............    XXXXXXXXXXXX  .....  XXXXXXXXXXXXX ..........",
+"...............   XXXXXXXXXXXXX  ......   XXXXXXXX  X  .........",
+"...............   XXXXXXXXXXXXXX  .......  XXXXXXX  X  .........",
+"..............    XXXXXXXXXXXXXX  ........  XXXXXXXXX  .........",
+"..............    XXXXXXXXXXXXXXX  ........  XX  XXXX  .........",
+"..............   XXXXXXXXXXXXXXXXX  ........  XX  XXX  .........",
+"..............   XXXXXXXXXXXXXXXXXX  ........  X  XX  ..........",
+"..............   XXXXXXXXXXXXXXXXXXX  ........       ...........",
+"..............   XXXXXXXXXXXXXXXXXXXX  .......  ................",
+".............    XXXXXXXXXXXXXXXXXXXXX  ........................",
+".............    XXXXXXXXXXXXXXXXXXXXX  ........................",
+".............   XXXXXXXXXXXXXXXXXXXXXXX  .......................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXX  ......................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXXX  ....................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXXX  ....................",
+".............                               ....................",
+"..............                              ....................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXXX   ...................",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..................",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".........                                        ...............",
+".........                                        ...............",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...............",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...............",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...............",
+".........  XXXXX          XXXXXX          XXXXX  ...............",
+".........  XXXXX          XXXXXX          XXXXX  ...............",
+".........  XXXXX  ......  XXXXXX  ......  XXXXX  ...............",
+".........  XXXXX  ......  XXXXXX  ......  XXXXX  ...............",
+".........  XXXXX  ......  XXXXXX  ......  XXXXX  ...............",
+".........         ......          ......         ...............",
+".........         ......          ......         ...............",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/cvld72.xpm b/pixmaps/cvld72.xpm
new file mode 100644
index 0000000..91c6718
--- /dev/null
+++ b/pixmaps/cvld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *cvld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................  ......... ....................",
+".......................................    .......   ...................",
+".......................................    .....     ...................",
+"......................................      ...     ....................",
+"......................................  XX   .   X  ....................",
+"..................................      XXX     XX  ....................",
+"...............................         XXX    XXX  ....................",
+".............................      XXX  XXX     XX  ....................",
+"...........................      XXXXX XXXXXXX   X   ...................",
+"..........................     XXXXXXXXXXXXXXXXX XX   ..................",
+".........................    XXXXXXXXXXXXXXXXXXXXXXX   .................",
+"........................    XXXXXXXXXXXXXXXXXXXXXXXXX  .................",
+".......................    XXXXXXXXXXXXXXXXXXXX    XX   ................",
+"......................    XXXXXXXXXXXXXXXXXXXXXX    XX  ................",
+".....................     XXXXXXXXXXXXXXXXXXXXXX    XX  ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXX   XX  ................",
+"....................    XXXXXXXXXXX  XXXXXXXXXXXXXX XX   ...............",
+"....................    XXXXXXXXXXX  XXXXXXXXXXXXXXXXXX  ...............",
+"...................    XXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX  ...............",
+"...................    XXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX  ..............",
+"..................    XXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXX   .............",
+"..................    XXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXX   ............",
+".................    XXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXX   ...........",
+".................    XXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXX  ...........",
+".................    XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXX   ..........",
+"................    XXXXXXXXXXXXXXXX  ..    XXXXXXXXXXXXXXXX  ..........",
+"................    XXXXXXXXXXXXXXXX  ....    XXXXXXXXXXX  X   .........",
+"................    XXXXXXXXXXXXXXXX   .....    XXXXXXXXX   X  .........",
+"................    XXXXXXXXXXXXXXXXX  .......   XXXXXXXX   X  .........",
+"...............     XXXXXXXXXXXXXXXXX   .......   XXXXXXXX  X  .........",
+"...............    XXXXXXXXXXXXXXXXXXX  ........   XX  XXXXXX  .........",
+"...............    XXXXXXXXXXXXXXXXXXX   ........   X   XXXXX  .........",
+"...............    XXXXXXXXXXXXXXXXXXXX   ........       XXX   .........",
+"...............    XXXXXXXXXXXXXXXXXXXXX   ........  X        ..........",
+"...............    XXXXXXXXXXXXXXXXXXXXXX   .......         ............",
+"..............     XXXXXXXXXXXXXXXXXXXXXXX   .......   .................",
+"..............     XXXXXXXXXXXXXXXXXXXXXXXX   ..........................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXX   .........................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXX  .........................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ........................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXXX   .......................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ......................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......................",
+"..............                                    ......................",
+"..............                                    ......................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .....................",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...................",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..................",
+".........                                              .................",
+".........                                              .................",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .................",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .................",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .................",
+".........  XXXXXXX           XXXXXX           XXXXXXX  .................",
+".........  XXXXXXX           XXXXXX           XXXXXXX  .................",
+".........  XXXXXXX  .......  XXXXXX  .......  XXXXXXX  .................",
+".........  XXXXXXX  .......  XXXXXX  .......  XXXXXXX  .................",
+".........  XXXXXXX  .......  XXXXXX  .......  XXXXXXX  .................",
+".........           .......          .......           .................",
+".........           .......          .......           .................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/cvll33.xpm b/pixmaps/cvll33.xpm
new file mode 100644
index 0000000..12ebfbe
--- /dev/null
+++ b/pixmaps/cvll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *cvll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................. ... ..........",
+"................. X .  ..........",
+"..............    X  X ..........",
+"............  XXX XXX X .........",
+"...........  XXXXXXXX   .........",
+"..........  XXXXXXXXX X  ........",
+".........  XXXXXXXXXXX   ........",
+"......... XXXXXX XXXXXXXX .......",
+"........  XXXXXX XXXXXXXX .......",
+"........ XXXXXXX XXXXXXXXX ......",
+".......  XXXXXXX  XXXXXXXX ......",
+".......  XXXXXXX .   XXXX   .....",
+".......  XXXXXXX .... XXXX  .....",
+"....... XXXXXXXXX .... X XX .....",
+"......  XXXXXXXXXX ....    ......",
+"......  XXXXXXXXXXX ...  ........",
+"......  XXXXXXXXXXXX ............",
+"......  XXXXXXXXXXXX ............",
+"......  XXXXXXXXXXXXX ...........",
+"......  XXXXXXXXXXXXX ...........",
+"......  XXXXXXXXXXXXX ...........",
+".......               ...........",
+"...... XXXXXXXXXXXXXXX ..........",
+"..... XXXXXXXXXXXXXXXXX .........",
+"....                     ........",
+".... XXXXXXXXXXXXXXXXXXX ........",
+".... XXXXXXXXXXXXXXXXXXX ........",
+".... XXX     XXX     XXX ........",
+".... XXX ... XXX ... XXX ........",
+"....     ...     ...     ........",
+".................................",
+"................................."
+};
diff --git a/pixmaps/cvll37.xpm b/pixmaps/cvll37.xpm
new file mode 100644
index 0000000..b0e0789
--- /dev/null
+++ b/pixmaps/cvll37.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char *cvll37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".....................................",
+".....................................",
+".................... .... ...........",
+"...................  ...  ...........",
+"................... X . X ...........",
+"...............     X  XX ...........",
+".............  XXXXXXXX   ...........",
+"............  XXXXXXXXXXXX ..........",
+"...........  XXXXXXXXXX  X ..........",
+"........... XXXXXXXXXXXXX X .........",
+"..........  XXXXXX XXXXXX X .........",
+".........  XXXXXXX XXXXXXXXX ........",
+".........  XXXXXXX XXXXXXXXX ........",
+".........  XXXXXXX  XXXXXXXXX .......",
+"........  XXXXXXXX .  XXXXXXX .......",
+"........  XXXXXXXX ... XXXXXXX ......",
+"........  XXXXXXXX .... XXXX   ......",
+"........  XXXXXXXXX .... XXXX  ......",
+"........ XXXXXXXXXXX .... X XX ......",
+".......  XXXXXXXXXXX .....    .......",
+".......  XXXXXXXXXXXX ...............",
+".......  XXXXXXXXXXXXX ..............",
+".......  XXXXXXXXXXXXXX .............",
+".......  XXXXXXXXXXXXXXX ............",
+".......  XXXXXXXXXXXXXXX ............",
+"........                 ............",
+"........ XXXXXXXXXXXXXXXX ...........",
+"....... XXXXXXXXXXXXXXXXXX ..........",
+".....                        ........",
+"..... XXXXXXXXXXXXXXXXXXXXXX ........",
+"..... XXXXXXXXXXXXXXXXXXXXXX ........",
+"..... XXX      XXXX      XXX ........",
+"..... XXX .... XXXX .... XXX ........",
+"..... XXX .... XXXX .... XXX ........",
+".....     ....      ....     ........",
+".....................................",
+"....................................."
+};
diff --git a/pixmaps/cvll40.xpm b/pixmaps/cvll40.xpm
new file mode 100644
index 0000000..76624b1
--- /dev/null
+++ b/pixmaps/cvll40.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char *cvll40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................",
+"........................................",
+"........................................",
+"...................... .... ............",
+".....................  ...  ............",
+"..................... X . X ............",
+".................     X  XX ............",
+"...............  XXXXXXXX   ............",
+"..............  XXXXXXXXXXXX ...........",
+".............  XXXXXXXXXX  X ...........",
+"............  XXXXXXXXXXXXX X ..........",
+"............  XXXXXX XXXXXX X ..........",
+"...........  XXXXXXX XXXXXXXXX .........",
+"...........  XXXXXXX XXXXXXXXX .........",
+"..........   XXXXXXX  XXXXXXXXX ........",
+"..........  XXXXXXXX .  XXXXXXX ........",
+"..........  XXXXXXXX ... XXXXXXX .......",
+".........   XXXXXXXX .... XXXX   .......",
+".........   XXXXXXXXX .... XXXX  .......",
+".........  XXXXXXXXXXX .... X XX .......",
+"........   XXXXXXXXXXX .....    ........",
+"........   XXXXXXXXXXXX ................",
+"........   XXXXXXXXXXXXX ...............",
+"........   XXXXXXXXXXXXXX ..............",
+"........   XXXXXXXXXXXXXX ..............",
+"........   XXXXXXXXXXXXXXX .............",
+"........   XXXXXXXXXXXXXXXX ............",
+"........   XXXXXXXXXXXXXXXX ............",
+".........                   ............",
+"......... XXXXXXXXXXXXXXXXXX ...........",
+"........ XXXXXXXXXXXXXXXXXXXX ..........",
+"......                          ........",
+"...... XXXXXXXXXXXXXXXXXXXXXXXX ........",
+"...... XXXXXXXXXXXXXXXXXXXXXXXX ........",
+"...... XXXX      XXXX      XXXX ........",
+"...... XXXX .... XXXX .... XXXX ........",
+"...... XXXX .... XXXX .... XXXX ........",
+"......      ....      ....      ........",
+"........................................",
+"........................................"
+};
diff --git a/pixmaps/cvll45.xpm b/pixmaps/cvll45.xpm
new file mode 100644
index 0000000..0197f4c
--- /dev/null
+++ b/pixmaps/cvll45.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *cvll45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".............................................",
+".............................................",
+"......................... ...... ............",
+"........................ X ...   ............",
+"........................ XX . XX ............",
+".....................    XX  XXX ............",
+"...................  XXX XX X XX ............",
+".................  XXXXXXXXXXX XX ...........",
+"................  XXXXXXXXXXXXXXX ...........",
+"...............  XXXXXXXXXXXXX XXX ..........",
+"..............  XXXXXXXXXXXXXX  XX ..........",
+".............. XXXXXXXXXXXXXXXX  X ..........",
+".............  XXXXXXX XXXXXXXXXXXX .........",
+"............. XXXXXXXX XXXXXXXXXXXX .........",
+"............  XXXXXXXX XXXXXXXXXXXX .........",
+"............ XXXXXXXXX XXXXXXXXXXXXX ........",
+"...........  XXXXXXXXXX XXXXXXXXXXXX ........",
+"...........  XXXXXXXXXX  XXXXXXXXXXXX .......",
+"........... XXXXXXXXXXX .  XXXXXXXXXXX ......",
+"..........  XXXXXXXXXXX ...  XXXXXXX   ......",
+"..........  XXXXXXXXXXXX .... XXXXXXX  ......",
+"..........  XXXXXXXXXXXX ..... XXXXXXX ......",
+"..........  XXXXXXXXXXXXX ..... XX XXX ......",
+".......... XXXXXXXXXXXXXXX ..... X    .......",
+".........  XXXXXXXXXXXXXXX ...... ...........",
+".........  XXXXXXXXXXXXXXXX .................",
+".........  XXXXXXXXXXXXXXXXX ................",
+".........  XXXXXXXXXXXXXXXXXX ...............",
+".........  XXXXXXXXXXXXXXXXXX ...............",
+".........  XXXXXXXXXXXXXXXXXXX ..............",
+".........  XXXXXXXXXXXXXXXXXXX ..............",
+".........                      ..............",
+"......... XXXXXXXXXXXXXXXXXXXXX .............",
+"........ XXXXXXXXXXXXXXXXXXXXXXX ............",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXX ...........",
+"......                             ..........",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+"...... XXXXX       XXXX       XXXX ..........",
+"...... XXXXX ..... XXXX ..... XXXX ..........",
+"...... XXXXX ..... XXXX ..... XXXX ..........",
+"......       .....      .....      ..........",
+".............................................",
+".............................................",
+"............................................."
+};
diff --git a/pixmaps/cvll49.xpm b/pixmaps/cvll49.xpm
new file mode 100644
index 0000000..8dfcda6
--- /dev/null
+++ b/pixmaps/cvll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *cvll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+"...........................  ...... .............",
+"...........................  ....   .............",
+".......................... XX .. XX .............",
+".......................... XX   XXX .............",
+".....................      XX X XX ..............",
+"...................  XXXXXXXXXXX XX .............",
+".................  XXXXXXXXXXXXXXXXX ............",
+"................  XXXXXXXXXXXXXXXXXX ............",
+"...............  XXXXXXXXXXXXXXX  XXX ...........",
+"..............  XXXXXXXXXXXXXXXXX  XX ...........",
+"..............  XXXXXXXXXXXXXXXXXX  X ...........",
+".............  XXXXXXXXX XXXXXXXXXX X ...........",
+".............  XXXXXXXXX XXXXXXXXXXXXX ..........",
+"............  XXXXXXXXXX XXXXXXXXXXXXX ..........",
+"............  XXXXXXXXXX XXXXXXXXXXXXXX .........",
+"...........  XXXXXXXXXXXX XXXXXXXXXXXXXX ........",
+"...........  XXXXXXXXXXXX XXXXXXXXXXXXXX ........",
+"...........  XXXXXXXXXXXX   XXXXXXXXXXXXX .......",
+"........... XXXXXXXXXXXXX .. XXXXXXXXXXXX .......",
+"..........  XXXXXXXXXXXXX ...  XXXXXXXX  X ......",
+"..........  XXXXXXXXXXXXX .....  XXXXXX  X ......",
+"..........  XXXXXXXXXXXXXX ...... XXXXXX X ......",
+"..........  XXXXXXXXXXXXXX ....... XX XXXX ......",
+"..........  XXXXXXXXXXXXXXX ....... X XXX .......",
+".......... XXXXXXXXXXXXXXXXX ....... .   ........",
+".........  XXXXXXXXXXXXXXXXXX ....... ...........",
+".........  XXXXXXXXXXXXXXXXXXX ..................",
+".........  XXXXXXXXXXXXXXXXXXXX .................",
+".........  XXXXXXXXXXXXXXXXXXXX .................",
+".........  XXXXXXXXXXXXXXXXXXXXX ................",
+".........  XXXXXXXXXXXXXXXXXXXXX ................",
+".......... XXXXXXXXXXXXXXXXXXXXX ................",
+"..........                       ................",
+".......... XXXXXXXXXXXXXXXXXXXXX ................",
+".......... XXXXXXXXXXXXXXXXXXXXX ................",
+"..........                       ................",
+"......... XXXXXXXXXXXXXXXXXXXXXXX ...............",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXX ..............",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXX .............",
+"......                               ............",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ............",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ............",
+"...... XXXXX       XXXXX       XXXXX ............",
+"...... XXXXX ..... XXXXX ..... XXXXX ............",
+"...... XXXXX ..... XXXXX ..... XXXXX ............",
+"...... XXXXX ..... XXXXX ..... XXXXX ............",
+"......       .....       .....       ............",
+"................................................."
+};
diff --git a/pixmaps/cvll54.xpm b/pixmaps/cvll54.xpm
new file mode 100644
index 0000000..284b7fd
--- /dev/null
+++ b/pixmaps/cvll54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *cvll54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"..... ................................................",
+"......................................................",
+"......................................................",
+".............................  ...... ................",
+".............................  ....   ................",
+"............................  X ..  X ................",
+"............................ XX    XX ................",
+"........................     XX   XX .................",
+".....................      XXXXXX  X  ................",
+"...................    XXXXXXXXXXXXXX  ...............",
+"..................    XXXXXXXXXXXXXXX  ...............",
+".................   XXXXXXXXXXXXXX  XX  ..............",
+"................   XXXXXXXXXXXXXXXX  X  ..............",
+"...............    XXXXXXXXXXXXXXXXX  X ..............",
+"..............    XXXXXXXX XXXXXXXXXX X  .............",
+"..............    XXXXXXX  XXXXXXXXXXXX  .............",
+".............     XXXXXXX  XXXXXXXXXXXXX .............",
+".............    XXXXXXXX  XXXXXXXXXXXXX  ............",
+".............    XXXXXXXXX  XXXXXXXXXXXXX  ...........",
+"............    XXXXXXXXXXX   XXXXXXXXXXXX ...........",
+"............    XXXXXXXXXX     XXXXXXXXXXX  ..........",
+"............    XXXXXXXXXX  ..   XXXXXXXXXX ..........",
+"............   XXXXXXXXXXX  ...    XXXXXX    .........",
+"...........    XXXXXXXXXXXX .....   XXXXX  X .........",
+"...........    XXXXXXXXXXXX  ......  XX XX X .........",
+"...........    XXXXXXXXXXXXX .......  X  XX  .........",
+"...........    XXXXXXXXXXXXX  .......  X    ..........",
+"...........    XXXXXXXXXXXXXX  .......     ...........",
+"..........    XXXXXXXXXXXXXXXX  ....... ..............",
+"..........    XXXXXXXXXXXXXXXXX  .....................",
+"..........    XXXXXXXXXXXXXXXXXX  ....................",
+"..........    XXXXXXXXXXXXXXXXXXX ....................",
+"..........    XXXXXXXXXXXXXXXXXXX  ...................",
+"..........    XXXXXXXXXXXXXXXXXXXX ...................",
+"..........    XXXXXXXXXXXXXXXXXXXX  ..................",
+"..........    XXXXXXXXXXXXXXXXXXXXX ..................",
+"..........    XXXXXXXXXXXXXXXXXXXXX ..................",
+"...........                         ..................",
+"...........                          .................",
+"..........   XXXXXXXXXXXXXXXXXXXXXX   ........ .......",
+".........   XXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"........   XXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+".......                                  .............",
+".......                                  .............",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".......  XXXX         XXXX        XXXXX  .............",
+".......  XXXX         XXXX        XXXXX  .............",
+".......  XXXX  .....  XXXX  ....  XXXXX  .............",
+".......  XXXX  .....  XXXX  ....  XXXXX  .............",
+".......        .....        ....         .............",
+".......        .....        ....         .............",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/cvll58.xpm b/pixmaps/cvll58.xpm
new file mode 100644
index 0000000..0258f9e
--- /dev/null
+++ b/pixmaps/cvll58.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *cvll58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"..........................................................",
+"..........................................................",
+"................................ ........ ................",
+"...............................   .....   ................",
+"..............................  X ....    ................",
+".............................  XX  ..  X  ................",
+"..........................     XXX    XX  ................",
+"........................       XXX    XX  ................",
+"......................    XXX XXXX XX  XX ................",
+"....................    XXXXXXXXXXXXXXXXX  ...............",
+"...................   XXXXXXXXXXXXXXXXXXXX  ..............",
+"..................   XXXXXXXXXXXXXXXXXXXXX  ..............",
+".................   XXXXXXXXXXXXXXXXXX XXXX  .............",
+"................   XXXXXXXXXXXXXXXXXXX   XX  .............",
+"................  XXXXXXXXXXXXXXXXXXXXX  XX  .............",
+"...............   XXXXXXXXXXXXXXXXXXXXXX  XX .............",
+"..............   XXXXXXXXXX XXXXXXXXXXXXXXXX  ............",
+"..............   XXXXXXXXXX  XXXXXXXXXXXXXXX  ............",
+".............   XXXXXXXXXXX  XXXXXXXXXXXXXXXX ............",
+".............   XXXXXXXXXXX  XXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXX  XXXXXXXXXXXXXXXX ...........",
+"............   XXXXXXXXXXXXX   XXXXXXXXXXXXXXX  ..........",
+"............   XXXXXXXXXXXX  .  XXXXXXXXXXXXXXX  .........",
+"............   XXXXXXXXXXXX  ..  XXXXXXXXXXXXXXX .........",
+"...........    XXXXXXXXXXXX  ...   XXXXXXXXXXXXX  ........",
+"...........   XXXXXXXXXXXXX  .....  XXXXXXXXXXXXX ........",
+"...........   XXXXXXXXXXXXXX  .....   XXXXXXXX  X  .......",
+"..........    XXXXXXXXXXXXXX  .......  XXXXXXX  X  .......",
+"..........    XXXXXXXXXXXXXXX  .......  XXXXXXXXX  .......",
+"..........   XXXXXXXXXXXXXXXXX  .......  XX  XXXX  .......",
+"..........   XXXXXXXXXXXXXXXXXX  .......  XX  XXX  .......",
+"..........   XXXXXXXXXXXXXXXXXXX  .......  X  XX  ........",
+"..........   XXXXXXXXXXXXXXXXXXXX  .......       .........",
+".........    XXXXXXXXXXXXXXXXXXXXX  ......................",
+".........    XXXXXXXXXXXXXXXXXXXXX  ......................",
+".........   XXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".........   XXXXXXXXXXXXXXXXXXXXXXXX  ....................",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXX  ..................",
+".........                               ..................",
+"..........                              ..................",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXXX  .................",
+"........   XXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".......   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"......                                      ..............",
+"......                                      ..............",
+"......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"......  XXXXX         XXXXXX         XXXXX  ..............",
+"......  XXXXX         XXXXXX         XXXXX  ..............",
+"......  XXXXX  .....  XXXXXX  .....  XXXXX  ..............",
+"......  XXXXX  .....  XXXXXX  .....  XXXXX  ..............",
+"......         .....          .....         ..............",
+"......         .....          .....         ..............",
+"..........................................................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/cvll64.xpm b/pixmaps/cvll64.xpm
new file mode 100644
index 0000000..e3c9261
--- /dev/null
+++ b/pixmaps/cvll64.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char *cvll64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"................................................................",
+"................................................................",
+"................................................................",
+".................................... ........ ..................",
+"...................................   .....   ..................",
+"..................................  X ....    ..................",
+".................................  XX  ..  X  ..................",
+"..............................     XXX    XX  ..................",
+"............................       XXX    XX  ..................",
+"..........................    XXX XXXX XX  XX ..................",
+"........................    XXXXXXXXXXXXXXXXX  .................",
+".......................   XXXXXXXXXXXXXXXXXXXX  ................",
+"......................   XXXXXXXXXXXXXXXXXXXXX  ................",
+".....................   XXXXXXXXXXXXXXXXXX XXXX  ...............",
+"....................   XXXXXXXXXXXXXXXXXXX   XX  ...............",
+"....................  XXXXXXXXXXXXXXXXXXXXX  XX  ...............",
+"...................   XXXXXXXXXXXXXXXXXXXXXX  XX ...............",
+"..................   XXXXXXXXXX XXXXXXXXXXXXXXXX  ..............",
+"..................   XXXXXXXXXX  XXXXXXXXXXXXXXX  ..............",
+".................   XXXXXXXXXXX  XXXXXXXXXXXXXXXX ..............",
+".................   XXXXXXXXXXX  XXXXXXXXXXXXXXXX  .............",
+".................   XXXXXXXXXXXX  XXXXXXXXXXXXXXXX .............",
+"................   XXXXXXXXXXXXX   XXXXXXXXXXXXXXX  ............",
+"................   XXXXXXXXXXXX  .  XXXXXXXXXXXXXXX  ...........",
+"................   XXXXXXXXXXXX  ..  XXXXXXXXXXXXXXX ...........",
+"...............    XXXXXXXXXXXX  ...   XXXXXXXXXXXXX  ..........",
+"...............    XXXXXXXXXXXX  .....  XXXXXXXXXXXXX ..........",
+"...............   XXXXXXXXXXXXX  ......   XXXXXXXX  X  .........",
+"...............   XXXXXXXXXXXXXX  .......  XXXXXXX  X  .........",
+"..............    XXXXXXXXXXXXXX  ........  XXXXXXXXX  .........",
+"..............    XXXXXXXXXXXXXXX  ........  XX  XXXX  .........",
+"..............   XXXXXXXXXXXXXXXXX  ........  XX  XXX  .........",
+"..............   XXXXXXXXXXXXXXXXXX  ........  X  XX  ..........",
+"..............   XXXXXXXXXXXXXXXXXXX  ........       ...........",
+"..............   XXXXXXXXXXXXXXXXXXXX  .......  ................",
+".............    XXXXXXXXXXXXXXXXXXXXX  ........................",
+".............    XXXXXXXXXXXXXXXXXXXXX  ........................",
+".............   XXXXXXXXXXXXXXXXXXXXXXX  .......................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXX  ......................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXXX  ....................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXXX  ....................",
+".............                               ....................",
+"..............                              ....................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXXX   ...................",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..................",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".........                                        ...............",
+".........                                        ...............",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...............",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...............",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...............",
+".........  XXXXX          XXXXXX          XXXXX  ...............",
+".........  XXXXX          XXXXXX          XXXXX  ...............",
+".........  XXXXX  ......  XXXXXX  ......  XXXXX  ...............",
+".........  XXXXX  ......  XXXXXX  ......  XXXXX  ...............",
+".........  XXXXX  ......  XXXXXX  ......  XXXXX  ...............",
+".........         ......          ......         ...............",
+".........         ......          ......         ...............",
+"................................................................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/cvll72.xpm b/pixmaps/cvll72.xpm
new file mode 100644
index 0000000..72a268a
--- /dev/null
+++ b/pixmaps/cvll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *cvll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................  ......... ....................",
+".......................................    .......   ...................",
+".......................................    .....     ...................",
+"......................................      ...     ....................",
+"......................................  XX   .   X  ....................",
+"..................................      XXX     XX  ....................",
+"...............................         XXX    XXX  ....................",
+".............................      XXX  XXX     XX  ....................",
+"...........................      XXXXX XXXXXXX   X   ...................",
+"..........................     XXXXXXXXXXXXXXXXX XX   ..................",
+".........................    XXXXXXXXXXXXXXXXXXXXXXX   .................",
+"........................    XXXXXXXXXXXXXXXXXXXXXXXXX  .................",
+".......................    XXXXXXXXXXXXXXXXXXXX    XX   ................",
+"......................    XXXXXXXXXXXXXXXXXXXXXX    XX  ................",
+".....................     XXXXXXXXXXXXXXXXXXXXXX    XX  ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXX   XX  ................",
+"....................    XXXXXXXXXXX  XXXXXXXXXXXXXX XX   ...............",
+"....................    XXXXXXXXXXX  XXXXXXXXXXXXXXXXXX  ...............",
+"...................    XXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX  ...............",
+"...................    XXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX  ..............",
+"..................    XXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXX   .............",
+"..................    XXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXX   ............",
+".................    XXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXX   ...........",
+".................    XXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXX  ...........",
+".................    XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXX   ..........",
+"................    XXXXXXXXXXXXXXXX  ..    XXXXXXXXXXXXXXXX  ..........",
+"................    XXXXXXXXXXXXXXXX  ....    XXXXXXXXXXX  X   .........",
+"................    XXXXXXXXXXXXXXXX   .....    XXXXXXXXX   X  .........",
+"................    XXXXXXXXXXXXXXXXX  .......   XXXXXXXX   X  .........",
+"...............     XXXXXXXXXXXXXXXXX   .......   XXXXXXXX  X  .........",
+"...............    XXXXXXXXXXXXXXXXXXX  ........   XX  XXXXXX  .........",
+"...............    XXXXXXXXXXXXXXXXXXX   ........   X   XXXXX  .........",
+"...............    XXXXXXXXXXXXXXXXXXXX   ........       XXX   .........",
+"...............    XXXXXXXXXXXXXXXXXXXXX   ........  X        ..........",
+"...............    XXXXXXXXXXXXXXXXXXXXXX   .......         ............",
+"..............     XXXXXXXXXXXXXXXXXXXXXXX   .......   .................",
+"..............     XXXXXXXXXXXXXXXXXXXXXXXX   ..........................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXX   .........................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXX  .........................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ........................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXXX   .......................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ......................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......................",
+"..............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......................",
+"..............                                    ......................",
+"..............                                    ......................",
+".............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .....................",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...................",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..................",
+".........                                              .................",
+".........                                              .................",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .................",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .................",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .................",
+".........  XXXXXXX           XXXXXX           XXXXXXX  .................",
+".........  XXXXXXX           XXXXXX           XXXXXXX  .................",
+".........  XXXXXXX  .......  XXXXXX  .......  XXXXXXX  .................",
+".........  XXXXXXX  .......  XXXXXX  .......  XXXXXXX  .................",
+".........  XXXXXXX  .......  XXXXXX  .......  XXXXXXX  .................",
+".........           .......          .......           .................",
+".........           .......          .......           .................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/dkdd33.xpm b/pixmaps/dkdd33.xpm
new file mode 100644
index 0000000..d78eb79
--- /dev/null
+++ b/pixmaps/dkdd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *dkdd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+"................ ................",
+"...............   ...............",
+"..............     ..............",
+".............       .............",
+"............         ............",
+"...........           ...........",
+".......... . ....... . ..........",
+"......     . .     . .     ......",
+"......     ...     ...     ......",
+"......                     ......",
+"......                     ......",
+"......  .................  ......",
+".......                   .......",
+"........  .............  ........",
+".........               .........",
+".........               .........",
+".........               .........",
+".........               .........",
+".........               .........",
+".........               .........",
+"......... ............. .........",
+"........                 ........",
+"....... ................. .......",
+".......                   .......",
+".......                   .......",
+".....   .................   .....",
+".....                       .....",
+".....                       .....",
+".................................",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/dkdd49.xpm b/pixmaps/dkdd49.xpm
new file mode 100644
index 0000000..0a467fb
--- /dev/null
+++ b/pixmaps/dkdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *dkdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+"........................ ........................",
+"......................     ......................",
+"....................         ....................",
+"...................           ...................",
+".................               .................",
+"...............                   ...............",
+"..............                     ..............",
+".........      ..   .........   ..      .........",
+".........       .   .       .   .       .........",
+".........       .   .       .   .       .........",
+".........       .   .       .   .       .........",
+".........       .....       .....       .........",
+".........                               .........",
+".........                               .........",
+".........  ...........................  .........",
+"..........                             ..........",
+"...........                           ...........",
+"............                         ............",
+"............. ..................... .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+"............. ..................... .............",
+"............                         ............",
+"............                          ...........",
+"...........                           ...........",
+"..........  .........................  ..........",
+"..........                             ..........",
+"..........                             ..........",
+"..........                             ..........",
+"..........                             ..........",
+".......    ...........................    .......",
+".......                                   .......",
+".......                                   .......",
+".......                                   .......",
+".......                                   .......",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/dkdd72.xpm b/pixmaps/dkdd72.xpm
new file mode 100644
index 0000000..d6edb72
--- /dev/null
+++ b/pixmaps/dkdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *dkdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................    ..................................",
+"................................        ................................",
+"..............................            ..............................",
+"............................                ............................",
+"..........................                    ..........................",
+"........................                        ........................",
+"......................                            ......................",
+"....................                                ....................",
+"...................   ....   ..............   ....   ...................",
+".............        .....   ..............   .....        .............",
+".............           ..   ..          ..   ..           .............",
+".............           ..   ..          ..   ..           .............",
+".............           ..   ..          ..   ..           .............",
+".............           .......          .......           .............",
+".............           .......          .......           .............",
+".............                                              .............",
+".............                                              .............",
+".............                                              .............",
+".............                                              .............",
+".............   ........................................   .............",
+".............   ........................................   .............",
+"..............                                            ..............",
+"...............                                          ...............",
+".................                                      .................",
+"..................   ..............................   ..................",
+"...................  ..............................  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................  ..............................  ...................",
+"..................   ..............................   ..................",
+".................                                      .................",
+"................                                        ................",
+"...............                                          ...............",
+"..............   ......................................   ..............",
+"..............   ......................................   ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+".........       ........................................       .........",
+".........       ........................................       .........",
+".........                                                      .........",
+".........                                                      .........",
+".........                                                      .........",
+".........                                                      .........",
+".........                                                      .........",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/dkdl33.xpm b/pixmaps/dkdl33.xpm
new file mode 100644
index 0000000..f3ea94f
--- /dev/null
+++ b/pixmaps/dkdl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *dkdl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+"................ ................",
+"...............   ...............",
+"..............     ..............",
+".............       .............",
+"............         ............",
+"...........           ...........",
+".......... . ....... . ..........",
+"......     . .     . .     ......",
+"......     ...     ...     ......",
+"......                     ......",
+"......                     ......",
+"......  .................  ......",
+".......                   .......",
+"........  .............  ........",
+".........               .........",
+".........               .........",
+".........               .........",
+".........               .........",
+".........               .........",
+".........               .........",
+"......... ............. .........",
+"........                 ........",
+"....... ................. .......",
+".......                   .......",
+".......                   .......",
+".....   .................   .....",
+".....                       .....",
+".....                       .....",
+".................................",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/dkdl49.xpm b/pixmaps/dkdl49.xpm
new file mode 100644
index 0000000..68b8c45
--- /dev/null
+++ b/pixmaps/dkdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *dkdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+"........................ ........................",
+"......................     ......................",
+"....................         ....................",
+"...................           ...................",
+".................               .................",
+"...............                   ...............",
+"..............                     ..............",
+".........      ..   .........   ..      .........",
+".........       .   .       .   .       .........",
+".........       .   .       .   .       .........",
+".........       .   .       .   .       .........",
+".........       .....       .....       .........",
+".........                               .........",
+".........                               .........",
+".........  ...........................  .........",
+"..........                             ..........",
+"...........                           ...........",
+"............                         ............",
+"............. ..................... .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+".............                       .............",
+"............. ..................... .............",
+"............                         ............",
+"............                          ...........",
+"...........                           ...........",
+"..........  .........................  ..........",
+"..........                             ..........",
+"..........                             ..........",
+"..........                             ..........",
+"..........                             ..........",
+".......    ...........................    .......",
+".......                                   .......",
+".......                                   .......",
+".......                                   .......",
+".......                                   .......",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/dkdl72.xpm b/pixmaps/dkdl72.xpm
new file mode 100644
index 0000000..e381da4
--- /dev/null
+++ b/pixmaps/dkdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *dkdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................    ..................................",
+"................................        ................................",
+"..............................            ..............................",
+"............................                ............................",
+"..........................                    ..........................",
+"........................                        ........................",
+"......................                            ......................",
+"....................                                ....................",
+"...................   ....   ..............   ....   ...................",
+".............        .....   ..............   .....        .............",
+".............           ..   ..          ..   ..           .............",
+".............           ..   ..          ..   ..           .............",
+".............           ..   ..          ..   ..           .............",
+".............           .......          .......           .............",
+".............           .......          .......           .............",
+".............                                              .............",
+".............                                              .............",
+".............                                              .............",
+".............                                              .............",
+".............   ........................................   .............",
+".............   ........................................   .............",
+"..............                                            ..............",
+"...............                                          ...............",
+".................                                      .................",
+"..................   ..............................   ..................",
+"...................  ..............................  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................                                  ...................",
+"...................  ..............................  ...................",
+"..................   ..............................   ..................",
+".................                                      .................",
+"................                                        ................",
+"...............                                          ...............",
+"..............   ......................................   ..............",
+"..............   ......................................   ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+".........       ........................................       .........",
+".........       ........................................       .........",
+".........                                                      .........",
+".........                                                      .........",
+".........                                                      .........",
+".........                                                      .........",
+".........                                                      .........",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/dkld33.xpm b/pixmaps/dkld33.xpm
new file mode 100644
index 0000000..d903663
--- /dev/null
+++ b/pixmaps/dkld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *dkld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+"................ ................",
+"............... X ...............",
+".............. XXX ..............",
+"............. XXXXX .............",
+"............ XXXXXXX ............",
+"........... XXXXXXXXX ...........",
+".......... XXXXXXXXXXX ..........",
+"......     XXX     XXX     ......",
+"...... XXX XXX XXX XXX XXX ......",
+"...... XXX     XXX     XXX ......",
+"...... XXXXXXXXXXXXXXXXXXX ......",
+"......                     ......",
+"....... XXXXXXXXXXXXXXXXX .......",
+"........                 ........",
+"......... XXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXX .........",
+".........               .........",
+"........ XXXXXXXXXXXXXXX ........",
+".......                   .......",
+"....... XXXXXXXXXXXXXXXXX .......",
+"....... XXXXXXXXXXXXXXXXX .......",
+".....                       .....",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+".....                       .....",
+".................................",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/dkld49.xpm b/pixmaps/dkld49.xpm
new file mode 100644
index 0000000..4896124
--- /dev/null
+++ b/pixmaps/dkld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *dkld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+"........................ ........................",
+"......................  X  ......................",
+"....................  XXXXX  ....................",
+"................... XXXXXXXXX ...................",
+".................  XXXXXXXXXXX  .................",
+"...............  XXXXXXXXXXXXXXX  ...............",
+".............. XXXXXXXXXXXXXXXXXXX ..............",
+".........       XXXXX       XXXXX       .........",
+"......... XXXXX XXXXX XXXXX XXXXX XXXXX .........",
+"......... XXXXX XXXXX XXXXX XXXXX XXXXX .........",
+"......... XXXXX XXXXX XXXXX XXXXX XXXXX .........",
+"......... XXXXX       XXXXX       XXXXX .........",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+".........                               .........",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+"........... XXXXXXXXXXXXXXXXXXXXXXXXX ...........",
+"............ XXXXXXXXXXXXXXXXXXXXXXX ............",
+".............                       .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+".............                       .............",
+"............ XXXXXXXXXXXXXXXXXXXXXXX ............",
+"............ XXXXXXXXXXXXXXXXXXXXXXXX ...........",
+"........... XXXXXXXXXXXXXXXXXXXXXXXXX ...........",
+"..........                             ..........",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+".......                                   .......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+".......                                   .......",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/dkld72.xpm b/pixmaps/dkld72.xpm
new file mode 100644
index 0000000..3f95d58
--- /dev/null
+++ b/pixmaps/dkld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *dkld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"...................................  ...................................",
+".................................      .................................",
+"...............................    XX    ...............................",
+".............................    XXXXXX    .............................",
+"............................   XXXXXXXXXX   ............................",
+"..........................   XXXXXXXXXXXXXX   ..........................",
+"........................    XXXXXXXXXXXXXXXX    ........................",
+"......................    XXXXXXXXXXXXXXXXXXXX    ......................",
+"....................    XXXXXXXXXXXXXXXXXXXXXXXX    ....................",
+"...................   XXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...................",
+".............           XXXXXXX          XXXXXXX           .............",
+".............           XXXXXXX          XXXXXXX           .............",
+".............  XXXXXXX  XXXXXXX  XXXXXX  XXXXXXX  XXXXXXX  .............",
+".............  XXXXXXX  XXXXXXX  XXXXXX  XXXXXXX  XXXXXXX  .............",
+".............  XXXXXXX  XXXXXXX  XXXXXX  XXXXXXX  XXXXXXX  .............",
+".............  XXXXXXX           XXXXXX           XXXXXXX  .............",
+".............  XXXXXXX           XXXXXX           XXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............                                              .............",
+".............                                              .............",
+"..............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"...............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...............",
+".................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"..................                                    ..................",
+"...................                                  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................                                  ...................",
+"..................                                    ..................",
+".................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+"...............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+".........                                                      .........",
+".........                                                      .........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+".........                                                      .........",
+".........                                                      .........",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/dkll33.xpm b/pixmaps/dkll33.xpm
new file mode 100644
index 0000000..080a897
--- /dev/null
+++ b/pixmaps/dkll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *dkll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+"................ ................",
+"............... X ...............",
+".............. XXX ..............",
+"............. XXXXX .............",
+"............ XXXXXXX ............",
+"........... XXXXXXXXX ...........",
+".......... XXXXXXXXXXX ..........",
+"......     XXX     XXX     ......",
+"...... XXX XXX XXX XXX XXX ......",
+"...... XXX     XXX     XXX ......",
+"...... XXXXXXXXXXXXXXXXXXX ......",
+"......                     ......",
+"....... XXXXXXXXXXXXXXXXX .......",
+"........                 ........",
+"......... XXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXX .........",
+".........               .........",
+"........ XXXXXXXXXXXXXXX ........",
+".......                   .......",
+"....... XXXXXXXXXXXXXXXXX .......",
+"....... XXXXXXXXXXXXXXXXX .......",
+".....                       .....",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+".....                       .....",
+".................................",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/dkll49.xpm b/pixmaps/dkll49.xpm
new file mode 100644
index 0000000..e36435e
--- /dev/null
+++ b/pixmaps/dkll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *dkll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+"........................ ........................",
+"......................  X  ......................",
+"....................  XXXXX  ....................",
+"................... XXXXXXXXX ...................",
+".................  XXXXXXXXXXX  .................",
+"...............  XXXXXXXXXXXXXXX  ...............",
+".............. XXXXXXXXXXXXXXXXXXX ..............",
+".........       XXXXX       XXXXX       .........",
+"......... XXXXX XXXXX XXXXX XXXXX XXXXX .........",
+"......... XXXXX XXXXX XXXXX XXXXX XXXXX .........",
+"......... XXXXX XXXXX XXXXX XXXXX XXXXX .........",
+"......... XXXXX       XXXXX       XXXXX .........",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+".........                               .........",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+"........... XXXXXXXXXXXXXXXXXXXXXXXXX ...........",
+"............ XXXXXXXXXXXXXXXXXXXXXXX ............",
+".............                       .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+".............                       .............",
+"............ XXXXXXXXXXXXXXXXXXXXXXX ............",
+"............ XXXXXXXXXXXXXXXXXXXXXXXX ...........",
+"........... XXXXXXXXXXXXXXXXXXXXXXXXX ...........",
+"..........                             ..........",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........",
+".......                                   .......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+".......                                   .......",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/dkll72.xpm b/pixmaps/dkll72.xpm
new file mode 100644
index 0000000..286e42d
--- /dev/null
+++ b/pixmaps/dkll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *dkll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"...................................  ...................................",
+".................................      .................................",
+"...............................    XX    ...............................",
+".............................    XXXXXX    .............................",
+"............................   XXXXXXXXXX   ............................",
+"..........................   XXXXXXXXXXXXXX   ..........................",
+"........................    XXXXXXXXXXXXXXXX    ........................",
+"......................    XXXXXXXXXXXXXXXXXXXX    ......................",
+"....................    XXXXXXXXXXXXXXXXXXXXXXXX    ....................",
+"...................   XXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...................",
+".............           XXXXXXX          XXXXXXX           .............",
+".............           XXXXXXX          XXXXXXX           .............",
+".............  XXXXXXX  XXXXXXX  XXXXXX  XXXXXXX  XXXXXXX  .............",
+".............  XXXXXXX  XXXXXXX  XXXXXX  XXXXXXX  XXXXXXX  .............",
+".............  XXXXXXX  XXXXXXX  XXXXXX  XXXXXXX  XXXXXXX  .............",
+".............  XXXXXXX           XXXXXX           XXXXXXX  .............",
+".............  XXXXXXX           XXXXXX           XXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............                                              .............",
+".............                                              .............",
+"..............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"...............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...............",
+".................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"..................                                    ..................",
+"...................                                  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...................",
+"...................                                  ...................",
+"..................                                    ..................",
+".................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+"...............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+".........                                                      .........",
+".........                                                      .........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+".........                                                      .........",
+".........                                                      .........",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/edd33.xpm b/pixmaps/edd33.xpm
new file mode 100644
index 0000000..f2acddf
--- /dev/null
+++ b/pixmaps/edd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *edd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+"................      ...........",
+".............            ........",
+"............ .             ......",
+"...........  .              .....",
+"..........  .                 ...",
+"..........  .            ...   ..",
+"..........  .           .       .",
+"..........  .                   .",
+"..........  .                   .",
+"..........  .                   .",
+"..........                      .",
+"..........                     ..",
+".........      ..       .      ..",
+"......... ..            .      ..",
+"..    ...               .      ..",
+"..    ... ..                  ...",
+"..   ....               .     ...",
+".   ..... .. .         ...    ...",
+".   .....    .  .   .......   ...",
+".   .... .     .   ........   ...",
+".   .... .   ..  ..........   ...",
+".   ... ..   .. ............  ...",
+".   .  ..   ..  ............ ....",
+".    ... . ..   .................",
+".     .   ..    .................",
+"       ....     .................",
+"..  ....       ..................",
+".       ..     ..................",
+"....           ..................",
+".....         ...................",
+"......       ....................",
+"........   ......................"
+};
diff --git a/pixmaps/edd49.xpm b/pixmaps/edd49.xpm
new file mode 100644
index 0000000..10bc839
--- /dev/null
+++ b/pixmaps/edd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *edd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+"..........................        ...............",
+"....................                  ...........",
+"..................   ..                  ........",
+".................   .                     .......",
+"................   .                      .......",
+"................  .                      .    ...",
+"................  .                   ...     ...",
+"................  .                 ..        ...",
+"................  .                 .          ..",
+"................  .                            ..",
+"................  .                            ..",
+"................  .                            ..",
+"................  .                            ..",
+"................                               ..",
+"................                               ..",
+"................                               ..",
+"...............                               ...",
+"...............        ..                     ...",
+"..............         ..                     ...",
+".............. ...                            ...",
+".....   ......                                ...",
+"....     .....                       .       ....",
+"....     ..... ...                   ..      ....",
+"....    ......                      ...      ....",
+"....    ......                    .....      ....",
+"...    ........ ..  .            .......     ....",
+"...    .......     .           .........     ....",
+"...    ...... .    .  .      ...........     ....",
+"...    ...... .     ..    ...............    ....",
+"...    ..... ..    .     ................    ....",
+"...    ..... ..    ..   ..................   ....",
+"...    .... .. .  ..   ...................   ....",
+"...    ... .. .. ...   ....................  ....",
+"...     . .. ... ..    ..........................",
+"....     .. ... ..     ..........................",
+"....     . ... ..      ..........................",
+"... .     ..  ..       ..........................",
+".         . ... .      ..........................",
+"......   . ..  ..      ..........................",
+"...... ..... ...       ..........................",
+".......               ...........................",
+"........             ............................",
+".........           .............................",
+"...........        ..............................",
+".............    ................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/edd72.xpm b/pixmaps/edd72.xpm
new file mode 100644
index 0000000..51e42cb
--- /dev/null
+++ b/pixmaps/edd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *edd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"......................................            ......................",
+"..............................                       ...................",
+"...........................                             ................",
+"..........................    ..                          ..............",
+".........................    ..                              ...........",
+"........................    ...                               ..........",
+".......................    ...                                 .........",
+"......................     ..                                      .....",
+"......................    ...                              .....    ....",
+"......................    ..                              ......     ...",
+"......................    ..                           .....         ...",
+"......................    ..                         .....           ...",
+"......................    ..                         ...             ...",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................                                                ..",
+"......................                                                ..",
+"......................                                                ..",
+"......................                                                ..",
+".....................                                                 ..",
+"....................             ...                                 ...",
+"....................             ...                                 ...",
+"....................             ...                   ..            ...",
+"....................                                   ...           ...",
+"....................  ....                              ..           ...",
+"....................  ....                              ..          ....",
+".....   ............                                    .           ....",
+".....     ..........                                                ....",
+"....       .........  ....                              .           ....",
+"....        ........  ....                             ..           ....",
+"....       .........                                  ...           ....",
+"...       ..........                                 .....          ....",
+"...      ...........  ...                          .......         .....",
+"...      ...........  ...                        .........         .....",
+"...      ............                           ...........        .....",
+"...      ...........        ..                .............        .....",
+"..       ..........        ..              ................        .....",
+"..       .........  .     ..             ...................       .....",
+"..       ......... ..      ...   ..     ....................       .....",
+"..       ........  ..        .. ..    ......................       .....",
+"..       ........ ....     .  ...   .........................      .....",
+"..       .......  ...      ..  .   ...........................     .....",
+"..       ......  ...  .   ....     ............................    .....",
+"..       .....  ...  ..   ...     ..............................   .....",
+"..       ....  ...  ...  ...      ............................... ......",
+"..        ..  ...  ...  ...       ......................................",
+"..        .  ...  ...  ...       .......................................",
+"...         ...  ...  ...        .......................................",
+"...        ...  ...  ...         .......................................",
+"...        ..  ...  ...          .......................................",
+"...           ...  ...           .......................................",
+"....          ..  ...            .......................................",
+"...              ...  .          .......................................",
+".              ...   ..          .......................................",
+"......     .....   ...           .......................................",
+".......  ...                    ........................................",
+".....                           ........................................",
+".........                      .........................................",
+"..........                     .........................................",
+"...........                   ..........................................",
+"............                 ...........................................",
+".............               ............................................",
+"...............           ..............................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/edl33.xpm b/pixmaps/edl33.xpm
new file mode 100644
index 0000000..01f8a7d
--- /dev/null
+++ b/pixmaps/edl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *edl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+"................      ...........",
+".............            ........",
+"............ .             ......",
+"...........  .              .....",
+"..........  .                 ...",
+"..........  .            ...   ..",
+"..........  .           .       .",
+"..........  .                   .",
+"..........  .                   .",
+"..........  .                   .",
+"..........                      .",
+"..........                     ..",
+".........      ..       .      ..",
+"......... ..            .      ..",
+"..    ...               .      ..",
+"..    ... ..                  ...",
+"..   ....               .     ...",
+".   ..... .. .         ...    ...",
+".   .....    .  .   .......   ...",
+".   .... .     .   ........   ...",
+".   .... .   ..  ..........   ...",
+".   ... ..   .. ............  ...",
+".   .  ..   ..  ............ ....",
+".    ... . ..   .................",
+".     .   ..    .................",
+"       ....     .................",
+"..  ....       ..................",
+".       ..     ..................",
+"....           ..................",
+".....         ...................",
+"......       ....................",
+"........   ......................"
+};
diff --git a/pixmaps/edl49.xpm b/pixmaps/edl49.xpm
new file mode 100644
index 0000000..69fc2bf
--- /dev/null
+++ b/pixmaps/edl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *edl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+"..........................        ...............",
+"....................                  ...........",
+"..................   ..                  ........",
+".................   .                     .......",
+"................   .                      .......",
+"................  .                      .    ...",
+"................  .                   ...     ...",
+"................  .                 ..        ...",
+"................  .                 .          ..",
+"................  .                            ..",
+"................  .                            ..",
+"................  .                            ..",
+"................  .                            ..",
+"................                               ..",
+"................                               ..",
+"................                               ..",
+"...............                               ...",
+"...............        ..                     ...",
+"..............         ..                     ...",
+".............. ...                            ...",
+".....   ......                                ...",
+"....     .....                       .       ....",
+"....     ..... ...                   ..      ....",
+"....    ......                      ...      ....",
+"....    ......                    .....      ....",
+"...    ........ ..  .            .......     ....",
+"...    .......     .           .........     ....",
+"...    ...... .    .  .      ...........     ....",
+"...    ...... .     ..    ...............    ....",
+"...    ..... ..    .     ................    ....",
+"...    ..... ..    ..   ..................   ....",
+"...    .... .. .  ..   ...................   ....",
+"...    ... .. .. ...   ....................  ....",
+"...     . .. ... ..    ..........................",
+"....     .. ... ..     ..........................",
+"....     . ... ..      ..........................",
+"... .     ..  ..       ..........................",
+".         . ... .      ..........................",
+"......   . ..  ..      ..........................",
+"...... ..... ...       ..........................",
+".......               ...........................",
+"........             ............................",
+".........           .............................",
+"...........        ..............................",
+".............    ................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/edl72.xpm b/pixmaps/edl72.xpm
new file mode 100644
index 0000000..a8572bd
--- /dev/null
+++ b/pixmaps/edl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *edl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"......................................            ......................",
+"..............................                       ...................",
+"...........................                             ................",
+"..........................    ..                          ..............",
+".........................    ..                              ...........",
+"........................    ...                               ..........",
+".......................    ...                                 .........",
+"......................     ..                                      .....",
+"......................    ...                              .....    ....",
+"......................    ..                              ......     ...",
+"......................    ..                           .....         ...",
+"......................    ..                         .....           ...",
+"......................    ..                         ...             ...",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................    ..                                          ..",
+"......................                                                ..",
+"......................                                                ..",
+"......................                                                ..",
+"......................                                                ..",
+".....................                                                 ..",
+"....................             ...                                 ...",
+"....................             ...                                 ...",
+"....................             ...                   ..            ...",
+"....................                                   ...           ...",
+"....................  ....                              ..           ...",
+"....................  ....                              ..          ....",
+".....   ............                                    .           ....",
+".....     ..........                                                ....",
+"....       .........  ....                              .           ....",
+"....        ........  ....                             ..           ....",
+"....       .........                                  ...           ....",
+"...       ..........                                 .....          ....",
+"...      ...........  ...                          .......         .....",
+"...      ...........  ...                        .........         .....",
+"...      ............                           ...........        .....",
+"...      ...........        ..                .............        .....",
+"..       ..........        ..              ................        .....",
+"..       .........  .     ..             ...................       .....",
+"..       ......... ..      ...   ..     ....................       .....",
+"..       ........  ..        .. ..    ......................       .....",
+"..       ........ ....     .  ...   .........................      .....",
+"..       .......  ...      ..  .   ...........................     .....",
+"..       ......  ...  .   ....     ............................    .....",
+"..       .....  ...  ..   ...     ..............................   .....",
+"..       ....  ...  ...  ...      ............................... ......",
+"..        ..  ...  ...  ...       ......................................",
+"..        .  ...  ...  ...       .......................................",
+"...         ...  ...  ...        .......................................",
+"...        ...  ...  ...         .......................................",
+"...        ..  ...  ...          .......................................",
+"...           ...  ...           .......................................",
+"....          ..  ...            .......................................",
+"...              ...  .          .......................................",
+".              ...   ..          .......................................",
+"......     .....   ...           .......................................",
+".......  ...                    ........................................",
+".....                           ........................................",
+".........                      .........................................",
+"..........                     .........................................",
+"...........                   ..........................................",
+"............                 ...........................................",
+".............               ............................................",
+"...............           ..............................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/eld33.xpm b/pixmaps/eld33.xpm
new file mode 100644
index 0000000..b1facdf
--- /dev/null
+++ b/pixmaps/eld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *eld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+"................      ...........",
+".............   XXXXXX   ........",
+"............   XXXXXXXXXX  ......",
+"........... X XXXXXXXXXXXXX .....",
+".......... X XXXXXXXXXXXXXXX  ...",
+".......... X XXXXXXXXXXXX   XX ..",
+".......... X XXXXXXXXXXX XXXXXX .",
+".......... X XXXXXXXXXXXXXXXXXX .",
+".......... X XXXXXXXXXXXXXXXXXX .",
+".......... X XXXXXXXXXXXXXXXXXX .",
+".......... XXXXXXXXXXXXXXXXXXXX .",
+".......... XXXXXXXXXXXXXXXXXXX ..",
+"......... XXXXX  XXXXXXX XXXXX ..",
+".........   XXXXXXXXXXXX XXXXX ..",
+"..    ... XXXXXXXXXXXXXX XXXXX ..",
+".. XX ...   XXXXXXXXXXXX XXXX ...",
+".. X .... XXXXXXXXXXXXX . XXX ...",
+". X .....   X XXXXXX   ... XX ...",
+". X .....  XX XXXXX ....... X ...",
+". X .... X XX   X  ........ X ...",
+". X .... X X XX  .......... X ...",
+". X ... XX X XX ............  ...",
+". X .  XX   XX  ............ ....",
+". XX XXX . XX X .................",
+". XXX X   XX XX .................",
+"   X   XXXX XXX .................",
+"..  XXXX   XXX ..................",
+".       .. XXX ..................",
+".... XXX  XXXX ..................",
+"..... XXXXXXX ...................",
+"......  XXX  ....................",
+"........   ......................"
+};
diff --git a/pixmaps/eld49.xpm b/pixmaps/eld49.xpm
new file mode 100644
index 0000000..f7a8e9d
--- /dev/null
+++ b/pixmaps/eld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *eld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+"..........................        ...............",
+"....................      XXXXXXXX    ...........",
+"..................  X  XXXXXXXXXXXXXXX   ........",
+"................. XX XXXXXXXXXXXXXXXXXXXX .......",
+"................ XX XXXXXXXXXXXXXXXXXXXXX .......",
+"................ X XXXXXXXXXXXXXXXXXXXXXX     ...",
+"................ X XXXXXXXXXXXXXXXXXXX   XXXX ...",
+"................ X XXXXXXXXXXXXXXXXX  XXXXXXX ...",
+"................ X XXXXXXXXXXXXXXXXX XXXXXXXXX ..",
+"................ X XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ X XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ X XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ X XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"............... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...",
+"............... XXXXXXX  XXXXXXXXXXXXXXXXXXXX ...",
+".............. XXXXXXXX  XXXXXXXXXXXX XXXXXXX ...",
+"..............    XXXXXXXXXXXXXXXXXXX XXXXXXX ...",
+".....   ...... XXXXXXXXXXXXXXXXXXXXXX XXXXXXX ...",
+"....  XX ..... XXXXXXXXXXXXXXXXXXXXX . XXXXX ....",
+".... XXX .....    XXXXXXXXXXXXXXXXXX .. XXXX ....",
+".... XX ...... XXXXXXXXXXXXXXXXXXX  ... XXXX ....",
+".... X  ......  XXXXXXXXXXXXXXXXX ..... XXXX ....",
+"... XX ........   XX XXXXXXXXXX  ....... XXX ....",
+"... XX .......  XXX XXXXXXXXX  ......... XXX ....",
+"... XX ...... X XXX XX XXX   ........... XXX ....",
+"... XX ...... X XXX    XX ............... XX ....",
+"... XX ..... XX XX XX  X ................ XX ....",
+"... XX ..... XX  X XX X .................. X ....",
+"... XX .... XX .  XX X ...................   ....",
+"... XX ... XX .. XXX X ....................  ....",
+"... XXX . XX ... XX XX ..........................",
+".... XX  XX ... XX XXX ..........................",
+".... XXX X ... XX XXXX ..........................",
+"...  XXX  ..  XX  XXXX ..........................",
+".     XXX . XXX . XXXX ..........................",
+"...... X   XX  .. XXXX ..........................",
+"......       ... XXXXX ..........................",
+"....... XXXXX   XXXXX ...........................",
+"........ XXXXXXXXXXX ............................",
+".........  XXXXXXXX .............................",
+"...........  XXXX  ..............................",
+".............    ................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/eld72.xpm b/pixmaps/eld72.xpm
new file mode 100644
index 0000000..17429da
--- /dev/null
+++ b/pixmaps/eld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *eld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"......................................            ......................",
+"..............................                       ...................",
+"...........................             XXXXXXXX        ................",
+"..........................      XXXXXXXXXXXXXXXXXXXX      ..............",
+".........................   X  XXXXXXXXXXXXXXXXXXXXXXXX      ...........",
+"........................   X   XXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+".......................   X   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"......................   XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      .....",
+"......................  XX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX         ....",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      XX   ...",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXX  ...",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXX  ...",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXX  ...",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..",
+".....................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..",
+"....................   XXXXXXXXXX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...",
+"....................  XXXXXXXXXXX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...",
+"....................  XXXXXXXXXXX   XXXXXXXXXXXXXXXXXXX  XXXXXXXXX   ...",
+"....................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXX   ...",
+"....................      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXX   ...",
+"....................      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXX  ....",
+".....   ............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXX  ....",
+".....     ..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXX  ....",
+"....  XX   .........      XXXXXXXXXXXXXXXXXXXXXXXXXXX   .  XXXXXXX  ....",
+"....  XXX   ........      XXXXXXXXXXXXXXXXXXXXXXXXXX   ..  XXXXXXX  ....",
+"....  XX   .........  XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...  XXXXXXX  ....",
+"...   XX  ..........  XXXXXXXXXXXXXXXXXXXXXXXXXX     .....  XXXXX   ....",
+"...  XX  ...........     XXXXXXXXXXXXXXXXXXXXXX    .......  XXXXX  .....",
+"...  XX  ...........     XXXXXXXXXXXXXXXXXXXX    .........  XXXXX  .....",
+"...  XX  ............  XXXXX XXXXXXXXXXXXX      ...........  XXXX  .....",
+"...  XX  ...........   XXXX  XXXXXXXXXXX      .............  XXXX  .....",
+"..   XX  ..........    XXXX  XXXXXXXXXX    ................  XXXX  .....",
+"..  XXX  .........  X  XXX  XXXX  XXX    ...................  XXX  .....",
+"..  XXX  ......... XX   XX    X  XX     ....................  XXX  .....",
+"..  XXX  ........  XX   XX       X    ......................   XX  .....",
+"..  XXX  ........ XXXX  XX XX   XX  .........................   X  .....",
+"..  XXX  .......  XXX   X  XXX XX  ...........................     .....",
+"..  XXX  ......  XXX  .   XXX  X   ............................    .....",
+"..  XXX  .....  XXX  ..   XXX XX  ..............................   .....",
+"..  XXX  ....  XXX  ...  XXX  XX  ............................... ......",
+"..  XXX   ..  XXX  ...  XXX  XXX  ......................................",
+"..   XXX  .  XXX  ...  XXX  XXX  .......................................",
+"...  XXX    XXX  ...  XXX  XXXX  .......................................",
+"...  XXX   XXX  ...  XXX  XXXXX  .......................................",
+"...  XXXX  XX  ...  XXX   XXXXX  .......................................",
+"...   XXXX    ...  XXX    XXXXX  .......................................",
+"....  XXXXX   ..  XXX    XXXXXX  .......................................",
+"...    XXXXX     XXX  .  XXXXXX  .......................................",
+".       XX     XXX   ..  XXXXXX  .......................................",
+"......     XXXXX   ...   XXXXX   .......................................",
+".......  XXX            XXXXXX  ........................................",
+".....        XXXX      XXXXXX   ........................................",
+".........   XXXXXXXXXXXXXXXXX  .........................................",
+"..........   XXXXXXXXXXXXXXX   .........................................",
+"...........   XXXXXXXXXXXXX   ..........................................",
+"............     XXXXXXXX    ...........................................",
+".............               ............................................",
+"...............           ..............................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/ell33.xpm b/pixmaps/ell33.xpm
new file mode 100644
index 0000000..ca3fae5
--- /dev/null
+++ b/pixmaps/ell33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *ell33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+"................      ...........",
+".............   XXXXXX   ........",
+"............   XXXXXXXXXX  ......",
+"........... X XXXXXXXXXXXXX .....",
+".......... X XXXXXXXXXXXXXXX  ...",
+".......... X XXXXXXXXXXXX   XX ..",
+".......... X XXXXXXXXXXX XXXXXX .",
+".......... X XXXXXXXXXXXXXXXXXX .",
+".......... X XXXXXXXXXXXXXXXXXX .",
+".......... X XXXXXXXXXXXXXXXXXX .",
+".......... XXXXXXXXXXXXXXXXXXXX .",
+".......... XXXXXXXXXXXXXXXXXXX ..",
+"......... XXXXX  XXXXXXX XXXXX ..",
+".........   XXXXXXXXXXXX XXXXX ..",
+"..    ... XXXXXXXXXXXXXX XXXXX ..",
+".. XX ...   XXXXXXXXXXXX XXXX ...",
+".. X .... XXXXXXXXXXXXX . XXX ...",
+". X .....   X XXXXXX   ... XX ...",
+". X .....  XX XXXXX ....... X ...",
+". X .... X XX   X  ........ X ...",
+". X .... X X XX  .......... X ...",
+". X ... XX X XX ............  ...",
+". X .  XX   XX  ............ ....",
+". XX XXX . XX X .................",
+". XXX X   XX XX .................",
+"   X   XXXX XXX .................",
+"..  XXXX   XXX ..................",
+".       .. XXX ..................",
+".... XXX  XXXX ..................",
+"..... XXXXXXX ...................",
+"......  XXX  ....................",
+"........   ......................"
+};
diff --git a/pixmaps/ell49.xpm b/pixmaps/ell49.xpm
new file mode 100644
index 0000000..fe3420a
--- /dev/null
+++ b/pixmaps/ell49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *ell49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+"..........................        ...............",
+"....................      XXXXXXXX    ...........",
+"..................  X  XXXXXXXXXXXXXXX   ........",
+"................. XX XXXXXXXXXXXXXXXXXXXX .......",
+"................ XX XXXXXXXXXXXXXXXXXXXXX .......",
+"................ X XXXXXXXXXXXXXXXXXXXXXX     ...",
+"................ X XXXXXXXXXXXXXXXXXXX   XXXX ...",
+"................ X XXXXXXXXXXXXXXXXX  XXXXXXX ...",
+"................ X XXXXXXXXXXXXXXXXX XXXXXXXXX ..",
+"................ X XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ X XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ X XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ X XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"................ XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"............... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...",
+"............... XXXXXXX  XXXXXXXXXXXXXXXXXXXX ...",
+".............. XXXXXXXX  XXXXXXXXXXXX XXXXXXX ...",
+"..............    XXXXXXXXXXXXXXXXXXX XXXXXXX ...",
+".....   ...... XXXXXXXXXXXXXXXXXXXXXX XXXXXXX ...",
+"....  XX ..... XXXXXXXXXXXXXXXXXXXXX . XXXXX ....",
+".... XXX .....    XXXXXXXXXXXXXXXXXX .. XXXX ....",
+".... XX ...... XXXXXXXXXXXXXXXXXXX  ... XXXX ....",
+".... X  ......  XXXXXXXXXXXXXXXXX ..... XXXX ....",
+"... XX ........   XX XXXXXXXXXX  ....... XXX ....",
+"... XX .......  XXX XXXXXXXXX  ......... XXX ....",
+"... XX ...... X XXX XX XXX   ........... XXX ....",
+"... XX ...... X XXX    XX ............... XX ....",
+"... XX ..... XX XX XX  X ................ XX ....",
+"... XX ..... XX  X XX X .................. X ....",
+"... XX .... XX .  XX X ...................   ....",
+"... XX ... XX .. XXX X ....................  ....",
+"... XXX . XX ... XX XX ..........................",
+".... XX  XX ... XX XXX ..........................",
+".... XXX X ... XX XXXX ..........................",
+"...  XXX  ..  XX  XXXX ..........................",
+".     XXX . XXX . XXXX ..........................",
+"...... X   XX  .. XXXX ..........................",
+"......       ... XXXXX ..........................",
+"....... XXXXX   XXXXX ...........................",
+"........ XXXXXXXXXXX ............................",
+".........  XXXXXXXX .............................",
+"...........  XXXX  ..............................",
+".............    ................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/ell72.xpm b/pixmaps/ell72.xpm
new file mode 100644
index 0000000..5186c22
--- /dev/null
+++ b/pixmaps/ell72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *ell72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"......................................            ......................",
+"..............................                       ...................",
+"...........................             XXXXXXXX        ................",
+"..........................      XXXXXXXXXXXXXXXXXXXX      ..............",
+".........................   X  XXXXXXXXXXXXXXXXXXXXXXXX      ...........",
+"........................   X   XXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+".......................   X   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"......................   XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      .....",
+"......................  XX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX         ....",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      XX   ...",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXX  ...",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXX  ...",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXX  ...",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..",
+".....................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..",
+"....................   XXXXXXXXXX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...",
+"....................  XXXXXXXXXXX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...",
+"....................  XXXXXXXXXXX   XXXXXXXXXXXXXXXXXXX  XXXXXXXXX   ...",
+"....................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXX   ...",
+"....................      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXX   ...",
+"....................      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXX  ....",
+".....   ............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXX  ....",
+".....     ..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXX  ....",
+"....  XX   .........      XXXXXXXXXXXXXXXXXXXXXXXXXXX   .  XXXXXXX  ....",
+"....  XXX   ........      XXXXXXXXXXXXXXXXXXXXXXXXXX   ..  XXXXXXX  ....",
+"....  XX   .........  XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...  XXXXXXX  ....",
+"...   XX  ..........  XXXXXXXXXXXXXXXXXXXXXXXXXX     .....  XXXXX   ....",
+"...  XX  ...........     XXXXXXXXXXXXXXXXXXXXXX    .......  XXXXX  .....",
+"...  XX  ...........     XXXXXXXXXXXXXXXXXXXX    .........  XXXXX  .....",
+"...  XX  ............  XXXXX XXXXXXXXXXXXX      ...........  XXXX  .....",
+"...  XX  ...........   XXXX  XXXXXXXXXXX      .............  XXXX  .....",
+"..   XX  ..........    XXXX  XXXXXXXXXX    ................  XXXX  .....",
+"..  XXX  .........  X  XXX  XXXX  XXX    ...................  XXX  .....",
+"..  XXX  ......... XX   XX    X  XX     ....................  XXX  .....",
+"..  XXX  ........  XX   XX       X    ......................   XX  .....",
+"..  XXX  ........ XXXX  XX XX   XX  .........................   X  .....",
+"..  XXX  .......  XXX   X  XXX XX  ...........................     .....",
+"..  XXX  ......  XXX  .   XXX  X   ............................    .....",
+"..  XXX  .....  XXX  ..   XXX XX  ..............................   .....",
+"..  XXX  ....  XXX  ...  XXX  XX  ............................... ......",
+"..  XXX   ..  XXX  ...  XXX  XXX  ......................................",
+"..   XXX  .  XXX  ...  XXX  XXX  .......................................",
+"...  XXX    XXX  ...  XXX  XXXX  .......................................",
+"...  XXX   XXX  ...  XXX  XXXXX  .......................................",
+"...  XXXX  XX  ...  XXX   XXXXX  .......................................",
+"...   XXXX    ...  XXX    XXXXX  .......................................",
+"....  XXXXX   ..  XXX    XXXXXX  .......................................",
+"...    XXXXX     XXX  .  XXXXXX  .......................................",
+".       XX     XXX   ..  XXXXXX  .......................................",
+"......     XXXXX   ...   XXXXX   .......................................",
+".......  XXX            XXXXXX  ........................................",
+".....        XXXX      XXXXXX   ........................................",
+".........   XXXXXXXXXXXXXXXXX  .........................................",
+"..........   XXXXXXXXXXXXXXX   .........................................",
+"...........   XXXXXXXXXXXXX   ..........................................",
+"............     XXXXXXXX    ...........................................",
+".............               ............................................",
+"...............           ..............................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/fdd33.xpm b/pixmaps/fdd33.xpm
new file mode 100644
index 0000000..439175b
--- /dev/null
+++ b/pixmaps/fdd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *fdd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+"...............   ...............",
+"..............     ..............",
+".............       .............",
+".............       .............",
+".............       .............",
+"..............     ..............",
+".............. ... ..............",
+".............  .    .............",
+"............   .     ............",
+"...........   .       ...........",
+"..........    .        ..........",
+"........     .           ........",
+"......    .............    ......",
+"....  ....             ....  ....",
+"... ..                     .. ...",
+".. .       ..........        . ..",
+".      ...            ...      ..",
+"..   .                    .   ...",
+"..                           ....",
+"...       .............      ....",
+"...   ....             ....   ...",
+"..  ..                    ... ...",
+".. .                         . ..",
+"..                             ..",
+"..                             ..",
+"...                           ...",
+"....                         ....",
+"......                     ......",
+"..........             ..........",
+".................................",
+"................................."
+};
diff --git a/pixmaps/fdd49.xpm b/pixmaps/fdd49.xpm
new file mode 100644
index 0000000..f6a4c66
--- /dev/null
+++ b/pixmaps/fdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *fdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"........................  .......................",
+"......................      .....................",
+".....................        ....................",
+".....................        ....................",
+"....................          ...................",
+"....................          ...................",
+".....................        ....................",
+".....................        ....................",
+"...................... .... .....................",
+"......................  .   .....................",
+".....................  .     ....................",
+"....................   .      ...................",
+"...................   .        ..................",
+".................     .         .................",
+"................     .           ................",
+"..............      .              ..............",
+".............      .                .............",
+"...........       .                   ...........",
+"..........      .................      ..........",
+"........  ......                 ......  ........",
+".......  .                             .  .......",
+"......                                     ......",
+".....                                       .....",
+".....                                       .....",
+"......            .............            ......",
+"......       ....               ...        ......",
+".......   ..                        ..    .......",
+".......                                   .......",
+".......                                   .......",
+"......          .................          ......",
+"......    ......                 ......    ......",
+"...... ...                             ... ......",
+"..... .                                   . .....",
+".....                                       .....",
+"......                                     ......",
+".......                                   .......",
+"..........                             ..........",
+"................                 ................",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/fdd72.xpm b/pixmaps/fdd72.xpm
new file mode 100644
index 0000000..0309ac2
--- /dev/null
+++ b/pixmaps/fdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *fdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................     .................................",
+".................................       ................................",
+"................................         ...............................",
+"...............................           ..............................",
+"...............................           ..............................",
+"..............................             .............................",
+"..............................             .............................",
+"..............................             .............................",
+"...............................           ..............................",
+"...............................           ..............................",
+"................................         ...............................",
+"................................. ....  ................................",
+"................................. .... .................................",
+"................................        ................................",
+"...............................          ...............................",
+"..............................            ..............................",
+".............................              .............................",
+"............................                 ...........................",
+"..........................                    ..........................",
+"........................                        ........................",
+".......................                           ......................",
+".....................                              .....................",
+"...................                                  ...................",
+"..................        ....................        ..................",
+"................    ................................    ................",
+"..............    ........                    ........    ..............",
+".............    ...                                ...     ............",
+"...........                                                  ...........",
+"..........                                                    ..........",
+".........                                                      .........",
+".........                   .................                  .........",
+".........                ..........................           ..........",
+"..........         .........                 ..........       ..........",
+"..........     ..........                          ......    ...........",
+"...........    .....                                  ...    ...........",
+"...........                                                 ............",
+"............                                                ............",
+"...........               ....................               ...........",
+"...........         ................................         ...........",
+"..........      ..........                    ..........      ..........",
+"..........   .........                             .........  ..........",
+".........   .....                                      .....   .........",
+".........  ...                                            ...  .........",
+".........                                                      .........",
+".........                                                      .........",
+"..........                                                    ..........",
+"...........                                                  ...........",
+".............                                              .............",
+"................                                        ................",
+"....................                                ....................",
+"..........................                    ..........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/fdl33.xpm b/pixmaps/fdl33.xpm
new file mode 100644
index 0000000..95f0dd2
--- /dev/null
+++ b/pixmaps/fdl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *fdl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+"...............   ...............",
+"..............     ..............",
+".............       .............",
+".............       .............",
+".............       .............",
+"..............     ..............",
+".............. ... ..............",
+".............  .    .............",
+"............   .     ............",
+"...........   .       ...........",
+"..........    .        ..........",
+"........     .           ........",
+"......    .............    ......",
+"....  ....             ....  ....",
+"... ..                     .. ...",
+".. .       ..........        . ..",
+".      ...            ...      ..",
+"..   .                    .   ...",
+"..                           ....",
+"...       .............      ....",
+"...   ....             ....   ...",
+"..  ..                    ... ...",
+".. .                         . ..",
+"..                             ..",
+"..                             ..",
+"...                           ...",
+"....                         ....",
+"......                     ......",
+"..........             ..........",
+".................................",
+"................................."
+};
diff --git a/pixmaps/fdl49.xpm b/pixmaps/fdl49.xpm
new file mode 100644
index 0000000..d2995b9
--- /dev/null
+++ b/pixmaps/fdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *fdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"........................  .......................",
+"......................      .....................",
+".....................        ....................",
+".....................        ....................",
+"....................          ...................",
+"....................          ...................",
+".....................        ....................",
+".....................        ....................",
+"...................... .... .....................",
+"......................  .   .....................",
+".....................  .     ....................",
+"....................   .      ...................",
+"...................   .        ..................",
+".................     .         .................",
+"................     .           ................",
+"..............      .              ..............",
+".............      .                .............",
+"...........       .                   ...........",
+"..........      .................      ..........",
+"........  ......                 ......  ........",
+".......  .                             .  .......",
+"......                                     ......",
+".....                                       .....",
+".....                                       .....",
+"......            .............            ......",
+"......       ....               ...        ......",
+".......   ..                        ..    .......",
+".......                                   .......",
+".......                                   .......",
+"......          .................          ......",
+"......    ......                 ......    ......",
+"...... ...                             ... ......",
+"..... .                                   . .....",
+".....                                       .....",
+"......                                     ......",
+".......                                   .......",
+"..........                             ..........",
+"................                 ................",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/fdl72.xpm b/pixmaps/fdl72.xpm
new file mode 100644
index 0000000..4b62989
--- /dev/null
+++ b/pixmaps/fdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *fdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................     .................................",
+".................................       ................................",
+"................................         ...............................",
+"...............................           ..............................",
+"...............................           ..............................",
+"..............................             .............................",
+"..............................             .............................",
+"..............................             .............................",
+"...............................           ..............................",
+"...............................           ..............................",
+"................................         ...............................",
+"................................. ....  ................................",
+"................................. .... .................................",
+"................................        ................................",
+"...............................          ...............................",
+"..............................            ..............................",
+".............................              .............................",
+"............................                 ...........................",
+"..........................                    ..........................",
+"........................                        ........................",
+".......................                           ......................",
+".....................                              .....................",
+"...................                                  ...................",
+"..................        ....................        ..................",
+"................    ................................    ................",
+"..............    ........                    ........    ..............",
+".............    ...                                ...     ............",
+"...........                                                  ...........",
+"..........                                                    ..........",
+".........                                                      .........",
+".........                   .................                  .........",
+".........                ..........................           ..........",
+"..........         .........                 ..........       ..........",
+"..........     ..........                          ......    ...........",
+"...........    .....                                  ...    ...........",
+"...........                                                 ............",
+"............                                                ............",
+"...........               ....................               ...........",
+"...........         ................................         ...........",
+"..........      ..........                    ..........      ..........",
+"..........   .........                             .........  ..........",
+".........   .....                                      .....   .........",
+".........  ...                                            ...  .........",
+".........                                                      .........",
+".........                                                      .........",
+"..........                                                    ..........",
+"...........                                                  ...........",
+".............                                              .............",
+"................                                        ................",
+"....................                                ....................",
+"..........................                    ..........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/fld33.xpm b/pixmaps/fld33.xpm
new file mode 100644
index 0000000..027c764
--- /dev/null
+++ b/pixmaps/fld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *fld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+"...............   ...............",
+".............. XXX ..............",
+"............. XXXXX .............",
+"............. XXXXX .............",
+"............. XXXXX .............",
+".............. XXX ..............",
+"..............     ..............",
+"............. X XXX .............",
+"............ XX XXXX ............",
+"........... XX XXXXXX ...........",
+".......... XXX XXXXXXX ..........",
+"........  XXX XXXXXXXXX  ........",
+"......  XX             XX  ......",
+"....      XXXXXXXXXXXXX      ....",
+"...   XXXXXXXXXXXXXXXXXXXXX   ...",
+"... XXXXXXX          XXXXXXXX ...",
+".  XXXX   XXXXXXXXXXXX   XXXXX ..",
+".. XX XXXXXXXXXXXXXXXXXXXX XX ...",
+".. XXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"... XXXXXX             XXXXX ....",
+"... XX    XXXXXXXXXXXXX    XX ...",
+".. X  XXXXXXXXXXXXXXXXXXXXX   ...",
+"..  XXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"... XXXXXXXXXXXXXXXXXXXXXXXXX ...",
+"....  XXXXXXXXXXXXXXXXXXXXX  ....",
+"......    XXXXXXXXXXXXX    ......",
+"..........             ..........",
+".................................",
+"................................."
+};
diff --git a/pixmaps/fld49.xpm b/pixmaps/fld49.xpm
new file mode 100644
index 0000000..876295f
--- /dev/null
+++ b/pixmaps/fld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *fld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"........................  .......................",
+"......................  XX  .....................",
+"..................... XXXXXX ....................",
+"..................... XXXXXX ....................",
+".................... XXXXXXXX ...................",
+".................... XXXXXXXX ...................",
+"..................... XXXXXX ....................",
+"..................... XXXXXX ....................",
+"......................      .....................",
+"...................... X XX .....................",
+"..................... X XXXX ....................",
+".................... XX XXXXX ...................",
+"................... XX XXXXXXX ..................",
+".................  XXX XXXXXXXX .................",
+"................ XXXX XXXXXXXXXX ................",
+"..............  XXXX XXXXXXXXXXXX  ..............",
+"............. XXXXX XXXXXXXXXXXXXXX .............",
+"...........  XXXXX XXXXXXXXXXXXXXXXX  ...........",
+".......... XXXXX                 XXXXX ..........",
+"........        XXXXXXXXXXXXXXXXX        ........",
+".......   XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....",
+"...... XXXXXXXXXXX             XXXXXXXXXXX ......",
+"...... XXXXXX    XXXXXXXXXXXXXXX   XXXXXXX ......",
+"....... XX  XXXXXXXXXXXXXXXXXXXXXXXX  XXX .......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+"...... XXXXXXXXX                 XXXXXXXXX ......",
+"...... XXX      XXXXXXXXXXXXXXXXX      XXX ......",
+"......    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+".....  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .....",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+".......   XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .......",
+"..........      XXXXXXXXXXXXXXXXX      ..........",
+"................                 ................",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/fld72.xpm b/pixmaps/fld72.xpm
new file mode 100644
index 0000000..1d31af6
--- /dev/null
+++ b/pixmaps/fld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *fld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................     .................................",
+".................................       ................................",
+"................................  XXXX   ...............................",
+"...............................  XXXXXX   ..............................",
+"...............................  XXXXXXX  ..............................",
+"..............................  XXXXXXXXX  .............................",
+"..............................  XXXXXXXXX  .............................",
+"..............................  XXXXXXXXX  .............................",
+"...............................  XXXXXXX  ..............................",
+"...............................  XXXXXX   ..............................",
+"................................  XXXX   ...............................",
+".................................       ................................",
+".................................      .................................",
+"................................   XX   ................................",
+"...............................   XXXX   ...............................",
+"..............................    XXXX    ..............................",
+".............................   XXXXXXXX   .............................",
+"............................   XXXXXXXXXX    ...........................",
+"..........................    XXXXXXXXXXXX    ..........................",
+"........................     XXXXXXXXXXXXXXX    ........................",
+".......................    XXXXXXXXXXXXXXXXXXX    ......................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXX   .....................",
+"...................     XXXXXXXXXXXXXXXXXXXXXXXXX    ...................",
+"..................    XXXX                    XXXXX   ..................",
+"................                                        ................",
+"..............            XXXXXXXXXXXXXXXXXXXX            ..............",
+".............       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        ............",
+"...........     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ...........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+".........  XXXXXXXXXXXXXXXXX                 XXXXXXXXXXXXXXX   .........",
+".........   XXXXXXXXXXXXX                          XXXXXXXXX  ..........",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXX          XXXX   ..........",
+"..........   XX          XXXXXXXXXXXXXXXXXXXXXXXXXX      XX  ...........",
+"...........  XX     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   X   ...........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ............",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ............",
+"...........  XXXXXXXXXXXXX                    XXXXXXXXXXXX   ...........",
+"...........  XXXXXXX                                XXXXXXX  ...........",
+"..........  XXXX          XXXXXXXXXXXXXXXXXXXX          XXX   ..........",
+"..........  X         XXXXXXXXXXXXXXXXXXXXXXXXXXXXX        X  ..........",
+".........        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        .........",
+".........     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"..........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ..........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ...........",
+".............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       .............",
+"................          XXXXXXXXXXXXXXXXXXXX          ................",
+"....................                                ....................",
+"..........................                    ..........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/fll33.xpm b/pixmaps/fll33.xpm
new file mode 100644
index 0000000..59f2b0f
--- /dev/null
+++ b/pixmaps/fll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *fll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+"...............   ...............",
+".............. XXX ..............",
+"............. XXXXX .............",
+"............. XXXXX .............",
+"............. XXXXX .............",
+".............. XXX ..............",
+"..............     ..............",
+"............. X XXX .............",
+"............ XX XXXX ............",
+"........... XX XXXXXX ...........",
+".......... XXX XXXXXXX ..........",
+"........  XXX XXXXXXXXX  ........",
+"......  XX             XX  ......",
+"....      XXXXXXXXXXXXX      ....",
+"...   XXXXXXXXXXXXXXXXXXXXX   ...",
+"... XXXXXXX          XXXXXXXX ...",
+".  XXXX   XXXXXXXXXXXX   XXXXX ..",
+".. XX XXXXXXXXXXXXXXXXXXXX XX ...",
+".. XXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"... XXXXXX             XXXXX ....",
+"... XX    XXXXXXXXXXXXX    XX ...",
+".. X  XXXXXXXXXXXXXXXXXXXXX   ...",
+"..  XXXXXXXXXXXXXXXXXXXXXXXXX  ..",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"... XXXXXXXXXXXXXXXXXXXXXXXXX ...",
+"....  XXXXXXXXXXXXXXXXXXXXX  ....",
+"......    XXXXXXXXXXXXX    ......",
+"..........             ..........",
+".................................",
+"................................."
+};
diff --git a/pixmaps/fll49.xpm b/pixmaps/fll49.xpm
new file mode 100644
index 0000000..1913dce
--- /dev/null
+++ b/pixmaps/fll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *fll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"........................  .......................",
+"......................  XX  .....................",
+"..................... XXXXXX ....................",
+"..................... XXXXXX ....................",
+".................... XXXXXXXX ...................",
+".................... XXXXXXXX ...................",
+"..................... XXXXXX ....................",
+"..................... XXXXXX ....................",
+"......................      .....................",
+"...................... X XX .....................",
+"..................... X XXXX ....................",
+".................... XX XXXXX ...................",
+"................... XX XXXXXXX ..................",
+".................  XXX XXXXXXXX .................",
+"................ XXXX XXXXXXXXXX ................",
+"..............  XXXX XXXXXXXXXXXX  ..............",
+"............. XXXXX XXXXXXXXXXXXXXX .............",
+"...........  XXXXX XXXXXXXXXXXXXXXXX  ...........",
+".......... XXXXX                 XXXXX ..........",
+"........        XXXXXXXXXXXXXXXXX        ........",
+".......   XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....",
+"...... XXXXXXXXXXX             XXXXXXXXXXX ......",
+"...... XXXXXX    XXXXXXXXXXXXXXX   XXXXXXX ......",
+"....... XX  XXXXXXXXXXXXXXXXXXXXXXXX  XXX .......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+"...... XXXXXXXXX                 XXXXXXXXX ......",
+"...... XXX      XXXXXXXXXXXXXXXXX      XXX ......",
+"......    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+".....  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .....",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+".......   XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .......",
+"..........      XXXXXXXXXXXXXXXXX      ..........",
+"................                 ................",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/fll72.xpm b/pixmaps/fll72.xpm
new file mode 100644
index 0000000..e9950c9
--- /dev/null
+++ b/pixmaps/fll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *fll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................     .................................",
+".................................       ................................",
+"................................  XXXX   ...............................",
+"...............................  XXXXXX   ..............................",
+"...............................  XXXXXXX  ..............................",
+"..............................  XXXXXXXXX  .............................",
+"..............................  XXXXXXXXX  .............................",
+"..............................  XXXXXXXXX  .............................",
+"...............................  XXXXXXX  ..............................",
+"...............................  XXXXXX   ..............................",
+"................................  XXXX   ...............................",
+".................................       ................................",
+".................................      .................................",
+"................................   XX   ................................",
+"...............................   XXXX   ...............................",
+"..............................    XXXX    ..............................",
+".............................   XXXXXXXX   .............................",
+"............................   XXXXXXXXXX    ...........................",
+"..........................    XXXXXXXXXXXX    ..........................",
+"........................     XXXXXXXXXXXXXXX    ........................",
+".......................    XXXXXXXXXXXXXXXXXXX    ......................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXX   .....................",
+"...................     XXXXXXXXXXXXXXXXXXXXXXXXX    ...................",
+"..................    XXXX                    XXXXX   ..................",
+"................                                        ................",
+"..............            XXXXXXXXXXXXXXXXXXXX            ..............",
+".............       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        ............",
+"...........     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ...........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+".........  XXXXXXXXXXXXXXXXX                 XXXXXXXXXXXXXXX   .........",
+".........   XXXXXXXXXXXXX                          XXXXXXXXX  ..........",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXX          XXXX   ..........",
+"..........   XX          XXXXXXXXXXXXXXXXXXXXXXXXXX      XX  ...........",
+"...........  XX     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   X   ...........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ............",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ............",
+"...........  XXXXXXXXXXXXX                    XXXXXXXXXXXX   ...........",
+"...........  XXXXXXX                                XXXXXXX  ...........",
+"..........  XXXX          XXXXXXXXXXXXXXXXXXXX          XXX   ..........",
+"..........  X         XXXXXXXXXXXXXXXXXXXXXXXXXXXXX        X  ..........",
+".........        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        .........",
+".........     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"..........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ..........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ...........",
+".............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       .............",
+"................          XXXXXXXXXXXXXXXXXXXX          ................",
+"....................                                ....................",
+"..........................                    ..........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/gdd33.xpm b/pixmaps/gdd33.xpm
new file mode 100644
index 0000000..228f71c
--- /dev/null
+++ b/pixmaps/gdd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *gdd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+"............  .....  ............",
+"...........    ...    ...........",
+".....  ....    ...    ....  .....",
+"....    ....  .....  ....    ....",
+"....    ..... ..... .....    ....",
+".....  .....  .....  .....  .....",
+"......  ....   ...   ....  ......",
+"......  ....   ...   ....  ......",
+".......  ...   ...   ...  .......",
+".......   ..    .    ..   .......",
+".......   ..    .    ..   .......",
+".......    .    .    .    .......",
+".......    .         .    .......",
+"........                 ........",
+"........                 ........",
+"........                 ........",
+"........                 ........",
+".........    .......    .........",
+".........  ..       ..  .........",
+"..........             ..........",
+"..........   .......   ..........",
+"........... ..     .. ...........",
+"..........             ..........",
+"..........             ..........",
+".........               .........",
+".........               .........",
+".............       .............",
+".................................",
+"................................."
+};
diff --git a/pixmaps/gdd49.xpm b/pixmaps/gdd49.xpm
new file mode 100644
index 0000000..ed736d9
--- /dev/null
+++ b/pixmaps/gdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *gdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................    .......    .................",
+"................      .....      ................",
+"................      .....      ................",
+"................      .....      ................",
+".......    ......    .......    ......    .......",
+"......      ....... ......... .......      ......",
+"......      ....... ......... .......      ......",
+"......      .......  .......  .......      ......",
+".......    ........  .......  ........    .......",
+"........  .........  .......  .........  ........",
+".........  ........   .....   ........  .........",
+"..........  .......   .....   .......  ..........",
+"..........  .......   .....   .......  ..........",
+"..........   .....     ...     .....   ..........",
+"..........   .....     ...     .....   ..........",
+"..........    ....     ...     ....    ..........",
+"..........     ...      .      ...     ..........",
+"...........    ...      .      ...    ...........",
+"...........     ..      .      ..     ...........",
+"...........     ..             ..     ...........",
+"...........      .             .      ...........",
+"...........                           ...........",
+"............                         ............",
+"............                         ............",
+"............                         ............",
+"............                         ............",
+".............                       .............",
+"..............                     ..............",
+"..............       .......       ..............",
+"............... ......     ...... ...............",
+"...............                   ...............",
+"................                 ................",
+"................                 ................",
+"................   ...........   ................",
+"................ ...         ... ................",
+"...............                   ...............",
+"...............                   ...............",
+"..............                     ..............",
+".............                       .............",
+".............                       .............",
+"...............                   ...............",
+".....................       .....................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/gdd72.xpm b/pixmaps/gdd72.xpm
new file mode 100644
index 0000000..04fb609
--- /dev/null
+++ b/pixmaps/gdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *gdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".....  .................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".........................   ...............   ..........................",
+".......................       ...........       ........................",
+"......................         .........         .......................",
+"......................         .........         .......................",
+"......................         .........         .......................",
+"......................         .........         .......................",
+".........   ..........         .........         ..........   ..........",
+".......       .........       ...........       .........       ........",
+"......         .........     .............     .........         .......",
+"......         ...........   .............   ...........         .......",
+"......         ...........   .............   ...........         .......",
+"......         ...........    ............   ...........         .......",
+"......         ...........    ...........    ...........         .......",
+".......       ...........     ...........     ...........       ........",
+"........      ...........      ..........     ...........      .........",
+"...........   ...........      ..........     ...........   ............",
+"...........    ..........      .........      ..........    ............",
+"...........    ..........       ........      ..........    ............",
+"...........     .........       ........      .........     ............",
+"............     ........       .......       ........     .............",
+"............     ........        ......       ........     .............",
+"............      .......        ......       .......      .............",
+"............      ......         .....         ......      .............",
+"............       .....          ....         .....       .............",
+"............       .....          ....         .....       .............",
+".............       ....          ...          ....       ..............",
+".............        ...          ...          ...        ..............",
+".............        ...           .           ...        ..............",
+".............         ..           .           ..         ..............",
+".............         ..           .           ..         ..............",
+".............          .                       .          ..............",
+"..............         .                       .         ...............",
+"..............                                           ...............",
+"..............                                           ...............",
+"..............                                           ...............",
+"..............                                           ...............",
+"..............                                           ...............",
+"...............                                         ................",
+"...............                                         ................",
+"...............                                         ................",
+"................                                       .................",
+".................                                     ..................",
+"..................            ...........            ...................",
+"...................    .........................    ....................",
+"....................  ..........       ..........  .....................",
+"....................   .                       .   .....................",
+".....................                             ......................",
+".....................                             ......................",
+".....................                             ......................",
+".....................         ...........         ......................",
+".....................   .......................   ......................",
+"......................  ........       ........  .......................",
+".....................                             ......................",
+".....................                             ......................",
+"....................                               .....................",
+"...................                                 ....................",
+"................... ..                              ....................",
+"..................                                   ...................",
+"..................                                   ...................",
+"..................                                   ...................",
+"..................                                   ...................",
+"....................                               .....................",
+".........................                     ..........................",
+"................................       .................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/gdl33.xpm b/pixmaps/gdl33.xpm
new file mode 100644
index 0000000..93ab308
--- /dev/null
+++ b/pixmaps/gdl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *gdl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+"............  .....  ............",
+"...........    ...    ...........",
+".....  ....    ...    ....  .....",
+"....    ....  .....  ....    ....",
+"....    ..... ..... .....    ....",
+".....  .....  .....  .....  .....",
+"......  ....   ...   ....  ......",
+"......  ....   ...   ....  ......",
+".......  ...   ...   ...  .......",
+".......   ..    .    ..   .......",
+".......   ..    .    ..   .......",
+".......    .    .    .    .......",
+".......    .         .    .......",
+"........                 ........",
+"........                 ........",
+"........                 ........",
+"........                 ........",
+".........    .......    .........",
+".........  ..       ..  .........",
+"..........             ..........",
+"..........   .......   ..........",
+"........... ..     .. ...........",
+"..........             ..........",
+"..........             ..........",
+".........               .........",
+".........               .........",
+".............       .............",
+".................................",
+"................................."
+};
diff --git a/pixmaps/gdl49.xpm b/pixmaps/gdl49.xpm
new file mode 100644
index 0000000..cde3423
--- /dev/null
+++ b/pixmaps/gdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *gdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................    .......    .................",
+"................      .....      ................",
+"................      .....      ................",
+"................      .....      ................",
+".......    ......    .......    ......    .......",
+"......      ....... ......... .......      ......",
+"......      ....... ......... .......      ......",
+"......      .......  .......  .......      ......",
+".......    ........  .......  ........    .......",
+"........  .........  .......  .........  ........",
+".........  ........   .....   ........  .........",
+"..........  .......   .....   .......  ..........",
+"..........  .......   .....   .......  ..........",
+"..........   .....     ...     .....   ..........",
+"..........   .....     ...     .....   ..........",
+"..........    ....     ...     ....    ..........",
+"..........     ...      .      ...     ..........",
+"...........    ...      .      ...    ...........",
+"...........     ..      .      ..     ...........",
+"...........     ..             ..     ...........",
+"...........      .             .      ...........",
+"...........                           ...........",
+"............                         ............",
+"............                         ............",
+"............                         ............",
+"............                         ............",
+".............                       .............",
+"..............                     ..............",
+"..............       .......       ..............",
+"............... ......     ...... ...............",
+"...............                   ...............",
+"................                 ................",
+"................                 ................",
+"................   ...........   ................",
+"................ ...         ... ................",
+"...............                   ...............",
+"...............                   ...............",
+"..............                     ..............",
+".............                       .............",
+".............                       .............",
+"...............                   ...............",
+".....................       .....................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/gdl72.xpm b/pixmaps/gdl72.xpm
new file mode 100644
index 0000000..b2defd5
--- /dev/null
+++ b/pixmaps/gdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *gdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".....  .................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".........................   ...............   ..........................",
+".......................       ...........       ........................",
+"......................         .........         .......................",
+"......................         .........         .......................",
+"......................         .........         .......................",
+"......................         .........         .......................",
+".........   ..........         .........         ..........   ..........",
+".......       .........       ...........       .........       ........",
+"......         .........     .............     .........         .......",
+"......         ...........   .............   ...........         .......",
+"......         ...........   .............   ...........         .......",
+"......         ...........    ............   ...........         .......",
+"......         ...........    ...........    ...........         .......",
+".......       ...........     ...........     ...........       ........",
+"........      ...........      ..........     ...........      .........",
+"...........   ...........      ..........     ...........   ............",
+"...........    ..........      .........      ..........    ............",
+"...........    ..........       ........      ..........    ............",
+"...........     .........       ........      .........     ............",
+"............     ........       .......       ........     .............",
+"............     ........        ......       ........     .............",
+"............      .......        ......       .......      .............",
+"............      ......         .....         ......      .............",
+"............       .....          ....         .....       .............",
+"............       .....          ....         .....       .............",
+".............       ....          ...          ....       ..............",
+".............        ...          ...          ...        ..............",
+".............        ...           .           ...        ..............",
+".............         ..           .           ..         ..............",
+".............         ..           .           ..         ..............",
+".............          .                       .          ..............",
+"..............         .                       .         ...............",
+"..............                                           ...............",
+"..............                                           ...............",
+"..............                                           ...............",
+"..............                                           ...............",
+"..............                                           ...............",
+"...............                                         ................",
+"...............                                         ................",
+"...............                                         ................",
+"................                                       .................",
+".................                                     ..................",
+"..................            ...........            ...................",
+"...................    .........................    ....................",
+"....................  ..........       ..........  .....................",
+"....................   .                       .   .....................",
+".....................                             ......................",
+".....................                             ......................",
+".....................                             ......................",
+".....................         ...........         ......................",
+".....................   .......................   ......................",
+"......................  ........       ........  .......................",
+".....................                             ......................",
+".....................                             ......................",
+"....................                               .....................",
+"...................                                 ....................",
+"................... ..                              ....................",
+"..................                                   ...................",
+"..................                                   ...................",
+"..................                                   ...................",
+"..................                                   ...................",
+"....................                               .....................",
+".........................                     ..........................",
+"................................       .................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/gld33.xpm b/pixmaps/gld33.xpm
new file mode 100644
index 0000000..84f57df
--- /dev/null
+++ b/pixmaps/gld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *gld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+"...........  .....  .............",
+".......... XX ... XX ............",
+"....  .... XX ... XX ....  ......",
+"... XX ....  .....  .... XX .....",
+"... XX ..... ..... ..... XX .....",
+"....  ...... ..... ......  ......",
+".....  .... X ... X ....  .......",
+".....  .... X ... X ....  .......",
+"......  ... X ... X ...  ........",
+"...... X .. XX . XX .. X ........",
+"...... X .. XX . XX .. X ........",
+"...... XX . XX . XX . XX ........",
+"...... XX . XX   XX . XX ........",
+"....... XX  X X X X  XX .........",
+"....... X X  X   X  X X .........",
+".......  X  XXXXXXXX X  .........",
+"....... XXXXXXXXXXXXXXX .........",
+"........ XXX       XXX ..........",
+"........    XXXXXXX    ..........",
+"......... XXXXXXXXXXX ...........",
+"......... XX       XX ...........",
+"..........  XXXXXXX  ............",
+"......... XX       XX ...........",
+"........    XXXXXXX    ..........",
+"........ XXXXXXXXXXXXX ..........",
+"........    XXXXXXX    ..........",
+"............       ..............",
+".................................",
+"................................."
+};
diff --git a/pixmaps/gld49.xpm b/pixmaps/gld49.xpm
new file mode 100644
index 0000000..e1e4af3
--- /dev/null
+++ b/pixmaps/gld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *gld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................   .........   .................",
+"................ XXX ....... XXX ................",
+"................ XXX ....... XXX ................",
+"................ XXX ....... XXX ................",
+"......   ........   ......... X ........   ......",
+"..... XXX ........ ........... ........ XXX .....",
+"..... XXX ........  .........  ........ XXX .....",
+"..... XXX ........  .........  ........ XXX .....",
+"...... X .........  .........  ......... X ......",
+".......  .........  X.......X  .........  .......",
+"........  ........ X ....... X ........  ........",
+".........  ....... X ....... X .......  .........",
+".........  ....... X ....... X .......  .........",
+"......... X ..... XXX ..... XXX ..... X .........",
+"......... X ..... XXX ..... XXX ..... X .........",
+"......... XX .... XXX ..... XXX .... XX .........",
+"......... XXX ... XXXX ... XXXX ... XXX .........",
+".......... XX ... XXXX ... XXXX ... XX ..........",
+".......... XXX .. XXXX ... XXXX .. XXX ..........",
+".......... XXX .. XXXX ... XXXX .. XXX ..........",
+".......... XXXX . XXXXX . XXXXX . XXXX ..........",
+".......... XXXXX  XXXXX   XXXXX  XXXXX ..........",
+"........... XXXX  XX  XX XX  XX  XXXX ...........",
+"........... XX XX X XX     XX X XX XX ...........",
+"...........   X    XXXXXXXXXXX    X   ...........",
+"........... XXXXXXXXXXXXXXXXXXXXXXXXX ...........",
+"............ XXXXXXXXXXXXXXXXXXXXXXX ............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXX         XXXXXX .............",
+"..............      XXXXXXXXX      ..............",
+".............. XXXXXXXXXXXXXXXXXXX ..............",
+"............... XXXXXXXXXXXXXXXXX ...............",
+"............... XXXXXXXXXXXXXXXXX ...............",
+"............... XXX           XXX ...............",
+"...............    XXXXXXXXXXX    ...............",
+".............. XXXXXXXXXXXXXXXXXXX ..............",
+".............. XXXXX         XXXXX ..............",
+".............       XXXXXXXXX       .............",
+"............  XXXXXXXXXXXXXXXXXXXXX  ............",
+"............  XXXXXXXXXXXXXXXXXXXXX  ............",
+".............       XXXXXXXXX       .............",
+"....................         ....................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/gld72.xpm b/pixmaps/gld72.xpm
new file mode 100644
index 0000000..26d8ce2
--- /dev/null
+++ b/pixmaps/gld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *gld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".........................   ................   .........................",
+".......................       ............       .......................",
+"......................   XXX   ..........   XXX   ......................",
+"......................  XXXXX  ..........  XXXXX  ......................",
+"......................  XXXXX  ..........  XXXXX  ......................",
+"......................  XXXXX  ..........  XXXXX  ......................",
+".........   ..........   XXX   ..........    XX   ..........   .........",
+".......       .........       ............       .........       .......",
+"......   XXX   ..........   X..............    ..........   XXX   ......",
+"......  XXXXX  ...........   ..............   ...........  XXXXX  ......",
+"......  XXXXX  ...........   ..............   ...........  XXXXX  ......",
+"......  XXXXX  ...........   ..............   ...........  XXXXX  ......",
+"......   XXX   ...........    ............    ...........   XXX   ......",
+".......       ............    ............    ............       .......",
+".........     ............    ............    ............     .........",
+"...........   ............  X  ..........  X  ............   ...........",
+"...........    ...........  X  ..........  X  ...........    ...........",
+"...........    ...........  X  ..........  X  ...........    ...........",
+"...........     ..........  XX  .........  X  ..........     ...........",
+"............     .........  XX  ........  XX  .........     ............",
+"............  X  ........  XXX  ........  XXX  ........  X  ............",
+"............  X   .......  XXXX  .......  XXX  .......   X  ............",
+"............  XX  .......  XXXX  ......  XXXX  .......  XX  ............",
+"............  XX   ......  XXXX  ......  XXXX  ......   XX  ............",
+"............   XX  ......  XXXXX  .....  XXXX  ......  XX   ............",
+".............  XX   .....  XXXXX  .....  XXXX  .....   XX  .............",
+".............  XXX  .....  XXXXX  ....  XXXXX  .....  XXX  .............",
+".............  XXX   ....  XXXXXX  ...  XXXXX  ....   XXX  .............",
+".............  XXXX   ...  XXXXXX  ...  XXXXX  ...   XXXX  .............",
+".............  XXXXX  ...  XXXXXX  ..  XXXXXX  ...  XXXXX  .............",
+".............   XXXX   ..  XXXXXXX  .  XXXXXX  ..   XXXX   .............",
+"..............  XXXXX  .   XXXXXXX     XXXXXX  ..  XXXXX  ..............",
+"..............  XXXXX     XXXXXXXX    XXXXXXX      XXXXX  ..............",
+"..............  XXXXXX    XXXX XXX    XXX XXXX    XXXXXX  ..............",
+"..............  XXXXXX    XX                XX    XXXXXX  ..............",
+"..............  XXXX XX   X   X          X   X   XX XXXX  ..............",
+"..............   X           XXXXXXXXXXXXXX           X   ..............",
+"...............     X      XXXXXXXXXXXXXXXXXX      X     ...............",
+"...............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"..................   XXXXXXXXXX          XXXXXXXXXX   ..................",
+"...................   XX                        XX   ...................",
+"....................           XXXXXXXXXX           ....................",
+"....................    XXXXXXXXXXXXXXXXXXXXXXXX    ....................",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXX        XXXXXXXXX  .....................",
+".....................                              .....................",
+"......................          XXXXXXXX          ......................",
+".....................   XXXXXXXXXXXXXXXXXXXXXXXX   .....................",
+".....................  XXXXXXXXXX      XXXXXXXXXX  .....................",
+"....................   XXXX                  XXXX   ....................",
+"....................             XXXXXX             ....................",
+"...................        XXXXXXXXXXXXXXXXXX        ...................",
+"..................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..................",
+"..................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..................",
+"..................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..................",
+"..................       XXXXXXXXXXXXXXXXXXXXXX       ..................",
+"...................             XXXXXXXX             ...................",
+".........................                      .........................",
+"................................        ................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/gll33.xpm b/pixmaps/gll33.xpm
new file mode 100644
index 0000000..8857664
--- /dev/null
+++ b/pixmaps/gll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *gll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+"...........  .....  .............",
+".......... XX ... XX ............",
+"....  .... XX ... XX ....  ......",
+"... XX ....  .....  .... XX .....",
+"... XX ..... ..... ..... XX .....",
+"....  ...... ..... ......  ......",
+".....  .... X ... X ....  .......",
+".....  .... X ... X ....  .......",
+"......  ... X ... X ...  ........",
+"...... X .. XX . XX .. X ........",
+"...... X .. XX . XX .. X ........",
+"...... XX . XX . XX . XX ........",
+"...... XX . XX   XX . XX ........",
+"....... XX  X X X X  XX .........",
+"....... X X  X   X  X X .........",
+".......  X  XXXXXXXX X  .........",
+"....... XXXXXXXXXXXXXXX .........",
+"........ XXX       XXX ..........",
+"........    XXXXXXX    ..........",
+"......... XXXXXXXXXXX ...........",
+"......... XX       XX ...........",
+"..........  XXXXXXX  ............",
+"......... XX       XX ...........",
+"........    XXXXXXX    ..........",
+"........ XXXXXXXXXXXXX ..........",
+"........    XXXXXXX    ..........",
+"............       ..............",
+".................................",
+"................................."
+};
diff --git a/pixmaps/gll49.xpm b/pixmaps/gll49.xpm
new file mode 100644
index 0000000..dc5a6f6
--- /dev/null
+++ b/pixmaps/gll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *gll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................   .........   .................",
+"................ XXX ....... XXX ................",
+"................ XXX ....... XXX ................",
+"................ XXX ....... XXX ................",
+"......   ........   ......... X ........   ......",
+"..... XXX ........ ........... ........ XXX .....",
+"..... XXX ........  .........  ........ XXX .....",
+"..... XXX ........  .........  ........ XXX .....",
+"...... X .........  .........  ......... X ......",
+".......  .........  X.......X  .........  .......",
+"........  ........ X ....... X ........  ........",
+".........  ....... X ....... X .......  .........",
+".........  ....... X ....... X .......  .........",
+"......... X ..... XXX ..... XXX ..... X .........",
+"......... X ..... XXX ..... XXX ..... X .........",
+"......... XX .... XXX ..... XXX .... XX .........",
+"......... XXX ... XXXX ... XXXX ... XXX .........",
+".......... XX ... XXXX ... XXXX ... XX ..........",
+".......... XXX .. XXXX ... XXXX .. XXX ..........",
+".......... XXX .. XXXX ... XXXX .. XXX ..........",
+".......... XXXX . XXXXX . XXXXX . XXXX ..........",
+".......... XXXXX  XXXXX   XXXXX  XXXXX ..........",
+"........... XXXX  XX  XX XX  XX  XXXX ...........",
+"........... XX XX X XX     XX X XX XX ...........",
+"...........   X    XXXXXXXXXXX    X   ...........",
+"........... XXXXXXXXXXXXXXXXXXXXXXXXX ...........",
+"............ XXXXXXXXXXXXXXXXXXXXXXX ............",
+"............. XXXXXXXXXXXXXXXXXXXXX .............",
+"............. XXXXXX         XXXXXX .............",
+"..............      XXXXXXXXX      ..............",
+".............. XXXXXXXXXXXXXXXXXXX ..............",
+"............... XXXXXXXXXXXXXXXXX ...............",
+"............... XXXXXXXXXXXXXXXXX ...............",
+"............... XXX           XXX ...............",
+"...............    XXXXXXXXXXX    ...............",
+".............. XXXXXXXXXXXXXXXXXXX ..............",
+".............. XXXXX         XXXXX ..............",
+".............       XXXXXXXXX       .............",
+"............  XXXXXXXXXXXXXXXXXXXXX  ............",
+"............  XXXXXXXXXXXXXXXXXXXXX  ............",
+".............       XXXXXXXXX       .............",
+"....................         ....................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/gll72.xpm b/pixmaps/gll72.xpm
new file mode 100644
index 0000000..253b762
--- /dev/null
+++ b/pixmaps/gll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *gll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".........................   ................   .........................",
+".......................       ............       .......................",
+"......................   XXX   ..........   XXX   ......................",
+"......................  XXXXX  ..........  XXXXX  ......................",
+"......................  XXXXX  ..........  XXXXX  ......................",
+"......................  XXXXX  ..........  XXXXX  ......................",
+".........   ..........   XXX   ..........    XX   ..........   .........",
+".......       .........       ............       .........       .......",
+"......   XXX   ..........   X..............    ..........   XXX   ......",
+"......  XXXXX  ...........   ..............   ...........  XXXXX  ......",
+"......  XXXXX  ...........   ..............   ...........  XXXXX  ......",
+"......  XXXXX  ...........   ..............   ...........  XXXXX  ......",
+"......   XXX   ...........    ............    ...........   XXX   ......",
+".......       ............    ............    ............       .......",
+".........     ............    ............    ............     .........",
+"...........   ............  X  ..........  X  ............   ...........",
+"...........    ...........  X  ..........  X  ...........    ...........",
+"...........    ...........  X  ..........  X  ...........    ...........",
+"...........     ..........  XX  .........  X  ..........     ...........",
+"............     .........  XX  ........  XX  .........     ............",
+"............  X  ........  XXX  ........  XXX  ........  X  ............",
+"............  X   .......  XXXX  .......  XXX  .......   X  ............",
+"............  XX  .......  XXXX  ......  XXXX  .......  XX  ............",
+"............  XX   ......  XXXX  ......  XXXX  ......   XX  ............",
+"............   XX  ......  XXXXX  .....  XXXX  ......  XX   ............",
+".............  XX   .....  XXXXX  .....  XXXX  .....   XX  .............",
+".............  XXX  .....  XXXXX  ....  XXXXX  .....  XXX  .............",
+".............  XXX   ....  XXXXXX  ...  XXXXX  ....   XXX  .............",
+".............  XXXX   ...  XXXXXX  ...  XXXXX  ...   XXXX  .............",
+".............  XXXXX  ...  XXXXXX  ..  XXXXXX  ...  XXXXX  .............",
+".............   XXXX   ..  XXXXXXX  .  XXXXXX  ..   XXXX   .............",
+"..............  XXXXX  .   XXXXXXX     XXXXXX  ..  XXXXX  ..............",
+"..............  XXXXX     XXXXXXXX    XXXXXXX      XXXXX  ..............",
+"..............  XXXXXX    XXXX XXX    XXX XXXX    XXXXXX  ..............",
+"..............  XXXXXX    XX                XX    XXXXXX  ..............",
+"..............  XXXX XX   X   X          X   X   XX XXXX  ..............",
+"..............   X           XXXXXXXXXXXXXX           X   ..............",
+"...............     X      XXXXXXXXXXXXXXXXXX      X     ...............",
+"...............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"..................   XXXXXXXXXX          XXXXXXXXXX   ..................",
+"...................   XX                        XX   ...................",
+"....................           XXXXXXXXXX           ....................",
+"....................    XXXXXXXXXXXXXXXXXXXXXXXX    ....................",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXX        XXXXXXXXX  .....................",
+".....................                              .....................",
+"......................          XXXXXXXX          ......................",
+".....................   XXXXXXXXXXXXXXXXXXXXXXXX   .....................",
+".....................  XXXXXXXXXX      XXXXXXXXXX  .....................",
+"....................   XXXX                  XXXX   ....................",
+"....................             XXXXXX             ....................",
+"...................        XXXXXXXXXXXXXXXXXX        ...................",
+"..................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..................",
+"..................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..................",
+"..................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..................",
+"..................       XXXXXXXXXXXXXXXXXXXXXX       ..................",
+"...................             XXXXXXXX             ...................",
+".........................                      .........................",
+"................................        ................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/hdd33.xpm b/pixmaps/hdd33.xpm
new file mode 100644
index 0000000..6ede8bb
--- /dev/null
+++ b/pixmaps/hdd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *hdd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+"............... .................",
+".........  ...  .................",
+".........   ..   ................",
+".........          ..............",
+".........   ..   ..  ............",
+".......... .       ..  ..........",
+"........  .          .  .........",
+"........ ....         .  ........",
+"....... .  ...         .  .......",
+"....... .  ....        .. .......",
+"...... .......          .  ......",
+"......  .....           .. ......",
+".....    ...     .       .  .....",
+".....     .              .. .....",
+"....                     .. .....",
+"....           ..         .  ....",
+"...  .       ....         .. ....",
+"...  .      ....          .. ....",
+"...        .....          .. ....",
+"...       .....            . ....",
+"....     .....             .  ...",
+".............              .. ...",
+"............               .. ...",
+"...........                .. ...",
+"...........                .. ...",
+"..........                 .. ...",
+"..........                    ...",
+"..........                    ...",
+".................................",
+"................................."
+};
diff --git a/pixmaps/hdd49.xpm b/pixmaps/hdd49.xpm
new file mode 100644
index 0000000..f7c28d7
--- /dev/null
+++ b/pixmaps/hdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *hdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"............ ........ ...........................",
+"............   .....   ..........................",
+"............    ....    .........................",
+"............     ..     .........................",
+"............       .   .    .....................",
+".............   .. .   . ...  ...................",
+"............   .            ... .................",
+"........... ..                ... ...............",
+".......... ....                 .. ..............",
+".......... ......                 . .............",
+"......... ..... ..                 . ............",
+"......... ...  ....                 . ...........",
+"......... ... ......                .............",
+"......... .. ......                  . ..........",
+"........  ........                   .. .........",
+"........   ......                     . .........",
+"........     ...                      .. ........",
+".......       .           .            . ........",
+".......                   .            ..........",
+"......                                 .. .......",
+".....                   .               . .......",
+".....                  ...              .........",
+"....                  ....              .. ......",
+"....                ......               . ......",
+"...   ..           .......               . ......",
+"...   .          .......                 ........",
+"...             ........                 .. .....",
+"...       .    ........                  .. .....",
+"...      .    ........                   .. .....",
+"....     .   ........                     . .....",
+".....    .  ........                      . .....",
+"..........  .......                       .......",
+"..................                        .. ....",
+"..................                        .. ....",
+".................                         .. ....",
+"................                          .. ....",
+"...............                           .. ....",
+"...............                           .. ....",
+"..............                            .. ....",
+"..............                            .. ....",
+"..............                               ....",
+"..............                               ....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/hdd72.xpm b/pixmaps/hdd72.xpm
new file mode 100644
index 0000000..2ea8755
--- /dev/null
+++ b/pixmaps/hdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *hdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"................................ .......................................",
+".................   ...........   ......................................",
+"..................   .........    ......................................",
+"..................     ......      .....................................",
+"..................      .....      .....................................",
+"..................       ...        ....................................",
+"..................        ..        ....................................",
+"..................          .      ..     ..............................",
+"..................       .. .      ..        ...........................",
+"..................      .....       .....      .........................",
+"..................     ...          ........     .......................",
+".................     ...                .....    ......................",
+"................   .. .                     ....    ....................",
+"...............   ....                        ...    ...................",
+"..............   ......                        ....   ..................",
+"..............  .........                       ....   .................",
+".............  .......  ..                       ....   ................",
+".............  .....   ....                       ....   ...............",
+".............  ....    .....                       ....  ...............",
+".............  ...     ......                       ...   ..............",
+".............  ...    .......                       ....   .............",
+"............   ... .........                         ....  .............",
+"............    ...........                          ....   ............",
+"............     .........                            ....  ............",
+"...........       .......                             ....   ...........",
+"...........        .....                               ....  ...........",
+"..........          ...                .               ....  ...........",
+"..........           .                ..                ....  ..........",
+".........                            ..                 ....  ..........",
+"........                             ..                 ....  ..........",
+"........                             .                   ....  .........",
+".......                             ..                   ....  .........",
+"......                                                   ....  .........",
+"......                             .                      ....  ........",
+".....                            ...                      ....  ........",
+".....                          .....                      ....  ........",
+".....    ..                  .......                      ....   .......",
+"....    ....               ........                        ....  .......",
+"....    ....             ..........                        ....  .......",
+"....    ...             ..........                         ....  .......",
+"....    ...            ...........                         ....  .......",
+"....          ..      ...........                          ....  .......",
+"....          ..     ...........                            ....  ......",
+"....         ...    ............                            ....  ......",
+".....        ..     ...........                             ....  ......",
+"......      ...    ...........                              ....  ......",
+"........    .     ...........                               ....  ......",
+"..............   ...........                                ....  ......",
+"...........................                                 ....  ......",
+"...........................                                 ....  ......",
+"..........................                                  ....   .....",
+".........................                                   .....  .....",
+"........................                                     ....  .....",
+"........................                                     ....  .....",
+".......................                                      ....  .....",
+"......................                                       ....  .....",
+"......................                                       ....  .....",
+"......................                                       ....  .....",
+".....................                                        ....  .....",
+".....................                                        ....  .....",
+".....................                                         ...  .....",
+".....................                                              .....",
+".....................                                              .....",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/hdl33.xpm b/pixmaps/hdl33.xpm
new file mode 100644
index 0000000..d2fd8ee
--- /dev/null
+++ b/pixmaps/hdl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *hdl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+"............... .................",
+".........  ...  .................",
+".........   ..   ................",
+".........          ..............",
+".........   ..   ..  ............",
+".......... .       ..  ..........",
+"........  .          .  .........",
+"........ ....         .  ........",
+"....... .  ...         .  .......",
+"....... .  ....        .. .......",
+"...... .......          .  ......",
+"......  .....           .. ......",
+".....    ...     .       .  .....",
+".....     .              .. .....",
+"....                     .. .....",
+"....           ..         .  ....",
+"...  .       ....         .. ....",
+"...  .      ....          .. ....",
+"...        .....          .. ....",
+"...       .....            . ....",
+"....     .....             .  ...",
+".............              .. ...",
+"............               .. ...",
+"...........                .. ...",
+"...........                .. ...",
+"..........                 .. ...",
+"..........                    ...",
+"..........                    ...",
+".................................",
+"................................."
+};
diff --git a/pixmaps/hdl49.xpm b/pixmaps/hdl49.xpm
new file mode 100644
index 0000000..8db19b4
--- /dev/null
+++ b/pixmaps/hdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *hdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"............ ........ ...........................",
+"............   .....   ..........................",
+"............    ....    .........................",
+"............     ..     .........................",
+"............       .   .    .....................",
+".............   .. .   . ...  ...................",
+"............   .            ... .................",
+"........... ..                ... ...............",
+".......... ....                 .. ..............",
+".......... ......                 . .............",
+"......... ..... ..                 . ............",
+"......... ...  ....                 . ...........",
+"......... ... ......                .............",
+"......... .. ......                  . ..........",
+"........  ........                   .. .........",
+"........   ......                     . .........",
+"........     ...                      .. ........",
+".......       .           .            . ........",
+".......                   .            ..........",
+"......                                 .. .......",
+".....                   .               . .......",
+".....                  ...              .........",
+"....                  ....              .. ......",
+"....                ......               . ......",
+"...   ..           .......               . ......",
+"...   .          .......                 ........",
+"...             ........                 .. .....",
+"...       .    ........                  .. .....",
+"...      .    ........                   .. .....",
+"....     .   ........                     . .....",
+".....    .  ........                      . .....",
+"..........  .......                       .......",
+"..................                        .. ....",
+"..................                        .. ....",
+".................                         .. ....",
+"................                          .. ....",
+"...............                           .. ....",
+"...............                           .. ....",
+"..............                            .. ....",
+"..............                            .. ....",
+"..............                               ....",
+"..............                               ....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/hdl72.xpm b/pixmaps/hdl72.xpm
new file mode 100644
index 0000000..7cd572e
--- /dev/null
+++ b/pixmaps/hdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *hdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"................................ .......................................",
+".................   ...........   ......................................",
+"..................   .........    ......................................",
+"..................     ......      .....................................",
+"..................      .....      .....................................",
+"..................       ...        ....................................",
+"..................        ..        ....................................",
+"..................          .      ..     ..............................",
+"..................       .. .      ..        ...........................",
+"..................      .....       .....      .........................",
+"..................     ...          ........     .......................",
+".................     ...                .....    ......................",
+"................   .. .                     ....    ....................",
+"...............   ....                        ...    ...................",
+"..............   ......                        ....   ..................",
+"..............  .........                       ....   .................",
+".............  .......  ..                       ....   ................",
+".............  .....   ....                       ....   ...............",
+".............  ....    .....                       ....  ...............",
+".............  ...     ......                       ...   ..............",
+".............  ...    .......                       ....   .............",
+"............   ... .........                         ....  .............",
+"............    ...........                          ....   ............",
+"............     .........                            ....  ............",
+"...........       .......                             ....   ...........",
+"...........        .....                               ....  ...........",
+"..........          ...                .               ....  ...........",
+"..........           .                ..                ....  ..........",
+".........                            ..                 ....  ..........",
+"........                             ..                 ....  ..........",
+"........                             .                   ....  .........",
+".......                             ..                   ....  .........",
+"......                                                   ....  .........",
+"......                             .                      ....  ........",
+".....                            ...                      ....  ........",
+".....                          .....                      ....  ........",
+".....    ..                  .......                      ....   .......",
+"....    ....               ........                        ....  .......",
+"....    ....             ..........                        ....  .......",
+"....    ...             ..........                         ....  .......",
+"....    ...            ...........                         ....  .......",
+"....          ..      ...........                          ....  .......",
+"....          ..     ...........                            ....  ......",
+"....         ...    ............                            ....  ......",
+".....        ..     ...........                             ....  ......",
+"......      ...    ...........                              ....  ......",
+"........    .     ...........                               ....  ......",
+"..............   ...........                                ....  ......",
+"...........................                                 ....  ......",
+"...........................                                 ....  ......",
+"..........................                                  ....   .....",
+".........................                                   .....  .....",
+"........................                                     ....  .....",
+"........................                                     ....  .....",
+".......................                                      ....  .....",
+"......................                                       ....  .....",
+"......................                                       ....  .....",
+"......................                                       ....  .....",
+".....................                                        ....  .....",
+".....................                                        ....  .....",
+".....................                                         ...  .....",
+".....................                                              .....",
+".....................                                              .....",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/hld33.xpm b/pixmaps/hld33.xpm
new file mode 100644
index 0000000..b6f0d29
--- /dev/null
+++ b/pixmaps/hld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *hld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".........  ...  .................",
+"......... X . XX ................",
+"......... XX  XX   ..............",
+"......... X   XX XX  ............",
+".........   XXXXXXXXX  ..........",
+"........    XXXXXXXXXX  .........",
+"........     XXXXXXXXXX  ........",
+".......  XX   XXXXXXXXXX  .......",
+".......  X     XXX XXXXX  .......",
+"......        XXXX XXXXXX  ......",
+"...... X     XXXXX XXXXXX  ......",
+"..... XXX   XXXXXX XXXXXXX  .....",
+"..... XXXX XXXXXX XXXXXXXX  .....",
+".... XXXXXXXXXX   XXXXXXXX  .....",
+".... XXXXXXXXX .. XXXXXXXXX  ....",
+"... X XXXXXX  ... XXXXXXXXX  ....",
+"... X XXXXX .... XXXXXXXXXX  ....",
+"... XXX XX ..... XXXXXXXXXX  ....",
+"... XXX X ..... XXXXXXXXXXXX ....",
+"....     ..... XXXXXXXXXXXXX  ...",
+"............. XXXXXXXXXXXXXX  ...",
+"............ XXXXXXXXXXXXXXX  ...",
+"........... XXXXXXXXXXXXXXXX  ...",
+"........... XXXXXXXXXXXXXXXX  ...",
+".......... XXXXXXXXXXXXXXXXX  ...",
+".......... XXXXXXXXXXXXXXXXX  ...",
+"..........                    ...",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/hld49.xpm b/pixmaps/hld49.xpm
new file mode 100644
index 0000000..f63c62c
--- /dev/null
+++ b/pixmaps/hld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *hld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"............ ........ ...........................",
+"............   ..... X ..........................",
+"............ XX .... XX .........................",
+"............ XXX .. XXX .........................",
+"............ XXXX   XXX    ......................",
+"............. XX  X XXX XXX   ...................",
+"............ XX XXXXXXXXXXXXXX  .................",
+"...........   XXXXXXXXXXXXXXXXXX ................",
+"..........      XXXXXXXXXXXXXXXXX  ..............",
+"..........       XXXXXXXXXXXXXXXXX  .............",
+".........      X  XXXXXXXXXXXXXXXXX  ............",
+".........    XX     XXXXXXXXXXXXXXXX  ...........",
+".........    X       XXXXXXXXXXXXXXXX ...........",
+".........   X       XXXXXXXXXXXXXXXXX  ..........",
+"........ XX        XXXXXX XXXXXXXXXXXX  .........",
+"........ XXXX      XXXXXX XXXXXXXXXXXX  .........",
+"........ XXXXX    XXXXXXX XXXXXXXXXXXXX  ........",
+"....... XXXXXXXX XXXXXXXX XXXXXXXXXXXXX  ........",
+"....... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ........",
+"...... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX  .......",
+"..... XXXXXXXXXXXXXXXXX . XXXXXXXXXXXXXX  .......",
+"..... XXXXXXXXXXXXXXXX .. XXXXXXXXXXXXXXX .......",
+".... XXXXXXXXXXXXXXX  ... XXXXXXXXXXXXXXX  ......",
+".... XXXXXXXXXXXXXX ..... XXXXXXXXXXXXXXX  ......",
+"... XX  XXXXXXXXX  ...... XXXXXXXXXXXXXXX  ......",
+"... XX XXXXXXXXX ....... XXXXXXXXXXXXXXXXX ......",
+"... XXXXXXXXXXX ........ XXXXXXXXXXXXXXXXX  .....",
+"... XXXXXX XXX ........ XXXXXXXXXXXXXXXXXX  .....",
+"... XXXXX XXX ........ XXXXXXXXXXXXXXXXXXX  .....",
+".... XXXX XX ........ XXXXXXXXXXXXXXXXXXXX  .....",
+".....     X ........ XXXXXXXXXXXXXXXXXXXXX  .....",
+"..........  ....... XXXXXXXXXXXXXXXXXXXXXXX .....",
+".................. XXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".................. XXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"................. XXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"................ XXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"............... XXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"............... XXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"..............                              .....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/hld72.xpm b/pixmaps/hld72.xpm
new file mode 100644
index 0000000..2bd1a75
--- /dev/null
+++ b/pixmaps/hld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *hld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"................................ .......................................",
+".................   ...........   ......................................",
+"..................   .........    ......................................",
+"..................     ......      .....................................",
+"..................  X   .....  XX  .....................................",
+"..................  XX   ...   XX   ....................................",
+"..................  XXX   ..  XXXX  ....................................",
+"..................  XXXX      XXXX       ...............................",
+"..................  XXXXX     XXXX          ............................",
+"..................   XXX   X  XXXXX  XXXX      .........................",
+"..................   XX   XXXXXXXXX  XXXXXXX     .......................",
+".................   XX   XXXXXXXXXXXXXXXXXXXXX     .....................",
+"................     X XXXXXXXXXXXXXXXXXXXXXXXX     ....................",
+"...............       XXXXXXXXXXXXXXXXXXXXXXXXXXX    ...................",
+"..............          XXXXXXXXXXXXXXXXXXXXXXXXXX    ..................",
+"..............           XXXXXXXXXXXXXXXXXXXXXXXXXX    .................",
+".............         XX  XXXXXXXXXXXXXXXXXXXXXXXXXX    ................",
+".............       XXX    XXXXXXXXXXXXXXXXXXXXXXXXX     ...............",
+".............      XXXX     XXXXXXXXXXXXXXXXXXXXXXXXX    ...............",
+".............     XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXX    ..............",
+".............     XXXX      XXXXXXXXXXXXXXXXXXXXXXXXXX     .............",
+"............      X        XXXXXXXXXXXXXXXXXXXXXXXXXXXX    .............",
+"............  XX          XXXXXXXXXXX  XXXXXXXXXXXXXXXXX    ............",
+"............  XXX        XXXXXXXXXXXX  XXXXXXXXXXXXXXXXX    ............",
+"...........   XXX       XXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX    ...........",
+"...........  XXXXXX    XXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX    ...........",
+"..........   XXXXXXX  XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX     ..........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXX    ..........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX    ..........",
+"........   XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX     .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXXXX    .........",
+".......   XXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXX    .........",
+"......   XXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX     ........",
+"......  XXXXXXXXXXXXXXXXXXXXXXX    .  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....   XXXXXXXXXXXXXXXXXXXXX    ...  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....  XXXXXXXXXXXXXXXXXXXX    .....  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....  XX  XXXXXXXXXXXXXX    .......  XXXXXXXXXXXXXXXXXXXXXX     .......",
+"....   X    XXXXXXXXXXX    ........   XXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX    XXXXXXXXXX   ..........  XXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX   XXXXXXXXXX   ..........   XXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX   XXXXXXXXX   ...........  XXXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XXXXXXXX  XXX   ...........   XXXXXXXXXXXXXXXXXXXXXXXXX     ......",
+"....  XXXXXXXX  XX   ...........   XXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"....   XXXXXX   XX  ............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+".....   XXXX   XX   ...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......         X   ...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"........    .     ...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"..............   ...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"...........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"...........................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .....",
+"..........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .....",
+".........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"........................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".......................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................                                              .....",
+".....................                                              .....",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/hll33.xpm b/pixmaps/hll33.xpm
new file mode 100644
index 0000000..d24b89a
--- /dev/null
+++ b/pixmaps/hll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *hll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".........  ...  .................",
+"......... X . XX ................",
+"......... XX  XX   ..............",
+"......... X   XX XX  ............",
+".........   XXXXXXXXX  ..........",
+"........    XXXXXXXXXX  .........",
+"........     XXXXXXXXXX  ........",
+".......  XX   XXXXXXXXXX  .......",
+".......  X     XXX XXXXX  .......",
+"......        XXXX XXXXXX  ......",
+"...... X     XXXXX XXXXXX  ......",
+"..... XXX   XXXXXX XXXXXXX  .....",
+"..... XXXX XXXXXX XXXXXXXX  .....",
+".... XXXXXXXXXX   XXXXXXXX  .....",
+".... XXXXXXXXX .. XXXXXXXXX  ....",
+"... X XXXXXX  ... XXXXXXXXX  ....",
+"... X XXXXX .... XXXXXXXXXX  ....",
+"... XXX XX ..... XXXXXXXXXX  ....",
+"... XXX X ..... XXXXXXXXXXXX ....",
+"....     ..... XXXXXXXXXXXXX  ...",
+"............. XXXXXXXXXXXXXX  ...",
+"............ XXXXXXXXXXXXXXX  ...",
+"........... XXXXXXXXXXXXXXXX  ...",
+"........... XXXXXXXXXXXXXXXX  ...",
+".......... XXXXXXXXXXXXXXXXX  ...",
+".......... XXXXXXXXXXXXXXXXX  ...",
+"..........                    ...",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/hll49.xpm b/pixmaps/hll49.xpm
new file mode 100644
index 0000000..72e1980
--- /dev/null
+++ b/pixmaps/hll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *hll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"............ ........ ...........................",
+"............   ..... X ..........................",
+"............ XX .... XX .........................",
+"............ XXX .. XXX .........................",
+"............ XXXX   XXX    ......................",
+"............. XX  X XXX XXX   ...................",
+"............ XX XXXXXXXXXXXXXX  .................",
+"...........   XXXXXXXXXXXXXXXXXX ................",
+"..........      XXXXXXXXXXXXXXXXX  ..............",
+"..........       XXXXXXXXXXXXXXXXX  .............",
+".........      X  XXXXXXXXXXXXXXXXX  ............",
+".........    XX     XXXXXXXXXXXXXXXX  ...........",
+".........    X       XXXXXXXXXXXXXXXX ...........",
+".........   X       XXXXXXXXXXXXXXXXX  ..........",
+"........ XX        XXXXXX XXXXXXXXXXXX  .........",
+"........ XXXX      XXXXXX XXXXXXXXXXXX  .........",
+"........ XXXXX    XXXXXXX XXXXXXXXXXXXX  ........",
+"....... XXXXXXXX XXXXXXXX XXXXXXXXXXXXX  ........",
+"....... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ........",
+"...... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX  .......",
+"..... XXXXXXXXXXXXXXXXX . XXXXXXXXXXXXXX  .......",
+"..... XXXXXXXXXXXXXXXX .. XXXXXXXXXXXXXXX .......",
+".... XXXXXXXXXXXXXXX  ... XXXXXXXXXXXXXXX  ......",
+".... XXXXXXXXXXXXXX ..... XXXXXXXXXXXXXXX  ......",
+"... XX  XXXXXXXXX  ...... XXXXXXXXXXXXXXX  ......",
+"... XX XXXXXXXXX ....... XXXXXXXXXXXXXXXXX ......",
+"... XXXXXXXXXXX ........ XXXXXXXXXXXXXXXXX  .....",
+"... XXXXXX XXX ........ XXXXXXXXXXXXXXXXXX  .....",
+"... XXXXX XXX ........ XXXXXXXXXXXXXXXXXXX  .....",
+".... XXXX XX ........ XXXXXXXXXXXXXXXXXXXX  .....",
+".....     X ........ XXXXXXXXXXXXXXXXXXXXX  .....",
+"..........  ....... XXXXXXXXXXXXXXXXXXXXXXX .....",
+".................. XXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".................. XXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"................. XXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"................ XXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"............... XXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"............... XXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"..............                              .....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/hll72.xpm b/pixmaps/hll72.xpm
new file mode 100644
index 0000000..3490800
--- /dev/null
+++ b/pixmaps/hll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *hll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"................................ .......................................",
+".................   ...........   ......................................",
+"..................   .........    ......................................",
+"..................     ......      .....................................",
+"..................  X   .....  XX  .....................................",
+"..................  XX   ...   XX   ....................................",
+"..................  XXX   ..  XXXX  ....................................",
+"..................  XXXX      XXXX       ...............................",
+"..................  XXXXX     XXXX          ............................",
+"..................   XXX   X  XXXXX  XXXX      .........................",
+"..................   XX   XXXXXXXXX  XXXXXXX     .......................",
+".................   XX   XXXXXXXXXXXXXXXXXXXXX     .....................",
+"................     X XXXXXXXXXXXXXXXXXXXXXXXX     ....................",
+"...............       XXXXXXXXXXXXXXXXXXXXXXXXXXX    ...................",
+"..............          XXXXXXXXXXXXXXXXXXXXXXXXXX    ..................",
+"..............           XXXXXXXXXXXXXXXXXXXXXXXXXX    .................",
+".............         XX  XXXXXXXXXXXXXXXXXXXXXXXXXX    ................",
+".............       XXX    XXXXXXXXXXXXXXXXXXXXXXXXX     ...............",
+".............      XXXX     XXXXXXXXXXXXXXXXXXXXXXXXX    ...............",
+".............     XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXX    ..............",
+".............     XXXX      XXXXXXXXXXXXXXXXXXXXXXXXXX     .............",
+"............      X        XXXXXXXXXXXXXXXXXXXXXXXXXXXX    .............",
+"............  XX          XXXXXXXXXXX  XXXXXXXXXXXXXXXXX    ............",
+"............  XXX        XXXXXXXXXXXX  XXXXXXXXXXXXXXXXX    ............",
+"...........   XXX       XXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX    ...........",
+"...........  XXXXXX    XXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX    ...........",
+"..........   XXXXXXX  XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX     ..........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXX    ..........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX    ..........",
+"........   XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX     .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXXXX    .........",
+".......   XXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXX    .........",
+"......   XXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX     ........",
+"......  XXXXXXXXXXXXXXXXXXXXXXX    .  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....   XXXXXXXXXXXXXXXXXXXXX    ...  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....  XXXXXXXXXXXXXXXXXXXX    .....  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....  XX  XXXXXXXXXXXXXX    .......  XXXXXXXXXXXXXXXXXXXXXX     .......",
+"....   X    XXXXXXXXXXX    ........   XXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX    XXXXXXXXXX   ..........  XXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX   XXXXXXXXXX   ..........   XXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX   XXXXXXXXX   ...........  XXXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XXXXXXXX  XXX   ...........   XXXXXXXXXXXXXXXXXXXXXXXXX     ......",
+"....  XXXXXXXX  XX   ...........   XXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"....   XXXXXX   XX  ............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+".....   XXXX   XX   ...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......         X   ...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"........    .     ...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"..............   ...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"...........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"...........................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .....",
+"..........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .....",
+".........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"........................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".......................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................                                              .....",
+".....................                                              .....",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/kdd49.xpm b/pixmaps/kdd49.xpm
index 26cd928..e6ef3a0 100644
--- a/pixmaps/kdd49.xpm
+++ b/pixmaps/kdd49.xpm
@@ -26,12 +26,12 @@ static char *kdd49[] = {
 ".......  XXXXXX   .. X     X ..   XXXXXX  .......",
 "...... XX      XX    X     X    XX      XX ......",
 "..... X          XX   X   X   XX          X .....",
-".... .             X  X   X  X             . ....",
-"......              X  X X  X              ......",
-"... .                X X X X                . ...",
-"... .                X  X  X                . ...",
-"... .                 X X X                 . ...",
-"... .                 X   X                 . ...",
+".... X             X  X   X  X             X ....",
+".....X              X  X X  X              X.....",
+"... X                X X X X                X ...",
+"... X                X  X  X                X ...",
+"... X                 X X X                 X ...",
+"... X                 X   X                 X ...",
 "...  X                XX XX                X  ...",
 ".... X                 X X                 X ....",
 "....  X                X X                X  ....",
diff --git a/pixmaps/kdl49.xpm b/pixmaps/kdl49.xpm
index d49b1fb..cb10fd1 100644
--- a/pixmaps/kdl49.xpm
+++ b/pixmaps/kdl49.xpm
@@ -26,12 +26,12 @@ static char *kdl49[] = {
 ".......  XXXXXX   .. X     X ..   XXXXXX  .......",
 "...... XX      XX    X     X    XX      XX ......",
 "..... X          XX   X   X   XX          X .....",
-".... .             X  X   X  X             . ....",
-"......              X  X X  X              ......",
-"... .                X X X X                . ...",
-"... .                X  X  X                . ...",
-"... .                 X X X                 . ...",
-"... .                 X   X                 . ...",
+".... X             X  X   X  X             X ....",
+".....X              X  X X  X              X.....",
+"... X                X X X X                X ...",
+"... X                X  X  X                X ...",
+"... X                 X X X                 X ...",
+"... X                 X   X                 X ...",
 "...  X                XX XX                X  ...",
 ".... X                 X X                 X ....",
 "....  X                X X                X  ....",
diff --git a/pixmaps/ldd33.xpm b/pixmaps/ldd33.xpm
new file mode 100644
index 0000000..5e2871e
--- /dev/null
+++ b/pixmaps/ldd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *ldd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+"................. ...............",
+"................. ...............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"...............     .............",
+"...............     .............",
+"...............     .............",
+"..............       ............",
+"..............       ............",
+"..............       ............",
+".............         ...........",
+".............    .    ...........",
+".............    .    ...........",
+"............     .     ..........",
+"............     .     ..........",
+"............   .....   ..........",
+"...........      .      .........",
+"...........      .      .........",
+"...........      .      .........",
+"............           ..........",
+".............         ...........",
+"..............   .   ............",
+"............... . . .............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................................."
+};
diff --git a/pixmaps/ldd37.xpm b/pixmaps/ldd37.xpm
new file mode 100644
index 0000000..b432d94
--- /dev/null
+++ b/pixmaps/ldd37.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char *ldd37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".....................................",
+".....................................",
+".................. ..................",
+".................. ..................",
+".................   .................",
+".................   .................",
+".................   .................",
+"................     ................",
+"................     ................",
+"................     ................",
+"...............       ...............",
+"...............       ...............",
+"...............       ...............",
+"..............         ..............",
+"..............         ..............",
+"..............         ..............",
+".............     .     .............",
+".............     .     .............",
+".............     .     .............",
+"............      .      ............",
+"............    .....    ............",
+"............      .      ............",
+"...........       .       ...........",
+"...........       .       ...........",
+"...........       .       ...........",
+"............             ............",
+".............           .............",
+"..............         ..............",
+"...............   .   ...............",
+"................ . . ................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+"....................................."
+};
diff --git a/pixmaps/ldd40.xpm b/pixmaps/ldd40.xpm
new file mode 100644
index 0000000..a5db236
--- /dev/null
+++ b/pixmaps/ldd40.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char *ldd40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................",
+"........................................",
+"................... ....................",
+"................... ....................",
+"..................   ...................",
+"..................   ...................",
+".................     ..................",
+".................     ..................",
+"................       .................",
+"................       .................",
+"................       .................",
+"...............         ................",
+"...............         ................",
+"...............         ................",
+"..............           ...............",
+"..............           ...............",
+".............      .      ..............",
+".............      .      ..............",
+".............      .      ..............",
+"............       .       .............",
+"............       .       .............",
+"............    .......    .............",
+"...........        .        ............",
+"...........        .        ............",
+"..........         .         ...........",
+"..........         .         ...........",
+"...........        .        ............",
+"............               .............",
+".............             ..............",
+"..............           ...............",
+"...............    .    ................",
+"................  . .  .................",
+".................     ..................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"........................................"
+};
diff --git a/pixmaps/ldd45.xpm b/pixmaps/ldd45.xpm
new file mode 100644
index 0000000..2f04001
--- /dev/null
+++ b/pixmaps/ldd45.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *ldd45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".............................................",
+".............................................",
+"...................... ......................",
+"...................... ......................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+"....................     ....................",
+"....................     ....................",
+"....................     ....................",
+"...................       ...................",
+"...................       ...................",
+"...................       ...................",
+"..................         ..................",
+"..................         ..................",
+"..................         ..................",
+".................           .................",
+".................           .................",
+".................     .     .................",
+"................      .      ................",
+"................      .      ................",
+"................      .      ................",
+"...............       .       ...............",
+"...............       .       ...............",
+"...............    .......    ...............",
+"..............        .        ..............",
+"..............        .        ..............",
+"..............        .        ..............",
+".............         .         .............",
+".............         .         .............",
+"..............                 ..............",
+"...............               ...............",
+"................             ................",
+".................           .................",
+"..................    .    ..................",
+"...................  . .  ...................",
+"....................     ....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+"............................................."
+};
diff --git a/pixmaps/ldd49.xpm b/pixmaps/ldd49.xpm
new file mode 100644
index 0000000..dccce91
--- /dev/null
+++ b/pixmaps/ldd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *ldd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+"........................ ........................",
+"........................ ........................",
+".......................   .......................",
+".......................   .......................",
+"......................     ......................",
+"......................     ......................",
+"......................     ......................",
+".....................       .....................",
+".....................       .....................",
+".....................       .....................",
+"....................         ....................",
+"....................         ....................",
+"...................           ...................",
+"...................           ...................",
+"...................           ...................",
+"..................             ..................",
+"..................             ..................",
+".................               .................",
+".................               .................",
+".................       .       .................",
+"................        .        ................",
+"................        .        ................",
+"................        .        ................",
+"...............         .         ...............",
+"...............      .......      ...............",
+"..............          .          ..............",
+"..............          .          ..............",
+".............           .           .............",
+".............           .           .............",
+"..............          .          ..............",
+"...............                   ...............",
+"................                 ................",
+".................               .................",
+"..................             ..................",
+"...................           ...................",
+"....................         ....................",
+".....................       .....................",
+"......................     ......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/ldd54.xpm b/pixmaps/ldd54.xpm
new file mode 100644
index 0000000..8bb6d14
--- /dev/null
+++ b/pixmaps/ldd54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *ldd54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"......................................................",
+"......................................................",
+"..........................  ..........................",
+"..........................  ..........................",
+"..........................  ..........................",
+".........................    .........................",
+".........................    .........................",
+"........................      ........................",
+"........................      ........................",
+"........................      ........................",
+".......................        .......................",
+".......................        .......................",
+".......................        .......................",
+"......................          ......................",
+"......................          ......................",
+"......................          ......................",
+".....................            .....................",
+".....................            .....................",
+".....................            .....................",
+"....................              ....................",
+"....................              ....................",
+"....................              ....................",
+"...................                ...................",
+"...................       ..       ...................",
+"...................       ..       ...................",
+"..................        ..        ..................",
+"..................        ..        ..................",
+"..................        ..        ..................",
+".................         ..         .................",
+".................         ..         .................",
+".................      ........      .................",
+"................       ........       ................",
+"................          ..          ................",
+"................          ..          ................",
+"...............           ..           ...............",
+"...............           ..           ...............",
+"...............           ..           ...............",
+"................          ..          ................",
+".................                    .................",
+"..................                  ..................",
+"...................                ...................",
+"....................              ....................",
+".....................     ..     .....................",
+"......................   ....   ......................",
+".......................  .  .  .......................",
+"........................      ........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/ldd58.xpm b/pixmaps/ldd58.xpm
new file mode 100644
index 0000000..8a96e1e
--- /dev/null
+++ b/pixmaps/ldd58.xpm
@@ -0,0 +1,66 @@
+/* XPM */
+static char *ldd58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"..........................................................",
+"..........................................................",
+"............................  ............................",
+"............................  ............................",
+"............................  ............................",
+"...........................    ...........................",
+"...........................    ...........................",
+"..........................      ..........................",
+"..........................      ..........................",
+"..........................      ..........................",
+".........................        .........................",
+".........................        .........................",
+".........................        .........................",
+"........................          ........................",
+"........................          ........................",
+"........................          ........................",
+".......................            .......................",
+".......................            .......................",
+".......................            .......................",
+"......................              ......................",
+"......................              ......................",
+"......................              ......................",
+".....................                .....................",
+".....................                .....................",
+".....................                .....................",
+"....................                  ....................",
+"....................        ..        ....................",
+"....................        ..        ....................",
+"...................         ..         ...................",
+"...................         ..         ...................",
+"...................         ..         ...................",
+"..................          ..          ..................",
+"..................          ..          ..................",
+"..................      ..........      ..................",
+".................       ..........       .................",
+".................           ..           .................",
+".................           ..           .................",
+"................            ..            ................",
+"................            ..            ................",
+".................           ..           .................",
+"..................          ..          ..................",
+"...................                    ...................",
+"....................                  ....................",
+".....................                .....................",
+"......................              ......................",
+".......................     ..     .......................",
+"........................   ....   ........................",
+".........................  .  .  .........................",
+"..........................      ..........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/ldd64.xpm b/pixmaps/ldd64.xpm
new file mode 100644
index 0000000..eb63814
--- /dev/null
+++ b/pixmaps/ldd64.xpm
@@ -0,0 +1,72 @@
+/* XPM */
+static char *ldd64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"................................................................",
+"................................................................",
+"...............................  ...............................",
+"...............................  ...............................",
+"...............................  ...............................",
+"..............................    ..............................",
+"..............................    ..............................",
+".............................      .............................",
+".............................      .............................",
+".............................      .............................",
+"............................        ............................",
+"............................        ............................",
+"............................        ............................",
+"...........................          ...........................",
+"...........................          ...........................",
+"...........................          ...........................",
+"..........................            ..........................",
+"..........................            ..........................",
+"..........................            ..........................",
+".........................              .........................",
+".........................              .........................",
+".........................              .........................",
+"........................                ........................",
+"........................                ........................",
+"........................                ........................",
+".......................                  .......................",
+".......................                  .......................",
+".......................        ..        .......................",
+"......................         ..         ......................",
+"......................         ..         ......................",
+"......................         ..         ......................",
+".....................          ..          .....................",
+".....................          ..          .....................",
+".....................          ..          .....................",
+"....................           ..           ....................",
+"....................       ..........       ....................",
+"....................       ..........       ....................",
+"...................            ..            ...................",
+"...................            ..            ...................",
+"...................            ..            ...................",
+"..................             ..             ..................",
+"..................             ..             ..................",
+"..................             ..             ..................",
+"...................            ..            ...................",
+"....................                        ....................",
+".....................                      .....................",
+"......................                    ......................",
+".......................                  .......................",
+"........................                ........................",
+".........................              .........................",
+"..........................            ..........................",
+"...........................          ...........................",
+"............................        ............................",
+".............................      .............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/ldd72.xpm b/pixmaps/ldd72.xpm
new file mode 100644
index 0000000..dbdb38a
--- /dev/null
+++ b/pixmaps/ldd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *ldd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".................................... ...................................",
+".................................... ...................................",
+"...................................   ..................................",
+"...................................   ..................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+".................................       ................................",
+".................................       ................................",
+"................................         ...............................",
+"................................         ...............................",
+"................................         ...............................",
+"...............................           ..............................",
+"...............................           ..............................",
+"..............................             .............................",
+"..............................             .............................",
+"..............................             .............................",
+".............................               ............................",
+".............................               ............................",
+"............................                 ...........................",
+"............................                 ...........................",
+"............................                 ...........................",
+"...........................                   ..........................",
+"...........................                   ..........................",
+"..........................                     .........................",
+"..........................                     .........................",
+"..........................                     .........................",
+".........................                       ........................",
+".........................          ...          ........................",
+"........................           ...           .......................",
+"........................           ...           .......................",
+"........................           ...           .......................",
+".......................            ...            ......................",
+".......................            ...            ......................",
+"......................             ...             .....................",
+"......................             ...             .....................",
+"......................        .............        .....................",
+".....................         .............         ....................",
+".....................         .............         ....................",
+"....................               ...               ...................",
+"....................               ...               ...................",
+"....................               ...               ...................",
+"...................                ...                ..................",
+"...................                ...                ..................",
+"...................                ...                ..................",
+"....................               ...               ...................",
+".....................              ...              ....................",
+"......................             ...             .....................",
+".......................            ...            ......................",
+"........................                         .......................",
+".........................                       ........................",
+"..........................                     .........................",
+"...........................                   ..........................",
+"............................                 ...........................",
+".............................               ............................",
+"..............................             .............................",
+"...............................           ..............................",
+"................................         ...............................",
+".................................       ................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/ldl33.xpm b/pixmaps/ldl33.xpm
new file mode 100644
index 0000000..63e54fd
--- /dev/null
+++ b/pixmaps/ldl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *ldl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+"................. ...............",
+"................. ...............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"...............     .............",
+"...............     .............",
+"...............     .............",
+"..............       ............",
+"..............       ............",
+"..............       ............",
+".............         ...........",
+".............    .    ...........",
+".............    .    ...........",
+"............     .     ..........",
+"............     .     ..........",
+"............   .....   ..........",
+"...........      .      .........",
+"...........      .      .........",
+"...........      .      .........",
+"............           ..........",
+".............         ...........",
+"..............   .   ............",
+"............... . . .............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................................."
+};
diff --git a/pixmaps/ldl37.xpm b/pixmaps/ldl37.xpm
new file mode 100644
index 0000000..9ead598
--- /dev/null
+++ b/pixmaps/ldl37.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char *ldl37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".....................................",
+".....................................",
+".................. ..................",
+".................. ..................",
+".................   .................",
+".................   .................",
+".................   .................",
+"................     ................",
+"................     ................",
+"................     ................",
+"...............       ...............",
+"...............       ...............",
+"...............       ...............",
+"..............         ..............",
+"..............         ..............",
+"..............         ..............",
+".............     .     .............",
+".............     .     .............",
+".............     .     .............",
+"............      .      ............",
+"............    .....    ............",
+"............      .      ............",
+"...........       .       ...........",
+"...........       .       ...........",
+"...........       .       ...........",
+"............             ............",
+".............           .............",
+"..............         ..............",
+"...............   .   ...............",
+"................ . . ................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+"....................................."
+};
diff --git a/pixmaps/ldl40.xpm b/pixmaps/ldl40.xpm
new file mode 100644
index 0000000..9555d12
--- /dev/null
+++ b/pixmaps/ldl40.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char *ldl40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................",
+"........................................",
+"................... ....................",
+"................... ....................",
+"..................   ...................",
+"..................   ...................",
+".................     ..................",
+".................     ..................",
+"................       .................",
+"................       .................",
+"................       .................",
+"...............         ................",
+"...............         ................",
+"...............         ................",
+"..............           ...............",
+"..............           ...............",
+".............      .      ..............",
+".............      .      ..............",
+".............      .      ..............",
+"............       .       .............",
+"............       .       .............",
+"............    .......    .............",
+"...........        .        ............",
+"...........        .        ............",
+"..........         .         ...........",
+"..........         .         ...........",
+"...........        .        ............",
+"............               .............",
+".............             ..............",
+"..............           ...............",
+"...............    .    ................",
+"................  . .  .................",
+".................     ..................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"........................................"
+};
diff --git a/pixmaps/ldl45.xpm b/pixmaps/ldl45.xpm
new file mode 100644
index 0000000..5d4a131
--- /dev/null
+++ b/pixmaps/ldl45.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *ldl45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".............................................",
+".............................................",
+"...................... ......................",
+"...................... ......................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+"....................     ....................",
+"....................     ....................",
+"....................     ....................",
+"...................       ...................",
+"...................       ...................",
+"...................       ...................",
+"..................         ..................",
+"..................         ..................",
+"..................         ..................",
+".................           .................",
+".................           .................",
+".................     .     .................",
+"................      .      ................",
+"................      .      ................",
+"................      .      ................",
+"...............       .       ...............",
+"...............       .       ...............",
+"...............    .......    ...............",
+"..............        .        ..............",
+"..............        .        ..............",
+"..............        .        ..............",
+".............         .         .............",
+".............         .         .............",
+"..............                 ..............",
+"...............               ...............",
+"................             ................",
+".................           .................",
+"..................    .    ..................",
+"...................  . .  ...................",
+"....................     ....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+"............................................."
+};
diff --git a/pixmaps/ldl49.xpm b/pixmaps/ldl49.xpm
new file mode 100644
index 0000000..74ce593
--- /dev/null
+++ b/pixmaps/ldl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *ldl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+"........................ ........................",
+"........................ ........................",
+".......................   .......................",
+".......................   .......................",
+"......................     ......................",
+"......................     ......................",
+"......................     ......................",
+".....................       .....................",
+".....................       .....................",
+".....................       .....................",
+"....................         ....................",
+"....................         ....................",
+"...................           ...................",
+"...................           ...................",
+"...................           ...................",
+"..................             ..................",
+"..................             ..................",
+".................               .................",
+".................               .................",
+".................       .       .................",
+"................        .        ................",
+"................        .        ................",
+"................        .        ................",
+"...............         .         ...............",
+"...............      .......      ...............",
+"..............          .          ..............",
+"..............          .          ..............",
+".............           .           .............",
+".............           .           .............",
+"..............          .          ..............",
+"...............                   ...............",
+"................                 ................",
+".................               .................",
+"..................             ..................",
+"...................           ...................",
+"....................         ....................",
+".....................       .....................",
+"......................     ......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/ldl54.xpm b/pixmaps/ldl54.xpm
new file mode 100644
index 0000000..7fcdd54
--- /dev/null
+++ b/pixmaps/ldl54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *ldl54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"......................................................",
+"......................................................",
+"..........................  ..........................",
+"..........................  ..........................",
+"..........................  ..........................",
+".........................    .........................",
+".........................    .........................",
+"........................      ........................",
+"........................      ........................",
+"........................      ........................",
+".......................        .......................",
+".......................        .......................",
+".......................        .......................",
+"......................          ......................",
+"......................          ......................",
+"......................          ......................",
+".....................            .....................",
+".....................            .....................",
+".....................            .....................",
+"....................              ....................",
+"....................              ....................",
+"....................              ....................",
+"...................                ...................",
+"...................       ..       ...................",
+"...................       ..       ...................",
+"..................        ..        ..................",
+"..................        ..        ..................",
+"..................        ..        ..................",
+".................         ..         .................",
+".................         ..         .................",
+".................      ........      .................",
+"................       ........       ................",
+"................          ..          ................",
+"................          ..          ................",
+"...............           ..           ...............",
+"...............           ..           ...............",
+"...............           ..           ...............",
+"................          ..          ................",
+".................                    .................",
+"..................                  ..................",
+"...................                ...................",
+"....................              ....................",
+".....................     ..     .....................",
+"......................   ....   ......................",
+".......................  .  .  .......................",
+"........................      ........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/ldl58.xpm b/pixmaps/ldl58.xpm
new file mode 100644
index 0000000..0987914
--- /dev/null
+++ b/pixmaps/ldl58.xpm
@@ -0,0 +1,66 @@
+/* XPM */
+static char *ldl58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"..........................................................",
+"..........................................................",
+"............................  ............................",
+"............................  ............................",
+"............................  ............................",
+"...........................    ...........................",
+"...........................    ...........................",
+"..........................      ..........................",
+"..........................      ..........................",
+"..........................      ..........................",
+".........................        .........................",
+".........................        .........................",
+".........................        .........................",
+"........................          ........................",
+"........................          ........................",
+"........................          ........................",
+".......................            .......................",
+".......................            .......................",
+".......................            .......................",
+"......................              ......................",
+"......................              ......................",
+"......................              ......................",
+".....................                .....................",
+".....................                .....................",
+".....................                .....................",
+"....................                  ....................",
+"....................        ..        ....................",
+"....................        ..        ....................",
+"...................         ..         ...................",
+"...................         ..         ...................",
+"...................         ..         ...................",
+"..................          ..          ..................",
+"..................          ..          ..................",
+"..................      ..........      ..................",
+".................       ..........       .................",
+".................           ..           .................",
+".................           ..           .................",
+"................            ..            ................",
+"................            ..            ................",
+".................           ..           .................",
+"..................          ..          ..................",
+"...................                    ...................",
+"....................                  ....................",
+".....................                .....................",
+"......................              ......................",
+".......................     ..     .......................",
+"........................   ....   ........................",
+".........................  .  .  .........................",
+"..........................      ..........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/ldl64.xpm b/pixmaps/ldl64.xpm
new file mode 100644
index 0000000..af0b708
--- /dev/null
+++ b/pixmaps/ldl64.xpm
@@ -0,0 +1,72 @@
+/* XPM */
+static char *ldl64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"................................................................",
+"................................................................",
+"...............................  ...............................",
+"...............................  ...............................",
+"...............................  ...............................",
+"..............................    ..............................",
+"..............................    ..............................",
+".............................      .............................",
+".............................      .............................",
+".............................      .............................",
+"............................        ............................",
+"............................        ............................",
+"............................        ............................",
+"...........................          ...........................",
+"...........................          ...........................",
+"...........................          ...........................",
+"..........................            ..........................",
+"..........................            ..........................",
+"..........................            ..........................",
+".........................              .........................",
+".........................              .........................",
+".........................              .........................",
+"........................                ........................",
+"........................                ........................",
+"........................                ........................",
+".......................                  .......................",
+".......................                  .......................",
+".......................        ..        .......................",
+"......................         ..         ......................",
+"......................         ..         ......................",
+"......................         ..         ......................",
+".....................          ..          .....................",
+".....................          ..          .....................",
+".....................          ..          .....................",
+"....................           ..           ....................",
+"....................       ..........       ....................",
+"....................       ..........       ....................",
+"...................            ..            ...................",
+"...................            ..            ...................",
+"...................            ..            ...................",
+"..................             ..             ..................",
+"..................             ..             ..................",
+"..................             ..             ..................",
+"...................            ..            ...................",
+"....................                        ....................",
+".....................                      .....................",
+"......................                    ......................",
+".......................                  .......................",
+"........................                ........................",
+".........................              .........................",
+"..........................            ..........................",
+"...........................          ...........................",
+"............................        ............................",
+".............................      .............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/ldl72.xpm b/pixmaps/ldl72.xpm
new file mode 100644
index 0000000..6fb0c52
--- /dev/null
+++ b/pixmaps/ldl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *ldl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".................................... ...................................",
+".................................... ...................................",
+"...................................   ..................................",
+"...................................   ..................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+".................................       ................................",
+".................................       ................................",
+"................................         ...............................",
+"................................         ...............................",
+"................................         ...............................",
+"...............................           ..............................",
+"...............................           ..............................",
+"..............................             .............................",
+"..............................             .............................",
+"..............................             .............................",
+".............................               ............................",
+".............................               ............................",
+"............................                 ...........................",
+"............................                 ...........................",
+"............................                 ...........................",
+"...........................                   ..........................",
+"...........................                   ..........................",
+"..........................                     .........................",
+"..........................                     .........................",
+"..........................                     .........................",
+".........................                       ........................",
+".........................          ...          ........................",
+"........................           ...           .......................",
+"........................           ...           .......................",
+"........................           ...           .......................",
+".......................            ...            ......................",
+".......................            ...            ......................",
+"......................             ...             .....................",
+"......................             ...             .....................",
+"......................        .............        .....................",
+".....................         .............         ....................",
+".....................         .............         ....................",
+"....................               ...               ...................",
+"....................               ...               ...................",
+"....................               ...               ...................",
+"...................                ...                ..................",
+"...................                ...                ..................",
+"...................                ...                ..................",
+"....................               ...               ...................",
+".....................              ...              ....................",
+"......................             ...             .....................",
+".......................            ...            ......................",
+"........................                         .......................",
+".........................                       ........................",
+"..........................                     .........................",
+"...........................                   ..........................",
+"............................                 ...........................",
+".............................               ............................",
+"..............................             .............................",
+"...............................           ..............................",
+"................................         ...............................",
+".................................       ................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/lld33.xpm b/pixmaps/lld33.xpm
new file mode 100644
index 0000000..ceb0681
--- /dev/null
+++ b/pixmaps/lld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *lld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+"................. ...............",
+"................. ...............",
+"................ X ..............",
+"................ X ..............",
+"................ X ..............",
+"............... XXX .............",
+"............... XXX .............",
+"............... XXX .............",
+".............. XXXXX ............",
+".............. XXXXX ............",
+".............. XXXXX ............",
+"............. XXXXXXX ...........",
+"............. XXX XXX ...........",
+"............. XXX XXX ...........",
+"............ XXXX XXXX ..........",
+"............ XXXX XXXX ..........",
+"............ XX     XX ..........",
+"........... XXXXX XXXXX .........",
+"........... XXXXX XXXXX .........",
+"........... XXXXX XXXXX .........",
+"............ XXXX XXXX ..........",
+"............. XXXXXXX ...........",
+".............. XXXXX ............",
+"............... XXX .............",
+"................ X ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................................."
+};
diff --git a/pixmaps/lld37.xpm b/pixmaps/lld37.xpm
new file mode 100644
index 0000000..7580e03
--- /dev/null
+++ b/pixmaps/lld37.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char *lld37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".....................................",
+".....................................",
+".................. ..................",
+".................. ..................",
+"................. X .................",
+"................. X .................",
+"................. X .................",
+"................ XXX ................",
+"................ XXX ................",
+"................ XXX ................",
+"............... XXXXX ...............",
+"............... XXXXX ...............",
+"............... XXXXX ...............",
+".............. XXXXXXX ..............",
+".............. XXXXXXX ..............",
+".............. XXXXXXX ..............",
+"............. XXXX XXXX .............",
+"............. XXXX XXXX .............",
+"............. XXXX XXXX .............",
+"............ XXXXX XXXXX ............",
+"............ XXXXX XXXXX ............",
+"............ XXX     XXX ............",
+"........... XXXXXX XXXXXX ...........",
+"........... XXXXXX XXXXXX ...........",
+"........... XXXXXX XXXXXX ...........",
+"............ XXXXX XXXXX ............",
+"............. XXXXXXXXX .............",
+".............. XXXXXXX ..............",
+"............... XXXXX ...............",
+"................ X X ................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+"....................................."
+};
diff --git a/pixmaps/lld40.xpm b/pixmaps/lld40.xpm
new file mode 100644
index 0000000..b86ca2a
--- /dev/null
+++ b/pixmaps/lld40.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char *lld40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................",
+"........................................",
+"................... ....................",
+"................... ....................",
+".................. X ...................",
+".................. X ...................",
+"................. XXX ..................",
+"................. XXX ..................",
+"................ XXXXX .................",
+"................ XXXXX .................",
+"................ XXXXX .................",
+"............... XXXXXXX ................",
+"............... XXXXXXX ................",
+"............... XXXXXXX ................",
+".............. XXXXXXXXX ...............",
+".............. XXXXXXXXX ...............",
+"............. XXXXX XXXXX ..............",
+"............. XXXXX XXXXX ..............",
+"............. XXXXX XXXXX ..............",
+"............ XXXXXX XXXXXX .............",
+"............ XXXXXX XXXXXX .............",
+"............ XXX       XXX .............",
+"........... XXXXXXX XXXXXXX ............",
+"........... XXXXXXX XXXXXXX ............",
+".......... XXXXXXXX XXXXXXXX ...........",
+".......... XXXXXXXX XXXXXXXX ...........",
+"........... XXXXXXX XXXXXXX ............",
+"............ XXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXX ..............",
+".............. XXXXXXXXX ...............",
+"............... XXX XXX ................",
+"................ X   X .................",
+".................     ..................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"........................................"
+};
diff --git a/pixmaps/lld45.xpm b/pixmaps/lld45.xpm
new file mode 100644
index 0000000..6312309
--- /dev/null
+++ b/pixmaps/lld45.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *lld45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".............................................",
+".............................................",
+"...................... ......................",
+"...................... ......................",
+"..................... X .....................",
+"..................... X .....................",
+"..................... X .....................",
+".................... XXX ....................",
+".................... XXX ....................",
+".................... XXX ....................",
+"................... XXXXX ...................",
+"................... XXXXX ...................",
+"................... XXXXX ...................",
+".................. XXXXXXX ..................",
+".................. XXXXXXX ..................",
+".................. XXXXXXX ..................",
+"................. XXXXXXXXX .................",
+"................. XXXXXXXXX .................",
+"................. XXXXXXXXX .................",
+"................ XXXXX XXXXX ................",
+"................ XXXXX XXXXX ................",
+"................ XXXXX XXXXX ................",
+"............... XXXXXX XXXXXX ...............",
+"............... XXXXXX XXXXXX ...............",
+"............... XXXXXX XXXXXX ...............",
+".............. XXXX       XXXX ..............",
+".............. XXXXXXX XXXXXXX ..............",
+".............. XXXXXXX XXXXXXX ..............",
+"............. XXXXXXXX XXXXXXXX .............",
+"............. XXXXXXXX XXXXXXXX .............",
+".............. XXXXXXX XXXXXXX ..............",
+"............... XXXXXXXXXXXXX ...............",
+"................ XXXXXXXXXXX ................",
+"................. XXXXXXXXX .................",
+".................. XXXXXXX ..................",
+"................... XXXXX ...................",
+".................... X X ....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+"............................................."
+};
diff --git a/pixmaps/lld49.xpm b/pixmaps/lld49.xpm
new file mode 100644
index 0000000..ea14e08
--- /dev/null
+++ b/pixmaps/lld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *lld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+"........................ ........................",
+"........................ ........................",
+".......................   .......................",
+"....................... X .......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+".................... XXXXXXX ....................",
+".................... XXXXXXX ....................",
+"................... XXXXXXXXX ...................",
+"................... XXXXXXXXX ...................",
+"................... XXXXXXXXX ...................",
+".................. XXXXXXXXXXX ..................",
+".................. XXXXXXXXXXX ..................",
+"................. XXXXXXXXXXXXX .................",
+"................. XXXXXXXXXXXXX .................",
+"................. XXXXXX XXXXXX .................",
+"................ XXXXXXX XXXXXXX ................",
+"................ XXXXXXX XXXXXXX ................",
+"................ XXXXXXX XXXXXXX ................",
+"............... XXXXXXXX XXXXXXXX ...............",
+"............... XXXXX       XXXXX ...............",
+".............. XXXXXXXXX XXXXXXXXX ..............",
+".............. XXXXXXXXX XXXXXXXXX ..............",
+"............. XXXXXXXXXX XXXXXXXXXX .............",
+".............  XXXXXXXXX XXXXXXXXX  .............",
+"..............  XXXXXXXX XXXXXXXX  ..............",
+"...............  XXXXXXXXXXXXXXX  ...............",
+"................  XXXXXXXXXXXXX  ................",
+".................  XXXXXXXXXXX  .................",
+"..................  XXXXXXXXX  ..................",
+"...................  XXXXXXX  ...................",
+"....................  XXXXX  ....................",
+".....................  XXX  .....................",
+"......................     ......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/lld54.xpm b/pixmaps/lld54.xpm
new file mode 100644
index 0000000..d56a5d5
--- /dev/null
+++ b/pixmaps/lld54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *lld54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"......................................................",
+"......................................................",
+"..........................  ..........................",
+"..........................  ..........................",
+"..........................  ..........................",
+".........................    .........................",
+".........................    .........................",
+"........................  XX  ........................",
+"........................  XX  ........................",
+"........................  XX  ........................",
+".......................  XXXX  .......................",
+".......................  XXXX  .......................",
+".......................  XXXX  .......................",
+"......................  XXXXXX  ......................",
+"......................  XXXXXX  ......................",
+"......................  XXXXXX  ......................",
+".....................  XXXXXXXX  .....................",
+".....................  XXXXXXXX  .....................",
+".....................  XXXXXXXX  .....................",
+"....................  XXXXXXXXXX  ....................",
+"....................  XXXXXXXXXX  ....................",
+"....................  XXXXXXXXXX  ....................",
+"...................  XXXXXXXXXXXX  ...................",
+"...................  XXXXX  XXXXX  ...................",
+"...................  XXXXX  XXXXX  ...................",
+"..................  XXXXXX  XXXXXX  ..................",
+"..................  XXXXXX  XXXXXX  ..................",
+"..................  XXXXXX  XXXXXX  ..................",
+".................  XXXXXXX  XXXXXXX  .................",
+".................  XXXXXXX  XXXXXXX  .................",
+".................  XXX          XXX  .................",
+"................  XXXX          XXXX  ................",
+"................  XXXXXXXX  XXXXXXXX  ................",
+"................  XXXXXXXX  XXXXXXXX  ................",
+"...............  XXXXXXXXX  XXXXXXXXX  ...............",
+"...............  XXXXXXXXX  XXXXXXXXX  ...............",
+"...............   XXXXXXXX  XXXXXXXX   ...............",
+"................   XXXXXXXXXXXXXXXX   ................",
+".................   XXXXXXXXXXXXXX   .................",
+"..................   XXXXXXXXXXXX   ..................",
+"...................   XXXXXXXXXX   ...................",
+"....................   XXXXXXXX   ....................",
+".....................   XX  XX   .....................",
+"......................          ......................",
+".......................        .......................",
+"........................      ........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/lld58.xpm b/pixmaps/lld58.xpm
new file mode 100644
index 0000000..a214dc6
--- /dev/null
+++ b/pixmaps/lld58.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *lld58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"..........................................................",
+"..........................................................",
+"............................  ............................",
+"............................  ............................",
+"............................  ............................",
+"...........................    ...........................",
+"...........................    ...........................",
+"..........................  XX  ..........................",
+"..........................  XX  ..........................",
+"..........................  XX  ..........................",
+".........................  XXXX  .........................",
+".........................  XXXX  .........................",
+".........................  XXXX  .........................",
+"........................  XXXXXX  ........................",
+"........................  XXXXXX  ........................",
+"........................  XXXXXX  ........................",
+".......................  XXXXXXXX  .......................",
+".......................  XXXXXXXX  .......................",
+".......................  XXXXXXXX  .......................",
+"......................  XXXXXXXXXX  ......................",
+"......................  XXXXXXXXXX  ......................",
+"......................  XXXXXXXXXX  ......................",
+".....................  XXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXXXXX  .....................",
+"....................  XXXXXX  XXXXXX  ....................",
+"....................  XXXXXX  XXXXXX  ....................",
+"....................  XXXXXX  XXXXXX  ....................",
+"...................  XXXXXXX  XXXXXXX  ...................",
+"...................  XXXXXXX  XXXXXXX  ...................",
+"...................  XXXXXXX  XXXXXXX  ...................",
+"..................  XXXXXXXX  XXXXXXXX  ..................",
+"..................  XXXX          XXXX  ..................",
+"..................  XXXX          XXXX  ..................",
+".................  XXXXXXXXX  XXXXXXXXX  .................",
+".................  XXXXXXXXX  XXXXXXXXX  .................",
+".................  XXXXXXXXX  XXXXXXXXX  .................",
+"................  XXXXXXXXXX  XXXXXXXXXX  ................",
+"................   XXXXXXXXX  XXXXXXXXX   ................",
+".................   XXXXXXXX  XXXXXXXX   .................",
+"..................   XXXXXXXXXXXXXXXX   ..................",
+"...................   XXXXXXXXXXXXXX   ...................",
+"....................   XXXXXXXXXXXX   ....................",
+".....................   XXXXXXXXXX   .....................",
+"......................   XXXXXXXX   ......................",
+".......................   XX  XX   .......................",
+"........................          ........................",
+".........................        .........................",
+"..........................      ..........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/lld64.xpm b/pixmaps/lld64.xpm
new file mode 100644
index 0000000..cc87702
--- /dev/null
+++ b/pixmaps/lld64.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char *lld64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"................................................................",
+"................................................................",
+"...............................  ...............................",
+"...............................  ...............................",
+"...............................  ...............................",
+"..............................    ..............................",
+"..............................    ..............................",
+".............................  XX  .............................",
+".............................  XX  .............................",
+".............................  XX  .............................",
+"............................  XXXX  ............................",
+"............................  XXXX  ............................",
+"............................  XXXX  ............................",
+"...........................  XXXXXX  ...........................",
+"...........................  XXXXXX  ...........................",
+"...........................  XXXXXX  ...........................",
+"..........................  XXXXXXXX  ..........................",
+"..........................  XXXXXXXX  ..........................",
+"..........................  XXXXXXXX  ..........................",
+".........................  XXXXXXXXXX  .........................",
+".........................  XXXXXXXXXX  .........................",
+".........................  XXXXXXXXXX  .........................",
+"........................  XXXXXXXXXXXX  ........................",
+"........................  XXXXXXXXXXXX  ........................",
+"........................  XXXXXXXXXXXX  ........................",
+".......................  XXXXXXXXXXXXXX  .......................",
+".......................  XXXXXXXXXXXXXX  .......................",
+".......................  XXXXXX  XXXXXX  .......................",
+"......................  XXXXXXX  XXXXXXX  ......................",
+"......................  XXXXXXX  XXXXXXX  ......................",
+"......................  XXXXXXX  XXXXXXX  ......................",
+".....................  XXXXXXXX  XXXXXXXX  .....................",
+".....................  XXXXXXXX  XXXXXXXX  .....................",
+".....................  XXXXXXXX  XXXXXXXX  .....................",
+"....................  XXXXXXXXX  XXXXXXXXX  ....................",
+"....................  XXXXX          XXXXX  ....................",
+"....................  XXXXX          XXXXX  ....................",
+"...................  XXXXXXXXXX  XXXXXXXXXX  ...................",
+"...................  XXXXXXXXXX  XXXXXXXXXX  ...................",
+"...................  XXXXXXXXXX  XXXXXXXXXX  ...................",
+"..................  XXXXXXXXXXX  XXXXXXXXXXX  ..................",
+"..................  XXXXXXXXXXX  XXXXXXXXXXX  ..................",
+"..................   XXXXXXXXXX  XXXXXXXXXX   ..................",
+"...................   XXXXXXXXX  XXXXXXXXX   ...................",
+"....................   XXXXXXXXXXXXXXXXXX   ....................",
+".....................   XXXXXXXXXXXXXXXX   .....................",
+"......................   XXXXXXXXXXXXXX   ......................",
+".......................   XXXXXXXXXXXX   .......................",
+"........................   XXXXXXXXXX   ........................",
+".........................   XXXXXXXX   .........................",
+"..........................   XX  XX   ..........................",
+"...........................          ...........................",
+"............................        ............................",
+".............................      .............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/lld72.xpm b/pixmaps/lld72.xpm
new file mode 100644
index 0000000..ccdffaf
--- /dev/null
+++ b/pixmaps/lld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *lld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".................................... ...................................",
+".................................... ...................................",
+"...................................   ..................................",
+"...................................   ..................................",
+"..................................  X  .................................",
+"..................................  X  .................................",
+".................................. XXX .................................",
+".................................  XXX  ................................",
+".................................  XXX  ................................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+"................................ XXXXXXX ...............................",
+"...............................  XXXXXXX  ..............................",
+"...............................  XXXXXXX  ..............................",
+"..............................  XXXXXXXXX  .............................",
+"..............................  XXXXXXXXX  .............................",
+".............................. XXXXXXXXXXX .............................",
+".............................  XXXXXXXXXXX  ............................",
+".............................  XXXXXXXXXXX  ............................",
+"............................  XXXXXXXXXXXXX  ...........................",
+"............................  XXXXXXXXXXXXX  ...........................",
+"............................ XXXXXXXXXXXXXXX ...........................",
+"...........................  XXXXXXXXXXXXXXX  ..........................",
+"...........................  XXXXXXXXXXXXXXX  ..........................",
+"..........................  XXXXXXXXXXXXXXXXX  .........................",
+"..........................  XXXXXXXXXXXXXXXXX  .........................",
+".......................... XXXXXXXXXXXXXXXXXXX .........................",
+".........................  XXXXXXXXXXXXXXXXXXX  ........................",
+".........................  XXXXXXXX   XXXXXXXX  ........................",
+"........................  XXXXXXXXX   XXXXXXXXX  .......................",
+"........................  XXXXXXXXX   XXXXXXXXX  .......................",
+"........................ XXXXXXXXXX   XXXXXXXXXX .......................",
+".......................  XXXXXXXXXX   XXXXXXXXXX  ......................",
+".......................  XXXXXXXXXX   XXXXXXXXXX  ......................",
+"......................  XXXXXXXXXXX   XXXXXXXXXXX  .....................",
+"......................  XXXXXXXXXXX   XXXXXXXXXXX  .....................",
+"......................  XXXXXX             XXXXXX  .....................",
+".....................  XXXXXXX             XXXXXXX  ....................",
+".....................  XXXXXXX             XXXXXXX  ....................",
+"....................  XXXXXXXXXXXXX   XXXXXXXXXXXXX  ...................",
+"....................  XXXXXXXXXXXXX   XXXXXXXXXXXXX  ...................",
+"....................  XXXXXXXXXXXXX   XXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXX   XXXXXXXXXXXXXX  ..................",
+"...................  XXXXXXXXXXXXXX   XXXXXXXXXXXXXX  ..................",
+"...................   XXXXXXXXXXXXX   XXXXXXXXXXXXX   ..................",
+"....................   XXXXXXXXXXXX   XXXXXXXXXXXX   ...................",
+".....................   XXXXXXXXXXX   XXXXXXXXXXX   ....................",
+"......................   XXXXXXXXXX   XXXXXXXXXX   .....................",
+".......................   XXXXXXXXX   XXXXXXXXX   ......................",
+"........................   XXXXXXXXXXXXXXXXXXX   .......................",
+".........................   XXXXXXXXXXXXXXXXX   ........................",
+"..........................   XXXXXXXXXXXXXXX   .........................",
+"...........................   XXXXXXXXXXXXX   ..........................",
+"............................   XXXXX XXXXX   ...........................",
+".............................   XXXX XXXX   ............................",
+"..............................   XX   XX   .............................",
+"...............................   X   X   ..............................",
+"................................         ...............................",
+".................................       ................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/lll33.xpm b/pixmaps/lll33.xpm
new file mode 100644
index 0000000..c6ee4df
--- /dev/null
+++ b/pixmaps/lll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *lll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+"................. ...............",
+"................. ...............",
+"................ X ..............",
+"................ X ..............",
+"................ X ..............",
+"............... XXX .............",
+"............... XXX .............",
+"............... XXX .............",
+".............. XXXXX ............",
+".............. XXXXX ............",
+".............. XXXXX ............",
+"............. XXXXXXX ...........",
+"............. XXX XXX ...........",
+"............. XXX XXX ...........",
+"............ XXXX XXXX ..........",
+"............ XXXX XXXX ..........",
+"............ XX     XX ..........",
+"........... XXXXX XXXXX .........",
+"........... XXXXX XXXXX .........",
+"........... XXXXX XXXXX .........",
+"............ XXXX XXXX ..........",
+"............. XXXXXXX ...........",
+".............. XXXXX ............",
+"............... XXX .............",
+"................ X ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................   ..............",
+"................................."
+};
diff --git a/pixmaps/lll37.xpm b/pixmaps/lll37.xpm
new file mode 100644
index 0000000..804aac0
--- /dev/null
+++ b/pixmaps/lll37.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char *lll37[] = {
+/* columns rows colors chars-per-pixel */
+"37 37 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".....................................",
+".....................................",
+".................. ..................",
+".................. ..................",
+"................. X .................",
+"................. X .................",
+"................. X .................",
+"................ XXX ................",
+"................ XXX ................",
+"................ XXX ................",
+"............... XXXXX ...............",
+"............... XXXXX ...............",
+"............... XXXXX ...............",
+".............. XXXXXXX ..............",
+".............. XXXXXXX ..............",
+".............. XXXXXXX ..............",
+"............. XXXX XXXX .............",
+"............. XXXX XXXX .............",
+"............. XXXX XXXX .............",
+"............ XXXXX XXXXX ............",
+"............ XXXXX XXXXX ............",
+"............ XXX     XXX ............",
+"........... XXXXXX XXXXXX ...........",
+"........... XXXXXX XXXXXX ...........",
+"........... XXXXXX XXXXXX ...........",
+"............ XXXXX XXXXX ............",
+"............. XXXXXXXXX .............",
+".............. XXXXXXX ..............",
+"............... XXXXX ...............",
+"................ X X ................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+".................   .................",
+"....................................."
+};
diff --git a/pixmaps/lll40.xpm b/pixmaps/lll40.xpm
new file mode 100644
index 0000000..344049f
--- /dev/null
+++ b/pixmaps/lll40.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char *lll40[] = {
+/* columns rows colors chars-per-pixel */
+"40 40 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................",
+"........................................",
+"................... ....................",
+"................... ....................",
+".................. X ...................",
+".................. X ...................",
+"................. XXX ..................",
+"................. XXX ..................",
+"................ XXXXX .................",
+"................ XXXXX .................",
+"................ XXXXX .................",
+"............... XXXXXXX ................",
+"............... XXXXXXX ................",
+"............... XXXXXXX ................",
+".............. XXXXXXXXX ...............",
+".............. XXXXXXXXX ...............",
+"............. XXXXX XXXXX ..............",
+"............. XXXXX XXXXX ..............",
+"............. XXXXX XXXXX ..............",
+"............ XXXXXX XXXXXX .............",
+"............ XXXXXX XXXXXX .............",
+"............ XXX       XXX .............",
+"........... XXXXXXX XXXXXXX ............",
+"........... XXXXXXX XXXXXXX ............",
+".......... XXXXXXXX XXXXXXXX ...........",
+".......... XXXXXXXX XXXXXXXX ...........",
+"........... XXXXXXX XXXXXXX ............",
+"............ XXXXXXXXXXXXX .............",
+"............. XXXXXXXXXXX ..............",
+".............. XXXXXXXXX ...............",
+"............... XXX XXX ................",
+"................ X   X .................",
+".................     ..................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"..................   ...................",
+"........................................"
+};
diff --git a/pixmaps/lll45.xpm b/pixmaps/lll45.xpm
new file mode 100644
index 0000000..d71615e
--- /dev/null
+++ b/pixmaps/lll45.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char *lll45[] = {
+/* columns rows colors chars-per-pixel */
+"45 45 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".............................................",
+".............................................",
+"...................... ......................",
+"...................... ......................",
+"..................... X .....................",
+"..................... X .....................",
+"..................... X .....................",
+".................... XXX ....................",
+".................... XXX ....................",
+".................... XXX ....................",
+"................... XXXXX ...................",
+"................... XXXXX ...................",
+"................... XXXXX ...................",
+".................. XXXXXXX ..................",
+".................. XXXXXXX ..................",
+".................. XXXXXXX ..................",
+"................. XXXXXXXXX .................",
+"................. XXXXXXXXX .................",
+"................. XXXXXXXXX .................",
+"................ XXXXX XXXXX ................",
+"................ XXXXX XXXXX ................",
+"................ XXXXX XXXXX ................",
+"............... XXXXXX XXXXXX ...............",
+"............... XXXXXX XXXXXX ...............",
+"............... XXXXXX XXXXXX ...............",
+".............. XXXX       XXXX ..............",
+".............. XXXXXXX XXXXXXX ..............",
+".............. XXXXXXX XXXXXXX ..............",
+"............. XXXXXXXX XXXXXXXX .............",
+"............. XXXXXXXX XXXXXXXX .............",
+".............. XXXXXXX XXXXXXX ..............",
+"............... XXXXXXXXXXXXX ...............",
+"................ XXXXXXXXXXX ................",
+"................. XXXXXXXXX .................",
+".................. XXXXXXX ..................",
+"................... XXXXX ...................",
+".................... X X ....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+".....................   .....................",
+"............................................."
+};
diff --git a/pixmaps/lll49.xpm b/pixmaps/lll49.xpm
new file mode 100644
index 0000000..50775eb
--- /dev/null
+++ b/pixmaps/lll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *lll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+"........................ ........................",
+"........................ ........................",
+".......................   .......................",
+"....................... X .......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+".................... XXXXXXX ....................",
+".................... XXXXXXX ....................",
+"................... XXXXXXXXX ...................",
+"................... XXXXXXXXX ...................",
+"................... XXXXXXXXX ...................",
+".................. XXXXXXXXXXX ..................",
+".................. XXXXXXXXXXX ..................",
+"................. XXXXXXXXXXXXX .................",
+"................. XXXXXXXXXXXXX .................",
+"................. XXXXXX XXXXXX .................",
+"................ XXXXXXX XXXXXXX ................",
+"................ XXXXXXX XXXXXXX ................",
+"................ XXXXXXX XXXXXXX ................",
+"............... XXXXXXXX XXXXXXXX ...............",
+"............... XXXXX       XXXXX ...............",
+".............. XXXXXXXXX XXXXXXXXX ..............",
+".............. XXXXXXXXX XXXXXXXXX ..............",
+"............. XXXXXXXXXX XXXXXXXXXX .............",
+".............  XXXXXXXXX XXXXXXXXX  .............",
+"..............  XXXXXXXX XXXXXXXX  ..............",
+"...............  XXXXXXXXXXXXXXX  ...............",
+"................  XXXXXXXXXXXXX  ................",
+".................  XXXXXXXXXXX  .................",
+"..................  XXXXXXXXX  ..................",
+"...................  XXXXXXX  ...................",
+"....................  XXXXX  ....................",
+".....................  XXX  .....................",
+"......................     ......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".......................   .......................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/lll54.xpm b/pixmaps/lll54.xpm
new file mode 100644
index 0000000..28ed5c1
--- /dev/null
+++ b/pixmaps/lll54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *lll54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"......................................................",
+"......................................................",
+"..........................  ..........................",
+"..........................  ..........................",
+"..........................  ..........................",
+".........................    .........................",
+".........................    .........................",
+"........................  XX  ........................",
+"........................  XX  ........................",
+"........................  XX  ........................",
+".......................  XXXX  .......................",
+".......................  XXXX  .......................",
+".......................  XXXX  .......................",
+"......................  XXXXXX  ......................",
+"......................  XXXXXX  ......................",
+"......................  XXXXXX  ......................",
+".....................  XXXXXXXX  .....................",
+".....................  XXXXXXXX  .....................",
+".....................  XXXXXXXX  .....................",
+"....................  XXXXXXXXXX  ....................",
+"....................  XXXXXXXXXX  ....................",
+"....................  XXXXXXXXXX  ....................",
+"...................  XXXXXXXXXXXX  ...................",
+"...................  XXXXX  XXXXX  ...................",
+"...................  XXXXX  XXXXX  ...................",
+"..................  XXXXXX  XXXXXX  ..................",
+"..................  XXXXXX  XXXXXX  ..................",
+"..................  XXXXXX  XXXXXX  ..................",
+".................  XXXXXXX  XXXXXXX  .................",
+".................  XXXXXXX  XXXXXXX  .................",
+".................  XXX          XXX  .................",
+"................  XXXX          XXXX  ................",
+"................  XXXXXXXX  XXXXXXXX  ................",
+"................  XXXXXXXX  XXXXXXXX  ................",
+"...............  XXXXXXXXX  XXXXXXXXX  ...............",
+"...............  XXXXXXXXX  XXXXXXXXX  ...............",
+"...............   XXXXXXXX  XXXXXXXX   ...............",
+"................   XXXXXXXXXXXXXXXX   ................",
+".................   XXXXXXXXXXXXXX   .................",
+"..................   XXXXXXXXXXXX   ..................",
+"...................   XXXXXXXXXX   ...................",
+"....................   XXXXXXXX   ....................",
+".....................   XX  XX   .....................",
+"......................          ......................",
+".......................        .......................",
+"........................      ........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+".........................    .........................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/lll58.xpm b/pixmaps/lll58.xpm
new file mode 100644
index 0000000..4d49255
--- /dev/null
+++ b/pixmaps/lll58.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char *lll58[] = {
+/* columns rows colors chars-per-pixel */
+"58 58 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"..........................................................",
+"..........................................................",
+"............................  ............................",
+"............................  ............................",
+"............................  ............................",
+"...........................    ...........................",
+"...........................    ...........................",
+"..........................  XX  ..........................",
+"..........................  XX  ..........................",
+"..........................  XX  ..........................",
+".........................  XXXX  .........................",
+".........................  XXXX  .........................",
+".........................  XXXX  .........................",
+"........................  XXXXXX  ........................",
+"........................  XXXXXX  ........................",
+"........................  XXXXXX  ........................",
+".......................  XXXXXXXX  .......................",
+".......................  XXXXXXXX  .......................",
+".......................  XXXXXXXX  .......................",
+"......................  XXXXXXXXXX  ......................",
+"......................  XXXXXXXXXX  ......................",
+"......................  XXXXXXXXXX  ......................",
+".....................  XXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXXXXX  .....................",
+".....................  XXXXXXXXXXXX  .....................",
+"....................  XXXXXX  XXXXXX  ....................",
+"....................  XXXXXX  XXXXXX  ....................",
+"....................  XXXXXX  XXXXXX  ....................",
+"...................  XXXXXXX  XXXXXXX  ...................",
+"...................  XXXXXXX  XXXXXXX  ...................",
+"...................  XXXXXXX  XXXXXXX  ...................",
+"..................  XXXXXXXX  XXXXXXXX  ..................",
+"..................  XXXX          XXXX  ..................",
+"..................  XXXX          XXXX  ..................",
+".................  XXXXXXXXX  XXXXXXXXX  .................",
+".................  XXXXXXXXX  XXXXXXXXX  .................",
+".................  XXXXXXXXX  XXXXXXXXX  .................",
+"................  XXXXXXXXXX  XXXXXXXXXX  ................",
+"................   XXXXXXXXX  XXXXXXXXX   ................",
+".................   XXXXXXXX  XXXXXXXX   .................",
+"..................   XXXXXXXXXXXXXXXX   ..................",
+"...................   XXXXXXXXXXXXXX   ...................",
+"....................   XXXXXXXXXXXX   ....................",
+".....................   XXXXXXXXXX   .....................",
+"......................   XXXXXXXX   ......................",
+".......................   XX  XX   .......................",
+"........................          ........................",
+".........................        .........................",
+"..........................      ..........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"...........................    ...........................",
+"..........................................................",
+".........................................................."
+};
diff --git a/pixmaps/lll64.xpm b/pixmaps/lll64.xpm
new file mode 100644
index 0000000..512c98c
--- /dev/null
+++ b/pixmaps/lll64.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char *lll64[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"................................................................",
+"................................................................",
+"...............................  ...............................",
+"...............................  ...............................",
+"...............................  ...............................",
+"..............................    ..............................",
+"..............................    ..............................",
+".............................  XX  .............................",
+".............................  XX  .............................",
+".............................  XX  .............................",
+"............................  XXXX  ............................",
+"............................  XXXX  ............................",
+"............................  XXXX  ............................",
+"...........................  XXXXXX  ...........................",
+"...........................  XXXXXX  ...........................",
+"...........................  XXXXXX  ...........................",
+"..........................  XXXXXXXX  ..........................",
+"..........................  XXXXXXXX  ..........................",
+"..........................  XXXXXXXX  ..........................",
+".........................  XXXXXXXXXX  .........................",
+".........................  XXXXXXXXXX  .........................",
+".........................  XXXXXXXXXX  .........................",
+"........................  XXXXXXXXXXXX  ........................",
+"........................  XXXXXXXXXXXX  ........................",
+"........................  XXXXXXXXXXXX  ........................",
+".......................  XXXXXXXXXXXXXX  .......................",
+".......................  XXXXXXXXXXXXXX  .......................",
+".......................  XXXXXX  XXXXXX  .......................",
+"......................  XXXXXXX  XXXXXXX  ......................",
+"......................  XXXXXXX  XXXXXXX  ......................",
+"......................  XXXXXXX  XXXXXXX  ......................",
+".....................  XXXXXXXX  XXXXXXXX  .....................",
+".....................  XXXXXXXX  XXXXXXXX  .....................",
+".....................  XXXXXXXX  XXXXXXXX  .....................",
+"....................  XXXXXXXXX  XXXXXXXXX  ....................",
+"....................  XXXXX          XXXXX  ....................",
+"....................  XXXXX          XXXXX  ....................",
+"...................  XXXXXXXXXX  XXXXXXXXXX  ...................",
+"...................  XXXXXXXXXX  XXXXXXXXXX  ...................",
+"...................  XXXXXXXXXX  XXXXXXXXXX  ...................",
+"..................  XXXXXXXXXXX  XXXXXXXXXXX  ..................",
+"..................  XXXXXXXXXXX  XXXXXXXXXXX  ..................",
+"..................   XXXXXXXXXX  XXXXXXXXXX   ..................",
+"...................   XXXXXXXXX  XXXXXXXXX   ...................",
+"....................   XXXXXXXXXXXXXXXXXX   ....................",
+".....................   XXXXXXXXXXXXXXXX   .....................",
+"......................   XXXXXXXXXXXXXX   ......................",
+".......................   XXXXXXXXXXXX   .......................",
+"........................   XXXXXXXXXX   ........................",
+".........................   XXXXXXXX   .........................",
+"..........................   XX  XX   ..........................",
+"...........................          ...........................",
+"............................        ............................",
+".............................      .............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"..............................    ..............................",
+"................................................................",
+"................................................................"
+};
diff --git a/pixmaps/lll72.xpm b/pixmaps/lll72.xpm
new file mode 100644
index 0000000..4d4e946
--- /dev/null
+++ b/pixmaps/lll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *lll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".................................... ...................................",
+".................................... ...................................",
+"...................................   ..................................",
+"...................................   ..................................",
+"..................................  X  .................................",
+"..................................  X  .................................",
+".................................. XXX .................................",
+".................................  XXX  ................................",
+".................................  XXX  ................................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+"................................ XXXXXXX ...............................",
+"...............................  XXXXXXX  ..............................",
+"...............................  XXXXXXX  ..............................",
+"..............................  XXXXXXXXX  .............................",
+"..............................  XXXXXXXXX  .............................",
+".............................. XXXXXXXXXXX .............................",
+".............................  XXXXXXXXXXX  ............................",
+".............................  XXXXXXXXXXX  ............................",
+"............................  XXXXXXXXXXXXX  ...........................",
+"............................  XXXXXXXXXXXXX  ...........................",
+"............................ XXXXXXXXXXXXXXX ...........................",
+"...........................  XXXXXXXXXXXXXXX  ..........................",
+"...........................  XXXXXXXXXXXXXXX  ..........................",
+"..........................  XXXXXXXXXXXXXXXXX  .........................",
+"..........................  XXXXXXXXXXXXXXXXX  .........................",
+".......................... XXXXXXXXXXXXXXXXXXX .........................",
+".........................  XXXXXXXXXXXXXXXXXXX  ........................",
+".........................  XXXXXXXX   XXXXXXXX  ........................",
+"........................  XXXXXXXXX   XXXXXXXXX  .......................",
+"........................  XXXXXXXXX   XXXXXXXXX  .......................",
+"........................ XXXXXXXXXX   XXXXXXXXXX .......................",
+".......................  XXXXXXXXXX   XXXXXXXXXX  ......................",
+".......................  XXXXXXXXXX   XXXXXXXXXX  ......................",
+"......................  XXXXXXXXXXX   XXXXXXXXXXX  .....................",
+"......................  XXXXXXXXXXX   XXXXXXXXXXX  .....................",
+"......................  XXXXXX             XXXXXX  .....................",
+".....................  XXXXXXX             XXXXXXX  ....................",
+".....................  XXXXXXX             XXXXXXX  ....................",
+"....................  XXXXXXXXXXXXX   XXXXXXXXXXXXX  ...................",
+"....................  XXXXXXXXXXXXX   XXXXXXXXXXXXX  ...................",
+"....................  XXXXXXXXXXXXX   XXXXXXXXXXXXX  ...................",
+"...................  XXXXXXXXXXXXXX   XXXXXXXXXXXXXX  ..................",
+"...................  XXXXXXXXXXXXXX   XXXXXXXXXXXXXX  ..................",
+"...................   XXXXXXXXXXXXX   XXXXXXXXXXXXX   ..................",
+"....................   XXXXXXXXXXXX   XXXXXXXXXXXX   ...................",
+".....................   XXXXXXXXXXX   XXXXXXXXXXX   ....................",
+"......................   XXXXXXXXXX   XXXXXXXXXX   .....................",
+".......................   XXXXXXXXX   XXXXXXXXX   ......................",
+"........................   XXXXXXXXXXXXXXXXXXX   .......................",
+".........................   XXXXXXXXXXXXXXXXX   ........................",
+"..........................   XXXXXXXXXXXXXXX   .........................",
+"...........................   XXXXXXXXXXXXX   ..........................",
+"............................   XXXXX XXXXX   ...........................",
+".............................   XXXX XXXX   ............................",
+"..............................   XX   XX   .............................",
+"...............................   X   X   ..............................",
+"................................         ...............................",
+".................................       ................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"..................................     .................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/mdd33.xpm b/pixmaps/mdd33.xpm
new file mode 100644
index 0000000..8ccecf3
--- /dev/null
+++ b/pixmaps/mdd33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *mdd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c white s light_piece",
+". c green s dark_square",
+"X c black s dark_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"................X................",
+"...............XXX...............",
+"..............XXXXX..............",
+"..............XXXXX..............",
+"...............XXX...............",
+"...............   ...............",
+"...........XXXXXXXXXXX...........",
+"........XXXXXXXXXXXXXXXXX........",
+".......XXXXXXXXXXXXXXXXXXX.......",
+"......XXXXXXXXXXXXXXXXXXXXX......",
+"......XXXXXXXXXXXXXXXXXXXXX......",
+".....XXXXXXXXXXXXXXXXXXXXXXX.....",
+".....XXXXXXXXXXXXXXXXXXXXXXX.....",
+".....XXXXXXXXXXXXXXXXXXXXXXX.....",
+".....XXXXXXXXXXXXXXXXXXXXXXX.....",
+"....XXXXXXXXXXXXXXXXXXXXXXXXX....",
+"....XXXXXXXXXXXXXXXXXXXXXXXXX....",
+"....XXXXXX             XXXXXX....",
+"...XX     XXXXXXXXXXXXX     XX...",
+"...X XXXXXXXXXXXXXXXXXXXXXXX X...",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"...XXXXXXXXXXXXXXXXXXXXXXXXXXX...",
+".....XXXXXXXXXXXXXXXXXXXXXXX.....",
+"..........XXXXXXXXXXXXX..........",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/mdd49.xpm b/pixmaps/mdd49.xpm
new file mode 100644
index 0000000..1510c80
--- /dev/null
+++ b/pixmaps/mdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *mdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"........................ ........................",
+".......................   .......................",
+"......................     ......................",
+".....................       .....................",
+".....................       .....................",
+".....................       .....................",
+"......................     ......................",
+"......................     ......................",
+"......................     ......................",
+"...................... ... ......................",
+".................                ................",
+"...............                   ...............",
+"............                         ............",
+"..........                             ..........",
+".........                               .........",
+".........                               .........",
+".........                               .........",
+"........                                 ........",
+"........                                 ........",
+"........                                 ........",
+"........                                 ........",
+".......                                  ........",
+".......                                   .......",
+".......            ...........            .......",
+".......      ....               ....      .......",
+".......   ..                         ..   .......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+".....          ...................          .....",
+"....     ......                   ......     ....",
+"...   ...                               ...   ...",
+"..  ..  ..                            ..   ..  ..",
+".  .      ......                 .....       .  .",
+".               .................               .",
+".                                               .",
+"..                                             ..",
+"...                                           ...",
+"......                                     ......",
+".........                               .........",
+"...............                   ...............",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/mdd72.xpm b/pixmaps/mdd72.xpm
new file mode 100644
index 0000000..73ee78f
--- /dev/null
+++ b/pixmaps/mdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *mdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".................................... ...................................",
+"...................................   ..................................",
+"..................................     .................................",
+".................................       ................................",
+"................................         ...............................",
+"...............................           ..............................",
+"...............................           ..............................",
+"...............................           ..............................",
+"................................         ...............................",
+"................................         ...............................",
+"................................         ...............................",
+"................................         ...............................",
+".................................  ...  ................................",
+".................................  ...  ................................",
+"...........................                   ..........................",
+"........................                          ......................",
+".....................                               ....................",
+"..................                                    ..................",
+".................                                      .................",
+"................                                        ................",
+"...............                                          ...............",
+"...............                                          ...............",
+"...............                                          ...............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+".............                                              .............",
+".............                                              .............",
+".............                                              .............",
+".............                                              .............",
+".............                                              .............",
+"............               ....................             ............",
+"............        ...... .................... .....       ............",
+"............    ..........                      ........    ............",
+"............    ....                                 ...    ............",
+"...........                                                  ...........",
+"...........                                                  ...........",
+"...........                                                  ...........",
+"..........                                                    ..........",
+".........                                                      .........",
+"........               ..........................               ........",
+".......         ........................................         .......",
+"......     ............                           ...........     ......",
+".....    .......                                       ........    .....",
+"....    ...  .............                    .............  ...    ....",
+"...             ........................................             ...",
+"...                       .....................                      ...",
+"...                                                                  ...",
+"....                                                                ....",
+".....                                                              .....",
+".......                                                          .......",
+"...........                                                  ...........",
+"................                                        ................",
+".......................                          .......................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/mdl33.xpm b/pixmaps/mdl33.xpm
new file mode 100644
index 0000000..cda976f
--- /dev/null
+++ b/pixmaps/mdl33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *mdl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c white s light_piece",
+". c gray s light_square",
+"X c black s dark_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"................X................",
+"...............XXX...............",
+"..............XXXXX..............",
+"..............XXXXX..............",
+"...............XXX...............",
+"...............   ...............",
+"...........XXXXXXXXXXX...........",
+"........XXXXXXXXXXXXXXXXX........",
+".......XXXXXXXXXXXXXXXXXXX.......",
+"......XXXXXXXXXXXXXXXXXXXXX......",
+"......XXXXXXXXXXXXXXXXXXXXX......",
+".....XXXXXXXXXXXXXXXXXXXXXXX.....",
+".....XXXXXXXXXXXXXXXXXXXXXXX.....",
+".....XXXXXXXXXXXXXXXXXXXXXXX.....",
+".....XXXXXXXXXXXXXXXXXXXXXXX.....",
+"....XXXXXXXXXXXXXXXXXXXXXXXXX....",
+"....XXXXXXXXXXXXXXXXXXXXXXXXX....",
+"....XXXXXX             XXXXXX....",
+"...XX     XXXXXXXXXXXXX     XX...",
+"...X XXXXXXXXXXXXXXXXXXXXXXX X...",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"...XXXXXXXXXXXXXXXXXXXXXXXXXXX...",
+".....XXXXXXXXXXXXXXXXXXXXXXX.....",
+"..........XXXXXXXXXXXXX..........",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/mdl49.xpm b/pixmaps/mdl49.xpm
new file mode 100644
index 0000000..2ecdf81
--- /dev/null
+++ b/pixmaps/mdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *mdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"........................ ........................",
+".......................   .......................",
+"......................     ......................",
+".....................       .....................",
+".....................       .....................",
+".....................       .....................",
+"......................     ......................",
+"......................     ......................",
+"......................     ......................",
+"...................... ... ......................",
+".................                ................",
+"...............                   ...............",
+"............                         ............",
+"..........                             ..........",
+".........                               .........",
+".........                               .........",
+".........                               .........",
+"........                                 ........",
+"........                                 ........",
+"........                                 ........",
+"........                                 ........",
+".......                                  ........",
+".......                                   .......",
+".......            ...........            .......",
+".......      ....               ....      .......",
+".......   ..                         ..   .......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+".....          ...................          .....",
+"....     ......                   ......     ....",
+"...   ...                               ...   ...",
+"..  ..  ..                            ..   ..  ..",
+".  .      ......                 .....       .  .",
+".               .................               .",
+".                                               .",
+"..                                             ..",
+"...                                           ...",
+"......                                     ......",
+".........                               .........",
+"...............                   ...............",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/mdl72.xpm b/pixmaps/mdl72.xpm
new file mode 100644
index 0000000..c303d37
--- /dev/null
+++ b/pixmaps/mdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *mdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".................................... ...................................",
+"...................................   ..................................",
+"..................................     .................................",
+".................................       ................................",
+"................................         ...............................",
+"...............................           ..............................",
+"...............................           ..............................",
+"...............................           ..............................",
+"................................         ...............................",
+"................................         ...............................",
+"................................         ...............................",
+"................................         ...............................",
+".................................  ...  ................................",
+".................................  ...  ................................",
+"...........................                   ..........................",
+"........................                          ......................",
+".....................                               ....................",
+"..................                                    ..................",
+".................                                      .................",
+"................                                        ................",
+"...............                                          ...............",
+"...............                                          ...............",
+"...............                                          ...............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+"..............                                            ..............",
+".............                                              .............",
+".............                                              .............",
+".............                                              .............",
+".............                                              .............",
+".............                                              .............",
+"............               ....................             ............",
+"............        ...... .................... .....       ............",
+"............    ..........                      ........    ............",
+"............    ....                                 ...    ............",
+"...........                                                  ...........",
+"...........                                                  ...........",
+"...........                                                  ...........",
+"..........                                                    ..........",
+".........                                                      .........",
+"........               ..........................               ........",
+".......         ........................................         .......",
+"......     ............                           ...........     ......",
+".....    .......                                       ........    .....",
+"....    ...  .............                    .............  ...    ....",
+"...             ........................................             ...",
+"...                       .....................                      ...",
+"...                                                                  ...",
+"....                                                                ....",
+".....                                                              .....",
+".......                                                          .......",
+"...........                                                  ...........",
+"................                                        ................",
+".......................                          .......................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/mld33.xpm b/pixmaps/mld33.xpm
new file mode 100644
index 0000000..e700c89
--- /dev/null
+++ b/pixmaps/mld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *mld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"................ ................",
+"............... X ...............",
+".............. XXX ..............",
+".............. XXX ..............",
+"............... X ...............",
+"............... X ...............",
+"...........           ...........",
+"........   XXXXXXXXXXX   ........",
+"....... XXXXXXXXXXXXXXXXX .......",
+"...... XXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXX ......",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXX             XXXXX ....",
+"... X     XXXXXXXXXXXXX     X ...",
+"...  XXXXXXXXXXXXXXXXXXXXXXX  ...",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"...  XXXXXXXXXXXXXXXXXXXXXXX  ...",
+".....     XXXXXXXXXXXXX     .....",
+"..........             ..........",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/mld49.xpm b/pixmaps/mld49.xpm
new file mode 100644
index 0000000..5f2d201
--- /dev/null
+++ b/pixmaps/mld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *mld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"........................ ........................",
+"....................... X .......................",
+"...................... XXX ......................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"....................... X .......................",
+".................                ................",
+"...............  XXXXXXXXXXXXXXX  ...............",
+"............   XXXXXXXXXXXXXXXXXXX   ............",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXX  ..........",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+"....... XXXXXXXXXXX           XXXXXXXXXXX .......",
+"....... XXXXX    XXXXXXXXXXXXXXX    XXXXX .......",
+"....... XX  XXXXXXXXXXXXXXXXXXXXXXXXX  XX .......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"..... XXXXXXXXX                   XXXXXXXXX .....",
+".... XXXX      XXXXXXXXXXXXXXXXXXX      XXXX ....",
+"... XX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XX ...",
+"..    XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XX    ..",
+".  XXXXXXX      XXXXXXXXXXXXXXXXX      XXXXXXX  .",
+". XXXXXXXXXXXXXX                 XXXXXXXXXXXXXX .",
+". XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"...   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...",
+"......   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ......",
+".........      XXXXXXXXXXXXXXXXXXX      .........",
+"...............                   ...............",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/mld72.xpm b/pixmaps/mld72.xpm
new file mode 100644
index 0000000..c0f4b85
--- /dev/null
+++ b/pixmaps/mld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *mld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".................................... ...................................",
+"...................................   ..................................",
+"..................................     .................................",
+".................................   X   ................................",
+"................................   XXX   ...............................",
+"...............................   XXXXX   ..............................",
+"...............................  XXXXXXX  ..............................",
+"...............................  XXXXXXX  ..............................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+".................................  XXX  ................................",
+".................................  XXX  ................................",
+"...........................                   ..........................",
+"........................                          ......................",
+".....................      XXXXXXXXXXXXXXXXXXX      ....................",
+"..................      XXXXXXXXXXXXXXXXXXXXXXXXXX    ..................",
+".................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+"...............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...............",
+"...............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+"............. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+"............  XXXXXXXXXXXXX                    XXXXXXXXXXX  ............",
+"............  XXXXXX      X                    X     XXXXX  ............",
+"............  XX          XXXXXXXXXXXXXXXXXXXXXX        XX  ............",
+"............  XX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XX  ............",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"........   XXXXXXXXXXXX                          XXXXXXXXXXXX   ........",
+".......   XXXXXX                                        XXXXXX   .......",
+"......   XX            XXXXXXXXXXXXXXXXXXXXXXXXXXX           XX   ......",
+".....           XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX            .....",
+"....      XXX             XXXXXXXXXXXXXXXXXXXX             XX       ....",
+"...    XXXXXXXXX                                        XXXXXXXXX    ...",
+"...   XXXXXXXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXXXXXX   ...",
+"...   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...",
+"....     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ....",
+".....       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        .....",
+".......         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX           .......",
+"...........              XXXXXXXXXXXXXXXXXXXXX               ...........",
+"................                                        ................",
+".......................                          .......................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/mll33.xpm b/pixmaps/mll33.xpm
new file mode 100644
index 0000000..74e6fba
--- /dev/null
+++ b/pixmaps/mll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *mll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"................ ................",
+"............... X ...............",
+".............. XXX ..............",
+".............. XXX ..............",
+"............... X ...............",
+"............... X ...............",
+"...........           ...........",
+"........   XXXXXXXXXXX   ........",
+"....... XXXXXXXXXXXXXXXXX .......",
+"...... XXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXX ......",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXX             XXXXX ....",
+"... X     XXXXXXXXXXXXX     X ...",
+"...  XXXXXXXXXXXXXXXXXXXXXXX  ...",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"...  XXXXXXXXXXXXXXXXXXXXXXX  ...",
+".....     XXXXXXXXXXXXX     .....",
+"..........             ..........",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/mll49.xpm b/pixmaps/mll49.xpm
new file mode 100644
index 0000000..0c88239
--- /dev/null
+++ b/pixmaps/mll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *mll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"........................ ........................",
+"....................... X .......................",
+"...................... XXX ......................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+"..................... XXXXX .....................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"...................... XXX ......................",
+"....................... X .......................",
+".................                ................",
+"...............  XXXXXXXXXXXXXXX  ...............",
+"............   XXXXXXXXXXXXXXXXXXX   ............",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXX  ..........",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ........",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......",
+"....... XXXXXXXXXXX           XXXXXXXXXXX .......",
+"....... XXXXX    XXXXXXXXXXXXXXX    XXXXX .......",
+"....... XX  XXXXXXXXXXXXXXXXXXXXXXXXX  XX .......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"..... XXXXXXXXX                   XXXXXXXXX .....",
+".... XXXX      XXXXXXXXXXXXXXXXXXX      XXXX ....",
+"... XX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XX ...",
+"..    XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XX    ..",
+".  XXXXXXX      XXXXXXXXXXXXXXXXX      XXXXXXX  .",
+". XXXXXXXXXXXXXX                 XXXXXXXXXXXXXX .",
+". XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+"...   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...",
+"......   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ......",
+".........      XXXXXXXXXXXXXXXXXXX      .........",
+"...............                   ...............",
+".................................................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/mll72.xpm b/pixmaps/mll72.xpm
new file mode 100644
index 0000000..10912fe
--- /dev/null
+++ b/pixmaps/mll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *mll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".................................... ...................................",
+"...................................   ..................................",
+"..................................     .................................",
+".................................   X   ................................",
+"................................   XXX   ...............................",
+"...............................   XXXXX   ..............................",
+"...............................  XXXXXXX  ..............................",
+"...............................  XXXXXXX  ..............................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+"................................  XXXXX  ...............................",
+".................................  XXX  ................................",
+".................................  XXX  ................................",
+"...........................                   ..........................",
+"........................                          ......................",
+".....................      XXXXXXXXXXXXXXXXXXX      ....................",
+"..................      XXXXXXXXXXXXXXXXXXXXXXXXXX    ..................",
+".................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .................",
+"................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+"...............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...............",
+"...............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+"............. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .............",
+"............  XXXXXXXXXXXXX                    XXXXXXXXXXX  ............",
+"............  XXXXXX      X                    X     XXXXX  ............",
+"............  XX          XXXXXXXXXXXXXXXXXXXXXX        XX  ............",
+"............  XX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XX  ............",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"........   XXXXXXXXXXXX                          XXXXXXXXXXXX   ........",
+".......   XXXXXX                                        XXXXXX   .......",
+"......   XX            XXXXXXXXXXXXXXXXXXXXXXXXXXX           XX   ......",
+".....           XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX            .....",
+"....      XXX             XXXXXXXXXXXXXXXXXXXX             XX       ....",
+"...    XXXXXXXXX                                        XXXXXXXXX    ...",
+"...   XXXXXXXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXXXXXX   ...",
+"...   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...",
+"....     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ....",
+".....       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        .....",
+".......         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX           .......",
+"...........              XXXXXXXXXXXXXXXXXXXXX               ...........",
+"................                                        ................",
+".......................                          .......................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/odd33.xpm b/pixmaps/odd33.xpm
new file mode 100644
index 0000000..55d3314
--- /dev/null
+++ b/pixmaps/odd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *odd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+"..... ...........................",
+"..... ...........................",
+"....   ..........................",
+"....       ......................",
+"....          ...................",
+"...               ...............",
+"..                    ...........",
+".. ..                    ........",
+".......                      ....",
+".........                      ..",
+"........... ..........         ..",
+"............         .         ..",
+"............         .        . .",
+"....                 ........ . .",
+"....                        .  ..",
+"....                         ....",
+"....                         ....",
+"....                         ....",
+"....                         ....",
+"....                         ....",
+"....    ...          ...     ....",
+"....   .   .        .   .    ....",
+"....  .     .      .     .   ....",
+"....                         ....",
+".......     ........     ........",
+"........   ..........   .........",
+".................................",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/odd49.xpm b/pixmaps/odd49.xpm
new file mode 100644
index 0000000..e11bd91
--- /dev/null
+++ b/pixmaps/odd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *odd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"...... ..........................................",
+"......   ........................................",
+".....       .....................................",
+".....           .................................",
+".....              ..............................",
+"....                  ...........................",
+"....                      .......................",
+"....                         ....................",
+".......                         .................",
+".........                          ..............",
+"...........                            ..........",
+".............                             .......",
+"...............                             .....",
+"................. ................           ....",
+".................                .           ....",
+".................                .           ....",
+"......                           .......... .....",
+"......                                    .  ....",
+"......                                    .  ....",
+"......                                    .  ....",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......      ..                     ..      ......",
+"......     ....                   ....     ......",
+"......    ......                 ......    ......",
+"......    ......                 ......    ......",
+"......... ...... ............... ...... .........",
+".......... .... ................. .... ..........",
+"..........  ..  .................  ..  ..........",
+"............  .....................  ............",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/odd72.xpm b/pixmaps/odd72.xpm
new file mode 100644
index 0000000..0e75e81
--- /dev/null
+++ b/pixmaps/odd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *odd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........  ..............................................................",
+"........  ..............................................................",
+".......      ...........................................................",
+".......         ........................................................",
+"......              ....................................................",
+"......                 .................................................",
+"......                    ..............................................",
+".....                        ...........................................",
+".....                           ........................................",
+"....                               .....................................",
+"....                                   .................................",
+"....  ..                                  ..............................",
+"..........                                   ...........................",
+"............                                    ........................",
+"...............                                    .....................",
+".................                                      .................",
+"...................                                       ..............",
+".....................                                        ...........",
+".....................  ...........................               .......",
+".....................  ...........................                 .....",
+".....................                           ..                 .....",
+".....................                           ..                 .....",
+"........                                        ...............    .....",
+"........                                        ...............   ......",
+"........                                                     ..   ......",
+"........                                                     ..    .....",
+"........                                                     ..     ....",
+"........                                                     ..     ....",
+"........                                                     ..     ....",
+"........                                                     ..    .....",
+"........                                                          ......",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........           ....                         ....           .........",
+"........          ......                       ......          .........",
+"........         ........                     ........         .........",
+"........         ........                     ........         .........",
+"........         ........                     ........         .........",
+"...............  ........  .................  ........  ................",
+"...............  ........  .................  ........  ................",
+"................  ......   ..................  ......   ................",
+"................   ....   ...................   ....   .................",
+".................        .....................        ..................",
+"..................      .......................      ...................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/odl33.xpm b/pixmaps/odl33.xpm
new file mode 100644
index 0000000..5308eca
--- /dev/null
+++ b/pixmaps/odl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *odl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+"..... ...........................",
+"..... ...........................",
+"....   ..........................",
+"....       ......................",
+"....          ...................",
+"...               ...............",
+"..                    ...........",
+".. ..                    ........",
+".......                      ....",
+".........                      ..",
+"........... ..........         ..",
+"............         .         ..",
+"............         .        . .",
+"....                 ........ . .",
+"....                        .  ..",
+"....                         ....",
+"....                         ....",
+"....                         ....",
+"....                         ....",
+"....                         ....",
+"....    ...          ...     ....",
+"....   .   .        .   .    ....",
+"....  .     .      .     .   ....",
+"....                         ....",
+".......     ........     ........",
+"........   ..........   .........",
+".................................",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/odl49.xpm b/pixmaps/odl49.xpm
new file mode 100644
index 0000000..2c80d39
--- /dev/null
+++ b/pixmaps/odl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *odl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"...... ..........................................",
+"......   ........................................",
+".....       .....................................",
+".....           .................................",
+".....              ..............................",
+"....                  ...........................",
+"....                      .......................",
+"....                         ....................",
+".......                         .................",
+".........                          ..............",
+"...........                            ..........",
+".............                             .......",
+"...............                             .....",
+"................. ................           ....",
+".................                .           ....",
+".................                .           ....",
+"......                           .......... .....",
+"......                                    .  ....",
+"......                                    .  ....",
+"......                                    .  ....",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......                                     ......",
+"......      ..                     ..      ......",
+"......     ....                   ....     ......",
+"......    ......                 ......    ......",
+"......    ......                 ......    ......",
+"......... ...... ............... ...... .........",
+".......... .... ................. .... ..........",
+"..........  ..  .................  ..  ..........",
+"............  .....................  ............",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/odl72.xpm b/pixmaps/odl72.xpm
new file mode 100644
index 0000000..f65d242
--- /dev/null
+++ b/pixmaps/odl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *odl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........  ..............................................................",
+"........  ..............................................................",
+".......      ...........................................................",
+".......         ........................................................",
+"......              ....................................................",
+"......                 .................................................",
+"......                    ..............................................",
+".....                        ...........................................",
+".....                           ........................................",
+"....                               .....................................",
+"....                                   .................................",
+"....  ..                                  ..............................",
+"..........                                   ...........................",
+"............                                    ........................",
+"...............                                    .....................",
+".................                                      .................",
+"...................                                       ..............",
+".....................                                        ...........",
+".....................  ...........................               .......",
+".....................  ...........................                 .....",
+".....................                           ..                 .....",
+".....................                           ..                 .....",
+"........                                        ...............    .....",
+"........                                        ...............   ......",
+"........                                                     ..   ......",
+"........                                                     ..    .....",
+"........                                                     ..     ....",
+"........                                                     ..     ....",
+"........                                                     ..     ....",
+"........                                                     ..    .....",
+"........                                                          ......",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........                                                       .........",
+"........           ....                         ....           .........",
+"........          ......                       ......          .........",
+"........         ........                     ........         .........",
+"........         ........                     ........         .........",
+"........         ........                     ........         .........",
+"...............  ........  .................  ........  ................",
+"...............  ........  .................  ........  ................",
+"................  ......   ..................  ......   ................",
+"................   ....   ...................   ....   .................",
+".................        .....................        ..................",
+"..................      .......................      ...................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/old33.xpm b/pixmaps/old33.xpm
new file mode 100644
index 0000000..a5559ca
--- /dev/null
+++ b/pixmaps/old33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *old33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+"..... ...........................",
+"..... ...........................",
+"....   ..........................",
+".... XX    ......................",
+".... XXXXXX   ...................",
+"... XXXXXXXXXX    ...............",
+"..   XXXXXXXXXXXXX    ...........",
+".. ..  XXXXXXXXXXXXXXX   ........",
+".......  XXXXXXXXXXXXXXXX    ....",
+".........  XXXXXXXXXXXXXXXXXX  ..",
+"...........           XXXXXXXX ..",
+"............ XXXXXXXX XXXXXXXX ..",
+"............ XXXXXXXX XXXXXXX X .",
+"....         XXXXXXXX         X .",
+".... XXXXXXXXXXXXXXXXXXXXXXX   ..",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXX   XXXXXXXXXX   XXXX ....",
+".... XX XXX XXXXXXXX XXX XXX ....",
+"....    XXX          XXX     ....",
+"....... XXX ........ XXX ........",
+"........   ..........   .........",
+".................................",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/old49.xpm b/pixmaps/old49.xpm
new file mode 100644
index 0000000..efd7f71
--- /dev/null
+++ b/pixmaps/old49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *old49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"...... ..........................................",
+"......   ........................................",
+"..... XXX   .....................................",
+"..... XXXXXX    .................................",
+"..... XXXXXXXXXX   ..............................",
+".... XXXXXXXXXXXXXX   ...........................",
+".... XXXXXXXXXXXXXXXXX    .......................",
+"....   XXXXXXXXXXXXXXXXXXX   ....................",
+".......  XXXXXXXXXXXXXXXXXXXX   .................",
+".........  XXXXXXXXXXXXXXXXXXXXX   ..............",
+"...........  XXXXXXXXXXXXXXXXXXXXXX    ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXX   .......",
+"...............  XXXXXXXXXXXXXXXXXXXXXXXXX  .....",
+".................                 XXXXXXXXXX ....",
+"................. XXXXXXXXXXXXXXX XXXXXXXXXX ....",
+"................. XXXXXXXXXXXXXXX XXXXXXXXX  ....",
+"......            XXXXXXXXXXXXXXX           .....",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ....",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X ....",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ....",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXX  XXXXXXXXXXXXXXXXXXXXX  XXXXX ......",
+"...... XXX  XX  XXXXXXXXXXXXXXXXX  XX  XXX ......",
+"...... XXX XXXX XXXXXXXXXXXXXXXXX XXXX XXX ......",
+"......    XXXXXX                  XXXXX    ......",
+"......... XXXXXX ............... XXXXXX .........",
+".......... XXXX ................. XXXX ..........",
+"..........  XX  .................  XX  ..........",
+"............  .....................  ............",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/old72.xpm b/pixmaps/old72.xpm
new file mode 100644
index 0000000..4209aed
--- /dev/null
+++ b/pixmaps/old72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *old72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........  ..............................................................",
+"........  ..............................................................",
+".......      ...........................................................",
+".......         ........................................................",
+"......   XXX        ....................................................",
+"......   XXXXXXX       .................................................",
+"......  XXXXXXXXXXX       ..............................................",
+".....   XXXXXXXXXXXXXX       ...........................................",
+".....   XXXXXXXXXXXXXXXXX       ........................................",
+"....     XXXXXXXXXXXXXXXXXXX       .....................................",
+"....       XXXXXXXXXXXXXXXXXXXXX       .................................",
+"....  ..     XXXXXXXXXXXXXXXXXXXXXX       ..............................",
+"..........      XXXXXXXXXXXXXXXXXXXXXX       ...........................",
+"............      XXXXXXXXXXXXXXXXXXXXXXX       ........................",
+"...............     XXXXXXXXXXXXXXXXXXXXXXXXX      .....................",
+".................      XXXXXXXXXXXXXXXXXXXXXXXXX       .................",
+"...................      XXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+".....................      XXXXXXXXXXXXXXXXXXXXXXXXXXX       ...........",
+".....................                             XXXXXXX        .......",
+".....................                             XXXXXXXXXXX      .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXX   .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX  .....",
+"........               XXXXXXXXXXXXXXXXXXXXXXXXX               XX  .....",
+"........               XXXXXXXXXXXXXXXXXXXXXXXXX               X  ......",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X  ......",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X   .....",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ....",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XX  ....",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XX  ....",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      .....",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ......",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXX      XXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXX  .........",
+"........  XXXXXXX        XXXXXXXXXXXXXXXXXXXX        XXXXXXXX  .........",
+"........  XXXXXX   XXXX   XXXXXXXXXXXXXXXXXX   XXXX   XXXXXXX  .........",
+"........  XXXXX   XXXXXX   XXXXXXXXXXXXXXXX   XXXXXX   XXXXXX  .........",
+"........         XXXXXXXX                    XXXXXXXX          .........",
+"........         XXXXXXXX                    XXXXXXXX          .........",
+"...............  XXXXXXXX  ................  XXXXXXXX  .................",
+"...............  XXXXXXXX  ................  XXXXXXXX  .................",
+"................  XXXXXX   .................  XXXXXX   .................",
+"................   XXXX   ..................   XXXX   ..................",
+".................        ....................        ...................",
+"..................      ......................      ....................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/oll33.xpm b/pixmaps/oll33.xpm
new file mode 100644
index 0000000..4e8c80f
--- /dev/null
+++ b/pixmaps/oll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *oll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+"..... ...........................",
+"..... ...........................",
+"....   ..........................",
+".... XX    ......................",
+".... XXXXXX   ...................",
+"... XXXXXXXXXX    ...............",
+"..   XXXXXXXXXXXXX    ...........",
+".. ..  XXXXXXXXXXXXXXX   ........",
+".......  XXXXXXXXXXXXXXXX    ....",
+".........  XXXXXXXXXXXXXXXXXX  ..",
+"...........           XXXXXXXX ..",
+"............ XXXXXXXX XXXXXXXX ..",
+"............ XXXXXXXX XXXXXXX X .",
+"....         XXXXXXXX         X .",
+".... XXXXXXXXXXXXXXXXXXXXXXX   ..",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXXXXXXXXXXXXXXXXXXXXXX ....",
+".... XXX   XXXXXXXXXX   XXXX ....",
+".... XX XXX XXXXXXXX XXX XXX ....",
+"....    XXX          XXX     ....",
+"....... XXX ........ XXX ........",
+"........   ..........   .........",
+".................................",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/oll49.xpm b/pixmaps/oll49.xpm
new file mode 100644
index 0000000..0a5fa01
--- /dev/null
+++ b/pixmaps/oll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *oll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"...... ..........................................",
+"......   ........................................",
+"..... XXX   .....................................",
+"..... XXXXXX    .................................",
+"..... XXXXXXXXXX   ..............................",
+".... XXXXXXXXXXXXXX   ...........................",
+".... XXXXXXXXXXXXXXXXX    .......................",
+"....   XXXXXXXXXXXXXXXXXXX   ....................",
+".......  XXXXXXXXXXXXXXXXXXXX   .................",
+".........  XXXXXXXXXXXXXXXXXXXXX   ..............",
+"...........  XXXXXXXXXXXXXXXXXXXXXX    ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXX   .......",
+"...............  XXXXXXXXXXXXXXXXXXXXXXXXX  .....",
+".................                 XXXXXXXXXX ....",
+"................. XXXXXXXXXXXXXXX XXXXXXXXXX ....",
+"................. XXXXXXXXXXXXXXX XXXXXXXXX  ....",
+"......            XXXXXXXXXXXXXXX           .....",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ....",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X ....",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ....",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"...... XXXXX  XXXXXXXXXXXXXXXXXXXXX  XXXXX ......",
+"...... XXX  XX  XXXXXXXXXXXXXXXXX  XX  XXX ......",
+"...... XXX XXXX XXXXXXXXXXXXXXXXX XXXX XXX ......",
+"......    XXXXXX                  XXXXX    ......",
+"......... XXXXXX ............... XXXXXX .........",
+".......... XXXX ................. XXXX ..........",
+"..........  XX  .................  XX  ..........",
+"............  .....................  ............",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/oll72.xpm b/pixmaps/oll72.xpm
new file mode 100644
index 0000000..22ec1c0
--- /dev/null
+++ b/pixmaps/oll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *oll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........  ..............................................................",
+"........  ..............................................................",
+".......      ...........................................................",
+".......         ........................................................",
+"......   XXX        ....................................................",
+"......   XXXXXXX       .................................................",
+"......  XXXXXXXXXXX       ..............................................",
+".....   XXXXXXXXXXXXXX       ...........................................",
+".....   XXXXXXXXXXXXXXXXX       ........................................",
+"....     XXXXXXXXXXXXXXXXXXX       .....................................",
+"....       XXXXXXXXXXXXXXXXXXXXX       .................................",
+"....  ..     XXXXXXXXXXXXXXXXXXXXXX       ..............................",
+"..........      XXXXXXXXXXXXXXXXXXXXXX       ...........................",
+"............      XXXXXXXXXXXXXXXXXXXXXXX       ........................",
+"...............     XXXXXXXXXXXXXXXXXXXXXXXXX      .....................",
+".................      XXXXXXXXXXXXXXXXXXXXXXXXX       .................",
+"...................      XXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+".....................      XXXXXXXXXXXXXXXXXXXXXXXXXXX       ...........",
+".....................                             XXXXXXX        .......",
+".....................                             XXXXXXXXXXX      .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXX   .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX  .....",
+"........               XXXXXXXXXXXXXXXXXXXXXXXXX               XX  .....",
+"........               XXXXXXXXXXXXXXXXXXXXXXXXX               X  ......",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X  ......",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X   .....",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ....",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XX  ....",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XX  ....",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      .....",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ......",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"........  XXXXXXXX      XXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXX  .........",
+"........  XXXXXXX        XXXXXXXXXXXXXXXXXXXX        XXXXXXXX  .........",
+"........  XXXXXX   XXXX   XXXXXXXXXXXXXXXXXX   XXXX   XXXXXXX  .........",
+"........  XXXXX   XXXXXX   XXXXXXXXXXXXXXXX   XXXXXX   XXXXXX  .........",
+"........         XXXXXXXX                    XXXXXXXX          .........",
+"........         XXXXXXXX                    XXXXXXXX          .........",
+"...............  XXXXXXXX  ................  XXXXXXXX  .................",
+"...............  XXXXXXXX  ................  XXXXXXXX  .................",
+"................  XXXXXX   .................  XXXXXX   .................",
+"................   XXXX   ..................   XXXX   ..................",
+".................        ....................        ...................",
+"..................      ......................      ....................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/pixmaps.h b/pixmaps/pixmaps.h
index d4942e5..d15a5c1 100644
--- a/pixmaps/pixmaps.h
+++ b/pixmaps/pixmaps.h
@@ -1,659 +1,1277 @@
-/*
- * pixmaps.h - Include xpm pixmap files for pieces
- * $Id: pixmaps.h,v 2.1 2003/10/27 19:21:02 mann Exp $
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-2000 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 XBoard distributed
- * by the Free Software Foundation:
- * ------------------------------------------------------------------------
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- *
- * See the file ChangeLog for a revision history.
- */
-
-#include "pll129.xpm"
-#include "pld129.xpm"
-#include "pdl129.xpm"
-#include "pdd129.xpm"
-#include "nll129.xpm"
-#include "nld129.xpm"
-#include "ndl129.xpm"
-#include "ndd129.xpm"
-#include "bll129.xpm"
-#include "bld129.xpm"
-#include "bdl129.xpm"
-#include "bdd129.xpm"
-#include "rll129.xpm"
-#include "rld129.xpm"
-#include "rdl129.xpm"
-#include "rdd129.xpm"
-#include "qll129.xpm"
-#include "qld129.xpm"
-#include "qdl129.xpm"
-#include "qdd129.xpm"
-#include "kll129.xpm"
-#include "kld129.xpm"
-#include "kdl129.xpm"
-#include "kdd129.xpm"
-
-#include "pll116.xpm"
-#include "pld116.xpm"
-#include "pdl116.xpm"
-#include "pdd116.xpm"
-#include "nll116.xpm"
-#include "nld116.xpm"
-#include "ndl116.xpm"
-#include "ndd116.xpm"
-#include "bll116.xpm"
-#include "bld116.xpm"
-#include "bdl116.xpm"
-#include "bdd116.xpm"
-#include "rll116.xpm"
-#include "rld116.xpm"
-#include "rdl116.xpm"
-#include "rdd116.xpm"
-#include "qll116.xpm"
-#include "qld116.xpm"
-#include "qdl116.xpm"
-#include "qdd116.xpm"
-#include "kll116.xpm"
-#include "kld116.xpm"
-#include "kdl116.xpm"
-#include "kdd116.xpm"
-
-#include "pll108.xpm"
-#include "pld108.xpm"
-#include "pdl108.xpm"
-#include "pdd108.xpm"
-#include "nll108.xpm"
-#include "nld108.xpm"
-#include "ndl108.xpm"
-#include "ndd108.xpm"
-#include "bll108.xpm"
-#include "bld108.xpm"
-#include "bdl108.xpm"
-#include "bdd108.xpm"
-#include "rll108.xpm"
-#include "rld108.xpm"
-#include "rdl108.xpm"
-#include "rdd108.xpm"
-#include "qll108.xpm"
-#include "qld108.xpm"
-#include "qdl108.xpm"
-#include "qdd108.xpm"
-#include "kll108.xpm"
-#include "kld108.xpm"
-#include "kdl108.xpm"
-#include "kdd108.xpm"
-
-#include "pll95.xpm"
-#include "pld95.xpm"
-#include "pdl95.xpm"
-#include "pdd95.xpm"
-#include "nll95.xpm"
-#include "nld95.xpm"
-#include "ndl95.xpm"
-#include "ndd95.xpm"
-#include "bll95.xpm"
-#include "bld95.xpm"
-#include "bdl95.xpm"
-#include "bdd95.xpm"
-#include "rll95.xpm"
-#include "rld95.xpm"
-#include "rdl95.xpm"
-#include "rdd95.xpm"
-#include "qll95.xpm"
-#include "qld95.xpm"
-#include "qdl95.xpm"
-#include "qdd95.xpm"
-#include "kll95.xpm"
-#include "kld95.xpm"
-#include "kdl95.xpm"
-#include "kdd95.xpm"
-
-#include "pll87.xpm"
-#include "pld87.xpm"
-#include "pdl87.xpm"
-#include "pdd87.xpm"
-#include "nll87.xpm"
-#include "nld87.xpm"
-#include "ndl87.xpm"
-#include "ndd87.xpm"
-#include "bll87.xpm"
-#include "bld87.xpm"
-#include "bdl87.xpm"
-#include "bdd87.xpm"
-#include "rll87.xpm"
-#include "rld87.xpm"
-#include "rdl87.xpm"
-#include "rdd87.xpm"
-#include "qll87.xpm"
-#include "qld87.xpm"
-#include "qdl87.xpm"
-#include "qdd87.xpm"
-#include "kll87.xpm"
-#include "kld87.xpm"
-#include "kdl87.xpm"
-#include "kdd87.xpm"
-
-#include "pll80.xpm"
-#include "pld80.xpm"
-#include "pdl80.xpm"
-#include "pdd80.xpm"
-#include "nll80.xpm"
-#include "nld80.xpm"
-#include "ndl80.xpm"
-#include "ndd80.xpm"
-#include "bll80.xpm"
-#include "bld80.xpm"
-#include "bdl80.xpm"
-#include "bdd80.xpm"
-#include "rll80.xpm"
-#include "rld80.xpm"
-#include "rdl80.xpm"
-#include "rdd80.xpm"
-#include "qll80.xpm"
-#include "qld80.xpm"
-#include "qdl80.xpm"
-#include "qdd80.xpm"
-#include "kll80.xpm"
-#include "kld80.xpm"
-#include "kdl80.xpm"
-#include "kdd80.xpm"
-
-#include "pll72.xpm"
-#include "pld72.xpm"
-#include "pdl72.xpm"
-#include "pdd72.xpm"
-#include "nll72.xpm"
-#include "nld72.xpm"
-#include "ndl72.xpm"
-#include "ndd72.xpm"
-#include "bll72.xpm"
-#include "bld72.xpm"
-#include "bdl72.xpm"
-#include "bdd72.xpm"
-#include "rll72.xpm"
-#include "rld72.xpm"
-#include "rdl72.xpm"
-#include "rdd72.xpm"
-#include "qll72.xpm"
-#include "qld72.xpm"
-#include "qdl72.xpm"
-#include "qdd72.xpm"
-#include "kll72.xpm"
-#include "kld72.xpm"
-#include "kdl72.xpm"
-#include "kdd72.xpm"
-
-#include "pll64.xpm"
-#include "pld64.xpm"
-#include "pdl64.xpm"
-#include "pdd64.xpm"
-#include "nll64.xpm"
-#include "nld64.xpm"
-#include "ndl64.xpm"
-#include "ndd64.xpm"
-#include "bll64.xpm"
-#include "bld64.xpm"
-#include "bdl64.xpm"
-#include "bdd64.xpm"
-#include "rll64.xpm"
-#include "rld64.xpm"
-#include "rdl64.xpm"
-#include "rdd64.xpm"
-#include "qll64.xpm"
-#include "qld64.xpm"
-#include "qdl64.xpm"
-#include "qdd64.xpm"
-#include "kll64.xpm"
-#include "kld64.xpm"
-#include "kdl64.xpm"
-#include "kdd64.xpm"
-
-#include "pll58.xpm"
-#include "pld58.xpm"
-#include "pdl58.xpm"
-#include "pdd58.xpm"
-#include "nll58.xpm"
-#include "nld58.xpm"
-#include "ndl58.xpm"
-#include "ndd58.xpm"
-#include "bll58.xpm"
-#include "bld58.xpm"
-#include "bdl58.xpm"
-#include "bdd58.xpm"
-#include "rll58.xpm"
-#include "rld58.xpm"
-#include "rdl58.xpm"
-#include "rdd58.xpm"
-#include "qll58.xpm"
-#include "qld58.xpm"
-#include "qdl58.xpm"
-#include "qdd58.xpm"
-#include "kll58.xpm"
-#include "kld58.xpm"
-#include "kdl58.xpm"
-#include "kdd58.xpm"
-
-#include "pll54.xpm"
-#include "pld54.xpm"
-#include "pdl54.xpm"
-#include "pdd54.xpm"
-#include "nll54.xpm"
-#include "nld54.xpm"
-#include "ndl54.xpm"
-#include "ndd54.xpm"
-#include "bll54.xpm"
-#include "bld54.xpm"
-#include "bdl54.xpm"
-#include "bdd54.xpm"
-#include "rll54.xpm"
-#include "rld54.xpm"
-#include "rdl54.xpm"
-#include "rdd54.xpm"
-#include "qll54.xpm"
-#include "qld54.xpm"
-#include "qdl54.xpm"
-#include "qdd54.xpm"
-#include "kll54.xpm"
-#include "kld54.xpm"
-#include "kdl54.xpm"
-#include "kdd54.xpm"
-
-#include "pll49.xpm"
-#include "pld49.xpm"
-#include "pdl49.xpm"
-#include "pdd49.xpm"
-#include "nll49.xpm"
-#include "nld49.xpm"
-#include "ndl49.xpm"
-#include "ndd49.xpm"
-#include "bll49.xpm"
-#include "bld49.xpm"
-#include "bdl49.xpm"
-#include "bdd49.xpm"
-#include "rll49.xpm"
-#include "rld49.xpm"
-#include "rdl49.xpm"
-#include "rdd49.xpm"
-#include "qll49.xpm"
-#include "qld49.xpm"
-#include "qdl49.xpm"
-#include "qdd49.xpm"
-#include "kll49.xpm"
-#include "kld49.xpm"
-#include "kdl49.xpm"
-#include "kdd49.xpm"
-
-#include "pll45.xpm"
-#include "pld45.xpm"
-#include "pdl45.xpm"
-#include "pdd45.xpm"
-#include "nll45.xpm"
-#include "nld45.xpm"
-#include "ndl45.xpm"
-#include "ndd45.xpm"
-#include "bll45.xpm"
-#include "bld45.xpm"
-#include "bdl45.xpm"
-#include "bdd45.xpm"
-#include "rll45.xpm"
-#include "rld45.xpm"
-#include "rdl45.xpm"
-#include "rdd45.xpm"
-#include "qll45.xpm"
-#include "qld45.xpm"
-#include "qdl45.xpm"
-#include "qdd45.xpm"
-#include "kll45.xpm"
-#include "kld45.xpm"
-#include "kdl45.xpm"
-#include "kdd45.xpm"
-
-#include "pll40.xpm"
-#include "pld40.xpm"
-#include "pdl40.xpm"
-#include "pdd40.xpm"
-#include "nll40.xpm"
-#include "nld40.xpm"
-#include "ndl40.xpm"
-#include "ndd40.xpm"
-#include "bll40.xpm"
-#include "bld40.xpm"
-#include "bdl40.xpm"
-#include "bdd40.xpm"
-#include "rll40.xpm"
-#include "rld40.xpm"
-#include "rdl40.xpm"
-#include "rdd40.xpm"
-#include "qll40.xpm"
-#include "qld40.xpm"
-#include "qdl40.xpm"
-#include "qdd40.xpm"
-#include "kll40.xpm"
-#include "kld40.xpm"
-#include "kdl40.xpm"
-#include "kdd40.xpm"
-
-#include "pll37.xpm"
-#include "pld37.xpm"
-#include "pdl37.xpm"
-#include "pdd37.xpm"
-#include "nll37.xpm"
-#include "nld37.xpm"
-#include "ndl37.xpm"
-#include "ndd37.xpm"
-#include "bll37.xpm"
-#include "bld37.xpm"
-#include "bdl37.xpm"
-#include "bdd37.xpm"
-#include "rll37.xpm"
-#include "rld37.xpm"
-#include "rdl37.xpm"
-#include "rdd37.xpm"
-#include "qll37.xpm"
-#include "qld37.xpm"
-#include "qdl37.xpm"
-#include "qdd37.xpm"
-#include "kll37.xpm"
-#include "kld37.xpm"
-#include "kdl37.xpm"
-#include "kdd37.xpm"
-
-#include "pll33.xpm"
-#include "pld33.xpm"
-#include "pdl33.xpm"
-#include "pdd33.xpm"
-#include "nll33.xpm"
-#include "nld33.xpm"
-#include "ndl33.xpm"
-#include "ndd33.xpm"
-#include "bll33.xpm"
-#include "bld33.xpm"
-#include "bdl33.xpm"
-#include "bdd33.xpm"
-#include "rll33.xpm"
-#include "rld33.xpm"
-#include "rdl33.xpm"
-#include "rdd33.xpm"
-#include "qll33.xpm"
-#include "qld33.xpm"
-#include "qdl33.xpm"
-#include "qdd33.xpm"
-#include "kll33.xpm"
-#include "kld33.xpm"
-#include "kdl33.xpm"
-#include "kdd33.xpm"
-
-#include "pll29.xpm"
-#include "pld29.xpm"
-#include "pdl29.xpm"
-#include "pdd29.xpm"
-#include "nll29.xpm"
-#include "nld29.xpm"
-#include "ndl29.xpm"
-#include "ndd29.xpm"
-#include "bll29.xpm"
-#include "bld29.xpm"
-#include "bdl29.xpm"
-#include "bdd29.xpm"
-#include "rll29.xpm"
-#include "rld29.xpm"
-#include "rdl29.xpm"
-#include "rdd29.xpm"
-#include "qll29.xpm"
-#include "qld29.xpm"
-#include "qdl29.xpm"
-#include "qdd29.xpm"
-#include "kll29.xpm"
-#include "kld29.xpm"
-#include "kdl29.xpm"
-#include "kdd29.xpm"
-
-#include "pll25.xpm"
-#include "pld25.xpm"
-#include "pdl25.xpm"
-#include "pdd25.xpm"
-#include "nll25.xpm"
-#include "nld25.xpm"
-#include "ndl25.xpm"
-#include "ndd25.xpm"
-#include "bll25.xpm"
-#include "bld25.xpm"
-#include "bdl25.xpm"
-#include "bdd25.xpm"
-#include "rll25.xpm"
-#include "rld25.xpm"
-#include "rdl25.xpm"
-#include "rdd25.xpm"
-#include "qll25.xpm"
-#include "qld25.xpm"
-#include "qdl25.xpm"
-#include "qdd25.xpm"
-#include "kll25.xpm"
-#include "kld25.xpm"
-#include "kdl25.xpm"
-#include "kdd25.xpm"
-
-#include "pll21.xpm"
-#include "pld21.xpm"
-#include "pdl21.xpm"
-#include "pdd21.xpm"
-#include "nll21.xpm"
-#include "nld21.xpm"
-#include "ndl21.xpm"
-#include "ndd21.xpm"
-#include "bll21.xpm"
-#include "bld21.xpm"
-#include "bdl21.xpm"
-#include "bdd21.xpm"
-#include "rll21.xpm"
-#include "rld21.xpm"
-#include "rdl21.xpm"
-#include "rdd21.xpm"
-#include "qll21.xpm"
-#include "qld21.xpm"
-#include "qdl21.xpm"
-#include "qdd21.xpm"
-#include "kll21.xpm"
-#include "kld21.xpm"
-#include "kdl21.xpm"
-#include "kdd21.xpm"
-
-typedef struct {
-  int size;
-  char **xpm[6][4];
-} XpmPieces;
-
-XpmPieces builtInXpms[] = {\
-  { 129, {\
-    { pll129, pld129, pdl129, pdd129, },\
-    { nll129, nld129, ndl129, ndd129, },\
-    { bll129, bld129, bdl129, bdd129, },\
-    { rll129, rld129, rdl129, rdd129, },\
-    { qll129, qld129, qdl129, qdd129, },\
-    { kll129, kld129, kdl129, kdd129, },\
-  } },\
-  { 116, {\
-    { pll116, pld116, pdl116, pdd116, },\
-    { nll116, nld116, ndl116, ndd116, },\
-    { bll116, bld116, bdl116, bdd116, },\
-    { rll116, rld116, rdl116, rdd116, },\
-    { qll116, qld116, qdl116, qdd116, },\
-    { kll116, kld116, kdl116, kdd116, },\
-  } },\
-  { 108, {\
-    { pll108, pld108, pdl108, pdd108, },\
-    { nll108, nld108, ndl108, ndd108, },\
-    { bll108, bld108, bdl108, bdd108, },\
-    { rll108, rld108, rdl108, rdd108, },\
-    { qll108, qld108, qdl108, qdd108, },\
-    { kll108, kld108, kdl108, kdd108, },\
-  } },\
-  { 95, {\
-    { pll95, pld95, pdl95, pdd95, },\
-    { nll95, nld95, ndl95, ndd95, },\
-    { bll95, bld95, bdl95, bdd95, },\
-    { rll95, rld95, rdl95, rdd95, },\
-    { qll95, qld95, qdl95, qdd95, },\
-    { kll95, kld95, kdl95, kdd95, },\
-  } },\
-  { 87, {\
-    { pll87, pld87, pdl87, pdd87, },\
-    { nll87, nld87, ndl87, ndd87, },\
-    { bll87, bld87, bdl87, bdd87, },\
-    { rll87, rld87, rdl87, rdd87, },\
-    { qll87, qld87, qdl87, qdd87, },\
-    { kll87, kld87, kdl87, kdd87, },\
-  } },\
-  { 80, {\
-    { pll80, pld80, pdl80, pdd80, },\
-    { nll80, nld80, ndl80, ndd80, },\
-    { bll80, bld80, bdl80, bdd80, },\
-    { rll80, rld80, rdl80, rdd80, },\
-    { qll80, qld80, qdl80, qdd80, },\
-    { kll80, kld80, kdl80, kdd80, },\
-  } },\
-  { 72, {\
-    { pll72, pld72, pdl72, pdd72, },\
-    { nll72, nld72, ndl72, ndd72, },\
-    { bll72, bld72, bdl72, bdd72, },\
-    { rll72, rld72, rdl72, rdd72, },\
-    { qll72, qld72, qdl72, qdd72, },\
-    { kll72, kld72, kdl72, kdd72, },\
-  } },\
-  { 64, {\
-    { pll64, pld64, pdl64, pdd64, },\
-    { nll64, nld64, ndl64, ndd64, },\
-    { bll64, bld64, bdl64, bdd64, },\
-    { rll64, rld64, rdl64, rdd64, },\
-    { qll64, qld64, qdl64, qdd64, },\
-    { kll64, kld64, kdl64, kdd64, },\
-  } },\
-  { 58, {\
-    { pll58, pld58, pdl58, pdd58, },\
-    { nll58, nld58, ndl58, ndd58, },\
-    { bll58, bld58, bdl58, bdd58, },\
-    { rll58, rld58, rdl58, rdd58, },\
-    { qll58, qld58, qdl58, qdd58, },\
-    { kll58, kld58, kdl58, kdd58, },\
-  } },\
-  { 54, {\
-    { pll54, pld54, pdl54, pdd54, },\
-    { nll54, nld54, ndl54, ndd54, },\
-    { bll54, bld54, bdl54, bdd54, },\
-    { rll54, rld54, rdl54, rdd54, },\
-    { qll54, qld54, qdl54, qdd54, },\
-    { kll54, kld54, kdl54, kdd54, },\
-  } },\
-  { 49, {\
-    { pll49, pld49, pdl49, pdd49, },\
-    { nll49, nld49, ndl49, ndd49, },\
-    { bll49, bld49, bdl49, bdd49, },\
-    { rll49, rld49, rdl49, rdd49, },\
-    { qll49, qld49, qdl49, qdd49, },\
-    { kll49, kld49, kdl49, kdd49, },\
-  } },\
-  { 45, {\
-    { pll45, pld45, pdl45, pdd45, },\
-    { nll45, nld45, ndl45, ndd45, },\
-    { bll45, bld45, bdl45, bdd45, },\
-    { rll45, rld45, rdl45, rdd45, },\
-    { qll45, qld45, qdl45, qdd45, },\
-    { kll45, kld45, kdl45, kdd45, },\
-  } },\
-  { 40, {\
-    { pll40, pld40, pdl40, pdd40, },\
-    { nll40, nld40, ndl40, ndd40, },\
-    { bll40, bld40, bdl40, bdd40, },\
-    { rll40, rld40, rdl40, rdd40, },\
-    { qll40, qld40, qdl40, qdd40, },\
-    { kll40, kld40, kdl40, kdd40, },\
-  } },\
-  { 37, {\
-    { pll37, pld37, pdl37, pdd37, },\
-    { nll37, nld37, ndl37, ndd37, },\
-    { bll37, bld37, bdl37, bdd37, },\
-    { rll37, rld37, rdl37, rdd37, },\
-    { qll37, qld37, qdl37, qdd37, },\
-    { kll37, kld37, kdl37, kdd37, },\
-  } },\
-  { 33, {\
-    { pll33, pld33, pdl33, pdd33, },\
-    { nll33, nld33, ndl33, ndd33, },\
-    { bll33, bld33, bdl33, bdd33, },\
-    { rll33, rld33, rdl33, rdd33, },\
-    { qll33, qld33, qdl33, qdd33, },\
-    { kll33, kld33, kdl33, kdd33, },\
-  } },\
-  { 29, {\
-    { pll29, pld29, pdl29, pdd29, },\
-    { nll29, nld29, ndl29, ndd29, },\
-    { bll29, bld29, bdl29, bdd29, },\
-    { rll29, rld29, rdl29, rdd29, },\
-    { qll29, qld29, qdl29, qdd29, },\
-    { kll29, kld29, kdl29, kdd29, },\
-  } },\
-  { 25, {\
-    { pll25, pld25, pdl25, pdd25, },\
-    { nll25, nld25, ndl25, ndd25, },\
-    { bll25, bld25, bdl25, bdd25, },\
-    { rll25, rld25, rdl25, rdd25, },\
-    { qll25, qld25, qdl25, qdd25, },\
-    { kll25, kld25, kdl25, kdd25, },\
-  } },\
-  { 21, {\
-    { pll21, pld21, pdl21, pdd21, },\
-    { nll21, nld21, ndl21, ndd21, },\
-    { bll21, bld21, bdl21, bdd21, },\
-    { rll21, rld21, rdl21, rdd21, },\
-    { qll21, qld21, qdl21, qdd21, },\
-    { kll21, kld21, kdl21, kdd21, },\
-  } },\
-  { 0, {\
-    { NULL, NULL, NULL, NULL, },\
-    { NULL, NULL, NULL, NULL, },\
-    { NULL, NULL, NULL, NULL, },\
-    { NULL, NULL, NULL, NULL, },\
-    { NULL, NULL, NULL, NULL, },\
-    { NULL, NULL, NULL, NULL, },\
-  } },\
-};
+/*
+ * pixmaps.h - Include xpm pixmap files for pieces
+ * $Id: pixmaps.h,v 2.1 2003/10/27 19:21:02 mann Exp $
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 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 XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "pll129.xpm"
+#include "pld129.xpm"
+#include "pdl129.xpm"
+#include "pdd129.xpm"
+#include "nll129.xpm"
+#include "nld129.xpm"
+#include "ndl129.xpm"
+#include "ndd129.xpm"
+#include "bll129.xpm"
+#include "bld129.xpm"
+#include "bdl129.xpm"
+#include "bdd129.xpm"
+#include "rll129.xpm"
+#include "rld129.xpm"
+#include "rdl129.xpm"
+#include "rdd129.xpm"
+#include "qll129.xpm"
+#include "qld129.xpm"
+#include "qdl129.xpm"
+#include "qdd129.xpm"
+#include "kll129.xpm"
+#include "kld129.xpm"
+#include "kdl129.xpm"
+#include "kdd129.xpm"
+
+#include "pll116.xpm"
+#include "pld116.xpm"
+#include "pdl116.xpm"
+#include "pdd116.xpm"
+#include "nll116.xpm"
+#include "nld116.xpm"
+#include "ndl116.xpm"
+#include "ndd116.xpm"
+#include "bll116.xpm"
+#include "bld116.xpm"
+#include "bdl116.xpm"
+#include "bdd116.xpm"
+#include "rll116.xpm"
+#include "rld116.xpm"
+#include "rdl116.xpm"
+#include "rdd116.xpm"
+#include "qll116.xpm"
+#include "qld116.xpm"
+#include "qdl116.xpm"
+#include "qdd116.xpm"
+#include "kll116.xpm"
+#include "kld116.xpm"
+#include "kdl116.xpm"
+#include "kdd116.xpm"
+
+#include "pll108.xpm"
+#include "pld108.xpm"
+#include "pdl108.xpm"
+#include "pdd108.xpm"
+#include "nll108.xpm"
+#include "nld108.xpm"
+#include "ndl108.xpm"
+#include "ndd108.xpm"
+#include "bll108.xpm"
+#include "bld108.xpm"
+#include "bdl108.xpm"
+#include "bdd108.xpm"
+#include "rll108.xpm"
+#include "rld108.xpm"
+#include "rdl108.xpm"
+#include "rdd108.xpm"
+#include "qll108.xpm"
+#include "qld108.xpm"
+#include "qdl108.xpm"
+#include "qdd108.xpm"
+#include "kll108.xpm"
+#include "kld108.xpm"
+#include "kdl108.xpm"
+#include "kdd108.xpm"
+
+#include "pll95.xpm"
+#include "pld95.xpm"
+#include "pdl95.xpm"
+#include "pdd95.xpm"
+#include "nll95.xpm"
+#include "nld95.xpm"
+#include "ndl95.xpm"
+#include "ndd95.xpm"
+#include "bll95.xpm"
+#include "bld95.xpm"
+#include "bdl95.xpm"
+#include "bdd95.xpm"
+#include "rll95.xpm"
+#include "rld95.xpm"
+#include "rdl95.xpm"
+#include "rdd95.xpm"
+#include "qll95.xpm"
+#include "qld95.xpm"
+#include "qdl95.xpm"
+#include "qdd95.xpm"
+#include "kll95.xpm"
+#include "kld95.xpm"
+#include "kdl95.xpm"
+#include "kdd95.xpm"
+
+#include "pll87.xpm"
+#include "pld87.xpm"
+#include "pdl87.xpm"
+#include "pdd87.xpm"
+#include "nll87.xpm"
+#include "nld87.xpm"
+#include "ndl87.xpm"
+#include "ndd87.xpm"
+#include "bll87.xpm"
+#include "bld87.xpm"
+#include "bdl87.xpm"
+#include "bdd87.xpm"
+#include "rll87.xpm"
+#include "rld87.xpm"
+#include "rdl87.xpm"
+#include "rdd87.xpm"
+#include "qll87.xpm"
+#include "qld87.xpm"
+#include "qdl87.xpm"
+#include "qdd87.xpm"
+#include "kll87.xpm"
+#include "kld87.xpm"
+#include "kdl87.xpm"
+#include "kdd87.xpm"
+
+#include "pll80.xpm"
+#include "pld80.xpm"
+#include "pdl80.xpm"
+#include "pdd80.xpm"
+#include "nll80.xpm"
+#include "nld80.xpm"
+#include "ndl80.xpm"
+#include "ndd80.xpm"
+#include "bll80.xpm"
+#include "bld80.xpm"
+#include "bdl80.xpm"
+#include "bdd80.xpm"
+#include "rll80.xpm"
+#include "rld80.xpm"
+#include "rdl80.xpm"
+#include "rdd80.xpm"
+#include "qll80.xpm"
+#include "qld80.xpm"
+#include "qdl80.xpm"
+#include "qdd80.xpm"
+#include "kll80.xpm"
+#include "kld80.xpm"
+#include "kdl80.xpm"
+#include "kdd80.xpm"
+
+#include "pll72.xpm"
+#include "pld72.xpm"
+#include "pdl72.xpm"
+#include "pdd72.xpm"
+#include "nll72.xpm"
+#include "nld72.xpm"
+#include "ndl72.xpm"
+#include "ndd72.xpm"
+#include "bll72.xpm"
+#include "bld72.xpm"
+#include "bdl72.xpm"
+#include "bdd72.xpm"
+#include "rll72.xpm"
+#include "rld72.xpm"
+#include "rdl72.xpm"
+#include "rdd72.xpm"
+#include "qll72.xpm"
+#include "qld72.xpm"
+#include "qdl72.xpm"
+#include "qdd72.xpm"
+#include "fll72.xpm"
+#include "fld72.xpm"
+#include "fdl72.xpm"
+#include "fdd72.xpm"
+#include "ell72.xpm"
+#include "eld72.xpm"
+#include "edl72.xpm"
+#include "edd72.xpm"
+#include "all72.xpm"
+#include "ald72.xpm"
+#include "adl72.xpm"
+#include "add72.xpm"
+#include "cll72.xpm"
+#include "cld72.xpm"
+#include "cdl72.xpm"
+#include "cdd72.xpm"
+#include "wll72.xpm"
+#include "wld72.xpm"
+#include "wdl72.xpm"
+#include "wdd72.xpm"
+#include "mll72.xpm"
+#include "mld72.xpm"
+#include "mdl72.xpm"
+#include "mdd72.xpm"
+#include "oll72.xpm"
+#include "old72.xpm"
+#include "odl72.xpm"
+#include "odd72.xpm"
+#include "hll72.xpm"
+#include "hld72.xpm"
+#include "hdl72.xpm"
+#include "hdd72.xpm"
+#include "asll72.xpm"
+#include "asld72.xpm"
+#include "asdl72.xpm"
+#include "asdd72.xpm"
+#include "dkll72.xpm"
+#include "dkld72.xpm"
+#include "dkdl72.xpm"
+#include "dkdd72.xpm"
+#include "gll72.xpm"
+#include "gld72.xpm"
+#include "gdl72.xpm"
+#include "gdd72.xpm"
+#include "cvll72.xpm"
+#include "cvld72.xpm"
+#include "cvdl72.xpm"
+#include "cvdd72.xpm"
+#include "vll72.xpm"
+#include "vld72.xpm"
+#include "vdl72.xpm"
+#include "vdd72.xpm"
+#include "lll72.xpm"
+#include "lld72.xpm"
+#include "ldl72.xpm"
+#include "ldd72.xpm"
+#include "sll72.xpm"
+#include "sld72.xpm"
+#include "sdl72.xpm"
+#include "sdd72.xpm"
+#include "ull72.xpm"
+#include "uld72.xpm"
+#include "udl72.xpm"
+#include "udd72.xpm"
+#include "kll72.xpm"
+#include "kld72.xpm"
+#include "kdl72.xpm"
+#include "kdd72.xpm"
+#include "wpll72.xpm"
+#include "wpld72.xpm"
+#include "wpdl72.xpm"
+#include "wpdd72.xpm"
+#include "wlll72.xpm"
+#include "wlld72.xpm"
+#include "wldl72.xpm"
+#include "wldd72.xpm"
+#include "wnll72.xpm"
+#include "wnld72.xpm"
+#include "wndl72.xpm"
+#include "wndd72.xpm"
+#include "wsll72.xpm"
+#include "wsld72.xpm"
+#include "wsdl72.xpm"
+#include "wsdd72.xpm"
+
+#include "pll64.xpm"
+#include "pld64.xpm"
+#include "pdl64.xpm"
+#include "pdd64.xpm"
+#include "nll64.xpm"
+#include "nld64.xpm"
+#include "ndl64.xpm"
+#include "ndd64.xpm"
+#include "bll64.xpm"
+#include "bld64.xpm"
+#include "bdl64.xpm"
+#include "bdd64.xpm"
+#include "rll64.xpm"
+#include "rld64.xpm"
+#include "rdl64.xpm"
+#include "rdd64.xpm"
+#include "qll64.xpm"
+#include "qld64.xpm"
+#include "qdl64.xpm"
+#include "qdd64.xpm"
+#include "all64.xpm"
+#include "ald64.xpm"
+#include "adl64.xpm"
+#include "add64.xpm"
+#include "cll64.xpm"
+#include "cld64.xpm"
+#include "cdl64.xpm"
+#include "cdd64.xpm"
+#include "lll64.xpm"
+#include "lld64.xpm"
+#include "ldl64.xpm"
+#include "ldd64.xpm"
+#include "cvll64.xpm"
+#include "cvld64.xpm"
+#include "cvdl64.xpm"
+#include "cvdd64.xpm"
+#include "kll64.xpm"
+#include "kld64.xpm"
+#include "kdl64.xpm"
+#include "kdd64.xpm"
+
+#include "pll58.xpm"
+#include "pld58.xpm"
+#include "pdl58.xpm"
+#include "pdd58.xpm"
+#include "nll58.xpm"
+#include "nld58.xpm"
+#include "ndl58.xpm"
+#include "ndd58.xpm"
+#include "bll58.xpm"
+#include "bld58.xpm"
+#include "bdl58.xpm"
+#include "bdd58.xpm"
+#include "rll58.xpm"
+#include "rld58.xpm"
+#include "rdl58.xpm"
+#include "rdd58.xpm"
+#include "qll58.xpm"
+#include "qld58.xpm"
+#include "qdl58.xpm"
+#include "qdd58.xpm"
+#include "all58.xpm"
+#include "ald58.xpm"
+#include "adl58.xpm"
+#include "add58.xpm"
+#include "cll58.xpm"
+#include "cld58.xpm"
+#include "cdl58.xpm"
+#include "cdd58.xpm"
+#include "lll58.xpm"
+#include "lld58.xpm"
+#include "ldl58.xpm"
+#include "ldd58.xpm"
+#include "cvll58.xpm"
+#include "cvld58.xpm"
+#include "cvdl58.xpm"
+#include "cvdd58.xpm"
+#include "kll58.xpm"
+#include "kld58.xpm"
+#include "kdl58.xpm"
+#include "kdd58.xpm"
+
+#include "pll54.xpm"
+#include "pld54.xpm"
+#include "pdl54.xpm"
+#include "pdd54.xpm"
+#include "nll54.xpm"
+#include "nld54.xpm"
+#include "ndl54.xpm"
+#include "ndd54.xpm"
+#include "bll54.xpm"
+#include "bld54.xpm"
+#include "bdl54.xpm"
+#include "bdd54.xpm"
+#include "rll54.xpm"
+#include "rld54.xpm"
+#include "rdl54.xpm"
+#include "rdd54.xpm"
+#include "qll54.xpm"
+#include "qld54.xpm"
+#include "qdl54.xpm"
+#include "qdd54.xpm"
+#include "all54.xpm"
+#include "ald54.xpm"
+#include "adl54.xpm"
+#include "add54.xpm"
+#include "cll54.xpm"
+#include "cld54.xpm"
+#include "cdl54.xpm"
+#include "cdd54.xpm"
+#include "lll54.xpm"
+#include "lld54.xpm"
+#include "ldl54.xpm"
+#include "ldd54.xpm"
+#include "cvll54.xpm"
+#include "cvld54.xpm"
+#include "cvdl54.xpm"
+#include "cvdd54.xpm"
+#include "kll54.xpm"
+#include "kld54.xpm"
+#include "kdl54.xpm"
+#include "kdd54.xpm"
+
+#include "pll49.xpm"
+#include "pld49.xpm"
+#include "pdl49.xpm"
+#include "pdd49.xpm"
+#include "nll49.xpm"
+#include "nld49.xpm"
+#include "ndl49.xpm"
+#include "ndd49.xpm"
+#include "bll49.xpm"
+#include "bld49.xpm"
+#include "bdl49.xpm"
+#include "bdd49.xpm"
+#include "rll49.xpm"
+#include "rld49.xpm"
+#include "rdl49.xpm"
+#include "rdd49.xpm"
+#include "qll49.xpm"
+#include "qld49.xpm"
+#include "qdl49.xpm"
+#include "qdd49.xpm"
+#include "fll49.xpm"
+#include "fld49.xpm"
+#include "fdl49.xpm"
+#include "fdd49.xpm"
+#include "ell49.xpm"
+#include "eld49.xpm"
+#include "edl49.xpm"
+#include "edd49.xpm"
+#include "all49.xpm"
+#include "ald49.xpm"
+#include "adl49.xpm"
+#include "add49.xpm"
+#include "cll49.xpm"
+#include "cld49.xpm"
+#include "cdl49.xpm"
+#include "cdd49.xpm"
+#include "wll49.xpm"
+#include "wld49.xpm"
+#include "wdl49.xpm"
+#include "wdd49.xpm"
+#include "mll49.xpm"
+#include "mld49.xpm"
+#include "mdl49.xpm"
+#include "mdd49.xpm"
+#include "oll49.xpm"
+#include "old49.xpm"
+#include "odl49.xpm"
+#include "odd49.xpm"
+#include "hll49.xpm"
+#include "hld49.xpm"
+#include "hdl49.xpm"
+#include "hdd49.xpm"
+#include "asll49.xpm"
+#include "asld49.xpm"
+#include "asdl49.xpm"
+#include "asdd49.xpm"
+#include "dkll49.xpm"
+#include "dkld49.xpm"
+#include "dkdl49.xpm"
+#include "dkdd49.xpm"
+#include "gll49.xpm"
+#include "gld49.xpm"
+#include "gdl49.xpm"
+#include "gdd49.xpm"
+#include "cvll49.xpm"
+#include "cvld49.xpm"
+#include "cvdl49.xpm"
+#include "cvdd49.xpm"
+#include "vll49.xpm"
+#include "vld49.xpm"
+#include "vdl49.xpm"
+#include "vdd49.xpm"
+#include "lll49.xpm"
+#include "lld49.xpm"
+#include "ldl49.xpm"
+#include "ldd49.xpm"
+#include "sll49.xpm"
+#include "sld49.xpm"
+#include "sdl49.xpm"
+#include "sdd49.xpm"
+#include "ull49.xpm"
+#include "uld49.xpm"
+#include "udl49.xpm"
+#include "udd49.xpm"
+#include "kll49.xpm"
+#include "kld49.xpm"
+#include "kdl49.xpm"
+#include "kdd49.xpm"
+#include "wpll49.xpm"
+#include "wpld49.xpm"
+#include "wpdl49.xpm"
+#include "wpdd49.xpm"
+#include "wlll49.xpm"
+#include "wlld49.xpm"
+#include "wldl49.xpm"
+#include "wldd49.xpm"
+#include "wnll49.xpm"
+#include "wnld49.xpm"
+#include "wndl49.xpm"
+#include "wndd49.xpm"
+#include "wsll49.xpm"
+#include "wsld49.xpm"
+#include "wsdl49.xpm"
+#include "wsdd49.xpm"
+
+#include "pll45.xpm"
+#include "pld45.xpm"
+#include "pdl45.xpm"
+#include "pdd45.xpm"
+#include "nll45.xpm"
+#include "nld45.xpm"
+#include "ndl45.xpm"
+#include "ndd45.xpm"
+#include "bll45.xpm"
+#include "bld45.xpm"
+#include "bdl45.xpm"
+#include "bdd45.xpm"
+#include "rll45.xpm"
+#include "rld45.xpm"
+#include "rdl45.xpm"
+#include "rdd45.xpm"
+#include "qll45.xpm"
+#include "qld45.xpm"
+#include "qdl45.xpm"
+#include "qdd45.xpm"
+#include "all45.xpm"
+#include "ald45.xpm"
+#include "adl45.xpm"
+#include "add45.xpm"
+#include "cll45.xpm"
+#include "cld45.xpm"
+#include "cdl45.xpm"
+#include "cdd45.xpm"
+#include "lll45.xpm"
+#include "lld45.xpm"
+#include "ldl45.xpm"
+#include "ldd45.xpm"
+#include "cvll45.xpm"
+#include "cvld45.xpm"
+#include "cvdl45.xpm"
+#include "cvdd45.xpm"
+#include "kll45.xpm"
+#include "kld45.xpm"
+#include "kdl45.xpm"
+#include "kdd45.xpm"
+
+#include "pll40.xpm"
+#include "pld40.xpm"
+#include "pdl40.xpm"
+#include "pdd40.xpm"
+#include "nll40.xpm"
+#include "nld40.xpm"
+#include "ndl40.xpm"
+#include "ndd40.xpm"
+#include "bll40.xpm"
+#include "bld40.xpm"
+#include "bdl40.xpm"
+#include "bdd40.xpm"
+#include "rll40.xpm"
+#include "rld40.xpm"
+#include "rdl40.xpm"
+#include "rdd40.xpm"
+#include "qll40.xpm"
+#include "qld40.xpm"
+#include "qdl40.xpm"
+#include "qdd40.xpm"
+#include "all40.xpm"
+#include "ald40.xpm"
+#include "adl40.xpm"
+#include "add40.xpm"
+#include "cll40.xpm"
+#include "cld40.xpm"
+#include "cdl40.xpm"
+#include "cdd40.xpm"
+#include "lll40.xpm"
+#include "lld40.xpm"
+#include "ldl40.xpm"
+#include "ldd40.xpm"
+#include "cvll40.xpm"
+#include "cvld40.xpm"
+#include "cvdl40.xpm"
+#include "cvdd40.xpm"
+#include "kll40.xpm"
+#include "kld40.xpm"
+#include "kdl40.xpm"
+#include "kdd40.xpm"
+
+#include "pll37.xpm"
+#include "pld37.xpm"
+#include "pdl37.xpm"
+#include "pdd37.xpm"
+#include "nll37.xpm"
+#include "nld37.xpm"
+#include "ndl37.xpm"
+#include "ndd37.xpm"
+#include "bll37.xpm"
+#include "bld37.xpm"
+#include "bdl37.xpm"
+#include "bdd37.xpm"
+#include "rll37.xpm"
+#include "rld37.xpm"
+#include "rdl37.xpm"
+#include "rdd37.xpm"
+#include "qll37.xpm"
+#include "qld37.xpm"
+#include "qdl37.xpm"
+#include "qdd37.xpm"
+#include "all37.xpm"
+#include "ald37.xpm"
+#include "adl37.xpm"
+#include "add37.xpm"
+#include "cll37.xpm"
+#include "cld37.xpm"
+#include "cdl37.xpm"
+#include "cdd37.xpm"
+#include "lll37.xpm"
+#include "lld37.xpm"
+#include "ldl37.xpm"
+#include "ldd37.xpm"
+#include "cvll37.xpm"
+#include "cvld37.xpm"
+#include "cvdl37.xpm"
+#include "cvdd37.xpm"
+#include "kll37.xpm"
+#include "kld37.xpm"
+#include "kdl37.xpm"
+#include "kdd37.xpm"
+
+#include "pll33.xpm"
+#include "pld33.xpm"
+#include "pdl33.xpm"
+#include "pdd33.xpm"
+#include "nll33.xpm"
+#include "nld33.xpm"
+#include "ndl33.xpm"
+#include "ndd33.xpm"
+#include "bll33.xpm"
+#include "bld33.xpm"
+#include "bdl33.xpm"
+#include "bdd33.xpm"
+#include "rll33.xpm"
+#include "rld33.xpm"
+#include "rdl33.xpm"
+#include "rdd33.xpm"
+#include "qll33.xpm"
+#include "qld33.xpm"
+#include "qdl33.xpm"
+#include "qdd33.xpm"
+#include "fll33.xpm"
+#include "fld33.xpm"
+#include "fdl33.xpm"
+#include "fdd33.xpm"
+#include "ell33.xpm"
+#include "eld33.xpm"
+#include "edl33.xpm"
+#include "edd33.xpm"
+#include "all33.xpm"
+#include "ald33.xpm"
+#include "adl33.xpm"
+#include "add33.xpm"
+#include "cll33.xpm"
+#include "cld33.xpm"
+#include "cdl33.xpm"
+#include "cdd33.xpm"
+#include "wll33.xpm"
+#include "wld33.xpm"
+#include "wdl33.xpm"
+#include "wdd33.xpm"
+#include "mll33.xpm"
+#include "mld33.xpm"
+#include "mdl33.xpm"
+#include "mdd33.xpm"
+#include "oll33.xpm"
+#include "old33.xpm"
+#include "odl33.xpm"
+#include "odd33.xpm"
+#include "hll33.xpm"
+#include "hld33.xpm"
+#include "hdl33.xpm"
+#include "hdd33.xpm"
+#include "asll33.xpm"
+#include "asld33.xpm"
+#include "asdl33.xpm"
+#include "asdd33.xpm"
+#include "dkll33.xpm"
+#include "dkld33.xpm"
+#include "dkdl33.xpm"
+#include "dkdd33.xpm"
+#include "gll33.xpm"
+#include "gld33.xpm"
+#include "gdl33.xpm"
+#include "gdd33.xpm"
+#include "cvll33.xpm"
+#include "cvld33.xpm"
+#include "cvdl33.xpm"
+#include "cvdd33.xpm"
+#include "vll33.xpm"
+#include "vld33.xpm"
+#include "vdl33.xpm"
+#include "vdd33.xpm"
+#include "lll33.xpm"
+#include "lld33.xpm"
+#include "ldl33.xpm"
+#include "ldd33.xpm"
+#include "kll33.xpm"
+#include "kld33.xpm"
+#include "kdl33.xpm"
+#include "kdd33.xpm"
+
+#include "pll29.xpm"
+#include "pld29.xpm"
+#include "pdl29.xpm"
+#include "pdd29.xpm"
+#include "nll29.xpm"
+#include "nld29.xpm"
+#include "ndl29.xpm"
+#include "ndd29.xpm"
+#include "bll29.xpm"
+#include "bld29.xpm"
+#include "bdl29.xpm"
+#include "bdd29.xpm"
+#include "rll29.xpm"
+#include "rld29.xpm"
+#include "rdl29.xpm"
+#include "rdd29.xpm"
+#include "qll29.xpm"
+#include "qld29.xpm"
+#include "qdl29.xpm"
+#include "qdd29.xpm"
+#include "kll29.xpm"
+#include "kld29.xpm"
+#include "kdl29.xpm"
+#include "kdd29.xpm"
+
+#include "pll25.xpm"
+#include "pld25.xpm"
+#include "pdl25.xpm"
+#include "pdd25.xpm"
+#include "nll25.xpm"
+#include "nld25.xpm"
+#include "ndl25.xpm"
+#include "ndd25.xpm"
+#include "bll25.xpm"
+#include "bld25.xpm"
+#include "bdl25.xpm"
+#include "bdd25.xpm"
+#include "rll25.xpm"
+#include "rld25.xpm"
+#include "rdl25.xpm"
+#include "rdd25.xpm"
+#include "qll25.xpm"
+#include "qld25.xpm"
+#include "qdl25.xpm"
+#include "qdd25.xpm"
+#include "kll25.xpm"
+#include "kld25.xpm"
+#include "kdl25.xpm"
+#include "kdd25.xpm"
+
+#include "pll21.xpm"
+#include "pld21.xpm"
+#include "pdl21.xpm"
+#include "pdd21.xpm"
+#include "nll21.xpm"
+#include "nld21.xpm"
+#include "ndl21.xpm"
+#include "ndd21.xpm"
+#include "bll21.xpm"
+#include "bld21.xpm"
+#include "bdl21.xpm"
+#include "bdd21.xpm"
+#include "rll21.xpm"
+#include "rld21.xpm"
+#include "rdl21.xpm"
+#include "rdd21.xpm"
+#include "qll21.xpm"
+#include "qld21.xpm"
+#include "qdl21.xpm"
+#include "qdd21.xpm"
+#include "kll21.xpm"
+#include "kld21.xpm"
+#include "kdl21.xpm"
+#include "kdd21.xpm"
+
+typedef struct {
+  int size;
+  char **xpm[(int)BlackPawn][4];
+} XpmPieces;
+
+XpmPieces builtInXpms[] = {\
+  { 129, {\
+    { pll129, pld129, pdl129, pdd129, },\
+    { nll129, nld129, ndl129, ndd129, },\
+    { bll129, bld129, bdl129, bdd129, },\
+    { rll129, rld129, rdl129, rdd129, },\
+    { qll129, qld129, qdl129, qdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { nll129, nld129, ndl129, ndd129, },\
+    { bll129, bld129, bdl129, bdd129, },\
+    { rll129, rld129, rdl129, rdd129, },\
+    { qll129, qld129, qdl129, qdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+    { kll129, kld129, kdl129, kdd129, },\
+  } },\
+  { 116, {\
+    { pll116, pld116, pdl116, pdd116, },\
+    { nll116, nld116, ndl116, ndd116, },\
+    { bll116, bld116, bdl116, bdd116, },\
+    { rll116, rld116, rdl116, rdd116, },\
+    { qll116, qld116, qdl116, qdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { nll116, nld116, ndl116, ndd116, },\
+    { bll116, bld116, bdl116, bdd116, },\
+    { rll116, rld116, rdl116, rdd116, },\
+    { qll116, qld116, qdl116, qdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+    { kll116, kld116, kdl116, kdd116, },\
+  } },\
+  { 108, {\
+    { pll108, pld108, pdl108, pdd108, },\
+    { nll108, nld108, ndl108, ndd108, },\
+    { bll108, bld108, bdl108, bdd108, },\
+    { rll108, rld108, rdl108, rdd108, },\
+    { qll108, qld108, qdl108, qdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { nll108, nld108, ndl108, ndd108, },\
+    { bll108, bld108, bdl108, bdd108, },\
+    { rll108, rld108, rdl108, rdd108, },\
+    { qll108, qld108, qdl108, qdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+    { kll108, kld108, kdl108, kdd108, },\
+  } },\
+  { 95, {\
+    { pll95, pld95, pdl95, pdd95, },\
+    { nll95, nld95, ndl95, ndd95, },\
+    { bll95, bld95, bdl95, bdd95, },\
+    { rll95, rld95, rdl95, rdd95, },\
+    { qll95, qld95, qdl95, qdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { nll95, nld95, ndl95, ndd95, },\
+    { bll95, bld95, bdl95, bdd95, },\
+    { rll95, rld95, rdl95, rdd95, },\
+    { qll95, qld95, qdl95, qdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+    { kll95, kld95, kdl95, kdd95, },\
+  } },\
+  { 87, {\
+    { pll87, pld87, pdl87, pdd87, },\
+    { nll87, nld87, ndl87, ndd87, },\
+    { bll87, bld87, bdl87, bdd87, },\
+    { rll87, rld87, rdl87, rdd87, },\
+    { qll87, qld87, qdl87, qdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { nll87, nld87, ndl87, ndd87, },\
+    { bll87, bld87, bdl87, bdd87, },\
+    { rll87, rld87, rdl87, rdd87, },\
+    { qll87, qld87, qdl87, qdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+    { kll87, kld87, kdl87, kdd87, },\
+  } },\
+  { 80, {\
+    { pll80, pld80, pdl80, pdd80, },\
+    { nll80, nld80, ndl80, ndd80, },\
+    { bll80, bld80, bdl80, bdd80, },\
+    { rll80, rld80, rdl80, rdd80, },\
+    { qll80, qld80, qdl80, qdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { nll80, nld80, ndl80, ndd80, },\
+    { bll80, bld80, bdl80, bdd80, },\
+    { rll80, rld80, rdl80, rdd80, },\
+    { qll80, qld80, qdl80, qdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+    { kll80, kld80, kdl80, kdd80, },\
+  } },\
+  { 72, {\
+    { pll72, pld72, pdl72, pdd72, },\
+    { nll72, nld72, ndl72, ndd72, },\
+    { bll72, bld72, bdl72, bdd72, },\
+    { rll72, rld72, rdl72, rdd72, },\
+    { qll72, qld72, qdl72, qdd72, },\
+    { fll72, fld72, fdl72, fdd72, },\
+    { ell72, eld72, edl72, edd72, },\
+    { asll72, asld72, asdl72, asdd72, },\
+    { cll72, cld72, cdl72, cdd72, },\
+    { wll72, wld72, wdl72, wdd72, },\
+    { mll72, mld72, mdl72, mdd72, },\
+    { oll72, old72, odl72, odd72, },\
+    { hll72, hld72, hdl72, hdd72, },\
+    { all72, ald72, adl72, add72, },\
+    { dkll72, dkld72, dkdl72, dkdd72, },\
+    { gll72, gld72, gdl72, gdd72, },\
+    { cvll72, cvld72, cvdl72, cvdd72, },\
+    { vll72, vld72, vdl72, vdd72, },\
+    { lll72, lld72, ldl72, ldd72, },\
+    { sll72, sld72, sdl72, sdd72, },\
+    { ull72, uld72, udl72, udd72, },\
+    { kll72, kld72, kdl72, kdd72, },\
+  } },\
+  { 64, {\
+    { pll64, pld64, pdl64, pdd64, },\
+    { nll64, nld64, ndl64, ndd64, },\
+    { bll64, bld64, bdl64, bdd64, },\
+    { rll64, rld64, rdl64, rdd64, },\
+    { qll64, qld64, qdl64, qdd64, },\
+    { lll64, lld64, ldl64, ldd64, },\
+    { lll64, lld64, ldl64, ldd64, },\
+    { all64, ald64, adl64, add64, },\
+    { cll64, cld64, cdl64, cdd64, },\
+    { lll64, lld64, ldl64, ldd64, },\
+    { lll64, lld64, ldl64, ldd64, },\
+    { lll64, lld64, ldl64, ldd64, },\
+    { nll64, nld64, ndl64, ndd64, },\
+    { bll64, bld64, bdl64, bdd64, },\
+    { rll64, rld64, rdl64, rdd64, },\
+    { qll64, qld64, qdl64, qdd64, },\
+    { cvll64, cvld64, cvdl64, cvdd64, },\
+    { lll64, lld64, ldl64, ldd64, },\
+    { lll64, lld64, ldl64, ldd64, },\
+    { lll64, lld64, ldl64, ldd64, },\
+    { lll64, lld64, ldl64, ldd64, },\
+    { kll64, kld64, kdl64, kdd64, },\
+  } },\
+  { 58, {\
+    { pll58, pld58, pdl58, pdd58, },\
+    { nll58, nld58, ndl58, ndd58, },\
+    { bll58, bld58, bdl58, bdd58, },\
+    { rll58, rld58, rdl58, rdd58, },\
+    { qll58, qld58, qdl58, qdd58, },\
+    { lll58, lld58, ldl58, ldd58, },\
+    { lll58, lld58, ldl58, ldd58, },\
+    { all58, ald58, adl58, add58, },\
+    { cll58, cld58, cdl58, cdd58, },\
+    { lll58, lld58, ldl58, ldd58, },\
+    { lll58, lld58, ldl58, ldd58, },\
+    { lll58, lld58, ldl58, ldd58, },\
+    { nll58, nld58, ndl58, ndd58, },\
+    { bll58, bld58, bdl58, bdd58, },\
+    { rll58, rld58, rdl58, rdd58, },\
+    { qll58, qld58, qdl58, qdd58, },\
+    { cvll58, cvld58, cvdl58, cvdd58, },\
+    { lll58, lld58, ldl58, ldd58, },\
+    { lll58, lld58, ldl58, ldd58, },\
+    { lll58, lld58, ldl58, ldd58, },\
+    { lll58, lld58, ldl58, ldd58, },\
+    { kll58, kld58, kdl58, kdd58, },\
+  } },\
+  { 54, {\
+    { pll54, pld54, pdl54, pdd54, },\
+    { nll54, nld54, ndl54, ndd54, },\
+    { bll54, bld54, bdl54, bdd54, },\
+    { rll54, rld54, rdl54, rdd54, },\
+    { qll54, qld54, qdl54, qdd54, },\
+    { lll54, lld54, ldl54, ldd54, },\
+    { lll54, lld54, ldl54, ldd54, },\
+    { all54, ald54, adl54, add54, },\
+    { cll54, cld54, cdl54, cdd54, },\
+    { lll54, lld54, ldl54, ldd54, },\
+    { lll54, lld54, ldl54, ldd54, },\
+    { lll54, lld54, ldl54, ldd54, },\
+    { nll54, nld54, ndl54, ndd54, },\
+    { bll54, bld54, bdl54, bdd54, },\
+    { rll54, rld54, rdl54, rdd54, },\
+    { qll54, qld54, qdl54, qdd54, },\
+    { cvll54, cvld54, cvdl54, cvdd54, },\
+    { lll54, lld54, ldl54, ldd54, },\
+    { lll54, lld54, ldl54, ldd54, },\
+    { lll54, lld54, ldl54, ldd54, },\
+    { lll54, lld54, ldl54, ldd54, },\
+    { kll54, kld54, kdl54, kdd54, },\
+  } },\
+  { 49, {\
+    { pll49, pld49, pdl49, pdd49, },\
+    { nll49, nld49, ndl49, ndd49, },\
+    { bll49, bld49, bdl49, bdd49, },\
+    { rll49, rld49, rdl49, rdd49, },\
+    { qll49, qld49, qdl49, qdd49, },\
+    { fll49, fld49, fdl49, fdd49, },\
+    { ell49, eld49, edl49, edd49, },\
+    { asll49, asld49, asdl49, asdd49, },\
+    { cll49, cld49, cdl49, cdd49, },\
+    { wll49, wld49, wdl49, wdd49, },\
+    { mll49, mld49, mdl49, mdd49, },\
+    { oll49, old49, odl49, odd49, },\
+    { hll49, hld49, hdl49, hdd49, },\
+    { all49, ald49, adl49, add49, },\
+    { dkll49, dkld49, dkdl49, dkdd49, },\
+    { gll49, gld49, gdl49, gdd49, },\
+    { cvll49, cvld49, cvdl49, cvdd49, },\
+    { vll49, vld49, vdl49, vdd49, },\
+    { lll49, lld49, ldl49, ldd49, },\
+    { sll49, sld49, sdl49, sdd49, },\
+    { ull49, uld49, udl49, udd49, },\
+    { kll49, kld49, kdl49, kdd49, },\
+  } },\
+  { 45, {\
+    { pll45, pld45, pdl45, pdd45, },\
+    { nll45, nld45, ndl45, ndd45, },\
+    { bll45, bld45, bdl45, bdd45, },\
+    { rll45, rld45, rdl45, rdd45, },\
+    { qll45, qld45, qdl45, qdd45, },\
+    { lll45, lld45, ldl45, ldd45, },\
+    { lll45, lld45, ldl45, ldd45, },\
+    { all45, ald45, adl45, add45, },\
+    { cll45, cld45, cdl45, cdd45, },\
+    { lll45, lld45, ldl45, ldd45, },\
+    { lll45, lld45, ldl45, ldd45, },\
+    { lll45, lld45, ldl45, ldd45, },\
+    { nll45, nld45, ndl45, ndd45, },\
+    { bll45, bld45, bdl45, bdd45, },\
+    { rll45, rld45, rdl45, rdd45, },\
+    { qll45, qld45, qdl45, qdd45, },\
+    { cvll45, cvld45, cvdl45, cvdd45, },\
+    { lll45, lld45, ldl45, ldd45, },\
+    { lll45, lld45, ldl45, ldd45, },\
+    { lll45, lld45, ldl45, ldd45, },\
+    { lll45, lld45, ldl45, ldd45, },\
+    { kll45, kld45, kdl45, kdd45, },\
+  } },\
+  { 40, {\
+    { pll40, pld40, pdl40, pdd40, },\
+    { nll40, nld40, ndl40, ndd40, },\
+    { bll40, bld40, bdl40, bdd40, },\
+    { rll40, rld40, rdl40, rdd40, },\
+    { qll40, qld40, qdl40, qdd40, },\
+    { lll40, lld40, ldl40, ldd40, },\
+    { lll40, lld40, ldl40, ldd40, },\
+    { all40, ald40, adl40, add40, },\
+    { cll40, cld40, cdl40, cdd40, },\
+    { lll40, lld40, ldl40, ldd40, },\
+    { lll40, lld40, ldl40, ldd40, },\
+    { lll40, lld40, ldl40, ldd40, },\
+    { nll40, nld40, ndl40, ndd40, },\
+    { bll40, bld40, bdl40, bdd40, },\
+    { rll40, rld40, rdl40, rdd40, },\
+    { qll40, qld40, qdl40, qdd40, },\
+    { cvll40, cvld40, cvdl40, cvdd40, },\
+    { lll40, lld40, ldl40, ldd40, },\
+    { lll40, lld40, ldl40, ldd40, },\
+    { lll40, lld40, ldl40, ldd40, },\
+    { lll40, lld40, ldl40, ldd40, },\
+    { kll40, kld40, kdl40, kdd40, },\
+  } },\
+  { 37, {\
+    { pll37, pld37, pdl37, pdd37, },\
+    { nll37, nld37, ndl37, ndd37, },\
+    { bll37, bld37, bdl37, bdd37, },\
+    { rll37, rld37, rdl37, rdd37, },\
+    { qll37, qld37, qdl37, qdd37, },\
+    { lll37, lld37, ldl37, ldd37, },\
+    { lll37, lld37, ldl37, ldd37, },\
+    { all37, ald37, adl37, add37, },\
+    { cll37, cld37, cdl37, cdd37, },\
+    { lll37, lld37, ldl37, ldd37, },\
+    { lll37, lld37, ldl37, ldd37, },\
+    { lll37, lld37, ldl37, ldd37, },\
+    { nll37, nld37, ndl37, ndd37, },\
+    { bll37, bld37, bdl37, bdd37, },\
+    { rll37, rld37, rdl37, rdd37, },\
+    { qll37, qld37, qdl37, qdd37, },\
+    { cvll37, cvld37, cvdl37, cvdd37, },\
+    { lll37, lld37, ldl37, ldd37, },\
+    { lll37, lld37, ldl37, ldd37, },\
+    { lll37, lld37, ldl37, ldd37, },\
+    { lll37, lld37, ldl37, ldd37, },\
+    { kll37, kld37, kdl37, kdd37, },\
+  } },\
+  { 33, {\
+    { pll33, pld33, pdl33, pdd33, },\
+    { nll33, nld33, ndl33, ndd33, },\
+    { bll33, bld33, bdl33, bdd33, },\
+    { rll33, rld33, rdl33, rdd33, },\
+    { qll33, qld33, qdl33, qdd33, },\
+    { fll33, fld33, fdl33, fdd33, },\
+    { ell33, eld33, edl33, edd33, },\
+    { asll33, asld33, asdl33, asdd33, },\
+    { cll33, cld33, cdl33, cdd33, },\
+    { wll33, wld33, wdl33, wdd33, },\
+    { mll33, mld33, mdl33, mdd33, },\
+    { oll33, old33, odl33, odd33, },\
+    { hll33, hld33, hdl33, hdd33, },\
+    { all33, ald33, adl33, add33, },\
+    { dkll33, dkld33, dkdl33, dkdd33, },\
+    { gll33, gld33, gdl33, gdd33, },\
+    { cvll33, cvld33, cvdl33, cvdd33, },\
+    { vll33, vld33, vdl33, vdd33, },\
+    { lll33, lld33, ldl33, ldd33, },\
+    { lll33, lld33, ldl33, ldd33, },\
+    { lll33, lld33, ldl33, ldd33, },\
+    { kll33, kld33, kdl33, kdd33, },\
+  } },\
+  { 29, {\
+    { pll29, pld29, pdl29, pdd29, },\
+    { nll29, nld29, ndl29, ndd29, },\
+    { bll29, bld29, bdl29, bdd29, },\
+    { rll29, rld29, rdl29, rdd29, },\
+    { qll29, qld29, qdl29, qdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { nll29, nld29, ndl29, ndd29, },\
+    { bll29, bld29, bdl29, bdd29, },\
+    { rll29, rld29, rdl29, rdd29, },\
+    { qll29, qld29, qdl29, qdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+    { kll29, kld29, kdl29, kdd29, },\
+  } },\
+  { 25, {\
+    { pll25, pld25, pdl25, pdd25, },\
+    { nll25, nld25, ndl25, ndd25, },\
+    { bll25, bld25, bdl25, bdd25, },\
+    { rll25, rld25, rdl25, rdd25, },\
+    { qll25, qld25, qdl25, qdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { nll25, nld25, ndl25, ndd25, },\
+    { bll25, bld25, bdl25, bdd25, },\
+    { rll25, rld25, rdl25, rdd25, },\
+    { qll25, qld25, qdl25, qdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+    { kll25, kld25, kdl25, kdd25, },\
+  } },\
+  { 21, {\
+    { pll21, pld21, pdl21, pdd21, },\
+    { nll21, nld21, ndl21, ndd21, },\
+    { bll21, bld21, bdl21, bdd21, },\
+    { rll21, rld21, rdl21, rdd21, },\
+    { qll21, qld21, qdl21, qdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { nll21, nld21, ndl21, ndd21, },\
+    { bll21, bld21, bdl21, bdd21, },\
+    { rll21, rld21, rdl21, rdd21, },\
+    { qll21, qld21, qdl21, qdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+    { kll21, kld21, kdl21, kdd21, },\
+  } },\
+  { 0, {\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+    { NULL, NULL, NULL, NULL, },\
+  } },\
+};
+
diff --git a/pixmaps/sdd49.xpm b/pixmaps/sdd49.xpm
new file mode 100644
index 0000000..61b330c
--- /dev/null
+++ b/pixmaps/sdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *sdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".........................     ...................",
+"....................           ..................",
+"................                .................",
+".............                    ................",
+"...........                      ................",
+"..........                        ...............",
+"......... ......                ..  .............",
+"........        ...                   ...........",
+"........           ...                 ..........",
+".......               ..              . .........",
+".......                 ..            .. ........",
+"......                    .      ..      ........",
+"......                     .     ..       .......",
+"......                      .             .......",
+"......                       .            .......",
+"......                      ....          .......",
+"......                      .......     . .......",
+".......                    ...............  .....",
+".......                    .................   ..",
+".......                   .................. ....",
+".......                   ................... ...",
+".......                  ........................",
+".......                  ........................",
+"........                .........................",
+"........                .........................",
+".........               .........................",
+".........              ..........................",
+"..........             ..........................",
+"...........            ..........................",
+"...........            ..........................",
+"............           ..........................",
+"............           ..........................",
+".............          ..........................",
+".............          ..........................",
+".............          ..........................",
+".............          ..........................",
+"..............          .........................",
+"..............          .........................",
+"..............          .........................",
+"..............          .........................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/sdd72.xpm b/pixmaps/sdd72.xpm
new file mode 100644
index 0000000..8503541
--- /dev/null
+++ b/pixmaps/sdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *sdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".....................................     ..............................",
+"................................            ............................",
+".............................                 ..........................",
+"........................                       .........................",
+"......................                         .........................",
+"...................                             ........................",
+".................                                .......................",
+"................                                  ......................",
+"...............                               ...  .....................",
+".............   .........                    .....   ...................",
+".............  ............                            .................",
+"............            ......                          ................",
+"...........                ......                        ...............",
+"...........                   ......                  ... ..............",
+"..........                       .....                 ... .............",
+"..........                         ....                 ..  ............",
+".........                            ...       ....          ...........",
+".........                             ...       ...          ...........",
+".........                              ...      ....          ..........",
+".........                               .                     ..........",
+".........                                                     ..........",
+".........                                 ..                  ..........",
+".........                                 ...                 ..........",
+".........                                ......               ..........",
+".........                                .........         .   .........",
+".........                                ....................    .......",
+".........                               ......................       ...",
+"..........                              ........................      ..",
+"..........                             .........................  ......",
+"..........                            ..........................   .....",
+"..........                            ...........................   ....",
+"..........                           ...................................",
+"..........                           ...................................",
+"...........                          ...................................",
+"...........                         ....................................",
+"...........                         ....................................",
+"............                       .....................................",
+"............                       .....................................",
+".............                      .....................................",
+".............                      .....................................",
+"..............                    ......................................",
+"...............                   ......................................",
+"................                  ......................................",
+"................                  ......................................",
+".................                 ......................................",
+"..................                ......................................",
+"..................                ......................................",
+"...................               ......................................",
+"...................               ......................................",
+"...................               ......................................",
+"...................               ......................................",
+"...................               ......................................",
+"...................               ......................................",
+"....................               .....................................",
+"....................               .....................................",
+"....................               .....................................",
+"....................               .....................................",
+"....................               .....................................",
+"....................               .....................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/sdl49.xpm b/pixmaps/sdl49.xpm
new file mode 100644
index 0000000..05b0f88
--- /dev/null
+++ b/pixmaps/sdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *sdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".........................     ...................",
+"....................           ..................",
+"................                .................",
+".............                    ................",
+"...........                      ................",
+"..........                        ...............",
+"......... ......                ..  .............",
+"........        ...                   ...........",
+"........           ...                 ..........",
+".......               ..              . .........",
+".......                 ..            .. ........",
+"......                    .      ..      ........",
+"......                     .     ..       .......",
+"......                      .             .......",
+"......                       .            .......",
+"......                      ....          .......",
+"......                      .......     . .......",
+".......                    ...............  .....",
+".......                    .................   ..",
+".......                   .................. ....",
+".......                   ................... ...",
+".......                  ........................",
+".......                  ........................",
+"........                .........................",
+"........                .........................",
+".........               .........................",
+".........              ..........................",
+"..........             ..........................",
+"...........            ..........................",
+"...........            ..........................",
+"............           ..........................",
+"............           ..........................",
+".............          ..........................",
+".............          ..........................",
+".............          ..........................",
+".............          ..........................",
+"..............          .........................",
+"..............          .........................",
+"..............          .........................",
+"..............          .........................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/sdl72.xpm b/pixmaps/sdl72.xpm
new file mode 100644
index 0000000..f61c684
--- /dev/null
+++ b/pixmaps/sdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *sdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".....................................     ..............................",
+"................................            ............................",
+".............................                 ..........................",
+"........................                       .........................",
+"......................                         .........................",
+"...................                             ........................",
+".................                                .......................",
+"................                                  ......................",
+"...............                               ...  .....................",
+".............   .........                    .....   ...................",
+".............  ............                            .................",
+"............            ......                          ................",
+"...........                ......                        ...............",
+"...........                   ......                  ... ..............",
+"..........                       .....                 ... .............",
+"..........                         ....                 ..  ............",
+".........                            ...       ....          ...........",
+".........                             ...       ...          ...........",
+".........                              ...      ....          ..........",
+".........                               .                     ..........",
+".........                                                     ..........",
+".........                                 ..                  ..........",
+".........                                 ...                 ..........",
+".........                                ......               ..........",
+".........                                .........         .   .........",
+".........                                ....................    .......",
+".........                               ......................       ...",
+"..........                              ........................      ..",
+"..........                             .........................  ......",
+"..........                            ..........................   .....",
+"..........                            ...........................   ....",
+"..........                           ...................................",
+"..........                           ...................................",
+"...........                          ...................................",
+"...........                         ....................................",
+"...........                         ....................................",
+"............                       .....................................",
+"............                       .....................................",
+".............                      .....................................",
+".............                      .....................................",
+"..............                    ......................................",
+"...............                   ......................................",
+"................                  ......................................",
+"................                  ......................................",
+".................                 ......................................",
+"..................                ......................................",
+"..................                ......................................",
+"...................               ......................................",
+"...................               ......................................",
+"...................               ......................................",
+"...................               ......................................",
+"...................               ......................................",
+"...................               ......................................",
+"....................               .....................................",
+"....................               .....................................",
+"....................               .....................................",
+"....................               .....................................",
+"....................               .....................................",
+"....................               .....................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/sld49.xpm b/pixmaps/sld49.xpm
new file mode 100644
index 0000000..4c6fb4d
--- /dev/null
+++ b/pixmaps/sld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *sld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".........................     ...................",
+"....................     XXXXX ..................",
+"................    XXXXXXXXXXX .................",
+".............   XXXXXXXXXXXXXXXX ................",
+"...........  XXXXXXXXXXXXXXXXXXX ................",
+".......... XXXXXXXXXXXXXXXXXXXXXX ...............",
+".........       XXXXXXXXXXXXXXXX    .............",
+"........  XXXXXX   XXXXXXXXXXXXXXXXX  ...........",
+"........ XXXXXXXXXX   XXXXXXXXXXXXXXXX ..........",
+"....... XXXXXXXXXXXXXX  XXXXXXXXXXXXXX  .........",
+"....... XXXXXXXXXXXXXXXX  XXXXXXXXXXXX   ........",
+"...... XXXXXXXXXXXXXXXXXXX XXXXXX  XXXXX ........",
+"...... XXXXXXXXXXXXXXXXXXXX XXXXX  XXXXXX .......",
+"...... XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXX .......",
+"...... XXXXXXXXXXXXXXXXXXXXX .  XXXXXXXXX .......",
+"...... XXXXXXXXXXXXXXXXXXXX ....   XXXXX  .......",
+"...... XXXXXXXXXXXXXXXXXXXX .......     . .......",
+"....... XXXXXXXXXXXXXXXXXX ...............  .....",
+"....... XXXXXXXXXXXXXXXXXX .................   ..",
+"....... XXXXXXXXXXXXXXXXX .................. ....",
+"....... XXXXXXXXXXXXXXXXX ................... ...",
+"....... XXXXXXXXXXXXXXXX ........................",
+"....... XXXXXXXXXXXXXXXX ........................",
+"........ XXXXXXXXXXXXXX .........................",
+"........ XXXXXXXXXXXXXX .........................",
+"......... XXXXXXXXXXXXX .........................",
+"......... XXXXXXXXXXXX ..........................",
+".......... XXXXXXXXXXX ..........................",
+"........... XXXXXXXXXX ..........................",
+"........... XXXXXXXXXX ..........................",
+"............ XXXXXXXXX ..........................",
+"............ XXXXXXXXX ..........................",
+"............. XXXXXXXX ..........................",
+"............. XXXXXXXX ..........................",
+"............. XXXXXXXX ..........................",
+"............. XXXXXXXX ..........................",
+".............. XXXXXXXX .........................",
+".............. XXXXXXXX .........................",
+".............. XXXXXXXX .........................",
+"..............          .........................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/sld72.xpm b/pixmaps/sld72.xpm
new file mode 100644
index 0000000..a7ac63b
--- /dev/null
+++ b/pixmaps/sld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *sld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".....................................      .............................",
+"................................             ...........................",
+".............................        XXXXXX   ..........................",
+"........................        XXXXXXXXXXXX   .........................",
+"......................       XXXXXXXXXXXXXXXX  .........................",
+"...................     XXXXXXXXXXXXXXXXXXXXXX  ........................",
+".................     XXXXXXXXXXXXXXXXXXXXXXXX   .......................",
+"................   XXXXXXXXXXXXXXXXXXXXXXXXXXXX   ......................",
+"...............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .....................",
+".............           XXXXXXXXXXXXXXXXXXXXXXX      ...................",
+".............              XXXXXXXXXXXXXXXXXXX         .................",
+"............   XXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXX   ................",
+"...........  XXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXXXX  ...............",
+"...........  XXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXX    ..............",
+"..........  XXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXX    .............",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXX    ............",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXX    XXXXXXXX  ...........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXX   XXXXXXXX  ...........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXX    XXXXXXXX  ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXX  ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXX  ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..   XXXXXXXXXXXXX  ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...      XXXXXXXX   ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......               ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..........        .   .........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXX   ....................    .......",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXX  ......................       ...",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXX   ........................      ..",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXX  .........................  ......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX  ..........................   .....",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX  ...........................   ....",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX  ...................................",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX  ...................................",
+"...........  XXXXXXXXXXXXXXXXXXXXXX  ...................................",
+"...........  XXXXXXXXXXXXXXXXXXXXX  ....................................",
+"...........  XXXXXXXXXXXXXXXXXXXXX  ....................................",
+"............  XXXXXXXXXXXXXXXXXXX  .....................................",
+"............   XXXXXXXXXXXXXXXXXX  .....................................",
+".............  XXXXXXXXXXXXXXXXXX  .....................................",
+".............   XXXXXXXXXXXXXXXXX  .....................................",
+"..............   XXXXXXXXXXXXXXX  ......................................",
+"...............   XXXXXXXXXXXXXX  ......................................",
+"................  XXXXXXXXXXXXXX  ......................................",
+"................   XXXXXXXXXXXXX  ......................................",
+".................  XXXXXXXXXXXXX  ......................................",
+"..................  XXXXXXXXXXXX  ......................................",
+"..................  XXXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"....................  XXXXXXXXXXX  .....................................",
+"....................  XXXXXXXXXXX  .....................................",
+"....................  XXXXXXXXXXX  .....................................",
+"....................  XXXXXXXXXXX  .....................................",
+"....................               .....................................",
+"....................               .....................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/sll49.xpm b/pixmaps/sll49.xpm
new file mode 100644
index 0000000..c7ce9b3
--- /dev/null
+++ b/pixmaps/sll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *sll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".........................     ...................",
+"....................     XXXXX ..................",
+"................    XXXXXXXXXXX .................",
+".............   XXXXXXXXXXXXXXXX ................",
+"...........  XXXXXXXXXXXXXXXXXXX ................",
+".......... XXXXXXXXXXXXXXXXXXXXXX ...............",
+".........       XXXXXXXXXXXXXXXX    .............",
+"........  XXXXXX   XXXXXXXXXXXXXXXXX  ...........",
+"........ XXXXXXXXXX   XXXXXXXXXXXXXXXX ..........",
+"....... XXXXXXXXXXXXXX  XXXXXXXXXXXXXX  .........",
+"....... XXXXXXXXXXXXXXXX  XXXXXXXXXXXX   ........",
+"...... XXXXXXXXXXXXXXXXXXX XXXXXX  XXXXX ........",
+"...... XXXXXXXXXXXXXXXXXXXX XXXXX  XXXXXX .......",
+"...... XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXX .......",
+"...... XXXXXXXXXXXXXXXXXXXXX .  XXXXXXXXX .......",
+"...... XXXXXXXXXXXXXXXXXXXX ....   XXXXX  .......",
+"...... XXXXXXXXXXXXXXXXXXXX .......     . .......",
+"....... XXXXXXXXXXXXXXXXXX ...............  .....",
+"....... XXXXXXXXXXXXXXXXXX .................   ..",
+"....... XXXXXXXXXXXXXXXXX .................. ....",
+"....... XXXXXXXXXXXXXXXXX ................... ...",
+"....... XXXXXXXXXXXXXXXX ........................",
+"....... XXXXXXXXXXXXXXXX ........................",
+"........ XXXXXXXXXXXXXX .........................",
+"........ XXXXXXXXXXXXXX .........................",
+"......... XXXXXXXXXXXXX .........................",
+"......... XXXXXXXXXXXX ..........................",
+".......... XXXXXXXXXXX ..........................",
+"........... XXXXXXXXXX ..........................",
+"........... XXXXXXXXXX ..........................",
+"............ XXXXXXXXX ..........................",
+"............ XXXXXXXXX ..........................",
+"............. XXXXXXXX ..........................",
+"............. XXXXXXXX ..........................",
+"............. XXXXXXXX ..........................",
+"............. XXXXXXXX ..........................",
+".............. XXXXXXXX .........................",
+".............. XXXXXXXX .........................",
+".............. XXXXXXXX .........................",
+"..............          .........................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/sll72.xpm b/pixmaps/sll72.xpm
new file mode 100644
index 0000000..59870fa
--- /dev/null
+++ b/pixmaps/sll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *sll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".....................................      .............................",
+"................................             ...........................",
+".............................        XXXXXX   ..........................",
+"........................        XXXXXXXXXXXX   .........................",
+"......................       XXXXXXXXXXXXXXXX  .........................",
+"...................     XXXXXXXXXXXXXXXXXXXXXX  ........................",
+".................     XXXXXXXXXXXXXXXXXXXXXXXX   .......................",
+"................   XXXXXXXXXXXXXXXXXXXXXXXXXXXX   ......................",
+"...............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .....................",
+".............           XXXXXXXXXXXXXXXXXXXXXXX      ...................",
+".............              XXXXXXXXXXXXXXXXXXX         .................",
+"............   XXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXX   ................",
+"...........  XXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXXXX  ...............",
+"...........  XXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXX    ..............",
+"..........  XXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXX    .............",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXX    ............",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXX    XXXXXXXX  ...........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXX   XXXXXXXX  ...........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXX    XXXXXXXX  ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXX  ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXX  ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..   XXXXXXXXXXXXX  ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...      XXXXXXXX   ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......               ..........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..........        .   .........",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXX   ....................    .......",
+".........  XXXXXXXXXXXXXXXXXXXXXXXXXXX  ......................       ...",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXX   ........................      ..",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXX  .........................  ......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX  ..........................   .....",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX  ...........................   ....",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX  ...................................",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX  ...................................",
+"...........  XXXXXXXXXXXXXXXXXXXXXX  ...................................",
+"...........  XXXXXXXXXXXXXXXXXXXXX  ....................................",
+"...........  XXXXXXXXXXXXXXXXXXXXX  ....................................",
+"............  XXXXXXXXXXXXXXXXXXX  .....................................",
+"............   XXXXXXXXXXXXXXXXXX  .....................................",
+".............  XXXXXXXXXXXXXXXXXX  .....................................",
+".............   XXXXXXXXXXXXXXXXX  .....................................",
+"..............   XXXXXXXXXXXXXXX  ......................................",
+"...............   XXXXXXXXXXXXXX  ......................................",
+"................  XXXXXXXXXXXXXX  ......................................",
+"................   XXXXXXXXXXXXX  ......................................",
+".................  XXXXXXXXXXXXX  ......................................",
+"..................  XXXXXXXXXXXX  ......................................",
+"..................  XXXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"...................  XXXXXXXXXXX  ......................................",
+"....................  XXXXXXXXXXX  .....................................",
+"....................  XXXXXXXXXXX  .....................................",
+"....................  XXXXXXXXXXX  .....................................",
+"....................  XXXXXXXXXXX  .....................................",
+"....................               .....................................",
+"....................               .....................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/test.c b/pixmaps/test.c
new file mode 100644
index 0000000..242315b
--- /dev/null
+++ b/pixmaps/test.c
@@ -0,0 +1,13 @@
+#define NULL 0
+#define BlackPawn 22
+#include "pixmaps.h"
+
+/*
+ * This is a program that you can compile to test if the include tree 
+ * of bitmaps is complete, and if all the bitmaps are without syntax errors
+ */
+
+main()
+{
+	printf("Hi\n");
+}
diff --git a/pixmaps/udd49.xpm b/pixmaps/udd49.xpm
new file mode 100644
index 0000000..b4721c9
--- /dev/null
+++ b/pixmaps/udd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *udd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".  ..............................................",
+"..  .............................................",
+"..   ............................................",
+"... . ...... ........ ...........................",
+".... . .....   .....   ..........................",
+".... .. ....    ....    .........................",
+"..... .. ...     ..     .........................",
+"...... .. ..       .   .   ......................",
+"....... .. ..   .. .   .      ...................",
+"....... ...    .                .................",
+"........ ...                     ................",
+"......... ..                       ..............",
+"..........                          .............",
+".........      .                     ............",
+".........    ..                       ...........",
+".........    .                        ...........",
+".........   .                          ..........",
+"........                 .              .........",
+"........                 .              .........",
+"........                 .               ........",
+".......                  .               ........",
+".......                 .                ........",
+"......                                    .......",
+".....                   .                 .......",
+".....                  ..                 .......",
+"....                  ...                  ......",
+"....                .....                  ......",
+"...   ..           ......                  ......",
+"...   .          .......                   ......",
+"...             ........                    .....",
+"...       .     .......                     .....",
+"...      .    .  .....                      .....",
+"....     .   .   ....                       .....",
+".....    .      . ..                        .....",
+"..........  .   ...                         .....",
+".............. ...                           ....",
+"............... ..                           ....",
+".................                            ....",
+"................                             ....",
+"...............                              ....",
+"...............                              ....",
+"..............                               ....",
+"..............                               ....",
+"..............                               ....",
+"..............                              .....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/udd72.xpm b/pixmaps/udd72.xpm
new file mode 100644
index 0000000..e762155
--- /dev/null
+++ b/pixmaps/udd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *udd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".  .....................................................................",
+".   ............................ .......................................",
+"..    ...........   ...........   ......................................",
+"..     ...........   .........    ......................................",
+"...  .  ..........     ......      .....................................",
+"....  .   ........      .....      .....................................",
+".....  ..  .......       ...        ....................................",
+"......  ..  ......        ..        ....................................",
+".......  ..   ....          .      .     ...............................",
+"........  ..   ...       . ..      ..       ............................",
+".........  ...  ..      .. .       ..          .........................",
+"..........  ...  .     ...          .            .......................",
+"...........  ...      ...                          .....................",
+"............  ...     .                             ....................",
+".............  ...                                   ...................",
+"..............  .                                     ..................",
+"..............                                         .................",
+".............         ..                                ................",
+".............       ...                                  ...............",
+".............      ....                                  ...............",
+".............     .....                                   ..............",
+".............     ....                                     .............",
+"............      .                                        .............",
+"............                                                ............",
+"............                                                ............",
+"...........                                                  ...........",
+"...........                                                  ...........",
+"..........                                                    ..........",
+"..........                                                    ..........",
+".........                                                     ..........",
+"........                                                       .........",
+"........                                                       .........",
+".......                                                        .........",
+"......                                                          ........",
+"......                             .                            ........",
+".....                            ...                            ........",
+".....                          .....                            ........",
+".....    ..                  .......                             .......",
+"....    ....               ........                              .......",
+"....    ....             ..........                              .......",
+"....    ...             ..........                               .......",
+"....    ...            ...........                               .......",
+"....                  ...........                                 ......",
+"....                   .........                                  ......",
+"....                .    .......                                  ......",
+".....               ...  ......                                   ......",
+"......             ..   ......                                    ......",
+"........    .       ..  .....                                     ......",
+"..............   .   . .....                                      ......",
+"...................     ...                                       ......",
+"....................    ...                                        .....",
+"..........................                                         .....",
+".........................                                          .....",
+"........................                                           .....",
+"........................                                           .....",
+".......................                                            .....",
+"......................                                             .....",
+"......................                                             .....",
+"......................                                             .....",
+".....................                                              .....",
+".....................                                              .....",
+".....................                                              .....",
+".....................                                              .....",
+".....................                                              .....",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/udl49.xpm b/pixmaps/udl49.xpm
new file mode 100644
index 0000000..ebd9c86
--- /dev/null
+++ b/pixmaps/udl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *udl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".  ..............................................",
+"..  .............................................",
+"..   ............................................",
+"... . ...... ........ ...........................",
+".... . .....   .....   ..........................",
+".... .. ....    ....    .........................",
+"..... .. ...     ..     .........................",
+"...... .. ..       .   .   ......................",
+"....... .. ..   .. .   .      ...................",
+"....... ...    .                .................",
+"........ ...                     ................",
+"......... ..                       ..............",
+"..........                          .............",
+".........      .                     ............",
+".........    ..                       ...........",
+".........    .                        ...........",
+".........   .                          ..........",
+"........                 .              .........",
+"........                 .              .........",
+"........                 .               ........",
+".......                  .               ........",
+".......                 .                ........",
+"......                                    .......",
+".....                   .                 .......",
+".....                  ..                 .......",
+"....                  ...                  ......",
+"....                .....                  ......",
+"...   ..           ......                  ......",
+"...   .          .......                   ......",
+"...             ........                    .....",
+"...       .     .......                     .....",
+"...      .    .  .....                      .....",
+"....     .   .   ....                       .....",
+".....    .      . ..                        .....",
+"..........  .   ...                         .....",
+".............. ...                           ....",
+"............... ..                           ....",
+".................                            ....",
+"................                             ....",
+"...............                              ....",
+"...............                              ....",
+"..............                               ....",
+"..............                               ....",
+"..............                               ....",
+"..............                              .....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/udl72.xpm b/pixmaps/udl72.xpm
new file mode 100644
index 0000000..851f6ee
--- /dev/null
+++ b/pixmaps/udl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *udl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".  .....................................................................",
+".   ............................ .......................................",
+"..    ...........   ...........   ......................................",
+"..     ...........   .........    ......................................",
+"...  .  ..........     ......      .....................................",
+"....  .   ........      .....      .....................................",
+".....  ..  .......       ...        ....................................",
+"......  ..  ......        ..        ....................................",
+".......  ..   ....          .      .     ...............................",
+"........  ..   ...       . ..      ..       ............................",
+".........  ...  ..      .. .       ..          .........................",
+"..........  ...  .     ...          .            .......................",
+"...........  ...      ...                          .....................",
+"............  ...     .                             ....................",
+".............  ...                                   ...................",
+"..............  .                                     ..................",
+"..............                                         .................",
+".............         ..                                ................",
+".............       ...                                  ...............",
+".............      ....                                  ...............",
+".............     .....                                   ..............",
+".............     ....                                     .............",
+"............      .                                        .............",
+"............                                                ............",
+"............                                                ............",
+"...........                                                  ...........",
+"...........                                                  ...........",
+"..........                                                    ..........",
+"..........                                                    ..........",
+".........                                                     ..........",
+"........                                                       .........",
+"........                                                       .........",
+".......                                                        .........",
+"......                                                          ........",
+"......                             .                            ........",
+".....                            ...                            ........",
+".....                          .....                            ........",
+".....    ..                  .......                             .......",
+"....    ....               ........                              .......",
+"....    ....             ..........                              .......",
+"....    ...             ..........                               .......",
+"....    ...            ...........                               .......",
+"....                  ...........                                 ......",
+"....                   .........                                  ......",
+"....                .    .......                                  ......",
+".....               ...  ......                                   ......",
+"......             ..   ......                                    ......",
+"........    .       ..  .....                                     ......",
+"..............   .   . .....                                      ......",
+"...................     ...                                       ......",
+"....................    ...                                        .....",
+"..........................                                         .....",
+".........................                                          .....",
+"........................                                           .....",
+"........................                                           .....",
+".......................                                            .....",
+"......................                                             .....",
+"......................                                             .....",
+"......................                                             .....",
+".....................                                              .....",
+".....................                                              .....",
+".....................                                              .....",
+".....................                                              .....",
+".....................                                              .....",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/uld49.xpm b/pixmaps/uld49.xpm
new file mode 100644
index 0000000..59d16dd
--- /dev/null
+++ b/pixmaps/uld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *uld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".  ..............................................",
+"..  .............................................",
+"..   ............................................",
+"... X ...... ........ ...........................",
+".... X .....   ..... X ..........................",
+".... XX .... XX .... XX .........................",
+"..... XX ... XXX .. XXX .........................",
+"...... XX .. XXXX   XXX    ......................",
+"....... XX .. XX  X XXX XXX   ...................",
+"....... XXX  XX XXXXXXXXXXXXXX  .................",
+"........ XXX XXXXXXXXXXXXXXXXXXX ................",
+"......... XX XXXXXXXXXXXXXXXXXXXX  ..............",
+"..........  XXXXXXXXXXXXXXXXXXXXXX  .............",
+".........  XXXX XXXXXXXXXXXXXXXXXXX  ............",
+"......... XXX  XXXXXXXXXXXXXXXXXXXXX  ...........",
+"......... XXX XXXXXXXXXXXXXXXXXXXXXXX ...........",
+"......... XX XXXXXXXXXXXXXXXXXXXXXXXX  ..........",
+"........ XXXXXXXXXXXXXXXX XXXXXXXXXXXX  .........",
+"........ XXXXXXXXXXXXXXXX XXXXXXXXXXXX  .........",
+"........ XXXXXXXXXXXXXXXX XXXXXXXXXXXXX  ........",
+"....... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXX  ........",
+"....... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ........",
+"...... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX  .......",
+"..... XXXXXXXXXXXXXXXXX . XXXXXXXXXXXXXX  .......",
+"..... XXXXXXXXXXXXXXXX .. XXXXXXXXXXXXXXX .......",
+".... XXXXXXXXXXXXXXX  ... XXXXXXXXXXXXXXX  ......",
+".... XXXXXXXXXXXXXX ..... XXXXXXXXXXXXXXX  ......",
+"... XX  XXXXXXXXX  ...... XXXXXXXXXXXXXXX  ......",
+"... XX XXXXXXXXX ....... XXXXXXXXXXXXXXXXX ......",
+"... XXXXXXXXXXX ........ XXXXXXXXXXXXXXXXX  .....",
+"... XXXXXX XXX  ....... XXXXXXXXXXXXXXXXXX  .....",
+"... XXXXX XXX XX ..... XXXXXXXXXXXXXXXXXXX  .....",
+".... XXXX XX XXX .... XXXXXXXXXXXXXXXXXXXX  .....",
+".....     X  XX . .. XXXXXXXXXXXXXXXXXXXXX  .....",
+"..........  . X ... XXXXXXXXXXXXXXXXXXXXXXX .....",
+".............. ... XXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"............... .. XXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"................. XXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"................ XXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"............... XXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"............... XXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"..............                              .....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/uld72.xpm b/pixmaps/uld72.xpm
new file mode 100644
index 0000000..85a121e
--- /dev/null
+++ b/pixmaps/uld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *uld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".  .....................................................................",
+".   ............................ .......................................",
+"..    ...........   ...........   ......................................",
+"..     ...........   .........    ......................................",
+"...  X  ..........     ......      .....................................",
+"....  X   ........  X   .....  XX  .....................................",
+".....  XX  .......  XX   ...   XX   ....................................",
+"......  XX  ......  XXX   ..  XXXX  ....................................",
+".......  XX   ....  XXXX      XXXX       ...............................",
+"........  XX   ...  XXXXX     XXXX          ............................",
+".........  XXX  ..   XXX   X  XXXXX  XXXX      .........................",
+"..........  XXX  .   XX   XXXXXXXXX  XXXXXXX     .......................",
+"...........  XXX    XX   XXXXXXXXXXXXXXXXXXXXX     .....................",
+"............  XXX   XX XXXXXXXXXXXXXXXXXXXXXXXX     ....................",
+".............  XXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...................",
+"..............  X   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ..................",
+"..............     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .................",
+".............     XXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ................",
+".............  XXXXX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ...............",
+".............  XXXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...............",
+".............  XXX     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ..............",
+".............  XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .............",
+"............   XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .............",
+"............  XXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX    ............",
+"............  XXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX    ............",
+"...........   XXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX    ...........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX    ...........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX     ..........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXX    ..........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX    ..........",
+"........   XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX     .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXXXX    .........",
+".......   XXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXX    .........",
+"......   XXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX     ........",
+"......  XXXXXXXXXXXXXXXXXXXXXXX    .  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....   XXXXXXXXXXXXXXXXXXXXX    ...  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....  XXXXXXXXXXXXXXXXXXXX    .....  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....  XX  XXXXXXXXXXXXXX    .......  XXXXXXXXXXXXXXXXXXXXXX     .......",
+"....   X    XXXXXXXXXXX    ........   XXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX    XXXXXXXXXX   ..........  XXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX   XXXXXXXXXX   ..........   XXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX   XXXXXXXXX   ...........  XXXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XXXXXXXX  XXX   ...........   XXXXXXXXXXXXXXXXXXXXXXXXX     ......",
+"....  XXXXXXXX  XX     .........   XXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"....   XXXXXX   XX  X    .......  XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+".....   XXXX   XX   XXX  ......   XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......         X   XX   ......   XXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"........    .       XX  .....   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"..............   .   X .....   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"...................     ...   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"....................    ...  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .....",
+"..........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .....",
+".........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"........................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".......................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................                                              .....",
+".....................                                              .....",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/ull49.xpm b/pixmaps/ull49.xpm
new file mode 100644
index 0000000..d6c00d4
--- /dev/null
+++ b/pixmaps/ull49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *ull49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".  ..............................................",
+"..  .............................................",
+"..   ............................................",
+"... X ...... ........ ...........................",
+".... X .....   ..... X ..........................",
+".... XX .... XX .... XX .........................",
+"..... XX ... XXX .. XXX .........................",
+"...... XX .. XXXX   XXX    ......................",
+"....... XX .. XX  X XXX XXX   ...................",
+"....... XXX  XX XXXXXXXXXXXXXX  .................",
+"........ XXX XXXXXXXXXXXXXXXXXXX ................",
+"......... XX XXXXXXXXXXXXXXXXXXXX  ..............",
+"..........  XXXXXXXXXXXXXXXXXXXXXX  .............",
+".........  XXXX XXXXXXXXXXXXXXXXXXX  ............",
+"......... XXX  XXXXXXXXXXXXXXXXXXXXX  ...........",
+"......... XXX XXXXXXXXXXXXXXXXXXXXXXX ...........",
+"......... XX XXXXXXXXXXXXXXXXXXXXXXXX  ..........",
+"........ XXXXXXXXXXXXXXXX XXXXXXXXXXXX  .........",
+"........ XXXXXXXXXXXXXXXX XXXXXXXXXXXX  .........",
+"........ XXXXXXXXXXXXXXXX XXXXXXXXXXXXX  ........",
+"....... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXX  ........",
+"....... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ........",
+"...... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX  .......",
+"..... XXXXXXXXXXXXXXXXX . XXXXXXXXXXXXXX  .......",
+"..... XXXXXXXXXXXXXXXX .. XXXXXXXXXXXXXXX .......",
+".... XXXXXXXXXXXXXXX  ... XXXXXXXXXXXXXXX  ......",
+".... XXXXXXXXXXXXXX ..... XXXXXXXXXXXXXXX  ......",
+"... XX  XXXXXXXXX  ...... XXXXXXXXXXXXXXX  ......",
+"... XX XXXXXXXXX ....... XXXXXXXXXXXXXXXXX ......",
+"... XXXXXXXXXXX ........ XXXXXXXXXXXXXXXXX  .....",
+"... XXXXXX XXX  ....... XXXXXXXXXXXXXXXXXX  .....",
+"... XXXXX XXX XX ..... XXXXXXXXXXXXXXXXXXX  .....",
+".... XXXX XX XXX .... XXXXXXXXXXXXXXXXXXXX  .....",
+".....     X  XX . .. XXXXXXXXXXXXXXXXXXXXX  .....",
+"..........  . X ... XXXXXXXXXXXXXXXXXXXXXXX .....",
+".............. ... XXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"............... .. XXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"................. XXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"................ XXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"............... XXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"............... XXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....",
+"..............                              .....",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/ull72.xpm b/pixmaps/ull72.xpm
new file mode 100644
index 0000000..c7fb8d0
--- /dev/null
+++ b/pixmaps/ull72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *ull72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+".  .....................................................................",
+".   ............................ .......................................",
+"..    ...........   ...........   ......................................",
+"..     ...........   .........    ......................................",
+"...  X  ..........     ......      .....................................",
+"....  X   ........  X   .....  XX  .....................................",
+".....  XX  .......  XX   ...   XX   ....................................",
+"......  XX  ......  XXX   ..  XXXX  ....................................",
+".......  XX   ....  XXXX      XXXX       ...............................",
+"........  XX   ...  XXXXX     XXXX          ............................",
+".........  XXX  ..   XXX   X  XXXXX  XXXX      .........................",
+"..........  XXX  .   XX   XXXXXXXXX  XXXXXXX     .......................",
+"...........  XXX    XX   XXXXXXXXXXXXXXXXXXXXX     .....................",
+"............  XXX   XX XXXXXXXXXXXXXXXXXXXXXXXX     ....................",
+".............  XXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...................",
+"..............  X   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ..................",
+"..............     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .................",
+".............     XXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ................",
+".............  XXXXX   XXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ...............",
+".............  XXXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ...............",
+".............  XXX     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ..............",
+".............  XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .............",
+"............   XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .............",
+"............  XXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX    ............",
+"............  XXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX    ............",
+"...........   XXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX    ...........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX    ...........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXX     ..........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXX    ..........",
+".........   XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX    ..........",
+"........   XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX     .........",
+"........  XXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXXXX    .........",
+".......   XXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXX    .........",
+"......   XXXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX     ........",
+"......  XXXXXXXXXXXXXXXXXXXXXXX    .  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....   XXXXXXXXXXXXXXXXXXXXX    ...  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....  XXXXXXXXXXXXXXXXXXXX    .....  XXXXXXXXXXXXXXXXXXXXXX    ........",
+".....  XX  XXXXXXXXXXXXXX    .......  XXXXXXXXXXXXXXXXXXXXXX     .......",
+"....   X    XXXXXXXXXXX    ........   XXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX    XXXXXXXXXX   ..........  XXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX   XXXXXXXXXX   ..........   XXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XX   XXXXXXXXX   ...........  XXXXXXXXXXXXXXXXXXXXXXXXX    .......",
+"....  XXXXXXXX  XXX   ...........   XXXXXXXXXXXXXXXXXXXXXXXXX     ......",
+"....  XXXXXXXX  XX     .........   XXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"....   XXXXXX   XX  X    .......  XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+".....   XXXX   XX   XXX  ......   XXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......         X   XX   ......   XXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"........    .       XX  .....   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"..............   .   X .....   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"...................     ...   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"....................    ...  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .....",
+"..........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .....",
+".........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"........................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"........................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".......................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+"......................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    .....",
+".....................                                              .....",
+".....................                                              .....",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/vdd33.xpm b/pixmaps/vdd33.xpm
new file mode 100644
index 0000000..b998fc2
--- /dev/null
+++ b/pixmaps/vdd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *vdd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............      .............",
+"............          ...........",
+"..........              .........",
+".........                ........",
+"........        ...      ........",
+"........      ..   .      .......",
+"........     ...   .    . .......",
+".......         ...    ...  .....",
+".......                .     ....",
+".......               .       ...",
+".......             .......   ...",
+"......              .      .  ...",
+"......                   .... ...",
+"......                ...........",
+"......             .. ...........",
+"......           ..    ..........",
+"......          .       .........",
+"......                   ........",
+"......              ....  .......",
+"......             .    .. ......",
+".....             .       . .....",
+"....  .          .           ....",
+"...    .         .            ...",
+"...    .         .             ..",
+"...     .         .            ..",
+"....     .         .           ..",
+".................................",
+"................................."
+};
diff --git a/pixmaps/vdd49.xpm b/pixmaps/vdd49.xpm
new file mode 100644
index 0000000..8abaaba
--- /dev/null
+++ b/pixmaps/vdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *vdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".....................      ......................",
+".................             ...................",
+"...............                  ................",
+"..............                    ...............",
+".............                      ..............",
+"............                        .............",
+"...........             ....         ............",
+"...........           ..    .        ............",
+"..........          ..   ..  .        ...........",
+"..........        ...    ..  .     ..   .........",
+"..........           ..     .      .. .   .......",
+".........              .....         .      .....",
+".........                         ...        ....",
+".........                        .           ....",
+"........                        .             ...",
+"........                     ........         ...",
+"........                    ..       ....     ...",
+"........                      .          .    ...",
+"........                               ....  ....",
+"........                         ..........  ....",
+"........                        ........... .....",
+"........                       ..................",
+".......                        ..................",
+".......                       . .................",
+".......                     ..    ...............",
+".......                  ..        ..............",
+".......                             .............",
+".......                              ............",
+".......                         ...   ...........",
+".......                       ..   .   ..........",
+".......                      .      ..  .........",
+".......                     .         .  ........",
+".....  .                   .           .. .......",
+"....   .                   .             . ......",
+"...    .                  .                 .....",
+"...     .                  .                 ....",
+"...     .                  .                  ...",
+"...     .                   .                 ...",
+"....     .                  .                 ...",
+"....     .                   .                ...",
+".....                                         ...",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/vdd54.xpm b/pixmaps/vdd54.xpm
new file mode 100644
index 0000000..801f61a
--- /dev/null
+++ b/pixmaps/vdd54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *vdd54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+".......................      .........................",
+"...................             ......................",
+"..................                 ...................",
+"................                     .................",
+"...............                       ................",
+"..............           ......        ...............",
+".............           ..    ..        ..............",
+"............           ..      ..       ..............",
+"............         ...   ..   .        .............",
+"...........        .....   ..   .     ..   ...........",
+"...........            ..      .      .. .   .........",
+"..........    ..         ......         .      .......",
+"..........        ..                 ...        ......",
+"..........             ..           .            .....",
+".........       ..                 .             .....",
+".........           ..          ........         .....",
+".........     ..               ..       ....     .....",
+".........                    ..  .          .    .....",
+".........                  ..     .       ....  ......",
+".........                 .         ..........  ......",
+".........               ..         ........... .......",
+".........           ....          ....................",
+"........        ....              ....................",
+"........                           ...................",
+"........                       ..    .................",
+"........                    ..        ................",
+"........                               ...............",
+"........                 ..             ..............",
+"........                           ...   .............",
+"........                         ..   .   ............",
+"........                        .      ..  ...........",
+"........                       .         .  ..........",
+"......  .                     .           .. .........",
+".....   .                     .             . ........",
+"....    .                    .                 .......",
+"....     .                    .                 ......",
+"....     .                    .                  .....",
+"....     .                     .                  ....",
+".....     .                    .                   ...",
+".....     .                     .                  ...",
+"......     .                     .                 ...",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/vdd72.xpm b/pixmaps/vdd72.xpm
new file mode 100644
index 0000000..a379d9d
--- /dev/null
+++ b/pixmaps/vdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *vdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..............................        ..................................",
+"..........................                 .............................",
+".......................                      ...........................",
+"......................                         .........................",
+".....................                           ........................",
+"....................                             .......................",
+"...................                               ......................",
+"..................                                 .....................",
+"..................                ......            ....................",
+".................               ...    ..           ....................",
+".................              ...  ..  ..           ...................",
+"................             ...   ....  ..      ..   ..................",
+"................           ....    ....  ..     ...    .................",
+"................             ...    ..  ..      ..   .  ................",
+"...............                ...     ..           ..     .............",
+"...............                  .......           ..        ...........",
+"...............                                 ....          ..........",
+"..............                                 ...            ..........",
+"..............                                ..               .........",
+"..............                             ....                .........",
+"..............                           .........             .........",
+"..............                          ...     .......        .........",
+".............                            ..          ....      .........",
+".............                             ..             ..    .........",
+".............                              .     .   .......  ..........",
+".............                                ...............  ..........",
+".............                                ............... ...........",
+".............                                ...........................",
+".............                               ............................",
+"............                                ............................",
+"............                            ..   ...........................",
+"............                           ..    ...........................",
+"............                       ..           ........................",
+"............                     ...             .......................",
+"............                                      ......................",
+"............                                       .....................",
+"............                                        ....................",
+"............                                 ....    ...................",
+"............                              .........   ..................",
+"............                             ....    ...   .................",
+"............                            ...        ..   ................",
+"............                           ...          ...  ...............",
+"..........   .                         ..            ...  ..............",
+".........   ..                        ..               ... .............",
+"........    ..                        ..                 .  ............",
+".......      ..                      ..                      ...........",
+".......      ..                      ..                        .........",
+".......      ..                      ..                        .........",
+".......      ...                     ..                         ........",
+".......       ..                     ...                        ........",
+"........      ..                      ..                        ........",
+"........       ..                     ..                        ........",
+"........       ..                     ..                        ........",
+"..........                                                      ........",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/vdl33.xpm b/pixmaps/vdl33.xpm
new file mode 100644
index 0000000..575a626
--- /dev/null
+++ b/pixmaps/vdl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *vdl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............      .............",
+"............          ...........",
+"..........              .........",
+".........                ........",
+"........        ...      ........",
+"........      ..   .      .......",
+"........     ...   .    . .......",
+".......         ...    ...  .....",
+".......                .     ....",
+".......               .       ...",
+".......             .......   ...",
+"......              .      .  ...",
+"......                   .... ...",
+"......                ...........",
+"......             .. ...........",
+"......           ..    ..........",
+"......          .       .........",
+"......                   ........",
+"......              ....  .......",
+"......             .    .. ......",
+".....             .       . .....",
+"....  .          .           ....",
+"...    .         .            ...",
+"...    .         .             ..",
+"...     .         .            ..",
+"....     .         .           ..",
+".................................",
+"................................."
+};
diff --git a/pixmaps/vdl49.xpm b/pixmaps/vdl49.xpm
new file mode 100644
index 0000000..b6b415c
--- /dev/null
+++ b/pixmaps/vdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *vdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".....................      ......................",
+".................             ...................",
+"...............                  ................",
+"..............                    ...............",
+".............                      ..............",
+"............                        .............",
+"...........             ....         ............",
+"...........           ..    .        ............",
+"..........          ..   ..  .        ...........",
+"..........        ...    ..  .     ..   .........",
+"..........           ..     .      .. .   .......",
+".........              .....         .      .....",
+".........                         ...        ....",
+".........                        .           ....",
+"........                        .             ...",
+"........                     ........         ...",
+"........                    ..       ....     ...",
+"........                      .          .    ...",
+"........                               ....  ....",
+"........                         ..........  ....",
+"........                        ........... .....",
+"........                       ..................",
+".......                        ..................",
+".......                       . .................",
+".......                     ..    ...............",
+".......                  ..        ..............",
+".......                             .............",
+".......                              ............",
+".......                         ...   ...........",
+".......                       ..   .   ..........",
+".......                      .      ..  .........",
+".......                     .         .  ........",
+".....  .                   .           .. .......",
+"....   .                   .             . ......",
+"...    .                  .                 .....",
+"...     .                  .                 ....",
+"...     .                  .                  ...",
+"...     .                   .                 ...",
+"....     .                  .                 ...",
+"....     .                   .                ...",
+".....                                         ...",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/vdl54.xpm b/pixmaps/vdl54.xpm
new file mode 100644
index 0000000..677f25a
--- /dev/null
+++ b/pixmaps/vdl54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *vdl54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+".......................      .........................",
+"...................             ......................",
+"..................                 ...................",
+"................                     .................",
+"...............                       ................",
+"..............           ......        ...............",
+".............           ..    ..        ..............",
+"............           ..      ..       ..............",
+"............         ...   ..   .        .............",
+"...........        .....   ..   .     ..   ...........",
+"...........            ..      .      .. .   .........",
+"..........    ..         ......         .      .......",
+"..........        ..                 ...        ......",
+"..........             ..           .            .....",
+".........       ..                 .             .....",
+".........           ..          ........         .....",
+".........     ..               ..       ....     .....",
+".........                    ..  .          .    .....",
+".........                  ..     .       ....  ......",
+".........                 .         ..........  ......",
+".........               ..         ........... .......",
+".........           ....          ....................",
+"........        ....              ....................",
+"........                           ...................",
+"........                       ..    .................",
+"........                    ..        ................",
+"........                               ...............",
+"........                 ..             ..............",
+"........                           ...   .............",
+"........                         ..   .   ............",
+"........                        .      ..  ...........",
+"........                       .         .  ..........",
+"......  .                     .           .. .........",
+".....   .                     .             . ........",
+"....    .                    .                 .......",
+"....     .                    .                 ......",
+"....     .                    .                  .....",
+"....     .                     .                  ....",
+".....     .                    .                   ...",
+".....     .                     .                  ...",
+"......     .                     .                 ...",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/vdl72.xpm b/pixmaps/vdl72.xpm
new file mode 100644
index 0000000..1373726
--- /dev/null
+++ b/pixmaps/vdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *vdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..............................        ..................................",
+"..........................                 .............................",
+".......................                      ...........................",
+"......................                         .........................",
+".....................                           ........................",
+"....................                             .......................",
+"...................                               ......................",
+"..................                                 .....................",
+"..................                ......            ....................",
+".................               ...    ..           ....................",
+".................              ...  ..  ..           ...................",
+"................             ...   ....  ..      ..   ..................",
+"................           ....    ....  ..     ...    .................",
+"................             ...    ..  ..      ..   .  ................",
+"...............                ...     ..           ..     .............",
+"...............                  .......           ..        ...........",
+"...............                                 ....          ..........",
+"..............                                 ...            ..........",
+"..............                                ..               .........",
+"..............                             ....                .........",
+"..............                           .........             .........",
+"..............                          ...     .......        .........",
+".............                            ..          ....      .........",
+".............                             ..             ..    .........",
+".............                              .     .   .......  ..........",
+".............                                ...............  ..........",
+".............                                ............... ...........",
+".............                                ...........................",
+".............                               ............................",
+"............                                ............................",
+"............                            ..   ...........................",
+"............                           ..    ...........................",
+"............                       ..           ........................",
+"............                     ...             .......................",
+"............                                      ......................",
+"............                                       .....................",
+"............                                        ....................",
+"............                                 ....    ...................",
+"............                              .........   ..................",
+"............                             ....    ...   .................",
+"............                            ...        ..   ................",
+"............                           ...          ...  ...............",
+"..........   .                         ..            ...  ..............",
+".........   ..                        ..               ... .............",
+"........    ..                        ..                 .  ............",
+".......      ..                      ..                      ...........",
+".......      ..                      ..                        .........",
+".......      ..                      ..                        .........",
+".......      ...                     ..                         ........",
+".......       ..                     ...                        ........",
+"........      ..                      ..                        ........",
+"........       ..                     ..                        ........",
+"........       ..                     ..                        ........",
+"..........                                                      ........",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/vld33.xpm b/pixmaps/vld33.xpm
new file mode 100644
index 0000000..8c7151b
--- /dev/null
+++ b/pixmaps/vld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *vld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............      .............",
+"............  XXXXXX  ...........",
+"..........  XXXXXXXXXX  .........",
+"......... XXXXXXXXXXXXX  ........",
+"........ XXXXXXX   XXXXX ........",
+"........ XXXXX  X X XXXXX .......",
+"........ XXXX   X X XXXX  .......",
+"....... XXXXXXXX   XXXX     .....",
+"....... XXXXXXXXXXXXXXX XXXX ....",
+"....... XXXXXXXXXXXXXX XXXXXX ...",
+"....... XXXXXXXXXXXX        X ...",
+"...... XXXXXXXXXXXXX XXXX ..  ...",
+"...... XXXXXXXXXXXXXX    .... ...",
+"...... XXXXXXXXXXXXXX ...........",
+"...... XXXXXXXXXXXX   ...........",
+"...... XXXXXXXXXX  XXX ..........",
+"...... XXXXXXXXX XXXXXX .........",
+"...... XXXXXXXXXXXXXXXXX ........",
+"...... XXXXXXXXXXXXX    X .......",
+"...... XXXXXXXXXXXX XXXX   ......",
+".....  XXXXXXXXXXX XXXXXXX  .....",
+".... X XXXXXXXXXX XXXXXXXXXX ....",
+"... XXX XXXXXXXXX XXXXXXXXXXX ...",
+"... XXX XXXXXXXXX XXXXXXXXXXXX ..",
+".... XXX XXXXXXXXX XXXXXXXXXXX ..",
+".....                          ..",
+".................................",
+"................................."
+};
diff --git a/pixmaps/vld49.xpm b/pixmaps/vld49.xpm
new file mode 100644
index 0000000..0b24918
--- /dev/null
+++ b/pixmaps/vld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *vld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".....................      ......................",
+".................    XXXXXX   ...................",
+"...............  XXXXXXXXXXXXX   ................",
+".............. XXXXXXXXXXXXXXXXXX ...............",
+"............. XXXXXXXXXXXXXXXXXXXX ..............",
+"............ XXXXXXXXXXXXXXXXXXXXXX .............",
+"........... XXXXXXXXXXXX    XXXXXXXX ............",
+"........... XXXXXXXXXX  XXXX XXXXXXX ............",
+".......... XXXXXXXXX  XXX  XX XXXXXXX ...........",
+".......... XXXXXXX   XXXX  XX XXXXX  X  .........",
+".......... XXXXXXXXXX  XXXXX XXXXXX  X X  .......",
+"......... XXXXXXXXXXXXX     XXXXXXXXX XXXX  .....",
+"......... XXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"......... XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX ....",
+"........ XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXX ...",
+"........ XXXXXXXXXXXXXXXXXXXX        XXXXXXXX ...",
+"........ XXXXXXXXXXXXXXXXXXX  XXXXXXX     XXX ...",
+"........ XXXXXXXXXXXXXXXXXXXXX XXXXXXX   . XX ...",
+"........ XXXXXXXXXXXXXXXXXXXXXX        ....  ....",
+"........ XXXXXXXXXXXXXXXXXXXXXXX ..........  ....",
+"........ XXXXXXXXXXXXXXXXXXXXXX ........... .....",
+"........ XXXXXXXXXXXXXXXXXXXXX ..................",
+"....... XXXXXXXXXXXXXXXXXXXXXX ..................",
+"....... XXXXXXXXXXXXXXXXXXXXXX  .................",
+"....... XXXXXXXXXXXXXXXXXXXX  XX  ...............",
+"....... XXXXXXXXXXXXXXXXX  XXXXXXX ..............",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXX .............",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ............",
+"....... XXXXXXXXXXXXXXXXXXXXXXXX   XX ...........",
+"....... XXXXXXXXXXXXXXXXXXXXXX  XXX XX ..........",
+"....... XXXXXXXXXXXXXXXXXXXXX XXXXXX  X .........",
+"....... XXXXXXXXXXXXXXXXXXXX XXXXXXXXX X ........",
+".....   XXXXXXXXXXXXXXXXXXX XXXXXXXXXXX   .......",
+".... XX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX  ......",
+"... XXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX .....",
+"... XXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ....",
+"... XXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX ...",
+"... XXXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ...",
+".... XXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ...",
+".... XXXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ...",
+".....                                         ...",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/vld54.xpm b/pixmaps/vld54.xpm
new file mode 100644
index 0000000..7ad71f9
--- /dev/null
+++ b/pixmaps/vld54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *vld54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................XXXXXX..........................",
+"..................XXXXXXXXXXXXX.......................",
+".................XXXXXX      XXXXX....................",
+"...............XXXX    XXXXXX   XXXX..................",
+"..............XXXX XXXXXXXXXXXXX   XX.................",
+".............XXX  XXXXXXXXXXXXXXXXX  X................",
+"............XXX XXXXXXXXXXXXXXXXXXXXX X...............",
+"...........XXX XXXXXXXXXX      XXXXXXX ...............",
+"...........XX XXXXXXXXXX  X  X  XXXXXXX ..............",
+"..........XX XXXXXXXXXX  X XX X  XXXXXX XX............",
+"..........XX XXXXXXXX   X X  X X XXXXXXX XXX..........",
+".........XX XXXXXXX    XX X  X X XXXXX  X  XXX........",
+".........XX XXXXXXXXXXX  X XX X XXXXXX  X X  XX.......",
+".........X XXX  XXXXXXXXX      XXXXXXXXX XXXX  X......",
+"........XX XXXXXXX  XXXXXXXXXXXXXXXXX   XXXXXXX ......",
+"........XX XXXXXXXXXXXX  XXXXXXXXXXX XXXXXXXXXXX .....",
+"........X XXXXXX  XXXXXXXXXXXXXXXXX XXXXXXXXXXXX .....",
+"........X XXXXXXXXXX  XXXXXXXXXX        XXX.XXXX .....",
+"........X XXXX  XXXXXXXXXXXXXXX  XXXXXXX     XX. .....",
+"........X XXXXXXXXXXXXXXXXXXX  XX X......   . X. .....",
+"........X XXXXXXXXXXXXXXXXX  XXXXX        ...X  ......",
+"........X XXXXXXXXXXXXXXXX XXXXXX.. ..........  ......",
+".......XX XXXXXXXXXXXXXX  XXXXXXX. ........... .......",
+".......XX XXXXXXXXXX    XXXXXXXXX ....................",
+".......X XXXXXXX    XXXXXXXXXXXXX XX..................",
+".......X XXXXXXXXXXXXXXXXXXXXXXXX  XX.................",
+".......X XXXXXXXXXXXXXXXXXXXXXX  XX  X................",
+".......X XXXXXXXXXXXXXXXXXXX  XXXXXXX X...............",
+".......X XXXXXXXXXXXXXXXXXXXXXXXXXXXXX X..............",
+".......X XXXXXXXXXXXXXXXX  XXXXXXXXXXXX X.............",
+".......X XXXXXXXXXXXXXXXXXXXXXXXXXX   XX X............",
+".......X XXXXXXXXXXXXXXXXXXXXXXXX  XXX XX X...........",
+".....XXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXX  X X..........",
+"....XXXX XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXX X X.........",
+"...XXX   XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX   X........",
+"...XX XX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX  X.......",
+"...X XXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX X......",
+"...X XXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX X.....",
+".... XXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX X....",
+".... XXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX X...",
+"..... XXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX ...",
+"..... .... ..................... ................. ...",
+"......                                             ...",
+"......................................................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/vld72.xpm b/pixmaps/vld72.xpm
new file mode 100644
index 0000000..f2733a4
--- /dev/null
+++ b/pixmaps/vld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *vld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..............................        ..................................",
+"..........................                 .............................",
+".......................       XXXXXXXXX      ...........................",
+"......................    XXXXXXXXXXXXXXXXX    .........................",
+".....................   XXXXXXXXXXXXXXXXXXXXXX  ........................",
+"....................   XXXXXXXXXXXXXXXXXXXXXXXX  .......................",
+"...................   XXXXXXXXXXXXXXXXXXXXXXXXXX  ......................",
+"..................   XXXXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+"..................  XXXXXXXXXXXXXX      XXXXXXXXXX  ....................",
+".................  XXXXXXXXXXXXX    XXX  XXXXXXXXX  ....................",
+".................  XXXXXXXXXXXX   XX  XX  XXXXXXXXX  ...................",
+"................  XXXXXXXXXXX    XX    XX  XXXXXX  X  ..................",
+"................  XXXXXXXXX    XXXX    XX  XXXXX    X ..................",
+"................  XXXXXXXXXXX    XXX  XX  XXXXXX    X   ................",
+"...............  XXXXXXXXXXXXXX    XXXX  XXXXXXXX  X       .............",
+"...............  XXXXXXXXXXXXXXXX       XXXXXXXXXXX  XXX     ...........",
+"...............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXX   ..........",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXX  ..........",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXX  ..........",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXX  .........",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXX           XXXXXXXXX  .........",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXX   XXXX            XX  .........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXX        X  .........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXX               ..    .........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX         ........   .........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ................ ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ................ ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...........................",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXX  ............................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ............................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXX     ...........................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXX   X  ...........................",
+"............  XXXXXXXXXXXXXXXXXXXX   XXXXXX     ........................",
+"............  XXXXXXXXXXXXXXXXXXX   XXXXXXXXX    .......................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    XX  ...................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX         X  ..................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXX    XXXX   X  .................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXX  X  ................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXX     ...............",
+"..........    XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXX     ..............",
+".........     XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX    .............",
+"........   X  XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX   ............",
+".......   XXX  XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX  ...........",
+".......  XXXX  XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXX   .........",
+".......  XXXX  XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXX   .........",
+".......  XXXX   XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXX  ........",
+".......  XXXXX  XXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXXXXX  ........",
+"........  XXXX  XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXX  ........",
+"........  XXXXX  XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXX  ........",
+"........                                                        ........",
+"..........                                                      ........",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/vll33.xpm b/pixmaps/vll33.xpm
new file mode 100644
index 0000000..aa18df8
--- /dev/null
+++ b/pixmaps/vll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *vll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............      .............",
+"............  XXXXXX  ...........",
+"..........  XXXXXXXXXX  .........",
+"......... XXXXXXXXXXXXX  ........",
+"........ XXXXXXX   XXXXX ........",
+"........ XXXXX  X X XXXXX .......",
+"........ XXXX   X X XXXX  .......",
+"....... XXXXXXXX   XXXX     .....",
+"....... XXXXXXXXXXXXXXX XXXX ....",
+"....... XXXXXXXXXXXXXX XXXXXX ...",
+"....... XXXXXXXXXXXX        X ...",
+"...... XXXXXXXXXXXXX XXXX ..  ...",
+"...... XXXXXXXXXXXXXX    .... ...",
+"...... XXXXXXXXXXXXXX ...........",
+"...... XXXXXXXXXXXX   ...........",
+"...... XXXXXXXXXX  XXX ..........",
+"...... XXXXXXXXX XXXXXX .........",
+"...... XXXXXXXXXXXXXXXXX ........",
+"...... XXXXXXXXXXXXX    X .......",
+"...... XXXXXXXXXXXX XXXX   ......",
+".....  XXXXXXXXXXX XXXXXXX  .....",
+".... X XXXXXXXXXX XXXXXXXXXX ....",
+"... XXX XXXXXXXXX XXXXXXXXXXX ...",
+"... XXX XXXXXXXXX XXXXXXXXXXXX ..",
+".... XXX XXXXXXXXX XXXXXXXXXXX ..",
+".....                          ..",
+".................................",
+"................................."
+};
diff --git a/pixmaps/vll49.xpm b/pixmaps/vll49.xpm
new file mode 100644
index 0000000..8a0fd19
--- /dev/null
+++ b/pixmaps/vll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *vll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".....................      ......................",
+".................    XXXXXX   ...................",
+"...............  XXXXXXXXXXXXX   ................",
+".............. XXXXXXXXXXXXXXXXXX ...............",
+"............. XXXXXXXXXXXXXXXXXXXX ..............",
+"............ XXXXXXXXXXXXXXXXXXXXXX .............",
+"........... XXXXXXXXXXXX    XXXXXXXX ............",
+"........... XXXXXXXXXX  XXXX XXXXXXX ............",
+".......... XXXXXXXXX  XXX  XX XXXXXXX ...........",
+".......... XXXXXXX   XXXX  XX XXXXX  X  .........",
+".......... XXXXXXXXXX  XXXXX XXXXXX  X X  .......",
+"......... XXXXXXXXXXXXX     XXXXXXXXX XXXX  .....",
+"......... XXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"......... XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX ....",
+"........ XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXX ...",
+"........ XXXXXXXXXXXXXXXXXXXX        XXXXXXXX ...",
+"........ XXXXXXXXXXXXXXXXXXX  XXXXXXX     XXX ...",
+"........ XXXXXXXXXXXXXXXXXXXXX XXXXXXX   . XX ...",
+"........ XXXXXXXXXXXXXXXXXXXXXX        ....  ....",
+"........ XXXXXXXXXXXXXXXXXXXXXXX ..........  ....",
+"........ XXXXXXXXXXXXXXXXXXXXXX ........... .....",
+"........ XXXXXXXXXXXXXXXXXXXXX ..................",
+"....... XXXXXXXXXXXXXXXXXXXXXX ..................",
+"....... XXXXXXXXXXXXXXXXXXXXXX  .................",
+"....... XXXXXXXXXXXXXXXXXXXX  XX  ...............",
+"....... XXXXXXXXXXXXXXXXX  XXXXXXX ..............",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXX .............",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXX ............",
+"....... XXXXXXXXXXXXXXXXXXXXXXXX   XX ...........",
+"....... XXXXXXXXXXXXXXXXXXXXXX  XXX XX ..........",
+"....... XXXXXXXXXXXXXXXXXXXXX XXXXXX  X .........",
+"....... XXXXXXXXXXXXXXXXXXXX XXXXXXXXX X ........",
+".....   XXXXXXXXXXXXXXXXXXX XXXXXXXXXXX   .......",
+".... XX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX  ......",
+"... XXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX .....",
+"... XXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ....",
+"... XXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX ...",
+"... XXXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ...",
+".... XXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ...",
+".... XXXX XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ...",
+".....                                         ...",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/vll54.xpm b/pixmaps/vll54.xpm
new file mode 100644
index 0000000..d900119
--- /dev/null
+++ b/pixmaps/vll54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *vll54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................................................",
+"......................XXXXXX..........................",
+"..................XXXXXXXXXXXXX.......................",
+".................XXXXXX      XXXXX....................",
+"...............XXXX    XXXXXX   XXXX..................",
+"..............XXXX XXXXXXXXXXXXX   XX.................",
+".............XXX  XXXXXXXXXXXXXXXXX  X................",
+"............XXX XXXXXXXXXXXXXXXXXXXXX X...............",
+"...........XXX XXXXXXXXXX      XXXXXXX ...............",
+"...........XX XXXXXXXXXX  X  X  XXXXXXX ..............",
+"..........XX XXXXXXXXXX  X XX X  XXXXXX XX............",
+"..........XX XXXXXXXX   X X  X X XXXXXXX XXX..........",
+".........XX XXXXXXX    XX X  X X XXXXX  X  XXX........",
+".........XX XXXXXXXXXXX  X XX X XXXXXX  X X  XX.......",
+".........X XXX  XXXXXXXXX      XXXXXXXXX XXXX  X......",
+"........XX XXXXXXX  XXXXXXXXXXXXXXXXX   XXXXXXX ......",
+"........XX XXXXXXXXXXXX  XXXXXXXXXXX XXXXXXXXXXX .....",
+"........X XXXXXX  XXXXXXXXXXXXXXXXX XXXXXXXXXXXX .....",
+"........X XXXXXXXXXX  XXXXXXXXXX        XXX.XXXX .....",
+"........X XXXX  XXXXXXXXXXXXXXX  XXXXXXX     XX. .....",
+"........X XXXXXXXXXXXXXXXXXXX  XX X......   . X. .....",
+"........X XXXXXXXXXXXXXXXXX  XXXXX        ...X  ......",
+"........X XXXXXXXXXXXXXXXX XXXXXX.. ..........  ......",
+".......XX XXXXXXXXXXXXXX  XXXXXXX. ........... .......",
+".......XX XXXXXXXXXX    XXXXXXXXX ....................",
+".......X XXXXXXX    XXXXXXXXXXXXX XX..................",
+".......X XXXXXXXXXXXXXXXXXXXXXXXX  XX.................",
+".......X XXXXXXXXXXXXXXXXXXXXXX  XX  X................",
+".......X XXXXXXXXXXXXXXXXXXX  XXXXXXX X...............",
+".......X XXXXXXXXXXXXXXXXXXXXXXXXXXXXX X..............",
+".......X XXXXXXXXXXXXXXXX  XXXXXXXXXXXX X.............",
+".......X XXXXXXXXXXXXXXXXXXXXXXXXXX   XX X............",
+".......X XXXXXXXXXXXXXXXXXXXXXXXX  XXX XX X...........",
+".....XXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXX  X X..........",
+"....XXXX XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXX X X.........",
+"...XXX   XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX   X........",
+"...XX XX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX  X.......",
+"...X XXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX X......",
+"...X XXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX X.....",
+".... XXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX X....",
+".... XXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX X...",
+"..... XXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX ...",
+"..... .... ..................... ................. ...",
+"......                                             ...",
+"......................................................",
+"......................................................",
+"......................................................"
+};
diff --git a/pixmaps/vll72.xpm b/pixmaps/vll72.xpm
new file mode 100644
index 0000000..f5786a5
--- /dev/null
+++ b/pixmaps/vll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *vll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..............................        ..................................",
+"..........................                 .............................",
+".......................       XXXXXXXXX      ...........................",
+"......................    XXXXXXXXXXXXXXXXX    .........................",
+".....................   XXXXXXXXXXXXXXXXXXXXXX  ........................",
+"....................   XXXXXXXXXXXXXXXXXXXXXXXX  .......................",
+"...................   XXXXXXXXXXXXXXXXXXXXXXXXXX  ......................",
+"..................   XXXXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+"..................  XXXXXXXXXXXXXX      XXXXXXXXXX  ....................",
+".................  XXXXXXXXXXXXX    XXX  XXXXXXXXX  ....................",
+".................  XXXXXXXXXXXX   XX  XX  XXXXXXXXX  ...................",
+"................  XXXXXXXXXXX    XX    XX  XXXXXX  X  ..................",
+"................  XXXXXXXXX    XXXX    XX  XXXXX    X ..................",
+"................  XXXXXXXXXXX    XXX  XX  XXXXXX    X   ................",
+"...............  XXXXXXXXXXXXXX    XXXX  XXXXXXXX  X       .............",
+"...............  XXXXXXXXXXXXXXXX       XXXXXXXXXXX  XXX     ...........",
+"...............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXX   ..........",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXX  ..........",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXX  ..........",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXX  .........",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXXX           XXXXXXXXX  .........",
+"..............  XXXXXXXXXXXXXXXXXXXXXXXX   XXXX            XX  .........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXX        X  .........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXX               ..    .........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX         ........   .........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ................ ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ................ ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...........................",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXXX  ............................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ............................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXX     ...........................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXX   X  ...........................",
+"............  XXXXXXXXXXXXXXXXXXXX   XXXXXX     ........................",
+"............  XXXXXXXXXXXXXXXXXXX   XXXXXXXXX    .......................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .....................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    XX  ...................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXX         X  ..................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXX    XXXX   X  .................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXX  X  ................",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXX     ...............",
+"..........    XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXX     ..............",
+".........     XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX    .............",
+"........   X  XXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXX   ............",
+".......   XXX  XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXX  ...........",
+".......  XXXX  XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXX   .........",
+".......  XXXX  XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXX   .........",
+".......  XXXX   XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXX  ........",
+".......  XXXXX  XXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXXXXXXX  ........",
+"........  XXXX  XXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXX  ........",
+"........  XXXXX  XXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXX  ........",
+"........                                                        ........",
+"..........                                                      ........",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wdd33.xpm b/pixmaps/wdd33.xpm
new file mode 100644
index 0000000..4da3814
--- /dev/null
+++ b/pixmaps/wdd33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *wdd33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............     ..............",
+"...........            ..........",
+"..........               ........",
+"........  ..              .......",
+".......     ....           ......",
+"......          ....        .....",
+".....               ..       ....",
+".....                 ..     ....",
+".....           ...     ..    ...",
+"....           .....     .    ...",
+"....           .....      ..  ...",
+"....            ...          ....",
+"..... ...       ...          ....",
+"....     .....   .            ...",
+"....          ..              ...",
+"....            ...           ...",
+"....          ...  ...        ...",
+"....      ....        ..      ...",
+"....   ...              ...  ....",
+"....  .                   .  ....",
+".....                      . ....",
+".....                       .....",
+"......                     ......",
+"........                  .......",
+"...........            ..........",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/wdd49.xpm b/pixmaps/wdd49.xpm
new file mode 100644
index 0000000..5bc2017
--- /dev/null
+++ b/pixmaps/wdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *wdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................                ...............",
+"................                     ............",
+"...............                       ...........",
+".............                          ..........",
+"............                            .........",
+"........... ...........                  ........",
+"..........             .....              .......",
+".........                   ....          .......",
+".........                       ....       ......",
+"........                            ..     ......",
+".......                 .....         ..   ......",
+".......                .......          .  ......",
+".......                .......           . ......",
+".......                .......             ......",
+".......                .......              .....",
+".......                 .....               .....",
+".......                 .....                ....",
+".......                  ...                 ....",
+".......                  ...                 ....",
+"........ .........                           ....",
+".......           .....                      ....",
+".......                ......                ....",
+".......        ........      .....           ....",
+".......      ..                   ...        ....",
+".......    ..                        ...    .....",
+".......   .                             .   .....",
+".......  .                               . ......",
+"....... .                                  ......",
+"........                                  .......",
+".........                               .........",
+"..........                            ...........",
+".............                       .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wdd54.xpm b/pixmaps/wdd54.xpm
new file mode 100644
index 0000000..981f80b
--- /dev/null
+++ b/pixmaps/wdd54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *wdd54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"......................................................",
+"..........................  ..........................",
+"........................      ........................",
+".......................   ..   .......................",
+".......................  ....  .......................",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".....................       .....................     ",
+"...............                 .................     ",
+"..............                     ..............     ",
+"............                         ............     ",
+"...........                           ...........     ",
+"..........                             ..........     ",
+"........  ......                       ..........     ",
+".......         .........               .........     ",
+".......                  ...             ........     ",
+"......                      ...           .......     ",
+"......                         ...        .......     ",
+".....                             ...     .......     ",
+".....                   ..           ...   ......     ",
+"....                  ......            .. ......     ",
+"....                 ........              ......     ",
+"...                  ........               .....     ",
+"...                   ......                 ....     ",
+"...                   ......                 ....     ",
+"...                    ....                  ....     ",
+"...                    ....                   ...     ",
+"...                     ..                    ...     ",
+"...                     ..                    ...     ",
+"........                                      ...     ",
+"...     ......                                ...     ",
+"...           .....                            ..     ",
+"..                 ....                        ..     ",
+"..                     ....                    ..     ",
+"..                    ...  ....                ..     ",
+"..                ....         ...            ...     ",
+"..            ....                ....        ...     ",
+"...       ....                        ..      ...     ",
+"...     ..                              .     ...     ",
+"....   .                                 .   ....     ",
+"....  .                                   .  ....     ",
+"..... .                                   . .....     ",
+"..... .                                   . .....     ",
+"......                                     ......     ",
+".......                                   .......     ",
+"........                                 ........     ",
+"...........                            ..........     ",
+".................                ................     ",
+".................................................     ",
+".................................................     ",
+".................................................     "
+};
diff --git a/pixmaps/wdd72.xpm b/pixmaps/wdd72.xpm
new file mode 100644
index 0000000..73515ff
--- /dev/null
+++ b/pixmaps/wdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *wdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................                        ......................",
+".........................                            ...................",
+"........................                               .................",
+"......................                                  ................",
+".....................                                    ...............",
+"...................                                       ..............",
+"..................                                        ..............",
+"................    ..                                     .............",
+"...............    ............                             ............",
+"..............      ..................                       ...........",
+"..............               .............                   ...........",
+".............                        ..........               ..........",
+".............                            ..........           ..........",
+"............                                  ........        ..........",
+"............                                      ......      ..........",
+"...........                         ......           ....      .........",
+"...........                         ......             ....    .........",
+"..........                         ........             .....  .........",
+"..........                         ........               ...   ........",
+"..........                        ..........                ..   .......",
+"..........                        ..........                     .......",
+"..........                         ........                      .......",
+"..........                         ........                      .......",
+"..........                          ......                       .......",
+"..........                          ......                       .......",
+"..........                           ....                        .......",
+"...........                          ....                        .......",
+"...........                           ..                          ......",
+"...........      .........                                        ......",
+"...........  ...................                                  ......",
+"...........  .....       .............                            ......",
+"..........                       ...........                      ......",
+"..........                 .....................                  ......",
+"..........            ............         ........               ......",
+"..........         .........                   .......           .......",
+"..........       ......                           .......        .......",
+"..........      ....                                 .......    ........",
+"...........   ....                                       .....  ........",
+"...........  ....                                          ...  ........",
+"...........  ..                                             .  .........",
+"...........                                                    .........",
+"............                                                   .........",
+"............                                                  ..........",
+"............                                                ............",
+"..............                                            ..............",
+"................                                       .................",
+"....................                                ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wdl33.xpm b/pixmaps/wdl33.xpm
new file mode 100644
index 0000000..c210b29
--- /dev/null
+++ b/pixmaps/wdl33.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *wdl33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............     ..............",
+"...........            ..........",
+"..........               ........",
+"........  ..              .......",
+".......     ....           ......",
+"......          ....        .....",
+".....               ..       ....",
+".....                 ..     ....",
+".....           ...     ..    ...",
+"....           .....     .    ...",
+"....           .....      ..  ...",
+"....            ...          ....",
+"..... ...       ...          ....",
+"....     .....   .            ...",
+"....          ..              ...",
+"....            ...           ...",
+"....          ...  ...        ...",
+"....      ....        ..      ...",
+"....   ...              ...  ....",
+"....  .                   .  ....",
+".....                      . ....",
+".....                       .....",
+"......                     ......",
+"........                  .......",
+"...........            ..........",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/wdl49.xpm b/pixmaps/wdl49.xpm
new file mode 100644
index 0000000..80bab0d
--- /dev/null
+++ b/pixmaps/wdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *wdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................                ...............",
+"................                     ............",
+"...............                       ...........",
+".............                          ..........",
+"............                            .........",
+"........... ...........                  ........",
+"..........             .....              .......",
+".........                   ....          .......",
+".........                       ....       ......",
+"........                            ..     ......",
+".......                 .....         ..   ......",
+".......                .......          .  ......",
+".......                .......           . ......",
+".......                .......             ......",
+".......                .......              .....",
+".......                 .....               .....",
+".......                 .....                ....",
+".......                  ...                 ....",
+".......                  ...                 ....",
+"........ .........                           ....",
+".......           .....                      ....",
+".......                ......                ....",
+".......        ........      .....           ....",
+".......      ..                   ...        ....",
+".......    ..                        ...    .....",
+".......   .                             .   .....",
+".......  .                               . ......",
+"....... .                                  ......",
+"........                                  .......",
+".........                               .........",
+"..........                            ...........",
+".............                       .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wdl54.xpm b/pixmaps/wdl54.xpm
new file mode 100644
index 0000000..11e8998
--- /dev/null
+++ b/pixmaps/wdl54.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char *wdl54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"......................................................",
+"..........................  ..........................",
+"........................      ........................",
+".......................   ..   .......................",
+".......................  ....  .......................",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".....................       .....................     ",
+"...............                 .................     ",
+"..............                     ..............     ",
+"............                         ............     ",
+"...........                           ...........     ",
+"..........                             ..........     ",
+"........  ......                       ..........     ",
+".......         .........               .........     ",
+".......                  ...             ........     ",
+"......                      ...           .......     ",
+"......                         ...        .......     ",
+".....                             ...     .......     ",
+".....                   ..           ...   ......     ",
+"....                  ......            .. ......     ",
+"....                 ........              ......     ",
+"...                  ........               .....     ",
+"...                   ......                 ....     ",
+"...                   ......                 ....     ",
+"...                    ....                  ....     ",
+"...                    ....                   ...     ",
+"...                     ..                    ...     ",
+"...                     ..                    ...     ",
+"........                                      ...     ",
+"...     ......                                ...     ",
+"...           .....                            ..     ",
+"..                 ....                        ..     ",
+"..                     ....                    ..     ",
+"..                    ...  ....                ..     ",
+"..                ....         ...            ...     ",
+"..            ....                ....        ...     ",
+"...       ....                        ..      ...     ",
+"...     ..                              .     ...     ",
+"....   .                                 .   ....     ",
+"....  .                                   .  ....     ",
+"..... .                                   . .....     ",
+"..... .                                   . .....     ",
+"......                                     ......     ",
+".......                                   .......     ",
+"........                                 ........     ",
+"...........                            ..........     ",
+".................                ................     ",
+".................................................     ",
+".................................................     ",
+".................................................     "
+};
diff --git a/pixmaps/wdl72.xpm b/pixmaps/wdl72.xpm
new file mode 100644
index 0000000..585ea0c
--- /dev/null
+++ b/pixmaps/wdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *wdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................                        ......................",
+".........................                            ...................",
+"........................                               .................",
+"......................                                  ................",
+".....................                                    ...............",
+"...................                                       ..............",
+"..................                                        ..............",
+"................    ..                                     .............",
+"...............    ............                             ............",
+"..............      ..................                       ...........",
+"..............               .............                   ...........",
+".............                        ..........               ..........",
+".............                            ..........           ..........",
+"............                                  ........        ..........",
+"............                                      ......      ..........",
+"...........                         ......           ....      .........",
+"...........                         ......             ....    .........",
+"..........                         ........             .....  .........",
+"..........                         ........               ...   ........",
+"..........                        ..........                ..   .......",
+"..........                        ..........                     .......",
+"..........                         ........                      .......",
+"..........                         ........                      .......",
+"..........                          ......                       .......",
+"..........                          ......                       .......",
+"..........                           ....                        .......",
+"...........                          ....                        .......",
+"...........                           ..                          ......",
+"...........      .........                                        ......",
+"...........  ...................                                  ......",
+"...........  .....       .............                            ......",
+"..........                       ...........                      ......",
+"..........                 .....................                  ......",
+"..........            ............         ........               ......",
+"..........         .........                   .......           .......",
+"..........       ......                           .......        .......",
+"..........      ....                                 .......    ........",
+"...........   ....                                       .....  ........",
+"...........  ....                                          ...  ........",
+"...........  ..                                             .  .........",
+"...........                                                    .........",
+"............                                                   .........",
+"............                                                  ..........",
+"............                                                ............",
+"..............                                            ..............",
+"................                                       .................",
+"....................                                ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wld33.xpm b/pixmaps/wld33.xpm
new file mode 100644
index 0000000..8668730
--- /dev/null
+++ b/pixmaps/wld33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *wld33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............     ..............",
+"...........   XXXXX    ..........",
+".......... XXXXXXXXXXXX  ........",
+"........    XXXXXXXXXXXXX .......",
+"....... XXXX    XXXXXXXXXX ......",
+"...... XXXXXXXXX    XXXXXXX .....",
+"..... XXXXXXXXXXXXXX  XXXXXX ....",
+"..... XXXXXXXXXXXXXXXX  XXXX ....",
+"..... XXXXXXXXXX   XXXXX  XXX ...",
+".... XXXXXXXXXX     XXXXX XXX ...",
+".... XXXXXXXXXX     XXXXXX  X ...",
+".... XXXXXXXXXXX   XXXXXXXXX ....",
+".....    XXXXXXX   XXXXXXXXX ....",
+".... XXXX     XXX XXXXXXXXXXX ...",
+".... XXXXXXXXX  XXXXXXXXXXXXX ...",
+".... XXXXXXXXXXX   XXXXXXXXXX ...",
+".... XXXXXXXXX   XX   XXXXXXX ...",
+".... XXXXX    XXXXXXXX  XXXXX ...",
+".... XX   XXXXXXXXXXXXXX   X ....",
+".... X XXXXXXXXXXXXXXXXXXX X ....",
+"..... XXXXXXXXXXXXXXXXXXXXX  ....",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+"......  XXXXXXXXXXXXXXXXXX ......",
+"........   XXXXXXXXXXXX   .......",
+"...........            ..........",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/wld49.xpm b/pixmaps/wld49.xpm
new file mode 100644
index 0000000..7abc058
--- /dev/null
+++ b/pixmaps/wld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *wld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................  XXXXXXXXXXXX   ..............",
+"................  XXXXXXXXXXXXXXXXX  ............",
+"............... XXXXXXXXXXXXXXXXXXXXX ...........",
+".............  XXXXXXXXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"...........            XXXXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXXXXX     XXXXXXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXX    XXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXXXXXX    XXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXX ......",
+".......X XXXXXXXXXXXXXXX     XXXXXXXXX  XXX .....",
+"....... XXXXXXXXXXXXXXX       XXXXXXXXXX XX .....",
+"....... XXXXXXXXXXXXXXX       XXXXXXXXXXX X .....",
+"....... XXXXXXXXXXXXXXX       XXXXXXXXXXXX  .....",
+"....... XXXXXXXXXXXXXXX       XXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXX ....",
+"........          XXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXX        XXXXXX     XXXXXXXXXX ....",
+"....... XXXXX  XXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"....... XXX  XXXXXXXXXXXXXXXXXXXXXXXX   XXX .....",
+"....... XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX .....",
+"....... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+".......X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X......",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXX  ...........",
+".............     XXXXXXXXXXXXXXX   .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wld54.xpm b/pixmaps/wld54.xpm
new file mode 100644
index 0000000..01b4f7b
--- /dev/null
+++ b/pixmaps/wld54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *wld54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"......................................................",
+"..........................  ..........................",
+"........................      ........................",
+".......................   XX   .......................",
+".......................  XXXX  .......................",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".....................       .....................     ",
+"...............      XXXXXXX    .................     ",
+".............. XXXXXXXXXXXXXXXXX   ..............     ",
+"............  XXXXXXXXXXXXXXXXXXXXX  ............     ",
+"........... XXXXXXXXXXXXXXXXXXXXXXXXX ...........     ",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........     ",
+"........        XXXXXXXXXXXXXXXXXXXXXX ..........     ",
+"....... XXXXXXXX         XXXXXXXXXXXXXX .........     ",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXXXX ........     ",
+"...... XXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXX .......     ",
+"...... XXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXX .......     ",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXX   XXXX .......     ",
+"..... XXXXXXXXXXXXXXXXXX  XXXXXXXXXXX   XX ......     ",
+".... XXXXXXXXXXXXXXXXX      XXXXXXXXXXXX   ......     ",
+".... XXXXXXXXXXXXXXXX        XXXXXXXXXXXXX ......     ",
+"... XXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXX .....     ",
+"... XXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXX ....     ",
+"... XXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXX ....     ",
+"... XXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXX ....     ",
+"... XXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXX ...     ",
+"... XXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX ...     ",
+"... XXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX ...     ",
+"....    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...     ",
+"... XXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...     ",
+"... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXXXXXXXX ..     ",
+".. XXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXXX ..     ",
+".. XXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXX ..     ",
+".. XXXXXXXXXXXXXXXXXXX   XX    XXXXXXXXXXXXXXX ..     ",
+".. XXXXXXXXXXXXXXX    XXXXXXXXX   XXXXXXXXXXX ...     ",
+".. XXXXXXXXXXX    XXXXXXXXXXXXXXXX    XXXXXXX ...     ",
+"... XXXXX     XXXXXXXXXXXXXXXXXXXXXXXX  XXXXX ...     ",
+"... XXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXX ...     ",
+".... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X ....     ",
+".... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....     ",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....     ",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....     ",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......     ",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......     ",
+"........   XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ........     ",
+"...........      XXXXXXXXXXXXXXXX      ..........     ",
+".................                ................     ",
+".................................................     ",
+".................................................     ",
+".................................................     "
+};
diff --git a/pixmaps/wld72.xpm b/pixmaps/wld72.xpm
new file mode 100644
index 0000000..90af856
--- /dev/null
+++ b/pixmaps/wld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *wld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................        XXXXXXXX        ......................",
+".........................     XXXXXXXXXXXXXXXX       ...................",
+"........................   XXXXXXXXXXXXXXXXXXXXXX      .................",
+"......................    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .............",
+"...............                XXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXX                  XXXXXXXXXXXXXXXXXXXX   ...........",
+"..............  XXXXXXXXXXXXX             XXXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXX   ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXX  ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      XXXX  ..........",
+"...........   XXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXX    XXXX  .........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXX    XX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXX       .........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXX      ........",
+"..........  XXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXXXXXX     .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXX   ......",
+"...........  XXXX         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........                     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........       XXXXXXX             XXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"..........   XXXXXXXXXXXXXXXXXXXX           XXXXXXXXXXXXXXXXXXXX  ......",
+"..........  XXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXX   ......",
+"..........  XXXXXXXXXX            XXXXXXXXX        XXXXXXXXXXXX   ......",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXXXX       XXXXXXXXX  .......",
+"..........  XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXX   .......",
+"..........   XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XX  ........",
+"...........  X    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+"............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ............",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+"................        XXXXXXXXXXXXXXXXXXXXXXXXX      .................",
+"....................        XXXXXXXXXXXXXXXXXX      ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wldd49.xpm b/pixmaps/wldd49.xpm
new file mode 100644
index 0000000..7875fb4
--- /dev/null
+++ b/pixmaps/wldd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *wldd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................                ...............",
+"................                     ............",
+"...............                       ...........",
+".............                          ..........",
+"............                            .........",
+"........... ...........                  ........",
+"..........             .....              .......",
+".........                   ....          .......",
+".........                       ....       ......",
+"........                 ...        ..     ......",
+".......                ..   ..        ..   ......",
+".......               .       .         .  ......",
+".......               .       .          . ......",
+".......              .         .           ......",
+".......              .         .            .....",
+".......               .       .             .....",
+".......               .       .              ....",
+".......                ..   ..               ....",
+".......                  ...                 ....",
+"........ .........                           ....",
+".......           .....                      ....",
+".......                ......                ....",
+".......        ........      .....           ....",
+".......      ..                   ...        ....",
+".......    ..                        ...    .....",
+".......   .                             .   .....",
+".......  .                               . ......",
+"....... .                                  ......",
+"........                                  .......",
+".........                               .........",
+"..........                            ...........",
+".............                       .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wldd72.xpm b/pixmaps/wldd72.xpm
new file mode 100644
index 0000000..a324880
--- /dev/null
+++ b/pixmaps/wldd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *wldd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................                        ......................",
+".........................                            ...................",
+"........................                               .................",
+"......................                                  ................",
+".....................                                    ...............",
+"...................                                       ..............",
+"..................                                        ..............",
+"................   ..                                      .............",
+"...............   .............                             ............",
+"..............      ..................                       ...........",
+"..............               .............                   ...........",
+".............                        ..........               ..........",
+".............                            ..........           ..........",
+"............                                  ........        ..........",
+"............                                      ......      ..........",
+"...........                         .....            ....      .........",
+"...........                        .......             ....    .........",
+"..........                        ...   ...             .....  .........",
+"..........                       ..       ..              ...   ........",
+"..........                       ..       ..                ..   .......",
+"..........                      ..         ..                    .......",
+"..........                      ..         ..                    .......",
+"..........                      ..         ..                    .......",
+"..........                       ..       ..                     .......",
+"..........                       ..       ..                     .......",
+"..........                        ...   ...                      .......",
+"...........                        .......                       .......",
+"...........                         .....                         ......",
+"...........      .........                                        ......",
+"...........  ...................                                  ......",
+"...........  .....       .............                            ......",
+"..........                       ...........                      ......",
+"..........                 .....................                  ......",
+"..........            ............         ........               ......",
+"..........         .........                   .......           .......",
+"..........       ......                           .......        .......",
+"..........      ....                                 .......    ........",
+"...........   ....                                       .....  ........",
+"...........  ....                                          ...  ........",
+"...........  ..                                             .  .........",
+"...........                                                    .........",
+"............                                                   .........",
+"............                                                  ..........",
+"............                                                ............",
+"..............                                            ..............",
+"................                                       .................",
+"....................                                ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wldl49.xpm b/pixmaps/wldl49.xpm
new file mode 100644
index 0000000..9464070
--- /dev/null
+++ b/pixmaps/wldl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *wldl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................                ...............",
+"................                     ............",
+"...............                       ...........",
+".............                          ..........",
+"............                            .........",
+"........... ...........                  ........",
+"..........             .....              .......",
+".........                   ....          .......",
+".........                       ....       ......",
+"........                 ...        ..     ......",
+".......                ..   ..        ..   ......",
+".......               .       .         .  ......",
+".......               .       .          . ......",
+".......              .         .           ......",
+".......              .         .            .....",
+".......               .       .             .....",
+".......               .       .              ....",
+".......                ..   ..               ....",
+".......                  ...                 ....",
+"........ .........                           ....",
+".......           .....                      ....",
+".......                ......                ....",
+".......        ........      .....           ....",
+".......      ..                   ...        ....",
+".......    ..                        ...    .....",
+".......   .                             .   .....",
+".......  .                               . ......",
+"....... .                                  ......",
+"........                                  .......",
+".........                               .........",
+"..........                            ...........",
+".............                       .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wldl72.xpm b/pixmaps/wldl72.xpm
new file mode 100644
index 0000000..5bc8474
--- /dev/null
+++ b/pixmaps/wldl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *wldl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................                        ......................",
+".........................                            ...................",
+"........................                               .................",
+"......................                                  ................",
+".....................                                    ...............",
+"...................                                       ..............",
+"..................                                        ..............",
+"................   ..                                      .............",
+"...............   .............                             ............",
+"..............      ..................                       ...........",
+"..............               .............                   ...........",
+".............                        ..........               ..........",
+".............                            ..........           ..........",
+"............                                  ........        ..........",
+"............                                      ......      ..........",
+"...........                         .....            ....      .........",
+"...........                        .......             ....    .........",
+"..........                        ...   ...             .....  .........",
+"..........                       ..       ..              ...   ........",
+"..........                       ..       ..                ..   .......",
+"..........                      ..         ..                    .......",
+"..........                      ..         ..                    .......",
+"..........                      ..         ..                    .......",
+"..........                       ..       ..                     .......",
+"..........                       ..       ..                     .......",
+"..........                        ...   ...                      .......",
+"...........                        .......                       .......",
+"...........                         .....                         ......",
+"...........      .........                                        ......",
+"...........  ...................                                  ......",
+"...........  .....       .............                            ......",
+"..........                       ...........                      ......",
+"..........                 .....................                  ......",
+"..........            ............         ........               ......",
+"..........         .........                   .......           .......",
+"..........       ......                           .......        .......",
+"..........      ....                                 .......    ........",
+"...........   ....                                       .....  ........",
+"...........  ....                                          ...  ........",
+"...........  ..                                             .  .........",
+"...........                                                    .........",
+"............                                                   .........",
+"............                                                  ..........",
+"............                                                ............",
+"..............                                            ..............",
+"................                                       .................",
+"....................                                ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wll33.xpm b/pixmaps/wll33.xpm
new file mode 100644
index 0000000..bb5e105
--- /dev/null
+++ b/pixmaps/wll33.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *wll33[] = {
+/* columns rows colors chars-per-pixel */
+"33 33 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................",
+".................................",
+".................................",
+".................................",
+".................................",
+"..............     ..............",
+"...........   XXXXX    ..........",
+".......... XXXXXXXXXXXX  ........",
+"........    XXXXXXXXXXXXX .......",
+"....... XXXX    XXXXXXXXXX ......",
+"...... XXXXXXXXX    XXXXXXX .....",
+"..... XXXXXXXXXXXXXX  XXXXXX ....",
+"..... XXXXXXXXXXXXXXXX  XXXX ....",
+"..... XXXXXXXXXX   XXXXX  XXX ...",
+".... XXXXXXXXXX     XXXXX XXX ...",
+".... XXXXXXXXXX     XXXXXX  X ...",
+".... XXXXXXXXXXX   XXXXXXXXX ....",
+".....    XXXXXXX   XXXXXXXXX ....",
+".... XXXX     XXX XXXXXXXXXXX ...",
+".... XXXXXXXXX  XXXXXXXXXXXXX ...",
+".... XXXXXXXXXXX   XXXXXXXXXX ...",
+".... XXXXXXXXX   XX   XXXXXXX ...",
+".... XXXXX    XXXXXXXX  XXXXX ...",
+".... XX   XXXXXXXXXXXXXX   X ....",
+".... X XXXXXXXXXXXXXXXXXXX X ....",
+"..... XXXXXXXXXXXXXXXXXXXXX  ....",
+"..... XXXXXXXXXXXXXXXXXXXXX .....",
+"......  XXXXXXXXXXXXXXXXXX ......",
+"........   XXXXXXXXXXXX   .......",
+"...........            ..........",
+".................................",
+".................................",
+"................................."
+};
diff --git a/pixmaps/wll49.xpm b/pixmaps/wll49.xpm
new file mode 100644
index 0000000..304a7df
--- /dev/null
+++ b/pixmaps/wll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *wll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................  XXXXXXXXXXXX   ..............",
+"................  XXXXXXXXXXXXXXXXX  ............",
+"............... XXXXXXXXXXXXXXXXXXXXX ...........",
+".............  XXXXXXXXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"...........            XXXXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXXXXX     XXXXXXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXX    XXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXXXXXX    XXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXX ......",
+".......X XXXXXXXXXXXXXXX     XXXXXXXXX  XXX .....",
+"....... XXXXXXXXXXXXXXX       XXXXXXXXXX XX .....",
+"....... XXXXXXXXXXXXXXX       XXXXXXXXXXX X .....",
+"....... XXXXXXXXXXXXXXX       XXXXXXXXXXXX  .....",
+"....... XXXXXXXXXXXXXXX       XXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXX ....",
+"........          XXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXX        XXXXXX     XXXXXXXXXX ....",
+"....... XXXXX  XXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"....... XXX  XXXXXXXXXXXXXXXXXXXXXXXX   XXX .....",
+"....... XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX .....",
+"....... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+".......X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X......",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXX  ...........",
+".............     XXXXXXXXXXXXXXX   .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wll54.xpm b/pixmaps/wll54.xpm
new file mode 100644
index 0000000..8fca8fd
--- /dev/null
+++ b/pixmaps/wll54.xpm
@@ -0,0 +1,63 @@
+/* XPM */
+static char *wll54[] = {
+/* columns rows colors chars-per-pixel */
+"54 54 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"......................................................",
+"..........................  ..........................",
+"........................      ........................",
+".......................   XX   .......................",
+".......................  XXXX  .......................",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".................................................     ",
+".....................       .....................     ",
+"...............      XXXXXXX    .................     ",
+".............. XXXXXXXXXXXXXXXXX   ..............     ",
+"............  XXXXXXXXXXXXXXXXXXXXX  ............     ",
+"........... XXXXXXXXXXXXXXXXXXXXXXXXX ...........     ",
+".......... XXXXXXXXXXXXXXXXXXXXXXXXXXX ..........     ",
+"........        XXXXXXXXXXXXXXXXXXXXXX ..........     ",
+"....... XXXXXXXX         XXXXXXXXXXXXXX .........     ",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXXXX ........     ",
+"...... XXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXX .......     ",
+"...... XXXXXXXXXXXXXXXXXXXXXXXX   XXXXXXX .......     ",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXX   XXXX .......     ",
+"..... XXXXXXXXXXXXXXXXXX  XXXXXXXXXXX   XX ......     ",
+".... XXXXXXXXXXXXXXXXX      XXXXXXXXXXXX   ......     ",
+".... XXXXXXXXXXXXXXXX        XXXXXXXXXXXXX ......     ",
+"... XXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXX .....     ",
+"... XXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXX ....     ",
+"... XXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXX ....     ",
+"... XXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXX ....     ",
+"... XXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXX ...     ",
+"... XXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX ...     ",
+"... XXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXX ...     ",
+"....    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...     ",
+"... XXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...     ",
+"... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXXXXXXXX ..     ",
+".. XXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXXX ..     ",
+".. XXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXX ..     ",
+".. XXXXXXXXXXXXXXXXXXX   XX    XXXXXXXXXXXXXXX ..     ",
+".. XXXXXXXXXXXXXXX    XXXXXXXXX   XXXXXXXXXXX ...     ",
+".. XXXXXXXXXXX    XXXXXXXXXXXXXXXX    XXXXXXX ...     ",
+"... XXXXX     XXXXXXXXXXXXXXXXXXXXXXXX  XXXXX ...     ",
+"... XXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXX ...     ",
+".... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X ....     ",
+".... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ....     ",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....     ",
+"..... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....     ",
+"...... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......     ",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .......     ",
+"........   XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ........     ",
+"...........      XXXXXXXXXXXXXXXX      ..........     ",
+".................                ................     ",
+".................................................     ",
+".................................................     ",
+".................................................     "
+};
diff --git a/pixmaps/wll72.xpm b/pixmaps/wll72.xpm
new file mode 100644
index 0000000..a8ec3ec
--- /dev/null
+++ b/pixmaps/wll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *wll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................        XXXXXXXX        ......................",
+".........................     XXXXXXXXXXXXXXXX       ...................",
+"........................   XXXXXXXXXXXXXXXXXXXXXX      .................",
+"......................    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .............",
+"...............                XXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXX                  XXXXXXXXXXXXXXXXXXXX   ...........",
+"..............  XXXXXXXXXXXXX             XXXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXX   ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXX  ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      XXXX  ..........",
+"...........   XXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXX    XXXX  .........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXX    XX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXX       .........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXX      ........",
+"..........  XXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXXXXXX     .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXX   ......",
+"...........  XXXX         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........                     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........       XXXXXXX             XXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"..........   XXXXXXXXXXXXXXXXXXXX           XXXXXXXXXXXXXXXXXXXX  ......",
+"..........  XXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXX   ......",
+"..........  XXXXXXXXXX            XXXXXXXXX        XXXXXXXXXXXX   ......",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXXXX       XXXXXXXXX  .......",
+"..........  XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXX   .......",
+"..........   XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XX  ........",
+"...........  X    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+"............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ............",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+"................        XXXXXXXXXXXXXXXXXXXXXXXXX      .................",
+"....................        XXXXXXXXXXXXXXXXXX      ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wlld49.xpm b/pixmaps/wlld49.xpm
new file mode 100644
index 0000000..3aad1ce
--- /dev/null
+++ b/pixmaps/wlld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *wlld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................  XXXXXXXXXXXX  ...............",
+"................  XXXXXXXXXXXXXXXX   ............",
+"............... XXXXXXXXXXXXXXXXXXXXX ...........",
+".............  XXXXXXXXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"...........            XXXXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXXXXX     XXXXXXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXX    XXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXXXXXX    XXXXXX ......",
+"........ XXXXXXXXXXXXXXXX   XXXXXXXX  XXXX ......",
+"....... XXXXXXXXXXXXXXX  XXX  XXXXXXXX  XX ......",
+"....... XXXXXXXXXXXXXX XXXXXXX XXXXXXXXX X ......",
+"....... XXXXXXXXXXXXXX XXXXXXX XXXXXXXXXX  ......",
+"....... XXXXXXXXXXXXX XXXXXXXXX XXXXXXXXXX ......",
+"....... XXXXXXXXXXXXX XXXXXXXXX XXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXX XXXXXXX XXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXX XXXXXXX XXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX  XXX  XXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXX ....",
+"........          XXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXX        XXXXXX     XXXXXXXXXX ....",
+"....... XXXXX  XXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"....... XXX  XXXXXXXXXXXXXXXXXXXXXXXX   XXX .....",
+"....... XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX .....",
+"....... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX   ...........",
+".............     XXXXXXXXXXXXXXX   .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wlld72.xpm b/pixmaps/wlld72.xpm
new file mode 100644
index 0000000..968e5ae
--- /dev/null
+++ b/pixmaps/wlld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *wlld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................        XXXXXXXX        ......................",
+".........................     XXXXXXXXXXXXXXXX       ...................",
+"........................   XXXXXXXXXXXXXXXXXXXXXX      .................",
+"......................    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .............",
+"...............                XXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXX                  XXXXXXXXXXXXXXXXXXXX   ...........",
+"..............  XXXXXXXXXXXXX             XXXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXX   ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXX  ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      XXXX  ..........",
+"...........   XXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXX    XXXX  .........",
+"...........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXX    XX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXX   XXX   XXXXXXXXXXXXX       .........",
+"..........  XXXXXXXXXXXXXXXXXXXXX  XXXXXXX  XXXXXXXXXXXXXX      ........",
+"..........  XXXXXXXXXXXXXXXXXXXXX  XXXXXXX  XXXXXXXXXXXXXXXX     .......",
+"..........  XXXXXXXXXXXXXXXXXXXX  XXXXXXXXX  XXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXX  XXXXXXXXX  XXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXX  XXXXXXXXX  XXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX  XXXXXXX  XXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX  XXXXXXX  XXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX   XXX   XXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXXX   ......",
+"...........  XXXX         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........                     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........       XXXXXXX             XXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"..........   XXXXXXXXXXXXXXXXXXXX           XXXXXXXXXXXXXXXXXXXX  ......",
+"..........  XXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXX   ......",
+"..........  XXXXXXXXXX            XXXXXXXXX        XXXXXXXXXXXX   ......",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXXXX       XXXXXXXXX  .......",
+"..........  XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXX   .......",
+"..........   XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XX  ........",
+"...........  X    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+"............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ............",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+"................        XXXXXXXXXXXXXXXXXXXXXXXXX      .................",
+"....................        XXXXXXXXXXXXXXXXXX      ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wlll49.xpm b/pixmaps/wlll49.xpm
new file mode 100644
index 0000000..60486ee
--- /dev/null
+++ b/pixmaps/wlll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *wlll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................  XXXXXXXXXXXX  ...............",
+"................  XXXXXXXXXXXXXXXX   ............",
+"............... XXXXXXXXXXXXXXXXXXXXX ...........",
+".............  XXXXXXXXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"...........            XXXXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXXXXX     XXXXXXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXX    XXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXXXXXX    XXXXXX ......",
+"........ XXXXXXXXXXXXXXXX   XXXXXXXX  XXXX ......",
+"....... XXXXXXXXXXXXXXX  XXX  XXXXXXXX  XX ......",
+"....... XXXXXXXXXXXXXX XXXXXXX XXXXXXXXX X ......",
+"....... XXXXXXXXXXXXXX XXXXXXX XXXXXXXXXX  ......",
+"....... XXXXXXXXXXXXX XXXXXXXXX XXXXXXXXXX ......",
+"....... XXXXXXXXXXXXX XXXXXXXXX XXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXX XXXXXXX XXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXX XXXXXXX XXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX  XXX  XXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXX ....",
+"........          XXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXX        XXXXXX     XXXXXXXXXX ....",
+"....... XXXXX  XXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"....... XXX  XXXXXXXXXXXXXXXXXXXXXXXX   XXX .....",
+"....... XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX .....",
+"....... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX   ...........",
+".............     XXXXXXXXXXXXXXX   .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wlll72.xpm b/pixmaps/wlll72.xpm
new file mode 100644
index 0000000..6c6cc4e
--- /dev/null
+++ b/pixmaps/wlll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *wlll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................        XXXXXXXX        ......................",
+".........................     XXXXXXXXXXXXXXXX       ...................",
+"........................   XXXXXXXXXXXXXXXXXXXXXX      .................",
+"......................    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .............",
+"...............                XXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXX                  XXXXXXXXXXXXXXXXXXXX   ...........",
+"..............  XXXXXXXXXXXXX             XXXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXX   ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXX  ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      XXXX  ..........",
+"...........   XXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXX    XXXX  .........",
+"...........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXX    XX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXX   XXX   XXXXXXXXXXXXX       .........",
+"..........  XXXXXXXXXXXXXXXXXXXXX  XXXXXXX  XXXXXXXXXXXXXX      ........",
+"..........  XXXXXXXXXXXXXXXXXXXXX  XXXXXXX  XXXXXXXXXXXXXXXX     .......",
+"..........  XXXXXXXXXXXXXXXXXXXX  XXXXXXXXX  XXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXX  XXXXXXXXX  XXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXX  XXXXXXXXX  XXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX  XXXXXXX  XXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX  XXXXXXX  XXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX   XXX   XXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXXX   ......",
+"...........  XXXX         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........                     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........       XXXXXXX             XXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"..........   XXXXXXXXXXXXXXXXXXXX           XXXXXXXXXXXXXXXXXXXX  ......",
+"..........  XXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXX   ......",
+"..........  XXXXXXXXXX            XXXXXXXXX        XXXXXXXXXXXX   ......",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXXXX       XXXXXXXXX  .......",
+"..........  XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXX   .......",
+"..........   XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XX  ........",
+"...........  X    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+"............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ............",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+"................        XXXXXXXXXXXXXXXXXXXXXXXXX      .................",
+"....................        XXXXXXXXXXXXXXXXXX      ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wndd49.xpm b/pixmaps/wndd49.xpm
new file mode 100644
index 0000000..86756cd
--- /dev/null
+++ b/pixmaps/wndd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *wndd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................                ...............",
+"................                     ............",
+"...............                       ...........",
+".............                          ..........",
+"............                            .........",
+"........... ...........                  ........",
+"..........             .....              .......",
+".........                   ....          .......",
+".........                       ....       ......",
+"........                  ....      ..     ......",
+".......                 .......       ..   ......",
+".......                ......           .  ......",
+".......                .....             . ......",
+".......               .....                ......",
+".......               .....                 .....",
+".......               .....                 .....",
+".......                .....                 ....",
+".......                ......                ....",
+".......                 .......              ....",
+"........ .........        ....               ....",
+".......           .....                      ....",
+".......                ......                ....",
+".......        ........      .....           ....",
+".......      ..                   ...        ....",
+".......    ..                        ...    .....",
+".......   .                             .   .....",
+".......  .                               . ......",
+".......                                    ......",
+"........                                  .......",
+".........                               .........",
+"..........                            ...........",
+".............                       .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wndd72.xpm b/pixmaps/wndd72.xpm
new file mode 100644
index 0000000..9695990
--- /dev/null
+++ b/pixmaps/wndd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *wndd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................                        ......................",
+".........................                            ...................",
+"........................                               .................",
+"......................                                  ................",
+".....................                                    ...............",
+"...................                                       ..............",
+"..................                                        ..............",
+"................   ..                                      .............",
+"...............   .............                             ............",
+"..............      ..................                       ...........",
+"..............               .............                   ...........",
+".............                        ..........               ..........",
+".............                            ..........           ..........",
+"............                                  ........        ..........",
+"............                                      ......      ..........",
+"...........                           ......         ....      .........",
+"...........                         .........          ....    .........",
+"..........                         ........             .....  .........",
+"..........                        .......                 ...   ........",
+"..........                        ......                    ..   .......",
+"..........                       ......                          .......",
+"..........                       ......                          .......",
+"..........                       ......                          .......",
+"..........                       ......                          .......",
+"..........                        ......                         .......",
+"..........                        .......                        .......",
+"...........                        ........                      .......",
+"...........                         .........                     ......",
+"...........      .........            ......                      ......",
+"...........  ...................                                  ......",
+"...........  .....       .............                            ......",
+"..........                       ...........                      ......",
+"..........                 .....................                  ......",
+"..........            ............         ........               ......",
+"..........         .........                   .......           .......",
+"..........       ......                           .......        .......",
+"..........      ....                                 .......    ........",
+"...........   ....                                       .....  ........",
+"...........  ....                                          ..   ........",
+"...........  ..                                             .  .........",
+"...........                                                    .........",
+"............                                                   .........",
+"............                                                  ..........",
+"............                                                ............",
+"..............                                            ..............",
+"................                                       .................",
+"....................                                ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wndl49.xpm b/pixmaps/wndl49.xpm
new file mode 100644
index 0000000..ae37096
--- /dev/null
+++ b/pixmaps/wndl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *wndl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................                ...............",
+"................                     ............",
+"...............                       ...........",
+".............                          ..........",
+"............                            .........",
+"........... ...........                  ........",
+"..........             .....              .......",
+".........                   ....          .......",
+".........                       ....       ......",
+"........                  ....      ..     ......",
+".......                 .......       ..   ......",
+".......                ......           .  ......",
+".......                .....             . ......",
+".......               .....                ......",
+".......               .....                 .....",
+".......               .....                 .....",
+".......                .....                 ....",
+".......                ......                ....",
+".......                 .......              ....",
+"........ .........        ....               ....",
+".......           .....                      ....",
+".......                ......                ....",
+".......        ........      .....           ....",
+".......      ..                   ...        ....",
+".......    ..                        ...    .....",
+".......   .                             .   .....",
+".......  .                               . ......",
+".......                                    ......",
+"........                                  .......",
+".........                               .........",
+"..........                            ...........",
+".............                       .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wndl72.xpm b/pixmaps/wndl72.xpm
new file mode 100644
index 0000000..5e2fe29
--- /dev/null
+++ b/pixmaps/wndl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *wndl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................                        ......................",
+".........................                            ...................",
+"........................                               .................",
+"......................                                  ................",
+".....................                                    ...............",
+"...................                                       ..............",
+"..................                                        ..............",
+"................   ..                                      .............",
+"...............   .............                             ............",
+"..............      ..................                       ...........",
+"..............               .............                   ...........",
+".............                        ..........               ..........",
+".............                            ..........           ..........",
+"............                                  ........        ..........",
+"............                                      ......      ..........",
+"...........                           ......         ....      .........",
+"...........                         .........          ....    .........",
+"..........                         ........             .....  .........",
+"..........                        .......                 ...   ........",
+"..........                        ......                    ..   .......",
+"..........                       ......                          .......",
+"..........                       ......                          .......",
+"..........                       ......                          .......",
+"..........                       ......                          .......",
+"..........                        ......                         .......",
+"..........                        .......                        .......",
+"...........                        ........                      .......",
+"...........                         .........                     ......",
+"...........      .........            ......                      ......",
+"...........  ...................                                  ......",
+"...........  .....       .............                            ......",
+"..........                       ...........                      ......",
+"..........                 .....................                  ......",
+"..........            ............         ........               ......",
+"..........         .........                   .......           .......",
+"..........       ......                           .......        .......",
+"..........      ....                                 .......    ........",
+"...........   ....                                       .....  ........",
+"...........  ....                                          ..   ........",
+"...........  ..                                             .  .........",
+"...........                                                    .........",
+"............                                                   .........",
+"............                                                  ..........",
+"............                                                ............",
+"..............                                            ..............",
+"................                                       .................",
+"....................                                ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wnld49.xpm b/pixmaps/wnld49.xpm
new file mode 100644
index 0000000..6f92f14
--- /dev/null
+++ b/pixmaps/wnld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *wnld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................  XXXXXXXXXXXX  ...............",
+"................  XXXXXXXXXXXXXXXX   ............",
+"............... XXXXXXXXXXXXXXXXXXXXX ...........",
+".............  XXXXXXXXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"...........            XXXXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXXXXX     XXXXXXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXX    XXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXXXXXX    XXXXXX ......",
+"........ XXXXXXXXXXXXXXXXX    XXXXXX  XXXX ......",
+"....... XXXXXXXXXXXXXXXX       XXXXXXX  XX ......",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXX X ......",
+"....... XXXXXXXXXXXXXXX     XXXXXXXXXXXXX  ......",
+"....... XXXXXXXXXXXXXX     XXXXXXXXXXXXXXX ......",
+"....... XXXXXXXXXXXXXX     XXXXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXX     XXXXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXX       XXXXXXXXXXXXX ....",
+"........          XXXXXXXX    XXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXX        XXXXXX     XXXXXXXXXX ....",
+"....... XXXXX  XXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"....... XXX  XXXXXXXXXXXXXXXXXXXXXXXX   XXX .....",
+"....... XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX .....",
+"....... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX   ...........",
+".............     XXXXXXXXXXXXXXX   .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wnld72.xpm b/pixmaps/wnld72.xpm
new file mode 100644
index 0000000..0f1285a
--- /dev/null
+++ b/pixmaps/wnld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *wnld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................        XXXXXXXX        ......................",
+".........................     XXXXXXXXXXXXXXXX       ...................",
+"........................   XXXXXXXXXXXXXXXXXXXXXX      .................",
+"......................    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .............",
+"...............                XXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXX                  XXXXXXXXXXXXXXXXXXXX   ...........",
+"..............  XXXXXXXXXXXXX             XXXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXX   ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXX  ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      XXXX  ..........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXX    XXXX  .........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXX         XXXXXXXXXX    XX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXX       .........",
+"..........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXX      ........",
+"..........  XXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXX     .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXX         XXXXXXXXXXXXXXXXXX   ......",
+"...........  XXXX         XXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXX  ......",
+"...........                     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........       XXXXXXX             XXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"..........   XXXXXXXXXXXXXXXXXXXX           XXXXXXXXXXXXXXXXXXXX  ......",
+"..........  XXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXX   ......",
+"..........  XXXXXXXXXX            XXXXXXXXX        XXXXXXXXXXXX   ......",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXXXX       XXXXXXXXX  .......",
+"..........  XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXX   .......",
+"..........   XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XX  ........",
+"...........  X    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+"............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ............",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+"................        XXXXXXXXXXXXXXXXXXXXXXXXX      .................",
+"....................        XXXXXXXXXXXXXXXXXX      ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wnll49.xpm b/pixmaps/wnll49.xpm
new file mode 100644
index 0000000..ae3fec3
--- /dev/null
+++ b/pixmaps/wnll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *wnll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................  XXXXXXXXXXXX  ...............",
+"................  XXXXXXXXXXXXXXXX   ............",
+"............... XXXXXXXXXXXXXXXXXXXXX ...........",
+".............  XXXXXXXXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"...........            XXXXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXXXXX     XXXXXXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXX    XXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXXXXXX    XXXXXX ......",
+"........ XXXXXXXXXXXXXXXXX    XXXXXX  XXXX ......",
+"....... XXXXXXXXXXXXXXXX       XXXXXXX  XX ......",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXX X ......",
+"....... XXXXXXXXXXXXXXX     XXXXXXXXXXXXX  ......",
+"....... XXXXXXXXXXXXXX     XXXXXXXXXXXXXXX ......",
+"....... XXXXXXXXXXXXXX     XXXXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXX     XXXXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXX       XXXXXXXXXXXXX ....",
+"........          XXXXXXXX    XXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXX        XXXXXX     XXXXXXXXXX ....",
+"....... XXXXX  XXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"....... XXX  XXXXXXXXXXXXXXXXXXXXXXXX   XXX .....",
+"....... XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX .....",
+"....... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX   ...........",
+".............     XXXXXXXXXXXXXXX   .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wnll72.xpm b/pixmaps/wnll72.xpm
new file mode 100644
index 0000000..aadc2b3
--- /dev/null
+++ b/pixmaps/wnll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *wnll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................        XXXXXXXX        ......................",
+".........................     XXXXXXXXXXXXXXXX       ...................",
+"........................   XXXXXXXXXXXXXXXXXXXXXX      .................",
+"......................    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .............",
+"...............                XXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXX                  XXXXXXXXXXXXXXXXXXXX   ...........",
+"..............  XXXXXXXXXXXXX             XXXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXX   ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXX  ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      XXXX  ..........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXX    XXXX  .........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXX         XXXXXXXXXX    XX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXX       .........",
+"..........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXX      ........",
+"..........  XXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXX     .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXX         XXXXXXXXXXXXXXXXXX   ......",
+"...........  XXXX         XXXXXXXXXXXX      XXXXXXXXXXXXXXXXXXXX  ......",
+"...........                     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........       XXXXXXX             XXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"..........   XXXXXXXXXXXXXXXXXXXX           XXXXXXXXXXXXXXXXXXXX  ......",
+"..........  XXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXX   ......",
+"..........  XXXXXXXXXX            XXXXXXXXX        XXXXXXXXXXXX   ......",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXXXX       XXXXXXXXX  .......",
+"..........  XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXX   .......",
+"..........   XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XX  ........",
+"...........  X    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+"............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ............",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+"................        XXXXXXXXXXXXXXXXXXXXXXXXX      .................",
+"....................        XXXXXXXXXXXXXXXXXX      ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wpdd49.xpm b/pixmaps/wpdd49.xpm
new file mode 100644
index 0000000..d4c641c
--- /dev/null
+++ b/pixmaps/wpdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *wpdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................                ...............",
+"................                     ............",
+"...............                       ...........",
+".............                          ..........",
+"............                            .........",
+"........... ...........                  ........",
+"..........             .....              .......",
+".........                   ....          .......",
+".........                       ....       ......",
+"........                            ..     ......",
+".......                               ..   ......",
+".......                                 .  ......",
+".......                                  . ......",
+".......                                    ......",
+".......                                     .....",
+".......                                     .....",
+".......                                      ....",
+".......                                      ....",
+".......                                      ....",
+"........ .........                           ....",
+".......           .....                      ....",
+".......                ......                ....",
+".......        ........      .....           ....",
+".......      ..                   ...        ....",
+".......    ..                        ...    .....",
+".......   .                             .   .....",
+".......  .                               . ......",
+"....... .                                  ......",
+"........                                  .......",
+".........                               .........",
+"..........                            ...........",
+".............                       .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wpdd72.xpm b/pixmaps/wpdd72.xpm
new file mode 100644
index 0000000..a8c2a24
--- /dev/null
+++ b/pixmaps/wpdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *wpdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................                        ......................",
+".........................                            ...................",
+"........................                               .................",
+"......................                                  ................",
+".....................                                    ...............",
+"...................                                       ..............",
+"..................                                        ..............",
+"................    ..                                     .............",
+"...............    ............                             ............",
+"..............      ..................                       ...........",
+"..............               .............                   ...........",
+".............                        ..........               ..........",
+".............                            ..........           ..........",
+"............                                  ........        ..........",
+"............                                      ......      ..........",
+"...........                                          ....      .........",
+"...........                                            ....    .........",
+"..........                                              .....  .........",
+"..........                                                ...   ........",
+"..........                                                  ..   .......",
+"..........                                                       .......",
+"..........                                                       .......",
+"..........                                                       .......",
+"..........                                                       .......",
+"..........                                                       .......",
+"..........                                                       .......",
+"...........                                                      .......",
+"...........                                                       ......",
+"...........      .........                                        ......",
+"...........  ...................                                  ......",
+"...........  .....       .............                            ......",
+"..........                       ...........                      ......",
+"..........                 .....................                  ......",
+"..........            ............         ........               ......",
+"..........         .........                   .......           .......",
+"..........       ......                           .......        .......",
+"..........      ....                                 .......    ........",
+"...........   ....                                       .....  ........",
+"...........  ....                                          ...  ........",
+"...........  ..                                             .  .........",
+"...........                                                    .........",
+"............                                                   .........",
+"............                                                  ..........",
+"............                                                ............",
+"..............                                            ..............",
+"................                                       .................",
+"....................                                ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wpdl49.xpm b/pixmaps/wpdl49.xpm
new file mode 100644
index 0000000..f5889cd
--- /dev/null
+++ b/pixmaps/wpdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *wpdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................                ...............",
+"................                     ............",
+"...............                       ...........",
+".............                          ..........",
+"............                            .........",
+"........... ...........                  ........",
+"..........             .....              .......",
+".........                   ....          .......",
+".........                       ....       ......",
+"........                            ..     ......",
+".......                               ..   ......",
+".......                                 .  ......",
+".......                                  . ......",
+".......                                    ......",
+".......                                     .....",
+".......                                     .....",
+".......                                      ....",
+".......                                      ....",
+".......                                      ....",
+"........ .........                           ....",
+".......           .....                      ....",
+".......                ......                ....",
+".......        ........      .....           ....",
+".......      ..                   ...        ....",
+".......    ..                        ...    .....",
+".......   .                             .   .....",
+".......  .                               . ......",
+"....... .                                  ......",
+"........                                  .......",
+".........                               .........",
+"..........                            ...........",
+".............                       .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wpdl72.xpm b/pixmaps/wpdl72.xpm
new file mode 100644
index 0000000..4d8c5e9
--- /dev/null
+++ b/pixmaps/wpdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *wpdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................                        ......................",
+".........................                            ...................",
+"........................                               .................",
+"......................                                  ................",
+".....................                                    ...............",
+"...................                                       ..............",
+"..................                                        ..............",
+"................    ..                                     .............",
+"...............    ............                             ............",
+"..............      ..................                       ...........",
+"..............               .............                   ...........",
+".............                        ..........               ..........",
+".............                            ..........           ..........",
+"............                                  ........        ..........",
+"............                                      ......      ..........",
+"...........                                          ....      .........",
+"...........                                            ....    .........",
+"..........                                              .....  .........",
+"..........                                                ...   ........",
+"..........                                                  ..   .......",
+"..........                                                       .......",
+"..........                                                       .......",
+"..........                                                       .......",
+"..........                                                       .......",
+"..........                                                       .......",
+"..........                                                       .......",
+"...........                                                      .......",
+"...........                                                       ......",
+"...........      .........                                        ......",
+"...........  ...................                                  ......",
+"...........  .....       .............                            ......",
+"..........                       ...........                      ......",
+"..........                 .....................                  ......",
+"..........            ............         ........               ......",
+"..........         .........                   .......           .......",
+"..........       ......                           .......        .......",
+"..........      ....                                 .......    ........",
+"...........   ....                                       .....  ........",
+"...........  ....                                          ...  ........",
+"...........  ..                                             .  .........",
+"...........                                                    .........",
+"............                                                   .........",
+"............                                                  ..........",
+"............                                                ............",
+"..............                                            ..............",
+"................                                       .................",
+"....................                                ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wpld49.xpm b/pixmaps/wpld49.xpm
new file mode 100644
index 0000000..86d0ae7
--- /dev/null
+++ b/pixmaps/wpld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *wpld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................  XXXXXXXXXXXX  ...............",
+"................  XXXXXXXXXXXXXXXX   ............",
+"............... XXXXXXXXXXXXXXXXXXXXX ...........",
+".............  XXXXXXXXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"...........            XXXXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXXXXX     XXXXXXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXX    XXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXXXXXX    XXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXX ......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XX ......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X ......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"........          XXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXX        XXXXXX     XXXXXXXXXX ....",
+"....... XXXXX  XXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"....... XXX  XXXXXXXXXXXXXXXXXXXXXXXX   XXX .....",
+"....... XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX .....",
+"....... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX   ...........",
+".............     XXXXXXXXXXXXXXX   .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wpld72.xpm b/pixmaps/wpld72.xpm
new file mode 100644
index 0000000..058d842
--- /dev/null
+++ b/pixmaps/wpld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *wpld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................        XXXXXXXX        ......................",
+".........................     XXXXXXXXXXXXXXXX       ...................",
+"........................   XXXXXXXXXXXXXXXXXXXXXX      .................",
+"......................    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .............",
+"...............                XXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXX                  XXXXXXXXXXXXXXXXXXXX   ...........",
+"..............  XXXXXXXXXXXXX             XXXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXX   ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXX  ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      XXXX  ..........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    XXXX  .........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    XX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       .........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ......",
+"...........  XXXX         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........                     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........       XXXXXXX             XXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"..........   XXXXXXXXXXXXXXXXXXXX           XXXXXXXXXXXXXXXXXXXX  ......",
+"..........  XXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXX   ......",
+"..........  XXXXXXXXXX            XXXXXXXXX        XXXXXXXXXXXX   ......",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXXXX       XXXXXXXXX  .......",
+"..........  XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXX   .......",
+"..........   XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XX  ........",
+"...........  X    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+"............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ............",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+"................        XXXXXXXXXXXXXXXXXXXXXXXXX      .................",
+"....................        XXXXXXXXXXXXXXXXXX      ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wpll49.xpm b/pixmaps/wpll49.xpm
new file mode 100644
index 0000000..a50730a
--- /dev/null
+++ b/pixmaps/wpll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *wpll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................  XXXXXXXXXXXX  ...............",
+"................  XXXXXXXXXXXXXXXX   ............",
+"............... XXXXXXXXXXXXXXXXXXXXX ...........",
+".............  XXXXXXXXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"...........            XXXXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXXXXX     XXXXXXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXX    XXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXXXXXX    XXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXX ......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XX ......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X ......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"........          XXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXX        XXXXXX     XXXXXXXXXX ....",
+"....... XXXXX  XXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"....... XXX  XXXXXXXXXXXXXXXXXXXXXXXX   XXX .....",
+"....... XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX .....",
+"....... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX   ...........",
+".............     XXXXXXXXXXXXXXX   .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wpll72.xpm b/pixmaps/wpll72.xpm
new file mode 100644
index 0000000..49a627f
--- /dev/null
+++ b/pixmaps/wpll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *wpll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................        XXXXXXXX        ......................",
+".........................     XXXXXXXXXXXXXXXX       ...................",
+"........................   XXXXXXXXXXXXXXXXXXXXXX      .................",
+"......................    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .............",
+"...............                XXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXX                  XXXXXXXXXXXXXXXXXXXX   ...........",
+"..............  XXXXXXXXXXXXX             XXXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXX   ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXX  ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      XXXX  ..........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    XXXX  .........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    XX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       .........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ......",
+"...........  XXXX         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........                     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........       XXXXXXX             XXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"..........   XXXXXXXXXXXXXXXXXXXX           XXXXXXXXXXXXXXXXXXXX  ......",
+"..........  XXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXX   ......",
+"..........  XXXXXXXXXX            XXXXXXXXX        XXXXXXXXXXXX   ......",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXXXX       XXXXXXXXX  .......",
+"..........  XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXX   .......",
+"..........   XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XX  ........",
+"...........  X    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+"............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ............",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+"................        XXXXXXXXXXXXXXXXXXXXXXXXX      .................",
+"....................        XXXXXXXXXXXXXXXXXX      ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wsdd49.xpm b/pixmaps/wsdd49.xpm
new file mode 100644
index 0000000..b9ea823
--- /dev/null
+++ b/pixmaps/wsdd49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *wsdd49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................                ...............",
+"................                     ............",
+"...............                       ...........",
+".............                          ..........",
+"............                            .........",
+"........... ...........                  ........",
+"..........             .....              .......",
+".........                   ....          .......",
+".........                 .     ....       ......",
+"........                  .         ..     ......",
+".......                  ...          ..   ......",
+".......                  ...            .  ......",
+".......             ............         . ......",
+".......              ..........            ......",
+".......                ......               .....",
+".......                ......               .....",
+".......                ......                ....",
+".......               ...  ...               ....",
+".......               .      .               ....",
+"........ .........                           ....",
+".......           .....                      ....",
+".......                ......                ....",
+".......        ........      .....           ....",
+".......      ..                   ...        ....",
+".......    ..                        ...    .....",
+".......   .                             .   .....",
+".......  .                               . ......",
+"....... .                                  ......",
+"........                                  .......",
+".........                               .........",
+"..........                            ...........",
+".............                       .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wsdd72.xpm b/pixmaps/wsdd72.xpm
new file mode 100644
index 0000000..29431a8
--- /dev/null
+++ b/pixmaps/wsdd72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *wsdd72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c green s dark_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................                        ......................",
+".........................                            ...................",
+"........................                               .................",
+"......................                                  ................",
+".....................                                    ...............",
+"...................                                       ..............",
+"..................                                        ..............",
+"................   ..                                      .............",
+"...............   .............                             ............",
+"..............      ..................                       ...........",
+"..............               .............                   ...........",
+".............                        ..........               ..........",
+".............                            ..........           ..........",
+"............                                  ........        ..........",
+"............                         .            ......      ..........",
+"...........                          .               ....      .........",
+"...........                         ...                ....    .........",
+"..........                          ...                 .....  .........",
+"..........                         .....                  ...   ........",
+"..........                    ...............               ..   .......",
+"..........                     ............                      .......",
+"..........                       .........                       .......",
+"..........                        .......                        .......",
+"..........                        .......                        .......",
+"..........                       .........                       .......",
+"..........                       ...   ...                       .......",
+"...........                     ...     ...                      .......",
+"...........                     .         .                       ......",
+"...........      .........                                        ......",
+"...........  ...................                                  ......",
+"...........  .....       .............                            ......",
+"..........                       ...........                      ......",
+"..........                 .....................                  ......",
+"..........            ............         ........               ......",
+"..........         .........                   .......           .......",
+"..........       ......                           .......        .......",
+"..........      ....                                 .......    ........",
+"...........   ....                                       .....  ........",
+"...........  ....                                          ...  ........",
+"...........  ..                                             .  .........",
+"...........                                                    .........",
+"............                                                   .........",
+"............                                                  ..........",
+"............                                                ............",
+"..............                                            ..............",
+"................                                       .................",
+"....................                                ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wsdl49.xpm b/pixmaps/wsdl49.xpm
new file mode 100644
index 0000000..6bf4b24
--- /dev/null
+++ b/pixmaps/wsdl49.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *wsdl49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................                ...............",
+"................                     ............",
+"...............                       ...........",
+".............                          ..........",
+"............                            .........",
+"........... ...........                  ........",
+"..........             .....              .......",
+".........                   ....          .......",
+".........                 .     ....       ......",
+"........                  .         ..     ......",
+".......                  ...          ..   ......",
+".......                  ...            .  ......",
+".......             ............         . ......",
+".......              ..........            ......",
+".......                ......               .....",
+".......                ......               .....",
+".......                ......                ....",
+".......               ...  ...               ....",
+".......               .      .               ....",
+"........ .........                           ....",
+".......           .....                      ....",
+".......                ......                ....",
+".......        ........      .....           ....",
+".......      ..                   ...        ....",
+".......    ..                        ...    .....",
+".......   .                             .   .....",
+".......  .                               . ......",
+"....... .                                  ......",
+"........                                  .......",
+".........                               .........",
+"..........                            ...........",
+".............                       .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wsdl72.xpm b/pixmaps/wsdl72.xpm
new file mode 100644
index 0000000..fceed2a
--- /dev/null
+++ b/pixmaps/wsdl72.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char *wsdl72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 2 1",
+"  c black s dark_piece",
+". c gray s light_square",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................                        ......................",
+".........................                            ...................",
+"........................                               .................",
+"......................                                  ................",
+".....................                                    ...............",
+"...................                                       ..............",
+"..................                                        ..............",
+"................   ..                                      .............",
+"...............   .............                             ............",
+"..............      ..................                       ...........",
+"..............               .............                   ...........",
+".............                        ..........               ..........",
+".............                            ..........           ..........",
+"............                                  ........        ..........",
+"............                         .            ......      ..........",
+"...........                          .               ....      .........",
+"...........                         ...                ....    .........",
+"..........                          ...                 .....  .........",
+"..........                         .....                  ...   ........",
+"..........                    ...............               ..   .......",
+"..........                     ............                      .......",
+"..........                       .........                       .......",
+"..........                        .......                        .......",
+"..........                        .......                        .......",
+"..........                       .........                       .......",
+"..........                       ...   ...                       .......",
+"...........                     ...     ...                      .......",
+"...........                     .         .                       ......",
+"...........      .........                                        ......",
+"...........  ...................                                  ......",
+"...........  .....       .............                            ......",
+"..........                       ...........                      ......",
+"..........                 .....................                  ......",
+"..........            ............         ........               ......",
+"..........         .........                   .......           .......",
+"..........       ......                           .......        .......",
+"..........      ....                                 .......    ........",
+"...........   ....                                       .....  ........",
+"...........  ....                                          ...  ........",
+"...........  ..                                             .  .........",
+"...........                                                    .........",
+"............                                                   .........",
+"............                                                  ..........",
+"............                                                ............",
+"..............                                            ..............",
+"................                                       .................",
+"....................                                ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wsld49.xpm b/pixmaps/wsld49.xpm
new file mode 100644
index 0000000..a18383f
--- /dev/null
+++ b/pixmaps/wsld49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *wsld49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................  XXXXXXXXXXXX  ...............",
+"................  XXXXXXXXXXXXXXXX   ............",
+"............... XXXXXXXXXXXXXXXXXXXXX ...........",
+".............  XXXXXXXXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"...........            XXXXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXXXXX     XXXXXXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXX    XXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXX XXXXX    XXXXXX ......",
+"........ XXXXXXXXXXXXXXXXX XXXXXXXXX  XXXX ......",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXX  XX ......",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXXXX X ......",
+"....... XXXXXXXXXXXX            XXXXXXXXX  ......",
+"....... XXXXXXXXXXXXX          XXXXXXXXXXX ......",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXX   XX   XXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXX XXXXXX XXXXXXXXXXXXXX ....",
+"........          XXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXX        XXXXXX     XXXXXXXXXX ....",
+"....... XXXXX  XXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"....... XXX  XXXXXXXXXXXXXXXXXXXXXXXX   XXX .....",
+"....... XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX .....",
+"....... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX   ...........",
+".............     XXXXXXXXXXXXXXX   .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wsld72.xpm b/pixmaps/wsld72.xpm
new file mode 100644
index 0000000..1228af5
--- /dev/null
+++ b/pixmaps/wsld72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *wsld72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c green s dark_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................        XXXXXXXX        ......................",
+".........................     XXXXXXXXXXXXXXXX       ...................",
+"........................   XXXXXXXXXXXXXXXXXXXXXX      .................",
+"......................    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .............",
+"...............                XXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXX                  XXXXXXXXXXXXXXXXXXXX   ...........",
+"..............  XXXXXXXXXXXXX             XXXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXX   ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXX  ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXX      XXXX  ..........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX    XXXX  .........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXX    XX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXX       .........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXX      ........",
+"..........  XXXXXXXXXXXXXXXXXX               XXXXXXXXXXXXXXX     .......",
+"..........  XXXXXXXXXXXXXXXXXXX            XXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX         XXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX         XXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX   XXX   XXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXX   XXXXX   XXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXX XXXXXXXXX XXXXXXXXXXXXXXXXXXXX   ......",
+"...........  XXXX         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........                     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........       XXXXXXX             XXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"..........   XXXXXXXXXXXXXXXXXXXX           XXXXXXXXXXXXXXXXXXXX  ......",
+"..........  XXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXX   ......",
+"..........  XXXXXXXXXX            XXXXXXXXX        XXXXXXXXXXXX   ......",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXXXX       XXXXXXXXX  .......",
+"..........  XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXX   .......",
+"..........   XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XX  ........",
+"...........  X    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+"............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ............",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+"................        XXXXXXXXXXXXXXXXXXXXXXXXX      .................",
+"....................        XXXXXXXXXXXXXXXXXX      ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/pixmaps/wsll49.xpm b/pixmaps/wsll49.xpm
new file mode 100644
index 0000000..473d374
--- /dev/null
+++ b/pixmaps/wsll49.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char *wsll49[] = {
+/* columns rows colors chars-per-pixel */
+"49 49 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+".................................................",
+"....................            .................",
+"..................  XXXXXXXXXXXX  ...............",
+"................  XXXXXXXXXXXXXXXX   ............",
+"............... XXXXXXXXXXXXXXXXXXXXX ...........",
+".............  XXXXXXXXXXXXXXXXXXXXXXX ..........",
+"............ XXXXXXXXXXXXXXXXXXXXXXXXXX .........",
+"...........            XXXXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXXXXX     XXXXXXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXXXX    XXXXXXXXX .......",
+"......... XXXXXXXXXXXXXXXX XXXXX    XXXXXX ......",
+"........ XXXXXXXXXXXXXXXXX XXXXXXXXX  XXXX ......",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXX  XX ......",
+"....... XXXXXXXXXXXXXXXXX   XXXXXXXXXXXX X ......",
+"....... XXXXXXXXXXXX            XXXXXXXXX  ......",
+"....... XXXXXXXXXXXXX          XXXXXXXXXXX ......",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXX .....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXX   XX   XXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXX XXXXXX XXXXXXXXXXXXXX ....",
+"........          XXXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXX     XXXXXXXXXXXXXXXXXXXXX ....",
+"....... XXXXXXXXXXXXXXX      XXXXXXXXXXXXXXX ....",
+"....... XXXXXXX        XXXXXX     XXXXXXXXXX ....",
+"....... XXXXX  XXXXXXXXXXXXXXXXXXX   XXXXXXX ....",
+"....... XXX  XXXXXXXXXXXXXXXXXXXXXXXX   XXX .....",
+"....... XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX .....",
+"....... X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+".......  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ......",
+"........ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    ......",
+"......... XXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXX   ...........",
+".............     XXXXXXXXXXXXXXX   .............",
+"..................               ................",
+".................................................",
+".................................................",
+"................................................."
+};
diff --git a/pixmaps/wsll72.xpm b/pixmaps/wsll72.xpm
new file mode 100644
index 0000000..4dfbccd
--- /dev/null
+++ b/pixmaps/wsll72.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *wsll72[] = {
+/* columns rows colors chars-per-pixel */
+"72 72 3 1",
+"  c black s dark_piece",
+". c gray s light_square",
+"X c white s light_piece",
+/* pixels */
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"..................................        ..............................",
+"............................                  ..........................",
+"..........................        XXXXXXXX        ......................",
+".........................     XXXXXXXXXXXXXXXX       ...................",
+"........................   XXXXXXXXXXXXXXXXXXXXXX      .................",
+"......................    XXXXXXXXXXXXXXXXXXXXXXXXXXX   ................",
+".....................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ...............",
+"...................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   ..............",
+"..................    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ..............",
+"................     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .............",
+"...............                XXXXXXXXXXXXXXXXXXXXXXXXXX   ............",
+"..............   XXX                  XXXXXXXXXXXXXXXXXXXX   ...........",
+"..............  XXXXXXXXXXXXX             XXXXXXXXXXXXXXXXX  ...........",
+".............   XXXXXXXXXXXXXXXXXXXXX          XXXXXXXXXXXX   ..........",
+".............  XXXXXXXXXXXXXXXXXXXXXXXXXX          XXXXXXXXX  ..........",
+"............   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXX  ..........",
+"............  XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXX      XXXX  ..........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX    XXXX  .........",
+"...........  XXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXX    XX  .........",
+"..........   XXXXXXXXXXXXXXXXXXXXXXX   XXXXXXXXXXXXXXXXX       .........",
+"..........  XXXXXXXXXXXXXXXXXXXXXXX     XXXXXXXXXXXXXXXXXX      ........",
+"..........  XXXXXXXXXXXXXXXXXX               XXXXXXXXXXXXXXX     .......",
+"..........  XXXXXXXXXXXXXXXXXXX            XXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX         XXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXXX       XXXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX         XXXXXXXXXXXXXXXXXXXXX  .......",
+"..........  XXXXXXXXXXXXXXXXXXXXX   XXX   XXXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXX   XXXXX   XXXXXXXXXXXXXXXXXXXX  .......",
+"...........  XXXXXXXXXXXXXXXXXXX XXXXXXXXX XXXXXXXXXXXXXXXXXXXX   ......",
+"...........  XXXX         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........                     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"...........       XXXXXXX             XXXXXXXXXXXXXXXXXXXXXXXXXX  ......",
+"..........   XXXXXXXXXXXXXXXXXXXX           XXXXXXXXXXXXXXXXXXXX  ......",
+"..........  XXXXXXXXXXXXXXX                     XXXXXXXXXXXXXXX   ......",
+"..........  XXXXXXXXXX            XXXXXXXXX        XXXXXXXXXXXX   ......",
+"..........  XXXXXXX         XXXXXXXXXXXXXXXXXXX       XXXXXXXXX  .......",
+"..........  XXXXX      XXXXXXXXXXXXXXXXXXXXXXXXXXX       XXXXX   .......",
+"..........   XXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       XX  ........",
+"...........  X    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ........",
+"...........      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ........",
+"...........    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   .........",
+"...........   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     .........",
+"............  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     ..........",
+"............    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      ............",
+"..............      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       ..............",
+"................        XXXXXXXXXXXXXXXXXXXXXXXXX      .................",
+"....................        XXXXXXXXXXXXXXXXXX      ....................",
+"........................                          ......................",
+"............................                   .........................",
+"........................................................................",
+"........................................................................",
+"........................................................................",
+"........................................................................"
+};
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100755
index 0000000..3a8928a
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,2 @@
+# whitespace separated list of translated languages goes below
+tr de
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100755
index 0000000..5583699
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,354 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2003 by Ulrich Drepper <drepper at gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+
+PACKAGE = @PRODUCT@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+ at SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-update
+
+.po.mo:
+	@echo "$(MSGFMT) -c -o $@ $<"; \
+	$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+	@lang=`echo $* | sed -e 's,.*/,,'`; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
+	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+	sed -e '/^#/d' $< > t-$@
+	mv t-$@ $@
+
+
+all: all- at USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+	test -z "$(CATALOGS)" || $(MAKE) $(CATALOGS)
+	@echo "touch stamp-po"
+	@echo timestamp > stamp-poT
+	@mv stamp-poT stamp-po
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+	$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	  --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
+	  --files-from=$(srcdir)/POTFILES.in \
+	  --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	  --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)'
+	test ! -f $(DOMAIN).po || { \
+	  if test -f $(srcdir)/$(DOMAIN).pot; then \
+	    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+	    sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+	    if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+	    else \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+	      mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	    fi; \
+	  else \
+	    mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	  fi; \
+	}
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+	$(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+	cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data- at USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    $(INSTALL_DATA) $(srcdir)/$$file \
+			    $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	  for file in Makevars; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+install-data-no: all
+install-data-yes: all
+	$(mkinstalldirs) $(DESTDIR)$(datadir)
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkinstalldirs) $(DESTDIR)$$dir; \
+	  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+	  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+	  echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	      rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+	    fi; \
+	  done; \
+	done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data- at USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+	else \
+	  : ; \
+	fi
+installdirs-data-no:
+installdirs-data-yes:
+	$(mkinstalldirs) $(DESTDIR)$(datadir)
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkinstalldirs) $(DESTDIR)$$dir; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	    fi; \
+	  done; \
+	done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data- at USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+uninstall-data-no:
+uninstall-data-yes:
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+	    rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	  done; \
+	done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+	rm -f remove-potcdate.sed
+	rm -f stamp-poT
+	rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+	rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+	rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+	$(MAKE) update-po
+	@$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: $(DISTFILES)
+	dists="$(DISTFILES)"; \
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  dists="$$dists Makevars.template"; \
+	fi; \
+	if test -f $(srcdir)/ChangeLog; then \
+	  dists="$$dists ChangeLog"; \
+	fi; \
+	for i in 0 1 2 3 4 5 6 7 8 9; do \
+	  if test -f $(srcdir)/ChangeLog.$$i; then \
+	    dists="$$dists ChangeLog.$$i"; \
+	  fi; \
+	done; \
+	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+	for file in $$dists; do \
+	  if test -f $$file; then \
+	    cp -p $$file $(distdir); \
+	  else \
+	    cp -p $(srcdir)/$$file $(distdir); \
+	  fi; \
+	done
+
+update-po: Makefile
+	$(MAKE) $(DOMAIN).pot-update
+	test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+	$(MAKE) update-gmo
+
+# General rule for updating PO files.
+
+.nop.po-update:
+	@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+	if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+	tmpdir=`pwd`; \
+	echo "$$lang:"; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+	cd $(srcdir); \
+	if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  else \
+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	      :; \
+	    else \
+	      echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	      exit 1; \
+	    fi; \
+	  fi; \
+	else \
+	  echo "msgmerge for $$lang.po failed!" 1>&2; \
+	  rm -f $$tmpdir/$$lang.new.po; \
+	fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+	@:
+
+Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@
+	cd $(top_builddir) \
+	  && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+	       $(SHELL) ./config.status
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100755
index 0000000..7ca6b7a
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,41 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ -cLabel
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100755
index 0000000..7de6241
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,5 @@
+xboard.c
+xedittags.c
+xgamelist.c
+xhistory.c
+backend.c
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..9db4a44
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,1335 @@
+# XBoard -- a graphical chessboard for X
+# Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
+# Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc.
+# This file is distributed under the same license as the XBoard package.
+# Arun Persaud <arun at nubati.net>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: XBoard 4.2.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2003-12-01 20:00+0200\n"
+"PO-Revision-Date: 2009-04-09 21:17-0700\n"
+"Last-Translator: Arun Persaud <arun at nubati.net>\n"
+"Language-Team: German\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: xboard.c:514
+msgid "Reset Game"
+msgstr "Spiel zurücksetzen"
+
+#: xboard.c:516
+msgid "Load Game"
+msgstr "Spiel laden"
+
+#: xboard.c:517
+msgid "Load Next Game"
+msgstr "Nächstes Spiel laden"
+
+#: xboard.c:518
+msgid "Load Previous Game"
+msgstr "Vorheriges Spiel laden"
+
+#: xboard.c:519
+msgid "Reload Same Game"
+msgstr "Spiel erneut laden"
+
+#: xboard.c:520
+msgid "Save Game"
+msgstr "Spiel speichern"
+
+#: xboard.c:522
+msgid "Copy Game"
+msgstr "Spiel kopieren"
+
+#: xboard.c:523
+msgid "Paste Game"
+msgstr "Spiel einfügen"
+
+#: xboard.c:525
+msgid "Load Position"
+msgstr "Stellung laden"
+
+#: xboard.c:526
+msgid "Load Next Position"
+msgstr "Nächste Stellung laden"
+
+#: xboard.c:527
+msgid "Load Previous Position"
+msgstr "Vorherige Stellung laden"
+
+#: xboard.c:528
+msgid "Reload Same Position"
+msgstr "Stellung erneut laden"
+
+#: xboard.c:529
+msgid "Save Position"
+msgstr "Stellung speichern"
+
+#: xboard.c:531
+msgid "Copy Position"
+msgstr "Stellung kopieren"
+
+#: xboard.c:532
+msgid "Paste Position"
+msgstr "Stellung einfügen"
+
+#: xboard.c:534
+msgid "Mail Move"
+msgstr "Verschicke Zug"
+
+#: xboard.c:535
+msgid "Reload CMail Message"
+msgstr "CMail Nachricht erneut laden"
+
+#: xboard.c:537
+msgid "Exit"
+msgstr "Beenden"
+
+#: xboard.c:542
+msgid "Machine White"
+msgstr "Computer weiß"
+
+#: xboard.c:543
+msgid "Machine Black"
+msgstr "Computer schwarz"
+
+#: xboard.c:544
+msgid "Two Machines"
+msgstr "Zwei Computer"
+
+#: xboard.c:545
+msgid "Analysis Mode"
+msgstr "Analyse-Modus"
+
+#: xboard.c:546
+msgid "Analyze File"
+msgstr "Datei analyzieren"
+
+#: xboard.c:547
+msgid "ICS Client"
+msgstr ""
+
+#: xboard.c:548
+msgid "Edit Game"
+msgstr "Spiel bearbeiten"
+
+#: xboard.c:549
+msgid "Edit Position"
+msgstr "Stellung bearbeiten"
+
+#: xboard.c:550
+msgid "Training"
+msgstr "Training"
+
+#: xboard.c:552
+msgid "Show Game List"
+msgstr "Spielliste anzeigen"
+
+#: xboard.c:553
+msgid "Show Move List"
+msgstr "Züge anzeigen"
+
+#: xboard.c:554 xedittags.c:393
+msgid "Edit Tags"
+msgstr "Markierung bearbeiten"
+
+#: xboard.c:555
+msgid "Edit Comment"
+msgstr "Kommentar bearbeiten"
+
+#: xboard.c:556
+msgid "ICS Input Box"
+msgstr "ICS Eingabefeld"
+
+#: xboard.c:557
+msgid "Pause"
+msgstr "Pause"
+
+#: xboard.c:562
+msgid "Accept"
+msgstr "Annehmen"
+
+#: xboard.c:563
+msgid "Decline"
+msgstr "Ablehnen"
+
+#: xboard.c:564
+msgid "Rematch"
+msgstr ""
+
+#: xboard.c:566
+msgid "Call Flag"
+msgstr "Zeit reklamieren"
+
+#: xboard.c:567
+msgid "Draw"
+msgstr "Remi"
+
+#: xboard.c:568
+msgid "Adjourn"
+msgstr "Aussetzen"
+
+#: xboard.c:569
+msgid "Abort"
+msgstr "Abbrechen"
+
+#: xboard.c:570
+msgid "Resign"
+msgstr "Aufgeben"
+
+#: xboard.c:572
+msgid "Stop Observing"
+msgstr "Beobachtung beenden"
+
+#: xboard.c:573
+msgid "Stop Examining"
+msgstr "Untersuchung beenden"
+
+#: xboard.c:578
+msgid "Backward"
+msgstr "Zurück"
+
+#: xboard.c:579
+msgid "Forward"
+msgstr "Vorwärts"
+
+#: xboard.c:580
+msgid "Back to Start"
+msgstr "Zurück zum Anfang"
+
+#: xboard.c:581
+msgid "Forward to End"
+msgstr "Vorwärts zum Ende"
+
+#: xboard.c:582
+msgid "Revert"
+msgstr ""
+
+#: xboard.c:583
+msgid "Truncate Game"
+msgstr ""
+
+#: xboard.c:585
+msgid "Move Now"
+msgstr "Jetzt ziehen"
+
+#: xboard.c:586
+msgid "Retract Move"
+msgstr "Zug zurücknehmen"
+
+#: xboard.c:591
+msgid "Always Queen"
+msgstr "Immer Königin"
+
+#: xboard.c:592
+msgid "Animate Dragging"
+msgstr "Ziehen animieren"
+
+#: xboard.c:593
+msgid "Animate Moving"
+msgstr "Züge animieren"
+
+#: xboard.c:594
+msgid "Auto Comment"
+msgstr ""
+
+#: xboard.c:595
+msgid "Auto Flag"
+msgstr "Zeit automatisch reklamieren"
+
+#: xboard.c:596
+msgid "Auto Flip View"
+msgstr "Brett automatisch drehen"
+
+#: xboard.c:597
+msgid "Auto Observe"
+msgstr ""
+
+#: xboard.c:598
+msgid "Auto Raise Board"
+msgstr ""
+
+#: xboard.c:599
+msgid "Auto Save"
+msgstr "Automatisch speichern"
+
+#: xboard.c:600
+msgid "Blindfold"
+msgstr ""
+
+#: xboard.c:601
+msgid "Flash Moves"
+msgstr ""
+
+#: xboard.c:602
+msgid "Flip View"
+msgstr "Brett drehen"
+
+#: xboard.c:603
+msgid "Get Move List"
+msgstr ""
+
+#: xboard.c:605
+msgid "Highlight Dragging"
+msgstr ""
+
+#: xboard.c:607
+msgid "Highlight Last Move"
+msgstr ""
+
+#: xboard.c:608
+msgid "Move Sound"
+msgstr ""
+
+#: xboard.c:609
+msgid "ICS Alarm"
+msgstr "ICS-Alarm"
+
+#: xboard.c:610
+msgid "Old Save Style"
+msgstr ""
+
+#: xboard.c:611
+msgid "Periodic Updates"
+msgstr ""
+
+#: xboard.c:612
+msgid "Ponder Next Move"
+msgstr "Nächsten Zug abwägen"
+
+#: xboard.c:613
+msgid "Popup Exit Message"
+msgstr ""
+
+#: xboard.c:614
+msgid "Popup Move Errors"
+msgstr ""
+
+#: xboard.c:615
+msgid "Premove"
+msgstr ""
+
+#: xboard.c:616
+msgid "Quiet Play"
+msgstr ""
+
+#: xboard.c:617
+msgid "Show Coords"
+msgstr "Zeige Koordinaten"
+
+#: xboard.c:618
+msgid "Show Thinking"
+msgstr ""
+
+#: xboard.c:619
+msgid "Test Legality"
+msgstr ""
+
+#: xboard.c:624
+msgid "Info XBoard"
+msgstr "Info XBoard"
+
+#: xboard.c:625
+msgid "Man XBoard"
+msgstr "Man XBoard"
+
+#: xboard.c:627
+msgid "Hint"
+msgstr "Hinweiss"
+
+#: xboard.c:628
+msgid "Book"
+msgstr "Buch"
+
+#: xboard.c:630 xboard.c:6746
+msgid "About XBoard"
+msgstr "Ãœber XBoard"
+
+#: xboard.c:635
+msgid "File"
+msgstr "Datei"
+
+#: xboard.c:636
+msgid "Mode"
+msgstr ""
+
+#: xboard.c:637
+msgid "Action"
+msgstr "Aktion"
+
+#: xboard.c:638
+msgid "Step"
+msgstr "Züge"
+
+#: xboard.c:639
+msgid "Options"
+msgstr "Optionen"
+
+#: xboard.c:640
+msgid "Help"
+msgstr "Hilfe"
+
+#. Label on pause button
+#: xboard.c:646
+msgid "P"
+msgstr "P"
+
+#: xboard.c:658 xboard.c:7440
+msgid "White"
+msgstr "Weiss"
+
+#: xboard.c:658 xboard.c:660 xboard.c:675
+msgid "Pawn"
+msgstr "Bauer"
+
+#: xboard.c:658 xboard.c:660 xboard.c:675 xboard.c:5218 xboard.c:5277
+msgid "Knight"
+msgstr "Springer"
+
+#: xboard.c:658 xboard.c:660 xboard.c:675 xboard.c:5216
+msgid "Bishop"
+msgstr "Läufer"
+
+#: xboard.c:658 xboard.c:660 xboard.c:675 xboard.c:5214
+msgid "Rook"
+msgstr "Turm"
+
+#: xboard.c:659 xboard.c:661 xboard.c:675 xboard.c:5212
+msgid "Queen"
+msgstr "Königin"
+
+#: xboard.c:659 xboard.c:661 xboard.c:5222
+msgid "King"
+msgstr "König"
+
+#: xboard.c:659 xboard.c:661
+msgid "Empty square"
+msgstr "Leeres Feld"
+
+#: xboard.c:659 xboard.c:661
+msgid "Clear board"
+msgstr ""
+
+#: xboard.c:660 xboard.c:7454
+msgid "Black"
+msgstr "Schwarz"
+
+#: xboard.c:1666
+#, c-format
+msgid "%s: Can't access XPM directory %s\n"
+msgstr "%s: XPM-Ordner nicht erreichbar %s\n"
+
+#: xboard.c:1689
+#, c-format
+msgid "Available `%s' sizes:\n"
+msgstr "Mögliche »%s« Größen:\n"
+
+#: xboard.c:1725
+#, c-format
+msgid "Error: No `%s' files!\n"
+msgstr "Fehler: Keine »%s« Datein!\n"
+
+#: xboard.c:1741
+msgid ""
+"Warning: No DIR structure found on this system --\n"
+"         Unable to autosize for XPM/XIM pieces.\n"
+"   Please report this error to frankm at hiwaay.net.\n"
+"   Include system type & operating system in message.\n"
+msgstr ""
+
+#: xboard.c:1802
+#, c-format
+msgid "%s: unrecognized color %s\n"
+msgstr "%s: nicht erkannte Farbe %s\n"
+
+#: xboard.c:1812
+#, c-format
+msgid "%s: can't parse foreground color in `%s'\n"
+msgstr ""
+
+#: xboard.c:1883
+#, c-format
+msgid "%s: unrecognized argument %s\n"
+msgstr "%s: nicht erkanntes Argument %s\n"
+
+#: xboard.c:1892
+#, c-format
+msgid "%s: can't cd to CHESSDIR: "
+msgstr "%s: cd zu CHESSDIR funktioniert nicht: "
+
+#: xboard.c:1928
+#, c-format
+msgid "%s: bad boardSize syntax %s\n"
+msgstr "%s: falsche boardSize Syntax %s\n"
+
+#: xboard.c:1964
+#, c-format
+msgid "%s: unrecognized boardSize name %s\n"
+msgstr ""
+
+#: xboard.c:1982
+#, c-format
+msgid "Error expanding path name \"%s\"\n"
+msgstr ""
+
+#: xboard.c:1987
+#, c-format
+msgid ""
+"XBoard square size (hint): %d\n"
+"%s fulldir:%s:\n"
+msgstr ""
+
+#: xboard.c:1993
+#, c-format
+msgid "Closest %s size: %d\n"
+msgstr "Nächste %s Größe: %d\n"
+
+#: xboard.c:2105
+#, c-format
+msgid "%s: too few colors available; trying monochrome mode\n"
+msgstr "%s: nicht genügend Farben vorhanden; versuche monochrom Modus\n"
+
+#: xboard.c:2110
+#, c-format
+msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
+msgstr ""
+
+#: xboard.c:2128
+#, c-format
+msgid "%s: can't parse color names; disabling colorization\n"
+msgstr ""
+
+#: xboard.c:2308 xboard.c:2318
+#, c-format
+msgid "%s: messageWidget geometry error %d %d %d %d %d\n"
+msgstr "%s: messageWidget Geometriefehler %d %d %d %d %d\n"
+
+#: xboard.c:2339
+#, c-format
+msgid "%s: titleWidget geometry error %d %d %d %d %d\n"
+msgstr "%s: titleWidget Geometriefehler %d %d %d %d %d\n"
+
+#: xboard.c:2909
+msgid "Unable to create font set.\n"
+msgstr "Nicht in der Lage Schriftsatz zu generieren.\n"
+
+#: xboard.c:2917
+#, c-format
+msgid "%s: no fonts match pattern %s\n"
+msgstr "%s: keine Schriften stimmen mit Muster %s überein\n"
+
+#: xboard.c:2960
+#, c-format
+msgid ""
+"resolved %s at pixel size %d\n"
+"  to %s\n"
+msgstr ""
+
+#: xboard.c:3084
+#, c-format
+msgid "%s: error loading XIM!\n"
+msgstr "%s: Fehler beim Laden von XIM!\n"
+
+#: xboard.c:3176
+msgid "XIM pieces cannot be used in monochrome mode"
+msgstr "XIM Figuren können nicht im Monochrom-modus benutzt werden"
+
+#: xboard.c:3180
+msgid ""
+"\n"
+"Loading XIMs...\n"
+msgstr ""
+
+#: xboard.c:3194 xboard.c:3215 xboard.c:3222 xboard.c:3313 xboard.c:3334
+#: xboard.c:3345
+#, c-format
+msgid "(File:%s:) "
+msgstr "(Datei:%s) "
+
+#: xboard.c:3210 xboard.c:3327
+msgid "light square "
+msgstr "weisses Feld "
+
+#: xboard.c:3218 xboard.c:3341
+msgid "dark square "
+msgstr "schwarze Feld "
+
+#: xboard.c:3229 xboard.c:3354
+msgid "Done.\n"
+msgstr "Fertig.\n"
+
+#: xboard.c:3271
+msgid "XPM pieces cannot be used in monochrome mode"
+msgstr "XPM Figuren können nicht im Monochrom-modus benutzt werden"
+
+#: xboard.c:3281
+#, c-format
+msgid "No builtin XPM pieces of size %d\n"
+msgstr "Keine XPM-Figuren der Größe %d vorhanden\n"
+
+#: xboard.c:3291
+#, c-format
+msgid "Error %d loading XPM image \"%s\"\n"
+msgstr "Fehler %d beim Laden von XPM-Bild »%s«\n"
+
+#: xboard.c:3302
+msgid ""
+"\n"
+"Loading XPMs...\n"
+msgstr ""
+"\n"
+"Lade XPMs…\n"
+
+#: xboard.c:3318 xboard.c:3338 xboard.c:3349
+#, c-format
+msgid "Error %d loading XPM file \"%s\"\n"
+msgstr ""
+
+#: xboard.c:3431
+#, c-format
+msgid "Can't open bitmap file %s"
+msgstr "Bitmap file %s kann nicht geöffnet werden"
+
+#: xboard.c:3434
+#, c-format
+msgid "Invalid bitmap in file %s"
+msgstr "Ungültiges Bitmap in Datei %s"
+
+#: xboard.c:3437
+#, c-format
+msgid "Ran out of memory reading bitmap file %s"
+msgstr ""
+
+#: xboard.c:3441
+#, c-format
+msgid "Unknown XReadBitmapFile error %d on file %s"
+msgstr "Unbekannter XReadBitmapFile-Fehler %d bei Datei %s"
+
+#: xboard.c:3445
+#, c-format
+msgid "%s: %s...using built-in\n"
+msgstr ""
+
+#: xboard.c:3449
+#, c-format
+msgid "%s: Bitmap %s is %dx%d, not %dx%d...using built-in\n"
+msgstr ""
+
+#: xboard.c:3456
+#, c-format
+msgid "%s: No built-in bitmap for %s; giving up\n"
+msgstr ""
+
+#: xboard.c:3652
+msgid "Drop"
+msgstr ""
+
+#: xboard.c:4573 xboard.c:4576 xboard.c:4832 xboard.c:5078 xboard.c:5087
+#: xboard.c:5340 xedittags.c:150 xedittags.c:248
+msgid "ok"
+msgstr "Ok"
+
+#: xboard.c:4587 xboard.c:4590 xboard.c:4839 xboard.c:5082 xboard.c:5088
+#: xboard.c:5127 xboard.c:5225 xboard.c:5273 xboard.c:7014 xboard.c:7055
+#: xedittags.c:157 xedittags.c:259
+msgid "cancel"
+msgstr "abbrechen"
+
+#: xboard.c:4601 xboard.c:4604 xboard.c:4841 xedittags.c:159
+msgid "clear"
+msgstr ""
+
+#: xboard.c:4614 xboard.c:4617 xboard.c:5008 xedittags.c:128 xedittags.c:282
+#: xgamelist.c:226 xgamelist.c:292
+msgid "close"
+msgstr "schließen"
+
+#: xboard.c:4628 xboard.c:4631 xboard.c:5010 xedittags.c:130 xedittags.c:293
+msgid "edit"
+msgstr ""
+
+#: xboard.c:4873
+msgid "ICS Input"
+msgstr ""
+
+#: xboard.c:5062
+msgid "File name prompt"
+msgstr ""
+
+#: xboard.c:5164 xboard.c:6864 xboard.c:6878
+msgid "Error"
+msgstr "Fehler"
+
+#: xboard.c:5164
+msgid "Can't open file"
+msgstr "Datei kann nicht geöffnet werden"
+
+#: xboard.c:5169
+msgid "Failed to open file"
+msgstr "Fehler beim Öffnen der Datei"
+
+#: xboard.c:5198
+msgid "Promotion"
+msgstr "Umwandlung"
+
+#: xboard.c:5207
+msgid "Promote pawn to what?"
+msgstr "In Was soll der Bauer umgewandelt werden?"
+
+#: xboard.c:5525 backend.c:5699
+msgid "Cannot build game list"
+msgstr ""
+
+#: xboard.c:5546
+msgid "Load game file name?"
+msgstr ""
+
+#: xboard.c:5612
+msgid "Load position file name?"
+msgstr ""
+
+#: xboard.c:5621
+msgid "Save game file name?"
+msgstr ""
+
+#: xboard.c:5632
+msgid "Save position file name?"
+msgstr ""
+
+#: xboard.c:5804
+msgid "Can't open temp file"
+msgstr ""
+
+#: xboard.c:5885 xboard.c:5903
+#, c-format
+msgid "%s does not support analysis"
+msgstr ""
+
+#: xboard.c:5913
+msgid "File to analyze"
+msgstr ""
+
+#: xboard.c:6901
+msgid "Fatal Error"
+msgstr ""
+
+#: xboard.c:6901
+msgid "Exiting"
+msgstr ""
+
+#: xboard.c:6911
+msgid "Information"
+msgstr ""
+
+#: xboard.c:6918
+msgid "Note"
+msgstr ""
+
+#: xboard.c:6968
+#, c-format
+msgid "AskQuestionProc needed 4 parameters, got %d\n"
+msgstr ""
+
+#: xboard.c:7001
+msgid "Error writing to chess program"
+msgstr ""
+
+#: xboard.c:7053
+msgid "enter"
+msgstr ""
+
+#: xboard.c:7166 backend.c:1323
+msgid "Error writing to display"
+msgstr ""
+
+#: xboard.c:7239
+#, c-format
+msgid "ERROR: Unknown user %s (in path %s)\n"
+msgstr ""
+
+#: xboard.c:7594
+msgid "Socket support is not configured in"
+msgstr ""
+
+#: xboard.c:7696
+msgid "internal rcmd not implemented for Unix"
+msgstr ""
+
+#: xboard.c:8422
+#, c-format
+msgid "AnimateMove: piece %d hops from %d,%d to %d,%d \n"
+msgstr ""
+
+#: xboard.c:8423
+#, c-format
+msgid "AnimateMove: piece %d slides from %d,%d to %d,%d \n"
+msgstr ""
+
+#: xedittags.c:346 xedittags.c:354
+msgid "Tags"
+msgstr ""
+
+#: xedittags.c:385
+msgid "Edit tags"
+msgstr ""
+
+#: xgamelist.c:193 xgamelist.c:298
+msgid "load"
+msgstr ""
+
+#: xgamelist.c:204 xgamelist.c:311
+msgid "prev"
+msgstr ""
+
+#: xgamelist.c:215 xgamelist.c:304
+msgid "next"
+msgstr ""
+
+#: xgamelist.c:301
+msgid "No game selected"
+msgstr ""
+
+#: xgamelist.c:307
+msgid "Can't go forward any further"
+msgstr ""
+
+#: xgamelist.c:314 backend.c:5833 backend.c:6292
+msgid "Can't back up any further"
+msgstr ""
+
+#: xgamelist.c:415
+msgid "There is no game list"
+msgstr ""
+
+#: xhistory.c:156
+msgid "White "
+msgstr "Weiss"
+
+#: xhistory.c:157
+msgid "Black "
+msgstr "Schwarz"
+
+#: xhistory.c:347 xhistory.c:351
+msgid "Move list"
+msgstr ""
+
+#: xhistory.c:445
+msgid "Close"
+msgstr "Schließen"
+
+#: backend.c:468
+#, c-format
+msgid "bad timeControl option %s"
+msgstr ""
+
+#: backend.c:483
+#, c-format
+msgid "bad searchTime option %s"
+msgstr ""
+
+#: backend.c:542 backend.c:552
+#, c-format
+msgid "protocol version %d not supported"
+msgstr ""
+
+#: backend.c:603
+#, c-format
+msgid "Variant %s supported only in ICS mode"
+msgstr ""
+
+#: backend.c:618
+#, c-format
+msgid "Unknown variant name %s"
+msgstr ""
+
+#: backend.c:705
+#, c-format
+msgid "Could not open comm port %s"
+msgstr ""
+
+#: backend.c:708
+#, c-format
+msgid "Could not connect to host %s, port %s"
+msgstr ""
+
+#: backend.c:753
+#, c-format
+msgid "Unknown initialMode %s"
+msgstr ""
+
+#: backend.c:761
+msgid "Can't have a match with no chess programs"
+msgstr ""
+
+#: backend.c:771
+msgid "Bad game file"
+msgstr ""
+
+#: backend.c:778
+msgid "Bad position file"
+msgstr ""
+
+#: backend.c:790
+msgid "AnalyzeFile mode requires a game file"
+msgstr ""
+
+#: backend.c:805
+msgid "Analysis mode requires a chess engine"
+msgstr ""
+
+#: backend.c:809
+msgid "Analysis mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:819
+msgid "MachineWhite mode requires a chess engine"
+msgstr ""
+
+#: backend.c:824
+msgid "MachineWhite mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:831
+msgid "MachineBlack mode requires a chess engine"
+msgstr ""
+
+#: backend.c:836
+msgid "MachineBlack mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:843
+msgid "TwoMachines mode requires a chess engine"
+msgstr ""
+
+#: backend.c:848
+msgid "TwoMachines mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:859
+msgid "Training mode requires a game file"
+msgstr ""
+
+#: backend.c:1007 backend.c:1029 backend.c:1054 backend.c:1409
+msgid "Error writing to ICS"
+msgstr ""
+
+#: backend.c:1011
+msgid "Error reading from keyboard"
+msgstr ""
+
+#: backend.c:1014
+msgid "Got end of file from keyboard"
+msgstr ""
+
+#: backend.c:1258
+#, c-format
+msgid "recognized '%s' (%d) as variant %s\n"
+msgstr ""
+
+#: backend.c:2000
+msgid "Error gathering move list: two headers"
+msgstr ""
+
+#: backend.c:2014
+#, c-format
+msgid "Ratings from header: W %d, B %d\n"
+msgstr ""
+
+#: backend.c:2047
+msgid "Error gathering move list: nested"
+msgstr ""
+
+#: backend.c:2556
+msgid "Connection closed by ICS"
+msgstr ""
+
+#: backend.c:2558
+msgid "Error reading from ICS"
+msgstr ""
+
+#: backend.c:2606
+#, c-format
+msgid "Parsing board: %s\n"
+msgstr ""
+
+#: backend.c:2618
+#, c-format
+msgid ""
+"Failed to parse board string:\n"
+"\"%s\""
+msgstr ""
+
+#: backend.c:2627 backend.c:4811
+msgid "Game too long; increase MAX_MOVES and recompile"
+msgstr ""
+
+#: backend.c:2689
+msgid "Error gathering move list: extra board"
+msgstr ""
+
+#: backend.c:2936 backend.c:2958
+#, c-format
+msgid "Couldn't parse move \"%s\" from ICS"
+msgstr ""
+
+#: backend.c:3391
+msgid "You are playing Black"
+msgstr "Sie spielen Schwarz"
+
+#: backend.c:3400 backend.c:3431
+msgid "You are playing White"
+msgstr "Sie spielen Weiß"
+
+#: backend.c:3407 backend.c:3439 backend.c:3504 backend.c:3526 backend.c:3542
+#: backend.c:7925
+msgid "It is White's turn"
+msgstr "Weiß ist am Zug"
+
+#: backend.c:3411 backend.c:3443 backend.c:3512 backend.c:3532 backend.c:3563
+#: backend.c:7917
+msgid "It is Black's turn"
+msgstr "Schwarz ist am Zug"
+
+#: backend.c:3454
+msgid "Displayed position is not current"
+msgstr ""
+
+#: backend.c:3602
+msgid "Illegal move"
+msgstr "Ungültiger Zug"
+
+#: backend.c:3636
+msgid "End of game"
+msgstr "Ende des Spiels"
+
+#: backend.c:3639
+msgid "Incorrect move"
+msgstr ""
+
+#: backend.c:3858
+#, c-format
+msgid "Illegal move \"%s\" from %s machine"
+msgstr ""
+
+#: backend.c:4099
+#, c-format
+msgid "Illegal move \"%s\" (rejected by %s chess program)"
+msgstr ""
+
+#: backend.c:4124
+#, c-format
+msgid "Failed to start %s chess program %s on %s: %s\n"
+msgstr ""
+
+#: backend.c:4147
+#, c-format
+msgid ""
+"Illegal hint move \"%s\"\n"
+"from %s chess program"
+msgstr ""
+
+#: backend.c:4322
+msgid ""
+"Machine offers a draw\n"
+"Select Action / Draw to agree"
+msgstr ""
+
+#: backend.c:4578
+#, c-format
+msgid "Ambiguous move in ICS output: \"%s\""
+msgstr ""
+
+#: backend.c:4583
+#, c-format
+msgid "Illegal move in ICS output: \"%s\""
+msgstr ""
+
+#: backend.c:4589
+msgid "Gap in move list"
+msgstr ""
+
+#: backend.c:4890
+#, c-format
+msgid "Variant %s not supported by %s"
+msgstr ""
+
+#: backend.c:5242
+#, c-format
+msgid "Match %s vs. %s: final score %d-%d-%d"
+msgstr ""
+
+#: backend.c:5628
+#, c-format
+msgid "Ambiguous move: %d.%s%s"
+msgstr ""
+
+#: backend.c:5639
+#, c-format
+msgid "Illegal move: %d.%s%s"
+msgstr ""
+
+#: backend.c:5687 backend.c:6314 backend.c:6507 backend.c:6733
+#, c-format
+msgid "Can't open \"%s\""
+msgstr ""
+
+#: backend.c:5788
+msgid "No more games in this message"
+msgstr ""
+
+#: backend.c:5829
+msgid "No game has been loaded yet"
+msgstr ""
+
+#: backend.c:5888
+msgid "Game number out of range"
+msgstr ""
+
+#: backend.c:5899
+msgid "Can't seek on game file"
+msgstr ""
+
+#: backend.c:5958
+msgid "Game not found in file"
+msgstr "Spiel in Datei nicht gefunden"
+
+#: backend.c:6075 backend.c:6404
+msgid "Bad FEN position in file"
+msgstr ""
+
+#: backend.c:6218
+msgid "No moves in game"
+msgstr "Keine Züge in dem Spiel"
+
+#: backend.c:6288
+msgid "No position has been loaded yet"
+msgstr ""
+
+#: backend.c:6355 backend.c:6366
+msgid "Can't seek on position file"
+msgstr ""
+
+#: backend.c:6373 backend.c:6395
+msgid "Position not found in file"
+msgstr ""
+
+#: backend.c:6436
+msgid "Black to play"
+msgstr "Schwarz am Zug"
+
+#: backend.c:6439
+msgid "White to play"
+msgstr "Weiß am Zug"
+
+#: backend.c:6863
+msgid ""
+"You have edited the game history.\n"
+"Use Reload Same Game and make your move again."
+msgstr ""
+
+#: backend.c:6868
+msgid ""
+"You have entered too many moves.\n"
+"Back up to the correct position and try again."
+msgstr ""
+
+#: backend.c:6873
+msgid ""
+"Displayed position is not current.\n"
+"Step forward to the correct position and try again."
+msgstr ""
+
+#: backend.c:6921
+msgid "You have not made a move yet"
+msgstr "Sie haben noch keinen Zug gemacht"
+
+#: backend.c:6942
+msgid ""
+"The cmail message is not loaded.\n"
+"Use Reload CMail Message and make your move again."
+msgstr ""
+
+#: backend.c:6947
+msgid "No unfinished games"
+msgstr ""
+
+#: backend.c:6953
+#, c-format
+msgid ""
+"You have already mailed a move.\n"
+"Wait until a move arrives from your opponent.\n"
+"To resend the same move, type\n"
+"\"cmail -remail -game %s\"\n"
+"on the command line."
+msgstr ""
+
+#: backend.c:6968
+msgid "Failed to invoke cmail"
+msgstr ""
+
+#: backend.c:7030
+msgid "Waiting for reply from opponent\n"
+msgstr ""
+
+#: backend.c:7053
+msgid "Still need to make move for game\n"
+msgstr ""
+
+#: backend.c:7058
+msgid "Still need to make moves for both games\n"
+msgstr ""
+
+#: backend.c:7063
+#, c-format
+msgid "Still need to make moves for all %d games\n"
+msgstr ""
+
+#: backend.c:7071
+#, c-format
+msgid "Still need to make a move for game %s\n"
+msgstr ""
+
+#: backend.c:7077
+msgid "No unfinished games\n"
+msgstr ""
+
+#: backend.c:7079
+msgid "Ready to send mail\n"
+msgstr ""
+
+#: backend.c:7085
+#, c-format
+msgid "Still need to make moves for games %s\n"
+msgstr ""
+
+#: backend.c:7237
+msgid "Edit comment"
+msgstr ""
+
+#: backend.c:7239
+#, c-format
+msgid "Edit comment on %d.%s%s"
+msgstr ""
+
+#: backend.c:7270 backend.c:7297
+msgid "Analysis"
+msgstr "Analyse"
+
+#: backend.c:7271 backend.c:7298
+msgid ""
+"Starting analysis mode...\n"
+"If this message stays up, your chess program does not support analysis."
+msgstr ""
+
+#: backend.c:7330
+msgid "It is not White's turn"
+msgstr "Weiß ist nicht am Zug"
+
+#: backend.c:7393
+msgid "It is not Black's turn"
+msgstr "Schwarz ist nicht am Zug"
+
+#: backend.c:7474 backend.c:8405
+msgid ""
+"Wait until your turn,\n"
+"or select Move Now"
+msgstr ""
+
+#: backend.c:7506
+msgid "Starting second chess program"
+msgstr "Starte zweites Schachprogramm"
+
+#: backend.c:7571
+msgid "Training mode off"
+msgstr "Trainier-Modus aus"
+
+#: backend.c:7579
+msgid "Training mode on"
+msgstr "Trainier-Modus ein"
+
+#: backend.c:7582
+msgid "Already at end of game"
+msgstr ""
+
+#: backend.c:7663
+msgid "Warning: You are still playing a game"
+msgstr ""
+
+#: backend.c:7666
+msgid "Warning: You are still observing a game"
+msgstr ""
+
+#: backend.c:7669
+msgid "Warning: You are still examining a game"
+msgstr ""
+
+#: backend.c:7942
+msgid "That square is occupied"
+msgstr ""
+
+#: backend.c:7966 backend.c:7992
+msgid "There is no pending offer on this move"
+msgstr ""
+
+#: backend.c:8028 backend.c:8039
+msgid "Your opponent is not out of time"
+msgstr ""
+
+#: backend.c:8074
+msgid "You must make your move before offering a draw"
+msgstr ""
+
+#: backend.c:8387
+msgid "You are not examining a game"
+msgstr ""
+
+#: backend.c:8391
+msgid "You can't revert while pausing"
+msgstr ""
+
+#: backend.c:8445 backend.c:8452
+msgid "It is your turn"
+msgstr "Sie sind am Zug"
+
+#: backend.c:8502 backend.c:8509 backend.c:8528 backend.c:8535
+msgid "Wait until your turn"
+msgstr "Warten Sie bis Sie am Zug sind"
+
+#: backend.c:8514
+msgid "No hint available"
+msgstr ""
+
+#: backend.c:8820
+#, c-format
+msgid "Error writing to %s chess program"
+msgstr ""
+
+#: backend.c:8841
+#, c-format
+msgid "Error: %s chess program (%s) exited unexpectedly"
+msgstr ""
+
+#: backend.c:8847
+#, c-format
+msgid "Error reading from %s chess program (%s)"
+msgstr ""
+
+#: backend.c:9350 backend.c:9372
+msgid "Both flags fell"
+msgstr ""
+
+#: backend.c:9352
+msgid "White's flag fell"
+msgstr ""
+
+#: backend.c:9374
+msgid "Black's flag fell"
+msgstr ""
+
+#: backend.c:9972
+msgid "Bad FEN position in clipboard"
+msgstr ""
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100755
index 0000000..2436c49
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..0384b0a
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,1333 @@
+# XBoard -- a graphical chessboard for X
+# Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
+# Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc.
+# This file is distributed under the same license as the XBoard package.
+# A. Alper Atýcý <alper_atici at yahoo.com>, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: XBoard 4.2.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2003-12-01 20:00+0200\n"
+"PO-Revision-Date: 2003-12-26 16:38+0200\n"
+"Last-Translator: A. Alper Atýcý <alper_atici at yahoo.com>\n"
+"Language-Team: Turkish <gnu-tr-u12a at lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-9\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: xboard.c:514
+msgid "Reset Game"
+msgstr "Oyunu Sýfýrla"
+
+#: xboard.c:516
+msgid "Load Game"
+msgstr "Oyun Yükle"
+
+#: xboard.c:517
+msgid "Load Next Game"
+msgstr "Sonraki Oyunu Yükle"
+
+#: xboard.c:518
+msgid "Load Previous Game"
+msgstr "Önceki Oyunu Yükle"
+
+#: xboard.c:519
+msgid "Reload Same Game"
+msgstr "Ayný Oyunu Tekrar Yükle"
+
+#: xboard.c:520
+msgid "Save Game"
+msgstr "Oyunu Kaydet"
+
+#: xboard.c:522
+msgid "Copy Game"
+msgstr "Oyunu Kopyala"
+
+#: xboard.c:523
+msgid "Paste Game"
+msgstr "Oyunu Yapýþtýr"
+
+#: xboard.c:525
+msgid "Load Position"
+msgstr "Pozisyon Yükle"
+
+#: xboard.c:526
+msgid "Load Next Position"
+msgstr "Sonraki Pozisyonu Yükle"
+
+#: xboard.c:527
+msgid "Load Previous Position"
+msgstr "Önceki Pozisyonu Yükle"
+
+#: xboard.c:528
+msgid "Reload Same Position"
+msgstr "Ayný Pozisyonu Tekrar Yükle"
+
+#: xboard.c:529
+msgid "Save Position"
+msgstr "Pozisyonu Kaydet"
+
+#: xboard.c:531
+msgid "Copy Position"
+msgstr "Pozisyonu Kopyala"
+
+#: xboard.c:532
+msgid "Paste Position"
+msgstr "Pozisyonu Yapýþtýr"
+
+#: xboard.c:534
+msgid "Mail Move"
+msgstr "Hamleyi Postala"
+
+#: xboard.c:535
+msgid "Reload CMail Message"
+msgstr "CMail Ýletisini Tekrar Yükle"
+
+#: xboard.c:537
+msgid "Exit"
+msgstr "Çýk"
+
+#: xboard.c:542
+msgid "Machine White"
+msgstr "Bilgisayar Beyaz"
+
+#: xboard.c:543
+msgid "Machine Black"
+msgstr "Bilgisayar Siyah"
+
+#: xboard.c:544
+msgid "Two Machines"
+msgstr "Ýkisi de Bilgisayar"
+
+#: xboard.c:545
+msgid "Analysis Mode"
+msgstr "Analiz Kipi"
+
+#: xboard.c:546
+msgid "Analyze File"
+msgstr "Analiz Dosyasý"
+
+#: xboard.c:547
+msgid "ICS Client"
+msgstr "ICS Ýstemcisi"
+
+#: xboard.c:548
+msgid "Edit Game"
+msgstr "Oyunu Düzenle"
+
+#: xboard.c:549
+msgid "Edit Position"
+msgstr "Pozisyonu Düzenle"
+
+#: xboard.c:550
+msgid "Training"
+msgstr "Eðitim"
+
+#: xboard.c:552
+msgid "Show Game List"
+msgstr "Oyun Listesini Göster"
+
+#: xboard.c:553
+msgid "Show Move List"
+msgstr "Hamle Listesini Göster"
+
+#: xboard.c:554 xedittags.c:393
+msgid "Edit Tags"
+msgstr ""
+
+#: xboard.c:555
+msgid "Edit Comment"
+msgstr ""
+
+#: xboard.c:556
+msgid "ICS Input Box"
+msgstr ""
+
+#: xboard.c:557
+msgid "Pause"
+msgstr "Duraklat"
+
+#: xboard.c:562
+msgid "Accept"
+msgstr "Kabul et"
+
+#: xboard.c:563
+msgid "Decline"
+msgstr "Red et"
+
+#: xboard.c:564
+msgid "Rematch"
+msgstr ""
+
+#: xboard.c:566
+msgid "Call Flag"
+msgstr "Terk et"
+
+#: xboard.c:567
+msgid "Draw"
+msgstr "Berabere"
+
+#: xboard.c:568
+msgid "Adjourn"
+msgstr "Ertele"
+
+#: xboard.c:569
+msgid "Abort"
+msgstr ""
+
+#: xboard.c:570
+msgid "Resign"
+msgstr ""
+
+#: xboard.c:572
+msgid "Stop Observing"
+msgstr ""
+
+#: xboard.c:573
+msgid "Stop Examining"
+msgstr ""
+
+#: xboard.c:578
+msgid "Backward"
+msgstr "Geri"
+
+#: xboard.c:579
+msgid "Forward"
+msgstr "Ýleri"
+
+#: xboard.c:580
+msgid "Back to Start"
+msgstr "En Baþa"
+
+#: xboard.c:581
+msgid "Forward to End"
+msgstr "En Sona"
+
+#: xboard.c:582
+msgid "Revert"
+msgstr ""
+
+#: xboard.c:583
+msgid "Truncate Game"
+msgstr ""
+
+#: xboard.c:585
+msgid "Move Now"
+msgstr ""
+
+#: xboard.c:586
+msgid "Retract Move"
+msgstr "Hamleyi Geri Al"
+
+#: xboard.c:591
+msgid "Always Queen"
+msgstr "Hep Vezir Olsun"
+
+#: xboard.c:592
+msgid "Animate Dragging"
+msgstr ""
+
+#: xboard.c:593
+msgid "Animate Moving"
+msgstr ""
+
+#: xboard.c:594
+msgid "Auto Comment"
+msgstr ""
+
+#: xboard.c:595
+msgid "Auto Flag"
+msgstr ""
+
+#: xboard.c:596
+msgid "Auto Flip View"
+msgstr ""
+
+#: xboard.c:597
+msgid "Auto Observe"
+msgstr ""
+
+#: xboard.c:598
+msgid "Auto Raise Board"
+msgstr ""
+
+#: xboard.c:599
+msgid "Auto Save"
+msgstr ""
+
+#: xboard.c:600
+msgid "Blindfold"
+msgstr "Tahtayý Görmeden"
+
+#: xboard.c:601
+msgid "Flash Moves"
+msgstr ""
+
+#: xboard.c:602
+msgid "Flip View"
+msgstr ""
+
+#: xboard.c:603
+msgid "Get Move List"
+msgstr ""
+
+#: xboard.c:605
+msgid "Highlight Dragging"
+msgstr ""
+
+#: xboard.c:607
+msgid "Highlight Last Move"
+msgstr ""
+
+#: xboard.c:608
+msgid "Move Sound"
+msgstr ""
+
+#: xboard.c:609
+msgid "ICS Alarm"
+msgstr ""
+
+#: xboard.c:610
+msgid "Old Save Style"
+msgstr ""
+
+#: xboard.c:611
+msgid "Periodic Updates"
+msgstr ""
+
+#: xboard.c:612
+msgid "Ponder Next Move"
+msgstr ""
+
+#: xboard.c:613
+msgid "Popup Exit Message"
+msgstr ""
+
+#: xboard.c:614
+msgid "Popup Move Errors"
+msgstr ""
+
+#: xboard.c:615
+msgid "Premove"
+msgstr ""
+
+#: xboard.c:616
+msgid "Quiet Play"
+msgstr ""
+
+#: xboard.c:617
+msgid "Show Coords"
+msgstr ""
+
+#: xboard.c:618
+msgid "Show Thinking"
+msgstr ""
+
+#: xboard.c:619
+msgid "Test Legality"
+msgstr ""
+
+#: xboard.c:624
+msgid "Info XBoard"
+msgstr "XBoard Info Sayfasý"
+
+#: xboard.c:625
+msgid "Man XBoard"
+msgstr "XBoard Man Sayfasý"
+
+#: xboard.c:627
+msgid "Hint"
+msgstr "Ýpucu"
+
+#: xboard.c:628
+msgid "Book"
+msgstr "Kitap"
+
+#: xboard.c:630 xboard.c:6746
+msgid "About XBoard"
+msgstr "XBoard Hakkýnda"
+
+#: xboard.c:635
+msgid "File"
+msgstr "Dosya"
+
+#: xboard.c:636
+msgid "Mode"
+msgstr "Kip"
+
+#: xboard.c:637
+msgid "Action"
+msgstr "Eylem"
+
+#: xboard.c:638
+msgid "Step"
+msgstr "Adým"
+
+#: xboard.c:639
+msgid "Options"
+msgstr "Seçenekler"
+
+#: xboard.c:640
+msgid "Help"
+msgstr "Yardým"
+
+#. Label on pause button
+#: xboard.c:646
+msgid "P"
+msgstr "D"
+
+#: xboard.c:658 xboard.c:7440
+msgid "White"
+msgstr "Beyaz"
+
+#: xboard.c:658 xboard.c:660 xboard.c:675
+msgid "Pawn"
+msgstr "Piyon"
+
+#: xboard.c:658 xboard.c:660 xboard.c:675 xboard.c:5218 xboard.c:5277
+msgid "Knight"
+msgstr "At"
+
+#: xboard.c:658 xboard.c:660 xboard.c:675 xboard.c:5216
+msgid "Bishop"
+msgstr "Fil"
+
+#: xboard.c:658 xboard.c:660 xboard.c:675 xboard.c:5214
+msgid "Rook"
+msgstr "Kale"
+
+#: xboard.c:659 xboard.c:661 xboard.c:675 xboard.c:5212
+msgid "Queen"
+msgstr "Vezir"
+
+#: xboard.c:659 xboard.c:661 xboard.c:5222
+msgid "King"
+msgstr "Þah"
+
+#: xboard.c:659 xboard.c:661
+msgid "Empty square"
+msgstr "Kareyi Boþalt"
+
+#: xboard.c:659 xboard.c:661
+msgid "Clear board"
+msgstr "Tahtayý Temizle"
+
+#: xboard.c:660 xboard.c:7454
+msgid "Black"
+msgstr "Siyah"
+
+#: xboard.c:1666
+#, c-format
+msgid "%s: Can't access XPM directory %s\n"
+msgstr ""
+
+#: xboard.c:1689
+#, c-format
+msgid "Available `%s' sizes:\n"
+msgstr ""
+
+#: xboard.c:1725
+#, c-format
+msgid "Error: No `%s' files!\n"
+msgstr ""
+
+#: xboard.c:1741
+msgid ""
+"Warning: No DIR structure found on this system --\n"
+"         Unable to autosize for XPM/XIM pieces.\n"
+"   Please report this error to frankm at hiwaay.net.\n"
+"   Include system type & operating system in message.\n"
+msgstr ""
+
+#: xboard.c:1802
+#, c-format
+msgid "%s: unrecognized color %s\n"
+msgstr ""
+
+#: xboard.c:1812
+#, c-format
+msgid "%s: can't parse foreground color in `%s'\n"
+msgstr ""
+
+#: xboard.c:1883
+#, c-format
+msgid "%s: unrecognized argument %s\n"
+msgstr ""
+
+#: xboard.c:1892
+#, c-format
+msgid "%s: can't cd to CHESSDIR: "
+msgstr ""
+
+#: xboard.c:1928
+#, c-format
+msgid "%s: bad boardSize syntax %s\n"
+msgstr ""
+
+#: xboard.c:1964
+#, c-format
+msgid "%s: unrecognized boardSize name %s\n"
+msgstr ""
+
+#: xboard.c:1982
+#, c-format
+msgid "Error expanding path name \"%s\"\n"
+msgstr ""
+
+#: xboard.c:1987
+#, c-format
+msgid ""
+"XBoard square size (hint): %d\n"
+"%s fulldir:%s:\n"
+msgstr ""
+
+#: xboard.c:1993
+#, c-format
+msgid "Closest %s size: %d\n"
+msgstr ""
+
+#: xboard.c:2105
+#, c-format
+msgid "%s: too few colors available; trying monochrome mode\n"
+msgstr ""
+
+#: xboard.c:2110
+#, c-format
+msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
+msgstr ""
+
+#: xboard.c:2128
+#, c-format
+msgid "%s: can't parse color names; disabling colorization\n"
+msgstr ""
+
+#: xboard.c:2308 xboard.c:2318
+#, c-format
+msgid "%s: messageWidget geometry error %d %d %d %d %d\n"
+msgstr ""
+
+#: xboard.c:2339
+#, c-format
+msgid "%s: titleWidget geometry error %d %d %d %d %d\n"
+msgstr ""
+
+#: xboard.c:2909
+msgid "Unable to create font set.\n"
+msgstr ""
+
+#: xboard.c:2917
+#, c-format
+msgid "%s: no fonts match pattern %s\n"
+msgstr ""
+
+#: xboard.c:2960
+#, c-format
+msgid ""
+"resolved %s at pixel size %d\n"
+"  to %s\n"
+msgstr ""
+
+#: xboard.c:3084
+#, c-format
+msgid "%s: error loading XIM!\n"
+msgstr ""
+
+#: xboard.c:3176
+msgid "XIM pieces cannot be used in monochrome mode"
+msgstr ""
+
+#: xboard.c:3180
+msgid ""
+"\n"
+"Loading XIMs...\n"
+msgstr ""
+
+#: xboard.c:3194 xboard.c:3215 xboard.c:3222 xboard.c:3313 xboard.c:3334
+#: xboard.c:3345
+#, c-format
+msgid "(File:%s:) "
+msgstr ""
+
+#: xboard.c:3210 xboard.c:3327
+msgid "light square "
+msgstr ""
+
+#: xboard.c:3218 xboard.c:3341
+msgid "dark square "
+msgstr ""
+
+#: xboard.c:3229 xboard.c:3354
+msgid "Done.\n"
+msgstr ""
+
+#: xboard.c:3271
+msgid "XPM pieces cannot be used in monochrome mode"
+msgstr ""
+
+#: xboard.c:3281
+#, c-format
+msgid "No builtin XPM pieces of size %d\n"
+msgstr ""
+
+#: xboard.c:3291
+#, c-format
+msgid "Error %d loading XPM image \"%s\"\n"
+msgstr ""
+
+#: xboard.c:3302
+msgid ""
+"\n"
+"Loading XPMs...\n"
+msgstr ""
+
+#: xboard.c:3318 xboard.c:3338 xboard.c:3349
+#, c-format
+msgid "Error %d loading XPM file \"%s\"\n"
+msgstr ""
+
+#: xboard.c:3431
+#, c-format
+msgid "Can't open bitmap file %s"
+msgstr ""
+
+#: xboard.c:3434
+#, c-format
+msgid "Invalid bitmap in file %s"
+msgstr ""
+
+#: xboard.c:3437
+#, c-format
+msgid "Ran out of memory reading bitmap file %s"
+msgstr ""
+
+#: xboard.c:3441
+#, c-format
+msgid "Unknown XReadBitmapFile error %d on file %s"
+msgstr ""
+
+#: xboard.c:3445
+#, c-format
+msgid "%s: %s...using built-in\n"
+msgstr ""
+
+#: xboard.c:3449
+#, c-format
+msgid "%s: Bitmap %s is %dx%d, not %dx%d...using built-in\n"
+msgstr ""
+
+#: xboard.c:3456
+#, c-format
+msgid "%s: No built-in bitmap for %s; giving up\n"
+msgstr ""
+
+#: xboard.c:3652
+msgid "Drop"
+msgstr ""
+
+#: xboard.c:4573 xboard.c:4576 xboard.c:4832 xboard.c:5078 xboard.c:5087
+#: xboard.c:5340 xedittags.c:150 xedittags.c:248
+msgid "ok"
+msgstr "tamam"
+
+#: xboard.c:4587 xboard.c:4590 xboard.c:4839 xboard.c:5082 xboard.c:5088
+#: xboard.c:5127 xboard.c:5225 xboard.c:5273 xboard.c:7014 xboard.c:7055
+#: xedittags.c:157 xedittags.c:259
+msgid "cancel"
+msgstr "iptal"
+
+#: xboard.c:4601 xboard.c:4604 xboard.c:4841 xedittags.c:159
+msgid "clear"
+msgstr "temizle"
+
+#: xboard.c:4614 xboard.c:4617 xboard.c:5008 xedittags.c:128 xedittags.c:282
+#: xgamelist.c:226 xgamelist.c:292
+msgid "close"
+msgstr "kapat"
+
+#: xboard.c:4628 xboard.c:4631 xboard.c:5010 xedittags.c:130 xedittags.c:293
+msgid "edit"
+msgstr "düzenle"
+
+#: xboard.c:4873
+msgid "ICS Input"
+msgstr ""
+
+#: xboard.c:5062
+msgid "File name prompt"
+msgstr "Dosya adý giriþi"
+
+#: xboard.c:5164 xboard.c:6864 xboard.c:6878
+msgid "Error"
+msgstr "Hata"
+
+#: xboard.c:5164
+msgid "Can't open file"
+msgstr "Dosya açýlamýyor"
+
+#: xboard.c:5169
+msgid "Failed to open file"
+msgstr "Dosya açýlamadý"
+
+#: xboard.c:5198
+msgid "Promotion"
+msgstr "Terfi"
+
+#: xboard.c:5207
+msgid "Promote pawn to what?"
+msgstr "Piyon hangi taþa terfi edilsin?"
+
+#: xboard.c:5525 backend.c:5699
+msgid "Cannot build game list"
+msgstr ""
+
+#: xboard.c:5546
+msgid "Load game file name?"
+msgstr ""
+
+#: xboard.c:5612
+msgid "Load position file name?"
+msgstr ""
+
+#: xboard.c:5621
+msgid "Save game file name?"
+msgstr ""
+
+#: xboard.c:5632
+msgid "Save position file name?"
+msgstr ""
+
+#: xboard.c:5804
+msgid "Can't open temp file"
+msgstr ""
+
+#: xboard.c:5885 xboard.c:5903
+#, c-format
+msgid "%s does not support analysis"
+msgstr ""
+
+#: xboard.c:5913
+msgid "File to analyze"
+msgstr "Analiz edilecek dosya"
+
+#: xboard.c:6901
+msgid "Fatal Error"
+msgstr ""
+
+#: xboard.c:6901
+msgid "Exiting"
+msgstr ""
+
+#: xboard.c:6911
+msgid "Information"
+msgstr "Bilgi"
+
+#: xboard.c:6918
+msgid "Note"
+msgstr "Not"
+
+#: xboard.c:6968
+#, c-format
+msgid "AskQuestionProc needed 4 parameters, got %d\n"
+msgstr ""
+
+#: xboard.c:7001
+msgid "Error writing to chess program"
+msgstr ""
+
+#: xboard.c:7053
+msgid "enter"
+msgstr "gir"
+
+#: xboard.c:7166 backend.c:1323
+msgid "Error writing to display"
+msgstr ""
+
+#: xboard.c:7239
+#, c-format
+msgid "ERROR: Unknown user %s (in path %s)\n"
+msgstr ""
+
+#: xboard.c:7594
+msgid "Socket support is not configured in"
+msgstr ""
+
+#: xboard.c:7696
+msgid "internal rcmd not implemented for Unix"
+msgstr ""
+
+#: xboard.c:8422
+#, c-format
+msgid "AnimateMove: piece %d hops from %d,%d to %d,%d \n"
+msgstr ""
+
+#: xboard.c:8423
+#, c-format
+msgid "AnimateMove: piece %d slides from %d,%d to %d,%d \n"
+msgstr ""
+
+#: xedittags.c:346 xedittags.c:354
+msgid "Tags"
+msgstr ""
+
+#: xedittags.c:385
+msgid "Edit tags"
+msgstr ""
+
+#: xgamelist.c:193 xgamelist.c:298
+msgid "load"
+msgstr "yükle"
+
+#: xgamelist.c:204 xgamelist.c:311
+msgid "prev"
+msgstr "önceki"
+
+#: xgamelist.c:215 xgamelist.c:304
+msgid "next"
+msgstr "sonraki"
+
+#: xgamelist.c:301
+msgid "No game selected"
+msgstr ""
+
+#: xgamelist.c:307
+msgid "Can't go forward any further"
+msgstr ""
+
+#: xgamelist.c:314 backend.c:5833 backend.c:6292
+msgid "Can't back up any further"
+msgstr ""
+
+#: xgamelist.c:415
+msgid "There is no game list"
+msgstr ""
+
+#: xhistory.c:156
+msgid "White "
+msgstr "Beyaz "
+
+#: xhistory.c:157
+msgid "Black "
+msgstr "Siyah "
+
+#: xhistory.c:347 xhistory.c:351
+msgid "Move list"
+msgstr "Hamle listesi"
+
+#: xhistory.c:445
+msgid "Close"
+msgstr "Kapat"
+
+#: backend.c:468
+#, c-format
+msgid "bad timeControl option %s"
+msgstr ""
+
+#: backend.c:483
+#, c-format
+msgid "bad searchTime option %s"
+msgstr ""
+
+#: backend.c:542 backend.c:552
+#, c-format
+msgid "protocol version %d not supported"
+msgstr ""
+
+#: backend.c:603
+#, c-format
+msgid "Variant %s supported only in ICS mode"
+msgstr ""
+
+#: backend.c:618
+#, c-format
+msgid "Unknown variant name %s"
+msgstr ""
+
+#: backend.c:705
+#, c-format
+msgid "Could not open comm port %s"
+msgstr ""
+
+#: backend.c:708
+#, c-format
+msgid "Could not connect to host %s, port %s"
+msgstr ""
+
+#: backend.c:753
+#, c-format
+msgid "Unknown initialMode %s"
+msgstr ""
+
+#: backend.c:761
+msgid "Can't have a match with no chess programs"
+msgstr ""
+
+#: backend.c:771
+msgid "Bad game file"
+msgstr ""
+
+#: backend.c:778
+msgid "Bad position file"
+msgstr ""
+
+#: backend.c:790
+msgid "AnalyzeFile mode requires a game file"
+msgstr ""
+
+#: backend.c:805
+msgid "Analysis mode requires a chess engine"
+msgstr ""
+
+#: backend.c:809
+msgid "Analysis mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:819
+msgid "MachineWhite mode requires a chess engine"
+msgstr ""
+
+#: backend.c:824
+msgid "MachineWhite mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:831
+msgid "MachineBlack mode requires a chess engine"
+msgstr ""
+
+#: backend.c:836
+msgid "MachineBlack mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:843
+msgid "TwoMachines mode requires a chess engine"
+msgstr ""
+
+#: backend.c:848
+msgid "TwoMachines mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:859
+msgid "Training mode requires a game file"
+msgstr ""
+
+#: backend.c:1007 backend.c:1029 backend.c:1054 backend.c:1409
+msgid "Error writing to ICS"
+msgstr ""
+
+#: backend.c:1011
+msgid "Error reading from keyboard"
+msgstr ""
+
+#: backend.c:1014
+msgid "Got end of file from keyboard"
+msgstr ""
+
+#: backend.c:1258
+#, c-format
+msgid "recognized '%s' (%d) as variant %s\n"
+msgstr ""
+
+#: backend.c:2000
+msgid "Error gathering move list: two headers"
+msgstr ""
+
+#: backend.c:2014
+#, c-format
+msgid "Ratings from header: W %d, B %d\n"
+msgstr ""
+
+#: backend.c:2047
+msgid "Error gathering move list: nested"
+msgstr ""
+
+#: backend.c:2556
+msgid "Connection closed by ICS"
+msgstr ""
+
+#: backend.c:2558
+msgid "Error reading from ICS"
+msgstr ""
+
+#: backend.c:2606
+#, c-format
+msgid "Parsing board: %s\n"
+msgstr ""
+
+#: backend.c:2618
+#, c-format
+msgid ""
+"Failed to parse board string:\n"
+"\"%s\""
+msgstr ""
+
+#: backend.c:2627 backend.c:4811
+msgid "Game too long; increase MAX_MOVES and recompile"
+msgstr ""
+
+#: backend.c:2689
+msgid "Error gathering move list: extra board"
+msgstr ""
+
+#: backend.c:2936 backend.c:2958
+#, c-format
+msgid "Couldn't parse move \"%s\" from ICS"
+msgstr ""
+
+#: backend.c:3391
+msgid "You are playing Black"
+msgstr "Siz Siyah'sýnýz"
+
+#: backend.c:3400 backend.c:3431
+msgid "You are playing White"
+msgstr "Siz Beyaz'sýnýz"
+
+#: backend.c:3407 backend.c:3439 backend.c:3504 backend.c:3526 backend.c:3542
+#: backend.c:7925
+msgid "It is White's turn"
+msgstr "Sýra Beyaz'da"
+
+#: backend.c:3411 backend.c:3443 backend.c:3512 backend.c:3532 backend.c:3563
+#: backend.c:7917
+msgid "It is Black's turn"
+msgstr "Sýra Siyah'ta"
+
+#: backend.c:3454
+msgid "Displayed position is not current"
+msgstr ""
+
+#: backend.c:3602
+msgid "Illegal move"
+msgstr "Geçersiz hamle"
+
+#: backend.c:3636
+msgid "End of game"
+msgstr "Oyun sonu"
+
+#: backend.c:3639
+msgid "Incorrect move"
+msgstr "Yanlýþ hamle"
+
+#: backend.c:3858
+#, c-format
+msgid "Illegal move \"%s\" from %s machine"
+msgstr ""
+
+#: backend.c:4099
+#, c-format
+msgid "Illegal move \"%s\" (rejected by %s chess program)"
+msgstr ""
+
+#: backend.c:4124
+#, c-format
+msgid "Failed to start %s chess program %s on %s: %s\n"
+msgstr ""
+
+#: backend.c:4147
+#, c-format
+msgid ""
+"Illegal hint move \"%s\"\n"
+"from %s chess program"
+msgstr ""
+
+#: backend.c:4322
+msgid ""
+"Machine offers a draw\n"
+"Select Action / Draw to agree"
+msgstr ""
+
+#: backend.c:4578
+#, c-format
+msgid "Ambiguous move in ICS output: \"%s\""
+msgstr ""
+
+#: backend.c:4583
+#, c-format
+msgid "Illegal move in ICS output: \"%s\""
+msgstr ""
+
+#: backend.c:4589
+msgid "Gap in move list"
+msgstr ""
+
+#: backend.c:4890
+#, c-format
+msgid "Variant %s not supported by %s"
+msgstr ""
+
+#: backend.c:5242
+#, c-format
+msgid "Match %s vs. %s: final score %d-%d-%d"
+msgstr ""
+
+#: backend.c:5628
+#, c-format
+msgid "Ambiguous move: %d.%s%s"
+msgstr ""
+
+#: backend.c:5639
+#, c-format
+msgid "Illegal move: %d.%s%s"
+msgstr ""
+
+#: backend.c:5687 backend.c:6314 backend.c:6507 backend.c:6733
+#, c-format
+msgid "Can't open \"%s\""
+msgstr ""
+
+#: backend.c:5788
+msgid "No more games in this message"
+msgstr ""
+
+#: backend.c:5829
+msgid "No game has been loaded yet"
+msgstr ""
+
+#: backend.c:5888
+msgid "Game number out of range"
+msgstr ""
+
+#: backend.c:5899
+msgid "Can't seek on game file"
+msgstr ""
+
+#: backend.c:5958
+msgid "Game not found in file"
+msgstr ""
+
+#: backend.c:6075 backend.c:6404
+msgid "Bad FEN position in file"
+msgstr ""
+
+#: backend.c:6218
+msgid "No moves in game"
+msgstr ""
+
+#: backend.c:6288
+msgid "No position has been loaded yet"
+msgstr ""
+
+#: backend.c:6355 backend.c:6366
+msgid "Can't seek on position file"
+msgstr ""
+
+#: backend.c:6373 backend.c:6395
+msgid "Position not found in file"
+msgstr ""
+
+#: backend.c:6436
+msgid "Black to play"
+msgstr ""
+
+#: backend.c:6439
+msgid "White to play"
+msgstr ""
+
+#: backend.c:6863
+msgid ""
+"You have edited the game history.\n"
+"Use Reload Same Game and make your move again."
+msgstr ""
+
+#: backend.c:6868
+msgid ""
+"You have entered too many moves.\n"
+"Back up to the correct position and try again."
+msgstr ""
+
+#: backend.c:6873
+msgid ""
+"Displayed position is not current.\n"
+"Step forward to the correct position and try again."
+msgstr ""
+
+#: backend.c:6921
+msgid "You have not made a move yet"
+msgstr ""
+
+#: backend.c:6942
+msgid ""
+"The cmail message is not loaded.\n"
+"Use Reload CMail Message and make your move again."
+msgstr ""
+
+#: backend.c:6947
+msgid "No unfinished games"
+msgstr ""
+
+#: backend.c:6953
+#, c-format
+msgid ""
+"You have already mailed a move.\n"
+"Wait until a move arrives from your opponent.\n"
+"To resend the same move, type\n"
+"\"cmail -remail -game %s\"\n"
+"on the command line."
+msgstr ""
+
+#: backend.c:6968
+msgid "Failed to invoke cmail"
+msgstr ""
+
+#: backend.c:7030
+msgid "Waiting for reply from opponent\n"
+msgstr ""
+
+#: backend.c:7053
+msgid "Still need to make move for game\n"
+msgstr ""
+
+#: backend.c:7058
+msgid "Still need to make moves for both games\n"
+msgstr ""
+
+#: backend.c:7063
+#, c-format
+msgid "Still need to make moves for all %d games\n"
+msgstr ""
+
+#: backend.c:7071
+#, c-format
+msgid "Still need to make a move for game %s\n"
+msgstr ""
+
+#: backend.c:7077
+msgid "No unfinished games\n"
+msgstr ""
+
+#: backend.c:7079
+msgid "Ready to send mail\n"
+msgstr ""
+
+#: backend.c:7085
+#, c-format
+msgid "Still need to make moves for games %s\n"
+msgstr ""
+
+#: backend.c:7237
+msgid "Edit comment"
+msgstr ""
+
+#: backend.c:7239
+#, c-format
+msgid "Edit comment on %d.%s%s"
+msgstr ""
+
+#: backend.c:7270 backend.c:7297
+msgid "Analysis"
+msgstr ""
+
+#: backend.c:7271 backend.c:7298
+msgid ""
+"Starting analysis mode...\n"
+"If this message stays up, your chess program does not support analysis."
+msgstr ""
+
+#: backend.c:7330
+msgid "It is not White's turn"
+msgstr ""
+
+#: backend.c:7393
+msgid "It is not Black's turn"
+msgstr ""
+
+#: backend.c:7474 backend.c:8405
+msgid ""
+"Wait until your turn,\n"
+"or select Move Now"
+msgstr ""
+
+#: backend.c:7506
+msgid "Starting second chess program"
+msgstr ""
+
+#: backend.c:7571
+msgid "Training mode off"
+msgstr ""
+
+#: backend.c:7579
+msgid "Training mode on"
+msgstr ""
+
+#: backend.c:7582
+msgid "Already at end of game"
+msgstr ""
+
+#: backend.c:7663
+msgid "Warning: You are still playing a game"
+msgstr ""
+
+#: backend.c:7666
+msgid "Warning: You are still observing a game"
+msgstr ""
+
+#: backend.c:7669
+msgid "Warning: You are still examining a game"
+msgstr ""
+
+#: backend.c:7942
+msgid "That square is occupied"
+msgstr ""
+
+#: backend.c:7966 backend.c:7992
+msgid "There is no pending offer on this move"
+msgstr ""
+
+#: backend.c:8028 backend.c:8039
+msgid "Your opponent is not out of time"
+msgstr ""
+
+#: backend.c:8074
+msgid "You must make your move before offering a draw"
+msgstr ""
+
+#: backend.c:8387
+msgid "You are not examining a game"
+msgstr ""
+
+#: backend.c:8391
+msgid "You can't revert while pausing"
+msgstr ""
+
+#: backend.c:8445 backend.c:8452
+msgid "It is your turn"
+msgstr ""
+
+#: backend.c:8502 backend.c:8509 backend.c:8528 backend.c:8535
+msgid "Wait until your turn"
+msgstr ""
+
+#: backend.c:8514
+msgid "No hint available"
+msgstr ""
+
+#: backend.c:8820
+#, c-format
+msgid "Error writing to %s chess program"
+msgstr ""
+
+#: backend.c:8841
+#, c-format
+msgid "Error: %s chess program (%s) exited unexpectedly"
+msgstr ""
+
+#: backend.c:8847
+#, c-format
+msgid "Error reading from %s chess program (%s)"
+msgstr ""
+
+#: backend.c:9350 backend.c:9372
+msgid "Both flags fell"
+msgstr "Berabere"
+
+#: backend.c:9352
+msgid "White's flag fell"
+msgstr "Beyaz Þah mat"
+
+#: backend.c:9374
+msgid "Black's flag fell"
+msgstr "Siyah Þah mat"
+
+#: backend.c:9972
+msgid "Bad FEN position in clipboard"
+msgstr ""
diff --git a/po/xboard.pot b/po/xboard.pot
new file mode 100755
index 0000000..632d876
--- /dev/null
+++ b/po/xboard.pot
@@ -0,0 +1,1333 @@
+# XBoard -- a graphical chessboard for X
+# Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
+# Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc.
+# This file is distributed under the same license as the XBoard package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: XBoard 4.2.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2003-12-01 20:00+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: xboard.c:514
+msgid "Reset Game"
+msgstr ""
+
+#: xboard.c:516
+msgid "Load Game"
+msgstr ""
+
+#: xboard.c:517
+msgid "Load Next Game"
+msgstr ""
+
+#: xboard.c:518
+msgid "Load Previous Game"
+msgstr ""
+
+#: xboard.c:519
+msgid "Reload Same Game"
+msgstr ""
+
+#: xboard.c:520
+msgid "Save Game"
+msgstr ""
+
+#: xboard.c:522
+msgid "Copy Game"
+msgstr ""
+
+#: xboard.c:523
+msgid "Paste Game"
+msgstr ""
+
+#: xboard.c:525
+msgid "Load Position"
+msgstr ""
+
+#: xboard.c:526
+msgid "Load Next Position"
+msgstr ""
+
+#: xboard.c:527
+msgid "Load Previous Position"
+msgstr ""
+
+#: xboard.c:528
+msgid "Reload Same Position"
+msgstr ""
+
+#: xboard.c:529
+msgid "Save Position"
+msgstr ""
+
+#: xboard.c:531
+msgid "Copy Position"
+msgstr ""
+
+#: xboard.c:532
+msgid "Paste Position"
+msgstr ""
+
+#: xboard.c:534
+msgid "Mail Move"
+msgstr ""
+
+#: xboard.c:535
+msgid "Reload CMail Message"
+msgstr ""
+
+#: xboard.c:537
+msgid "Exit"
+msgstr ""
+
+#: xboard.c:542
+msgid "Machine White"
+msgstr ""
+
+#: xboard.c:543
+msgid "Machine Black"
+msgstr ""
+
+#: xboard.c:544
+msgid "Two Machines"
+msgstr ""
+
+#: xboard.c:545
+msgid "Analysis Mode"
+msgstr ""
+
+#: xboard.c:546
+msgid "Analyze File"
+msgstr ""
+
+#: xboard.c:547
+msgid "ICS Client"
+msgstr ""
+
+#: xboard.c:548
+msgid "Edit Game"
+msgstr ""
+
+#: xboard.c:549
+msgid "Edit Position"
+msgstr ""
+
+#: xboard.c:550
+msgid "Training"
+msgstr ""
+
+#: xboard.c:552
+msgid "Show Game List"
+msgstr ""
+
+#: xboard.c:553
+msgid "Show Move List"
+msgstr ""
+
+#: xboard.c:554 xedittags.c:393
+msgid "Edit Tags"
+msgstr ""
+
+#: xboard.c:555
+msgid "Edit Comment"
+msgstr ""
+
+#: xboard.c:556
+msgid "ICS Input Box"
+msgstr ""
+
+#: xboard.c:557
+msgid "Pause"
+msgstr ""
+
+#: xboard.c:562
+msgid "Accept"
+msgstr ""
+
+#: xboard.c:563
+msgid "Decline"
+msgstr ""
+
+#: xboard.c:564
+msgid "Rematch"
+msgstr ""
+
+#: xboard.c:566
+msgid "Call Flag"
+msgstr ""
+
+#: xboard.c:567
+msgid "Draw"
+msgstr ""
+
+#: xboard.c:568
+msgid "Adjourn"
+msgstr ""
+
+#: xboard.c:569
+msgid "Abort"
+msgstr ""
+
+#: xboard.c:570
+msgid "Resign"
+msgstr ""
+
+#: xboard.c:572
+msgid "Stop Observing"
+msgstr ""
+
+#: xboard.c:573
+msgid "Stop Examining"
+msgstr ""
+
+#: xboard.c:578
+msgid "Backward"
+msgstr ""
+
+#: xboard.c:579
+msgid "Forward"
+msgstr ""
+
+#: xboard.c:580
+msgid "Back to Start"
+msgstr ""
+
+#: xboard.c:581
+msgid "Forward to End"
+msgstr ""
+
+#: xboard.c:582
+msgid "Revert"
+msgstr ""
+
+#: xboard.c:583
+msgid "Truncate Game"
+msgstr ""
+
+#: xboard.c:585
+msgid "Move Now"
+msgstr ""
+
+#: xboard.c:586
+msgid "Retract Move"
+msgstr ""
+
+#: xboard.c:591
+msgid "Always Queen"
+msgstr ""
+
+#: xboard.c:592
+msgid "Animate Dragging"
+msgstr ""
+
+#: xboard.c:593
+msgid "Animate Moving"
+msgstr ""
+
+#: xboard.c:594
+msgid "Auto Comment"
+msgstr ""
+
+#: xboard.c:595
+msgid "Auto Flag"
+msgstr ""
+
+#: xboard.c:596
+msgid "Auto Flip View"
+msgstr ""
+
+#: xboard.c:597
+msgid "Auto Observe"
+msgstr ""
+
+#: xboard.c:598
+msgid "Auto Raise Board"
+msgstr ""
+
+#: xboard.c:599
+msgid "Auto Save"
+msgstr ""
+
+#: xboard.c:600
+msgid "Blindfold"
+msgstr ""
+
+#: xboard.c:601
+msgid "Flash Moves"
+msgstr ""
+
+#: xboard.c:602
+msgid "Flip View"
+msgstr ""
+
+#: xboard.c:603
+msgid "Get Move List"
+msgstr ""
+
+#: xboard.c:605
+msgid "Highlight Dragging"
+msgstr ""
+
+#: xboard.c:607
+msgid "Highlight Last Move"
+msgstr ""
+
+#: xboard.c:608
+msgid "Move Sound"
+msgstr ""
+
+#: xboard.c:609
+msgid "ICS Alarm"
+msgstr ""
+
+#: xboard.c:610
+msgid "Old Save Style"
+msgstr ""
+
+#: xboard.c:611
+msgid "Periodic Updates"
+msgstr ""
+
+#: xboard.c:612
+msgid "Ponder Next Move"
+msgstr ""
+
+#: xboard.c:613
+msgid "Popup Exit Message"
+msgstr ""
+
+#: xboard.c:614
+msgid "Popup Move Errors"
+msgstr ""
+
+#: xboard.c:615
+msgid "Premove"
+msgstr ""
+
+#: xboard.c:616
+msgid "Quiet Play"
+msgstr ""
+
+#: xboard.c:617
+msgid "Show Coords"
+msgstr ""
+
+#: xboard.c:618
+msgid "Show Thinking"
+msgstr ""
+
+#: xboard.c:619
+msgid "Test Legality"
+msgstr ""
+
+#: xboard.c:624
+msgid "Info XBoard"
+msgstr ""
+
+#: xboard.c:625
+msgid "Man XBoard"
+msgstr ""
+
+#: xboard.c:627
+msgid "Hint"
+msgstr ""
+
+#: xboard.c:628
+msgid "Book"
+msgstr ""
+
+#: xboard.c:630 xboard.c:6746
+msgid "About XBoard"
+msgstr ""
+
+#: xboard.c:635
+msgid "File"
+msgstr ""
+
+#: xboard.c:636
+msgid "Mode"
+msgstr ""
+
+#: xboard.c:637
+msgid "Action"
+msgstr ""
+
+#: xboard.c:638
+msgid "Step"
+msgstr ""
+
+#: xboard.c:639
+msgid "Options"
+msgstr ""
+
+#: xboard.c:640
+msgid "Help"
+msgstr ""
+
+#. Label on pause button
+#: xboard.c:646
+msgid "P"
+msgstr ""
+
+#: xboard.c:658 xboard.c:7440
+msgid "White"
+msgstr ""
+
+#: xboard.c:658 xboard.c:660 xboard.c:675
+msgid "Pawn"
+msgstr ""
+
+#: xboard.c:658 xboard.c:660 xboard.c:675 xboard.c:5218 xboard.c:5277
+msgid "Knight"
+msgstr ""
+
+#: xboard.c:658 xboard.c:660 xboard.c:675 xboard.c:5216
+msgid "Bishop"
+msgstr ""
+
+#: xboard.c:658 xboard.c:660 xboard.c:675 xboard.c:5214
+msgid "Rook"
+msgstr ""
+
+#: xboard.c:659 xboard.c:661 xboard.c:675 xboard.c:5212
+msgid "Queen"
+msgstr ""
+
+#: xboard.c:659 xboard.c:661 xboard.c:5222
+msgid "King"
+msgstr ""
+
+#: xboard.c:659 xboard.c:661
+msgid "Empty square"
+msgstr ""
+
+#: xboard.c:659 xboard.c:661
+msgid "Clear board"
+msgstr ""
+
+#: xboard.c:660 xboard.c:7454
+msgid "Black"
+msgstr ""
+
+#: xboard.c:1666
+#, c-format
+msgid "%s: Can't access XPM directory %s\n"
+msgstr ""
+
+#: xboard.c:1689
+#, c-format
+msgid "Available `%s' sizes:\n"
+msgstr ""
+
+#: xboard.c:1725
+#, c-format
+msgid "Error: No `%s' files!\n"
+msgstr ""
+
+#: xboard.c:1741
+msgid ""
+"Warning: No DIR structure found on this system --\n"
+"         Unable to autosize for XPM/XIM pieces.\n"
+"   Please report this error to frankm at hiwaay.net.\n"
+"   Include system type & operating system in message.\n"
+msgstr ""
+
+#: xboard.c:1802
+#, c-format
+msgid "%s: unrecognized color %s\n"
+msgstr ""
+
+#: xboard.c:1812
+#, c-format
+msgid "%s: can't parse foreground color in `%s'\n"
+msgstr ""
+
+#: xboard.c:1883
+#, c-format
+msgid "%s: unrecognized argument %s\n"
+msgstr ""
+
+#: xboard.c:1892
+#, c-format
+msgid "%s: can't cd to CHESSDIR: "
+msgstr ""
+
+#: xboard.c:1928
+#, c-format
+msgid "%s: bad boardSize syntax %s\n"
+msgstr ""
+
+#: xboard.c:1964
+#, c-format
+msgid "%s: unrecognized boardSize name %s\n"
+msgstr ""
+
+#: xboard.c:1982
+#, c-format
+msgid "Error expanding path name \"%s\"\n"
+msgstr ""
+
+#: xboard.c:1987
+#, c-format
+msgid ""
+"XBoard square size (hint): %d\n"
+"%s fulldir:%s:\n"
+msgstr ""
+
+#: xboard.c:1993
+#, c-format
+msgid "Closest %s size: %d\n"
+msgstr ""
+
+#: xboard.c:2105
+#, c-format
+msgid "%s: too few colors available; trying monochrome mode\n"
+msgstr ""
+
+#: xboard.c:2110
+#, c-format
+msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
+msgstr ""
+
+#: xboard.c:2128
+#, c-format
+msgid "%s: can't parse color names; disabling colorization\n"
+msgstr ""
+
+#: xboard.c:2308 xboard.c:2318
+#, c-format
+msgid "%s: messageWidget geometry error %d %d %d %d %d\n"
+msgstr ""
+
+#: xboard.c:2339
+#, c-format
+msgid "%s: titleWidget geometry error %d %d %d %d %d\n"
+msgstr ""
+
+#: xboard.c:2909
+msgid "Unable to create font set.\n"
+msgstr ""
+
+#: xboard.c:2917
+#, c-format
+msgid "%s: no fonts match pattern %s\n"
+msgstr ""
+
+#: xboard.c:2960
+#, c-format
+msgid ""
+"resolved %s at pixel size %d\n"
+"  to %s\n"
+msgstr ""
+
+#: xboard.c:3084
+#, c-format
+msgid "%s: error loading XIM!\n"
+msgstr ""
+
+#: xboard.c:3176
+msgid "XIM pieces cannot be used in monochrome mode"
+msgstr ""
+
+#: xboard.c:3180
+msgid ""
+"\n"
+"Loading XIMs...\n"
+msgstr ""
+
+#: xboard.c:3194 xboard.c:3215 xboard.c:3222 xboard.c:3313 xboard.c:3334
+#: xboard.c:3345
+#, c-format
+msgid "(File:%s:) "
+msgstr ""
+
+#: xboard.c:3210 xboard.c:3327
+msgid "light square "
+msgstr ""
+
+#: xboard.c:3218 xboard.c:3341
+msgid "dark square "
+msgstr ""
+
+#: xboard.c:3229 xboard.c:3354
+msgid "Done.\n"
+msgstr ""
+
+#: xboard.c:3271
+msgid "XPM pieces cannot be used in monochrome mode"
+msgstr ""
+
+#: xboard.c:3281
+#, c-format
+msgid "No builtin XPM pieces of size %d\n"
+msgstr ""
+
+#: xboard.c:3291
+#, c-format
+msgid "Error %d loading XPM image \"%s\"\n"
+msgstr ""
+
+#: xboard.c:3302
+msgid ""
+"\n"
+"Loading XPMs...\n"
+msgstr ""
+
+#: xboard.c:3318 xboard.c:3338 xboard.c:3349
+#, c-format
+msgid "Error %d loading XPM file \"%s\"\n"
+msgstr ""
+
+#: xboard.c:3431
+#, c-format
+msgid "Can't open bitmap file %s"
+msgstr ""
+
+#: xboard.c:3434
+#, c-format
+msgid "Invalid bitmap in file %s"
+msgstr ""
+
+#: xboard.c:3437
+#, c-format
+msgid "Ran out of memory reading bitmap file %s"
+msgstr ""
+
+#: xboard.c:3441
+#, c-format
+msgid "Unknown XReadBitmapFile error %d on file %s"
+msgstr ""
+
+#: xboard.c:3445
+#, c-format
+msgid "%s: %s...using built-in\n"
+msgstr ""
+
+#: xboard.c:3449
+#, c-format
+msgid "%s: Bitmap %s is %dx%d, not %dx%d...using built-in\n"
+msgstr ""
+
+#: xboard.c:3456
+#, c-format
+msgid "%s: No built-in bitmap for %s; giving up\n"
+msgstr ""
+
+#: xboard.c:3652
+msgid "Drop"
+msgstr ""
+
+#: xboard.c:4573 xboard.c:4576 xboard.c:4832 xboard.c:5078 xboard.c:5087
+#: xboard.c:5340 xedittags.c:150 xedittags.c:248
+msgid "ok"
+msgstr ""
+
+#: xboard.c:4587 xboard.c:4590 xboard.c:4839 xboard.c:5082 xboard.c:5088
+#: xboard.c:5127 xboard.c:5225 xboard.c:5273 xboard.c:7014 xboard.c:7055
+#: xedittags.c:157 xedittags.c:259
+msgid "cancel"
+msgstr ""
+
+#: xboard.c:4601 xboard.c:4604 xboard.c:4841 xedittags.c:159
+msgid "clear"
+msgstr ""
+
+#: xboard.c:4614 xboard.c:4617 xboard.c:5008 xedittags.c:128 xedittags.c:282
+#: xgamelist.c:226 xgamelist.c:292
+msgid "close"
+msgstr ""
+
+#: xboard.c:4628 xboard.c:4631 xboard.c:5010 xedittags.c:130 xedittags.c:293
+msgid "edit"
+msgstr ""
+
+#: xboard.c:4873
+msgid "ICS Input"
+msgstr ""
+
+#: xboard.c:5062
+msgid "File name prompt"
+msgstr ""
+
+#: xboard.c:5164 xboard.c:6864 xboard.c:6878
+msgid "Error"
+msgstr ""
+
+#: xboard.c:5164
+msgid "Can't open file"
+msgstr ""
+
+#: xboard.c:5169
+msgid "Failed to open file"
+msgstr ""
+
+#: xboard.c:5198
+msgid "Promotion"
+msgstr ""
+
+#: xboard.c:5207
+msgid "Promote pawn to what?"
+msgstr ""
+
+#: xboard.c:5525 backend.c:5699
+msgid "Cannot build game list"
+msgstr ""
+
+#: xboard.c:5546
+msgid "Load game file name?"
+msgstr ""
+
+#: xboard.c:5612
+msgid "Load position file name?"
+msgstr ""
+
+#: xboard.c:5621
+msgid "Save game file name?"
+msgstr ""
+
+#: xboard.c:5632
+msgid "Save position file name?"
+msgstr ""
+
+#: xboard.c:5804
+msgid "Can't open temp file"
+msgstr ""
+
+#: xboard.c:5885 xboard.c:5903
+#, c-format
+msgid "%s does not support analysis"
+msgstr ""
+
+#: xboard.c:5913
+msgid "File to analyze"
+msgstr ""
+
+#: xboard.c:6901
+msgid "Fatal Error"
+msgstr ""
+
+#: xboard.c:6901
+msgid "Exiting"
+msgstr ""
+
+#: xboard.c:6911
+msgid "Information"
+msgstr ""
+
+#: xboard.c:6918
+msgid "Note"
+msgstr ""
+
+#: xboard.c:6968
+#, c-format
+msgid "AskQuestionProc needed 4 parameters, got %d\n"
+msgstr ""
+
+#: xboard.c:7001
+msgid "Error writing to chess program"
+msgstr ""
+
+#: xboard.c:7053
+msgid "enter"
+msgstr ""
+
+#: xboard.c:7166 backend.c:1323
+msgid "Error writing to display"
+msgstr ""
+
+#: xboard.c:7239
+#, c-format
+msgid "ERROR: Unknown user %s (in path %s)\n"
+msgstr ""
+
+#: xboard.c:7594
+msgid "Socket support is not configured in"
+msgstr ""
+
+#: xboard.c:7696
+msgid "internal rcmd not implemented for Unix"
+msgstr ""
+
+#: xboard.c:8422
+#, c-format
+msgid "AnimateMove: piece %d hops from %d,%d to %d,%d \n"
+msgstr ""
+
+#: xboard.c:8423
+#, c-format
+msgid "AnimateMove: piece %d slides from %d,%d to %d,%d \n"
+msgstr ""
+
+#: xedittags.c:346 xedittags.c:354
+msgid "Tags"
+msgstr ""
+
+#: xedittags.c:385
+msgid "Edit tags"
+msgstr ""
+
+#: xgamelist.c:193 xgamelist.c:298
+msgid "load"
+msgstr ""
+
+#: xgamelist.c:204 xgamelist.c:311
+msgid "prev"
+msgstr ""
+
+#: xgamelist.c:215 xgamelist.c:304
+msgid "next"
+msgstr ""
+
+#: xgamelist.c:301
+msgid "No game selected"
+msgstr ""
+
+#: xgamelist.c:307
+msgid "Can't go forward any further"
+msgstr ""
+
+#: xgamelist.c:314 backend.c:5833 backend.c:6292
+msgid "Can't back up any further"
+msgstr ""
+
+#: xgamelist.c:415
+msgid "There is no game list"
+msgstr ""
+
+#: xhistory.c:156
+msgid "White "
+msgstr ""
+
+#: xhistory.c:157
+msgid "Black "
+msgstr ""
+
+#: xhistory.c:347 xhistory.c:351
+msgid "Move list"
+msgstr ""
+
+#: xhistory.c:445
+msgid "Close"
+msgstr ""
+
+#: backend.c:468
+#, c-format
+msgid "bad timeControl option %s"
+msgstr ""
+
+#: backend.c:483
+#, c-format
+msgid "bad searchTime option %s"
+msgstr ""
+
+#: backend.c:542 backend.c:552
+#, c-format
+msgid "protocol version %d not supported"
+msgstr ""
+
+#: backend.c:603
+#, c-format
+msgid "Variant %s supported only in ICS mode"
+msgstr ""
+
+#: backend.c:618
+#, c-format
+msgid "Unknown variant name %s"
+msgstr ""
+
+#: backend.c:705
+#, c-format
+msgid "Could not open comm port %s"
+msgstr ""
+
+#: backend.c:708
+#, c-format
+msgid "Could not connect to host %s, port %s"
+msgstr ""
+
+#: backend.c:753
+#, c-format
+msgid "Unknown initialMode %s"
+msgstr ""
+
+#: backend.c:761
+msgid "Can't have a match with no chess programs"
+msgstr ""
+
+#: backend.c:771
+msgid "Bad game file"
+msgstr ""
+
+#: backend.c:778
+msgid "Bad position file"
+msgstr ""
+
+#: backend.c:790
+msgid "AnalyzeFile mode requires a game file"
+msgstr ""
+
+#: backend.c:805
+msgid "Analysis mode requires a chess engine"
+msgstr ""
+
+#: backend.c:809
+msgid "Analysis mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:819
+msgid "MachineWhite mode requires a chess engine"
+msgstr ""
+
+#: backend.c:824
+msgid "MachineWhite mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:831
+msgid "MachineBlack mode requires a chess engine"
+msgstr ""
+
+#: backend.c:836
+msgid "MachineBlack mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:843
+msgid "TwoMachines mode requires a chess engine"
+msgstr ""
+
+#: backend.c:848
+msgid "TwoMachines mode does not work with ICS mode"
+msgstr ""
+
+#: backend.c:859
+msgid "Training mode requires a game file"
+msgstr ""
+
+#: backend.c:1007 backend.c:1029 backend.c:1054 backend.c:1409
+msgid "Error writing to ICS"
+msgstr ""
+
+#: backend.c:1011
+msgid "Error reading from keyboard"
+msgstr ""
+
+#: backend.c:1014
+msgid "Got end of file from keyboard"
+msgstr ""
+
+#: backend.c:1258
+#, c-format
+msgid "recognized '%s' (%d) as variant %s\n"
+msgstr ""
+
+#: backend.c:2000
+msgid "Error gathering move list: two headers"
+msgstr ""
+
+#: backend.c:2014
+#, c-format
+msgid "Ratings from header: W %d, B %d\n"
+msgstr ""
+
+#: backend.c:2047
+msgid "Error gathering move list: nested"
+msgstr ""
+
+#: backend.c:2556
+msgid "Connection closed by ICS"
+msgstr ""
+
+#: backend.c:2558
+msgid "Error reading from ICS"
+msgstr ""
+
+#: backend.c:2606
+#, c-format
+msgid "Parsing board: %s\n"
+msgstr ""
+
+#: backend.c:2618
+#, c-format
+msgid ""
+"Failed to parse board string:\n"
+"\"%s\""
+msgstr ""
+
+#: backend.c:2627 backend.c:4811
+msgid "Game too long; increase MAX_MOVES and recompile"
+msgstr ""
+
+#: backend.c:2689
+msgid "Error gathering move list: extra board"
+msgstr ""
+
+#: backend.c:2936 backend.c:2958
+#, c-format
+msgid "Couldn't parse move \"%s\" from ICS"
+msgstr ""
+
+#: backend.c:3391
+msgid "You are playing Black"
+msgstr ""
+
+#: backend.c:3400 backend.c:3431
+msgid "You are playing White"
+msgstr ""
+
+#: backend.c:3407 backend.c:3439 backend.c:3504 backend.c:3526 backend.c:3542
+#: backend.c:7925
+msgid "It is White's turn"
+msgstr ""
+
+#: backend.c:3411 backend.c:3443 backend.c:3512 backend.c:3532 backend.c:3563
+#: backend.c:7917
+msgid "It is Black's turn"
+msgstr ""
+
+#: backend.c:3454
+msgid "Displayed position is not current"
+msgstr ""
+
+#: backend.c:3602
+msgid "Illegal move"
+msgstr ""
+
+#: backend.c:3636
+msgid "End of game"
+msgstr ""
+
+#: backend.c:3639
+msgid "Incorrect move"
+msgstr ""
+
+#: backend.c:3858
+#, c-format
+msgid "Illegal move \"%s\" from %s machine"
+msgstr ""
+
+#: backend.c:4099
+#, c-format
+msgid "Illegal move \"%s\" (rejected by %s chess program)"
+msgstr ""
+
+#: backend.c:4124
+#, c-format
+msgid "Failed to start %s chess program %s on %s: %s\n"
+msgstr ""
+
+#: backend.c:4147
+#, c-format
+msgid ""
+"Illegal hint move \"%s\"\n"
+"from %s chess program"
+msgstr ""
+
+#: backend.c:4322
+msgid ""
+"Machine offers a draw\n"
+"Select Action / Draw to agree"
+msgstr ""
+
+#: backend.c:4578
+#, c-format
+msgid "Ambiguous move in ICS output: \"%s\""
+msgstr ""
+
+#: backend.c:4583
+#, c-format
+msgid "Illegal move in ICS output: \"%s\""
+msgstr ""
+
+#: backend.c:4589
+msgid "Gap in move list"
+msgstr ""
+
+#: backend.c:4890
+#, c-format
+msgid "Variant %s not supported by %s"
+msgstr ""
+
+#: backend.c:5242
+#, c-format
+msgid "Match %s vs. %s: final score %d-%d-%d"
+msgstr ""
+
+#: backend.c:5628
+#, c-format
+msgid "Ambiguous move: %d.%s%s"
+msgstr ""
+
+#: backend.c:5639
+#, c-format
+msgid "Illegal move: %d.%s%s"
+msgstr ""
+
+#: backend.c:5687 backend.c:6314 backend.c:6507 backend.c:6733
+#, c-format
+msgid "Can't open \"%s\""
+msgstr ""
+
+#: backend.c:5788
+msgid "No more games in this message"
+msgstr ""
+
+#: backend.c:5829
+msgid "No game has been loaded yet"
+msgstr ""
+
+#: backend.c:5888
+msgid "Game number out of range"
+msgstr ""
+
+#: backend.c:5899
+msgid "Can't seek on game file"
+msgstr ""
+
+#: backend.c:5958
+msgid "Game not found in file"
+msgstr ""
+
+#: backend.c:6075 backend.c:6404
+msgid "Bad FEN position in file"
+msgstr ""
+
+#: backend.c:6218
+msgid "No moves in game"
+msgstr ""
+
+#: backend.c:6288
+msgid "No position has been loaded yet"
+msgstr ""
+
+#: backend.c:6355 backend.c:6366
+msgid "Can't seek on position file"
+msgstr ""
+
+#: backend.c:6373 backend.c:6395
+msgid "Position not found in file"
+msgstr ""
+
+#: backend.c:6436
+msgid "Black to play"
+msgstr ""
+
+#: backend.c:6439
+msgid "White to play"
+msgstr ""
+
+#: backend.c:6863
+msgid ""
+"You have edited the game history.\n"
+"Use Reload Same Game and make your move again."
+msgstr ""
+
+#: backend.c:6868
+msgid ""
+"You have entered too many moves.\n"
+"Back up to the correct position and try again."
+msgstr ""
+
+#: backend.c:6873
+msgid ""
+"Displayed position is not current.\n"
+"Step forward to the correct position and try again."
+msgstr ""
+
+#: backend.c:6921
+msgid "You have not made a move yet"
+msgstr ""
+
+#: backend.c:6942
+msgid ""
+"The cmail message is not loaded.\n"
+"Use Reload CMail Message and make your move again."
+msgstr ""
+
+#: backend.c:6947
+msgid "No unfinished games"
+msgstr ""
+
+#: backend.c:6953
+#, c-format
+msgid ""
+"You have already mailed a move.\n"
+"Wait until a move arrives from your opponent.\n"
+"To resend the same move, type\n"
+"\"cmail -remail -game %s\"\n"
+"on the command line."
+msgstr ""
+
+#: backend.c:6968
+msgid "Failed to invoke cmail"
+msgstr ""
+
+#: backend.c:7030
+msgid "Waiting for reply from opponent\n"
+msgstr ""
+
+#: backend.c:7053
+msgid "Still need to make move for game\n"
+msgstr ""
+
+#: backend.c:7058
+msgid "Still need to make moves for both games\n"
+msgstr ""
+
+#: backend.c:7063
+#, c-format
+msgid "Still need to make moves for all %d games\n"
+msgstr ""
+
+#: backend.c:7071
+#, c-format
+msgid "Still need to make a move for game %s\n"
+msgstr ""
+
+#: backend.c:7077
+msgid "No unfinished games\n"
+msgstr ""
+
+#: backend.c:7079
+msgid "Ready to send mail\n"
+msgstr ""
+
+#: backend.c:7085
+#, c-format
+msgid "Still need to make moves for games %s\n"
+msgstr ""
+
+#: backend.c:7237
+msgid "Edit comment"
+msgstr ""
+
+#: backend.c:7239
+#, c-format
+msgid "Edit comment on %d.%s%s"
+msgstr ""
+
+#: backend.c:7270 backend.c:7297
+msgid "Analysis"
+msgstr ""
+
+#: backend.c:7271 backend.c:7298
+msgid ""
+"Starting analysis mode...\n"
+"If this message stays up, your chess program does not support analysis."
+msgstr ""
+
+#: backend.c:7330
+msgid "It is not White's turn"
+msgstr ""
+
+#: backend.c:7393
+msgid "It is not Black's turn"
+msgstr ""
+
+#: backend.c:7474 backend.c:8405
+msgid ""
+"Wait until your turn,\n"
+"or select Move Now"
+msgstr ""
+
+#: backend.c:7506
+msgid "Starting second chess program"
+msgstr ""
+
+#: backend.c:7571
+msgid "Training mode off"
+msgstr ""
+
+#: backend.c:7579
+msgid "Training mode on"
+msgstr ""
+
+#: backend.c:7582
+msgid "Already at end of game"
+msgstr ""
+
+#: backend.c:7663
+msgid "Warning: You are still playing a game"
+msgstr ""
+
+#: backend.c:7666
+msgid "Warning: You are still observing a game"
+msgstr ""
+
+#: backend.c:7669
+msgid "Warning: You are still examining a game"
+msgstr ""
+
+#: backend.c:7942
+msgid "That square is occupied"
+msgstr ""
+
+#: backend.c:7966 backend.c:7992
+msgid "There is no pending offer on this move"
+msgstr ""
+
+#: backend.c:8028 backend.c:8039
+msgid "Your opponent is not out of time"
+msgstr ""
+
+#: backend.c:8074
+msgid "You must make your move before offering a draw"
+msgstr ""
+
+#: backend.c:8387
+msgid "You are not examining a game"
+msgstr ""
+
+#: backend.c:8391
+msgid "You can't revert while pausing"
+msgstr ""
+
+#: backend.c:8445 backend.c:8452
+msgid "It is your turn"
+msgstr ""
+
+#: backend.c:8502 backend.c:8509 backend.c:8528 backend.c:8535
+msgid "Wait until your turn"
+msgstr ""
+
+#: backend.c:8514
+msgid "No hint available"
+msgstr ""
+
+#: backend.c:8820
+#, c-format
+msgid "Error writing to %s chess program"
+msgstr ""
+
+#: backend.c:8841
+#, c-format
+msgid "Error: %s chess program (%s) exited unexpectedly"
+msgstr ""
+
+#: backend.c:8847
+#, c-format
+msgid "Error reading from %s chess program (%s)"
+msgstr ""
+
+#: backend.c:9350 backend.c:9372
+msgid "Both flags fell"
+msgstr ""
+
+#: backend.c:9352
+msgid "White's flag fell"
+msgstr ""
+
+#: backend.c:9374
+msgid "Black's flag fell"
+msgstr ""
+
+#: backend.c:9972
+msgid "Bad FEN position in clipboard"
+msgstr ""
diff --git a/pxboard b/pxboard
old mode 100755
new mode 100644
diff --git a/readme.htm b/readme.htm
new file mode 100644
index 0000000..ca59e5c
--- /dev/null
+++ b/readme.htm
@@ -0,0 +1,223 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+</head>
+<body>
+<big><span style="font-weight: bold;">Tinkering with Winboard<br>
+by Alessandro Scotti<br>
+</span></big><br>
+Last update: March 22, 2005.<br>
+<br>
+This readme is about some modifications I made to Winboard 4.2.7. Some
+will work in Xboard too, while others are for Winboard only.
+Regardless, everything here is absolutely experimental and has been
+tested very little... so no warranties ok?<br>
+<br>
+All modified sources are included in this archive, the rest can be
+downloaded from <a href="http://www.tim-mann.org/xboard.html">Tim
+Mann's Xboard page</a>. Please feel free to take my changes and use
+them as you like, they are released under the GPL.<br>
+<br>
+<big><span style="font-weight: bold;">Game adjudication</span></big><br>
+<br>
+User can adjudicate a game between two machines, using the "Action"
+menu. Note that this only works if two machines are playing.<br>
+<br>
+Also, it is possible to adjudicate a game automatically with this
+parameter:<br>
+<br>
+<div style="margin-left: 40px;">/adjudicateLossThreshold=-700<br>
+</div>
+<br>
+if set to a negative value, Winboard will adjudicate a game if a engine
+can't get a score above the specified threshold for 3 full moves (6
+plies). Note that both engines must agree on the score value, and also
+the game is only adjudicated after the last move from the losing engine.<br>
+<br>
+Adjudication is still under test!<br>
+<br>
+<big><span style="font-weight: bold;">Background textures</span></big><br>
+<br>
+Add the following to winboard.ini:<br>
+<br>
+<div style="margin-left: 40px;">/liteBackTextureFile="sandstone_w.bmp"<br>
+/darkBackTextureFile="sandstone_b.bmp"<br>
+/liteBackTextureMode=1<br>
+/darkBackTextureMode=1<br>
+</div>
+<br>
+Of course you can choose any file you like for texturing the light and
+dark squares, as long as it's a valid BMP (Windows bitmap) file. <br>
+<br>
+Valid texture modes are 1 (default) and 2. In mode 1 the squares are
+taken from portions of the texture bitmap and copied without further
+processing. In mode 2, squares can also be rotated, mirrored and so on
+in order to provide a little more variety to the texture. The
+operations are selected at random so the board will look slightly
+different every time the program is run.<br>
+<br>
+Note: to "comment out" a filename, put an asterisk in front of it, i.e.
+"*sandstone.bmp" will be skipped.<br>
+<br>
+Additionally it is possible to override the size of the "gap" between
+the squares, which is otherwise selected automatically. Add this to
+winboard.ini:<br>
+<br>
+<div style="margin-left: 40px;">/overrideLineGap=2<br>
+</div>
+<br>
+I have added this because textures usually look better with a smaller
+or no gap. Any negative value will ignore the override and use the
+standard value from Winboard.<br>
+<br>
+The combination of these parameters can produce very interesting
+effects, see for example <a
+ href="http://usuarios.lycos.es/alexwbtm/Test/">Alex Guerrero's page</a>.<br>
+<br>
+<big><span style="font-weight: bold;">Font-based rendering of chess
+pieces</span></big><br>
+<br>
+It is possible to use chess fonts to draw pieces, in place of the usual
+bitmaps. You have to specify the font name by adding the following to
+winboard.ini:<br>
+<br>
+<div style="margin-left: 40px;">/renderPiecesWithFont="Chess Leipzig"<br>
+</div>
+<br>
+Chances are the program will automatically recognize the font and
+select the proper mapping, i.e. the correspondence between a chess
+piece and the corresponding font character. So if the board looks good
+you're set and there's nothing else to do, otherwise you'll have to
+find the proper mapping and tell it to the program with&nbsp; this
+setting:<br>
+<br>
+<div style="margin-left: 40px;">/fontPieceToCharTable="phbrqkojntwl"<br>
+</div>
+<br>
+The piece are in order: white pawn, knight, bishop, rook, queen, king
+and black pawn, knight, bishop, rook, queen, king. So the example above
+tells the program to use the letter "p" for a white pawn, the letter
+"h" for a white knight, the letter "t" for a black rook and so on.<br>
+<br>
+Note: to "comment out" a font name, put an asterisk in front of it,
+i.e. "*Chess Merida" will be skipped because of the asterisk.<br>
+<br>
+It is possible to customize the font foreground and background color,
+with these settings:<br>
+<br>
+<div style="margin-left: 40px;">/fontPieceBackColorWhite=#ffffcc<br>
+/fontPieceForeColorWhite=#402010<br>
+/fontPieceBackColorBlack=#ffffcc<br>
+/fontPieceForeColorBlack=#301008<br>
+</div>
+<br>
+Colors are expressed in RGB notation. If you are not familiar with the
+RGB notation&nbsp; I would suggest to leave them alone until I manage
+to update the GUI. In this case, the program will take the board
+settings as for the usual piece set.<br>
+<br>
+It is also possible to control the size of the piece with respect to
+the square, for example this entry:<br>
+<br>
+<div style="margin-left: 40px;">/fontPieceSize=80<br>
+</div>
+<br>
+tells the program to make the pieces about 20% smaller than a square
+(i.e. the piece size is 80%). Note that different fonts may require
+different values for this parameter. Usually values in the 70-80 range
+provide the best values, however the program accepts anything from 50
+to 150.<br>
+<br>
+Font-based pieces are automatically given a "roundish" look. For now,
+this option is not mapped to a user-definable setting.<br>
+<br>
+<big><span style="font-weight: bold;">Fast clipboard pasting</span></big><br>
+<br>
+Press Ctrl-V to paste a PGN game or a FEN position from the clipboard,
+the program will try to autodetect the proper type.<br>
+<br>
+<big><span style="font-weight: bold;">Thread initialization bug</span></big><br>
+<br>
+I've tried to fix a bug reported (and fixed) by Anastasios Milikas (of
+AICE), where a thread could try to access a not yet initialized
+variable. I've used a different approach here, where threads are
+started in a "suspended" state and then released only when the variable
+has been initialized (this has the advantage of putting all the
+required fix code in one place, and the disadvantage of not having been
+tested by Anastasios).<br>
+<br>
+<big><span style="font-weight: bold;">Protection from some buffer
+overflows</span></big><br>
+<br>
+In just a few cases, I've tried to put some guard against buffer
+overflows. These are just quick attempts... a lot more work would be
+needed to provide some measurable benefits. I hope that bug **353 is
+finally fixed now. The buffer overflows were propagated across several
+functions so as soon as one was fixed another would crash!<br>
+<br>
+<big><span style="font-weight: bold;">Absolute scores can be converted
+to relative</span></big><br>
+<br>
+Some engines (e.g. Crafty, Delphi) always report scores from the white
+side (i.e. absolute), rather than the engine side (i.e. relative). This
+leads to confusion and breaks features such as automatic adjudication.
+In order to convert the scores to relative add the following to
+winboard.ini:<br>
+<br>
+<div style="margin-left: 40px;">/firstScoreAbs=false<br>
+</div>
+<br>
+If true, the score of the first program is absolute and will be negated
+when playing black. And similarly:<br>
+<br>
+<div style="margin-left: 40px;">/secondScoreAbs=false<br>
+</div>
+<br>
+if true, the score of the second program is absolute and will be
+negated when playing black.<br>
+<br>
+<big><span style="font-weight: bold;">Engine search info can be saved
+in a PGN file</span></big><br>
+<br>
+Add the following to winboard.ini:<br>
+<br>
+<div style="margin-left: 40px;">/pgnExtendedInfo=true<br>
+</div>
+<br>
+If true, and the PGN save game option is enabled, each move will be
+followed by a comment&nbsp; containing the engine score and thinking
+depth (when available).<br>
+<br>
+Note: can also be set from the General options dialog.<br>
+<br>
+<big><span style="font-weight: bold;">Engine search info can be hidden
+in human-computer games</span></big><br>
+<br>
+When "show thinking" is disabled, engine thinking is not generated at
+all, rather than simply hidden. It is now possible to generate the
+think lines (e.g. for logging or saving in the PGN) yet hide them when
+the engine is playing against a human player. Add the following to
+winboard.ini:<br>
+<br>
+<div style="margin-left: 40px;">/hideThinkingFromHuman=true<br>
+</div>
+<br>
+Note: can also be set from the General options dialog.<br>
+<br>
+<big><span style="font-weight: bold;">Asymmetric time controls</span></big><br>
+<br>
+Very experimental! You can enter two time controls in the usual dialog,
+separated by "/". If so, white will be assigned the first time and
+black the second. So for example "0:30/2:00" will give 30 seconds to
+white and 2 minutes to black.<br>
+<br>
+Note: for now these times stay with black and white, rather than the
+corresponding player.<br>
+<br>
+<big><span style="font-weight: bold;">User interface</span></big><br>
+<br>
+Options to "hide thinking from human" and "save extended info in PGN"
+now appears in the "General" options dialog.<br>
+<br>
+</body>
+</html>
diff --git a/readme_HGM.txt b/readme_HGM.txt
new file mode 100644
index 0000000..e51a8a0
--- /dev/null
+++ b/readme_HGM.txt
@@ -0,0 +1,411 @@
+Winboard_F.4.3.12 release notes
+
+This WinBoard (beta-)version is derived from Allessandro Scotti's Winboard_x, and supports the following new options, mainly in the area of adjudication of engine-engine games, improved Crazyhouse support, and allowing variants with non-conventional pieces and or board sizes. (All option are shown here with their default values):
+
+/variant=normal 
+This (already existing) option has been expanded with several new variants, involving non-conventional pieces and deviating board sizes. The board size is automatically adapted to the selected variant, unless explicitly overruled (see below). The new variants are (with default board size, files x ranks, in parentheses): 
+
+variant name    Game           board     description
+knightmate    Knightmate        (8x8)  Variant where the King moves as a Knight, and vice versa 
+capablanca    Capablanca Chess (10x8)  Variant featuring Archbishop and Chancellor as new pieces 
+gothic        Gothic Chess     (10x8)  Same as Capablanca, with a more interesting opening position 
+courier       Courier Chess    (12x8)  a Medieval form that combines elements of Shatranj and modern Chess 
+shogi         Shogi             (9x9)  Japanese Chess 
+xiangqi       Xiangqi          (9x10)  Chinese Chess 
+fairy         Fairy Chess       (8x8)  Variant were you can use all pieces of other variants together 
+ 
+The variant can be set from the newly added "File -> New Variant..." sub-menu. 
+Extra board files are indicated by the letters i, j, k, l, ... For boards with more than 9 ranks, the counting starts at zero! More than 10 ranks is not tested and unlikely to work in the area of PGN saving / reading. Non-FIDE pieces will be referred to in FENs and PGN by letters that depend on the variant, and might collide with piece designators in other variants. E.g. in Xiangqi 'C' is a Cannon, in Capablanca Chess it is a Chancellor. Pieces that do not belong in a variant cannot be addressed in FEN and PGN either, for as long as that variant is selected, unless the letter assignment is overruled with the aid of the /pieceToCharTable option. The variant is not saved in the winboard.ini file; on start-up we always get variant "normal" unless we use the command-line option, or have added the option to the winboard.ini file manually (in which case it will disappear when this file is overwritten by WinBoard saving its options). 
+WinBoard_F knows the movement of all pieces occurring in Capablanca Chess (of which FIDE Chess is a subset), Shatranj, Courier, Xiangqi and 9x9 Shogi, so that these games can be played with legality testing enabled. 
+
+/pieceToCharTable="PNBRQFWEMOUHACGSKpnbrqfwemouhacgsk" 
+Each piece that WinBoard knows (in its legality test) has a letter associated with it, by which it will be referred to in FEN or PGN. The default assignment can be overruled with this option. The value has to be a string of even length, with at least 12 characters. The first half of the string designates the white pieces, the second half the black. 
+The last letter for each color will be assigned to the King. (This is the piece that moves as an orthodox King; note that Nightmate and Xiangqi have a different royal piece.) All letters before it will be assigned to the other pieces in the order: 
+
+P Pawn                 (move often depends on variant) 
+N Knight               (move subtly different in Xiangqi (where it is written as H) or Shogi) 
+B Bishop 
+R Rook 
+Q Queen                (Lance L in Shogi) 
+F Ferz/General         (The Shatranj 'Queen' and Xiangqi 'Adviser', used for Silver General S in Shogi.) 
+W Wazir/GrandVizer     (Gold General G in Shogi, in Xiangqi it is royal and denoted by K) 
+E Alfil/Elephant       (Moves subtly different in Xiangqi vs Shatranj/Courier) 
+M Commoner/Man
+O Cannon/Pao 
+U Unicorn              (representation of Royal Knight in Knightmate, used as promoted Pawn in Shogi) 
+H Nightrider           (Promoted Knight in Shogi and CrazyHouse) 
+A Archbishop/Cardinal  (Promoted Bishop in Shogi and CrazyHouse) 
+C Chancellor/Marshall  (Promoted Rook   in Shogi and CrazyHouse) 
+G Grasshopper          (Promoted Queen in Crazyhouse, promoted Lance in Shogi) 
+S                      (Promoted Silver in Shogi) 
+K King 
+ 
+Pieces that are not mentioned (because the argument has less than 34 characters) will remain disabled. Mentioned pieces can be disabled by assigning them a '.' (period). They are then not recognized in FEN or PGN input. Non-FIDE pieces that are not assigned a letter will also not appear on the promotion menu. It is not advisable to disable a piece that is present in the opening position of the selected variant, though. 
+Promoted pieces that need to be distinguished from original pieces of the same type (because of demotion on capture and transfer to the holdings) will be indicated by the letter for the unpromoted piece with a '+' in front of it (Shogi), or by the letter of the promoted piece with a '~' after it (Crazyhouse, Bughouse, in general everything with holdings that is not Shogi). To achieve this, they should be assigned the characters '+' or '~', respectively.
+All the new pieces have a native bitmap representation in the board sizes 'bulky' and 'middling'. For all window sizes that do not support such fairy bitmaps, promoted NBRQ are represented as a 2-sizes-smaller normal piece symbol, so that Crazyhouse can be played at any size. People disliking the fairy representations might even prefer this. 
+There is an enhanced 'Edit Position' menu popup (right-clicking on the squares after selecting this mode in the main menu), featuring some common non-FIDE pieces, and 'promote' and 'demote' options to make those not directly in the menu. The promotion popup shows ArchBishop and Chancellor in Capablanca and Gothic, (or in fact in any game where this piece is not disabled or a promoted version of a normal piece), and leaves only the options YES / NO in Shogi. In Xiangqi there are no promotions.
+
+/fontPieceToCharTable="PNBRQFWEMOUHACGSKpnbrqfwemouhacgsk" 
+This option is similar to /pieceToCharTable, but sets the font character that is used to display the piece on the screen (when font-based rendering is in use), rather than in the FEN or PGN. The default setting should work with George Tsavdaris' WinboardF font, which uses the 'intuitive' mapping of font characters to symbols. With font-based rendering the fairy pieces can be used at any board size.
+Note that UHACGS are also used to represent the promoted versions of PNBRQF, in games like Crazyhouse and Shogi, where the promotion has to be undone on capture. In such games you are likely to prefer a different representation of those pieces then when they represent true fairy pieces.
+
+/boardWidth=-1 /boardHeight=-1 
+Set a number of files and ranks of the playing board to a value that will override the defaults for the variant that is selected. A value of -1 means the variant default board size will be used for the corresponding parameter (and is itself the default value of these options). These parameters can be set in the "Files -> New Variant..." sub-menu, where they are reset to the default -1 if you OK the chosen variant without typing something to overrule it. These parameters are saved in the winboard.ini file. (But unless you saved while a variant with board-size override was selected, they will always be saved as -1.) 
+A variant with a non-standard board size will be communicated to the engine(s) with the board size prefixed to the variant name, e.g. "variant 12x8_capablanca". In protocol 2 the engine must first enable this feature by sending "boardsizeFxR" amongst the accepted variants, where F is the maximum number of files, and R the maximum number of ranks, as decimal numbers. 
+
+/holdingsSize=-1 
+Set the size of the holdings for dropable pieces to a value that will override the default for the variant that is selected. A value of -1 means the variant default holdings size will be used for that parameter (and is itself the default value of this options). This parameter can be set in the Files -> New Variant... sub-menu, where it is reset to the default -1 if you OK the chosen variant without typing something to overrule it. This parameters is saved in the winboard.ini file. 
+To disable holdings, set their size to 0. They will then not be displayed. For non-zero holding size N, the holdings are displayed left and right of the board, and piece drops can be effected by dragging pieces from the holdings to the drop square. In bughouse, the holdings will be filled by the ICS. In all other variants, captured pieces will go into the holdings (after reversing their color). Only the first N pieces of the /pieceToCharTable argument will go into the holdings. All other pieces will be converted to Pawns. (In Shogi, however they will be demoted in the regular way before determining if they fit.) Pieces that are disabled (per default and per /pieceToCharTable option) might not be counted when determining what are the first N pieces. 
+Non-standard holdingsize will be communicated to the engine by prefixing it (together with the board size, even if this is standard) to the variant name, e.g. "variant 7x7+5_shogi". In protocol 2 the engine should enable this feature by sending "holdingsH" amongst the variant names, where H is the maximum acceptable holdings size as a decimal number. 
+
+/alphaRank=FALSE 
+When this parameter is true, a-h are converted to 1-9, and vice versa, in all move output and input (to PGN files or SAN move display as well as in communication with the engine). This might be useful for Shogi, where conventionally one uses letters to designate ranks, and digits to designate files. Engines that want to use this option must make sure pieces are never represented by lower case! This option can be set from the Files -> New Variant... menu, where it defaults to FALSE unless you explicitly set it. It is not saved in the winboard.ini file. 
+This kludge does not seem to work for reading PGN files. Saving works fine. For now, using it is not recommended. In the future it might be redefined as only affecting engine-engine communication, .
+Note that the PGN format in Shogi also leaves out the trailing '+' as check indicator: In Shogi such a trailing '+' means promotion, while a trailing '=' means defer promotion. Prefix '+' signs are used on moves with promoted pieces, disambiguation is done western SAN style.
+
+/allWhite=FALSE
+Causes the outline of the 'white' pieces to be superimposed onto the 'black' piece symbols as well (as a black outline) when native bitmaps are used (as opposed to font-based rendering). This is useful if we choose a very light color to represent the 'black' pieces. It might be particularly useful in Shogi, where the conventional representation of the 'black' pieces is as upside-down white pieces, so that both colors would be white. This option is saved in the winboard.ini file, and can be set in the "Options -> Board..." sub-menu. 
+
+/flipBlack=FALSE
+Setting this option will cause upside-down display of the native piece bitmaps used to represent the pieces of the side that plays black, as would be needed for a traditional representation of Shogi pieces. It can be set from the "Options -> Board..." sub-menu, and it is saved in the winboard.ini file. For now, traditional Shogi bitmaps are only included for size "moderate". For other sizes you must depend on font-based rendering.
+
+/detectMate=TRUE 
+/testClaim=TRUE 
+/materialDraws=TRUE 
+/trivialDraws=FALSE 
+/ruleMoves=51 
+/repeatsToDraw=6 
+These are all options that only affect engine-engine play, and can be set from the "Options -> Engine..." sub-menu. They are all related to adjudication of games by the GUI. Legality checking must be switched on for them to work. 
+If /detectMate is TRUE, the GUI recognizes checkmate and stalemate (but not in games with holdings!), and ends the game accordingly before the engines can claim. This is convenient for play with engines that fail to claim, and just exit. 
+With /testClaim set, all result and illegal-move claims by engines that claim more than their own loss are scrutinized for validity, and false claims result in forfeit of the game. Useful with buggy engines. 
+The option /materialDraws=TRUE causes games with insufficient mating material to be adjudicated immediately as draws, in case the engines would not claim these draws. This applies to KK, KNK and KBK.
+The option /trivialDraws adjudicates KNNK, KBKB, KNKN, KBKN, KRKR and KQKQ to draws after 3 moves (to allow for a quick tactical win). Note that in KQKQ this might not be sound, but that problem would disappear once bitbase probing is implemented. 
+The /ruleMoves determine after how many reversible moves the game is adjudicated as a draw. Setting this to 0 turns this option off. Draw claims by the engine are still accepted (with /testClaim=TRUE) after 50 reversible moves, even if /ruleMoves species a larger number. Note that it is perfectly legal according to FIDE rules to play on after 50 reversible moves, but in tournaments having two engines that want to play on forever is a nuisance in endings like KBNKR, where one of the engines thinks it is ahead and can avoids repeats virtually forever. 
+The option /repeatsToDraw makes the GUI adjudicate a game as draw after the same position has occurred the specified number of times. If it is set to a value > 3, engines can still claim the draw after 3-fold repeat. 
+All these options are saved in the winboard.ini file. 
+
+/matchPause=10000 
+Determines the number of milliseconds that is paused between two games of a match. In the old WinBoard this was always 10 sec, which was inconveniently long in fast games. If you make the pause too short, tardy engines might get into trouble, though. Saved in the Winboard.ini.
+
+Clocks
+There is an "Options -> swap clocks" command, that swaps the position of white and black clocks (convenient in over-the-board matches, where the display is standing next to the board, and you want your own time to be displayed on your side of the screen). The clocks can be adjusted in "edit game" mode: right-clicking them adds one minute, left-clicking subtracts one minute. (Also for OTB matches, to keep them synchronized with the official match clock.) The flag-fell condition is now indicated as '(!)' behind the displayed time, to eliminate the necessity for overwriting the message in the title bar (which might contain indispensible information in match mode).
+
+Other improvements / changes
+Castling rights and e.p. rights are now fully maintained, and considered in legality testing. They are imported from and written to FEN, as is the 50-move counter. (When reading an incomplete FEN they are still guessed, though.) 
+The time (in sec, or min:sec) is now always stored together with the PV information to the PGN, if storing the latter was requested (through ticking "extended PGN info" in "Options -> General..."). The saved time is the WinBoard clock time (as opposed to the time reported by the engine).
+
+----------------------------------------------------------------
+Winboard_F.4.3.8 release notes
+
+This Winboard supports the following new options (shown here with their default values):
+
+/variant=normal 
+This (already existing) option has been expanded with several new variants, involving non-conventional pieces and deviating board sizes. The board size is automatically adapted to the selected variant, unless explicitly overruled (see below). The new variants are (with default board size, files x ranks, in parentheses): 
+
+variant name    Game           board     description
+knightmate    Knightmate        (8x8)  Variant where the King moves as a Knight, and vice versa 
+capablanca    Capablanca Chess (10x8)  Variant featuring Archbishop and Chancellor as new pieces 
+gothic        Gothic Chess     (10x8)  Same as Capablanca, with a more interesting opening position 
+courier       Courier Chess    (12x8)  a Medieval form that combines elements of Shatranj and modern Chess 
+shogi         Shogi             (9x9)  Japanese Chess 
+xiangqi       Xiangqi          (9x10)  Chinese Chess 
+fairy         Fairy Chess       (8x8)  Variant were you can use all pieces of other variants together 
+ 
+The variant can be set from the newly added "File -> New Variant..." sub-menu. 
+Extra board files are indicated by the letters i, j, k, l, ... For boards with more than 9 ranks, the counting starts at zero! Non-FIDE pieces will be referred to in FENs and PGN by letters that depend on the variant, and might collide with piece designators in other variants. E.g. in Xiangqi 'C' is a Cannon, in Capablanca Chess it is a Chancellor. Pieces that do not belong in a variant cannot be addressed in FEN and PGN either as long as that variant is selected, unless the letter assignment is overruled by the /pieceToCharTable option. The variant is not saved in the winboard.ini file; on start-up we always get variant "normal" unless we use the command-line opton, or have added the option to the winboard.ini file manually (in which case it will disappear when this file is overwritten). 
+WinBoard_F knows the movement of all pieces occurring in Capablanca Chess (of which FIDE Chess is a subset), Shatranj, Courier, Xiangqi and 9x9 Shogi, so that these games can be played with legality testing enabled. 
+
+/pieceToCharTable="PNBRQFWEMOUHACGSKpnbrqfwemouhacgsk" 
+Each piece that WinBoard knows (in its legality test) has a letter associated with it, by which it will be referred to in FEN or PGN. The default assignment can be overruled with this option. The value has to be a string of even length, with at least 12 characters. The first half of the string designates the white pieces, the second half the black. 
+The last letter for each color will be assigned to the King. (This is the piece that moves as an orthodox King; note that Nightmate and Xiangqi have a different royal piece.) All letters before it will be assigned to the other pieces in the order: 
+
+P Pawn                 (move often depends on variant) 
+N Knight               (move subtly different in Xiangqi (where it is written as H) or Shogi) 
+B Bishop 
+R Rook 
+Q Queen                (Lance L in Shogi) 
+F Ferz/General         (Silver General S in Shogi) 
+W Wazir/GrandVizer     (Gold General G in Shogi, in Xiangqi it is royal and denoted by K) 
+E Alfil/Elephant       (Moves subtly different in Xiangqi vs Shatranj/Courier) 
+M Commoner/Man 
+O Cannon/Pao 
+U Unicorn              (representation of Royal Knight in Knightmate, used as promoted Pawn in Shogi) 
+H Nightrider           (Promoted Knight in Shogi and CrazyHouse) 
+A Archbishop/Cardinal  (Promoted Bishop in Shogi and CrazyHouse) 
+C Chancellor/Marshall  (Promoted Rook   in Shogi and CrazyHouse) 
+G Grasshopper          (Promoted Queen in Crazyhouse, promoted Lance in Shogi) 
+S                      (Promoted Silver in Shogi) 
+K King 
+ 
+Pieces that are not mentioned (because the argument has less than 34 characters) will remain disabled. Mentioned pieces can be disabled by assigning them a '.' (period). They are then not recognized in FEN or PGN input. It is not advisable to disable a piece that is present in the opening position of the selected variant, though. 
+Promoted pieces that need to be distinguished from original pieces of the same type (because of demotion on capture and transfer to the holdings) will be indicated by the letter for the unpromoted piece with a '+' in front of it (Shogi), or by the letter of the promoted piece with a '~' after it (Crazyhouse, Bughouse, in general everything with holdings that is not Shogi). 
+All the new pieces have a native biytmap representation in the board sizes 'bulky' and 'middling'. For all window sizes that do not support such fairy bitmaps, promoted NBRQ are represented as a 2-sizes-smaller normal piece symbol, so that Crazyhouse can be played at any size. People disliking the fairy representations might even prefer that. 
+There is an enhanced 'Edit Position' menu popup (right-clicking on the squares after selecting this mode in the main menu), featuring some common non-FIDE pieces, and 'promote' and 'demote' options to make those not directly in the menu. The promotion popup shows ArchBishop and Chancellor in Capablanca and Gothic, (or in fact in any game where this piece is not disabled), and leaves only the options YES / NO in Shogi. In Xiangqi there are no promotions.
+
+/fontPieceToCharTable="PNBRQFWEMOUHACGSKpnbrqfwemouhacgsk" 
+This option is similar to /pieceToCharTable, but sets the font character that is used to display the piece on the screen (when font-based rendering is in use), rather than in the FEN or PGN. The default setting should work with the WinboardF font, which uses the 'intuitive' mapping of font characters to symbols. 
+Note that UHACGS are also used to represent the promoted versions of PNBRQF, in games like Crazyhouse and Shogi, where the promotion has to be undone on capture.
+
+/boardWidth=-1 /boardHeight=-1 
+Set a number of files and ranks of the playing board to a value that will override the defaults for the variant that is selected. A value of -1 means the variant default board size will be used for the corresponding parameter (and is itself the default value of these options). These parameters can be set in the "Files -> New Variant..." sub-menu, where they are reset to the default -1 is you OK the chosen variant without typing something to overrule it. These parameters are saved in the winboard.ini file. (But unless you saved while a variant with board-size override was selected, they will always be saved as -1.) 
+A variant with a non-standard board size will be communicated to the engine(s) with the board size prefixed to the variant name, e.g. "variant 12x8_capablanca". In protocol 2 the engine must first enable this feature by sending "boardsizeFxR" amongst the accepted variants, where F is the maximum number of files, and R the maximum number of ranks, as decimal numbers. 
+
+/holdingsSize=-1 
+Set the size of the holdings for dropable pieces to a value that will override the default for the variant that is selected. A value of -1 means the variant default holdings size will be used for that parameter (and is itself the default value of this options). This parameter can be set in the Files -> New Variant... sub-menu, where it is reset to the default -1 is you OK the chosen variant without typing something to overrule it. This parameters is saved in the winboard.ini file. 
+To disable holdings, set their size to 0. They will then not be displayed. For non-zero holding size N, the holdings are displayed left and right of the board, and piece drops can be effected by dragging pieces from the holdings to the drop square. In bughouse, the holdings will be filled by the ICS. In all other variants, captured pieces will go into the holdings (after reversing their color). Only the first N pieces of the /pieceToCharTable argument will go into the holdings. All other pieces will be converted to Pawns. (In Shogi, however they will be demoted in the regular way before determining if they fit.) Pieces that are disabled (per default and per /pieceToCharTable option) might not be counted when determining what are the first N pieces. 
+Non-standard holdingsize will be communicated to the engine by prefixing it (together with the board size, even if this is standard) to the variant name, e.g. "variant 7x7+5_shogi". In protocol 2 the engine should enable this feature by sending "holdingsH" amongst the variant names, where H is the maximum acceptable holdings size as a decimal number. 
+
+/alphaRank=FALSE 
+When this parameter is true, a-h are converted to 1-9, and vice versa, in all move output and input (to PGN files or SAN move display as well as in communication with the engine). This might be useful for Shogi, where conventionally one uses letters to designate ranks, and digits to designate files. Engines that want to use this option must make sure pieces are never represented by lower case! This option can be set from the Files -> New Variant... menu, where it defaults to FALSE unless you explicitly set it. It is not saved in the winboard.ini file. 
+This kludge does not seem to work for reading PGN files. Saving works fine. For now, using it is not recommended.
+Note that the PGN format in Shogi also leaves out the trailing '+' as check indicator: In Shogi such a trailing '+' means promotion, while a trailing '=' means defer promotion. Prefix '+' signs are used on moves with promoted pieces, disambiguation is done western SAN style.
+
+/allWhite=FALSE
+Causes the outline of the 'white' pieces to be superimposed onto the 'black' piece symbols as well (as a black outline) when native bitmaps are used (as opposed to font-based rendering). This is useful if we choose a very light color to represent the 'black' pieces. It might be particularly useful in Shogi, where the conventional representation of the 'black' pieces is as upside-down white pieces, so that both colors would be white. This option is saved in the winboard.ini file, and can be set in the "Options -> Board..." sub-menu. 
+
+/flipBlack=FALSE
+Setting this option will cause upside-down display of the native piece bitmaps used to represent the pieces of the side that plays black, as would be needed for a traditional representation of Shogi pieces. It can be set from the "Options -> Board..." sub-menu, and it is saved in the winboard.ini file. For now, traditional Shogi bitmaps are not included, though.
+
+/detectMate=TRUE 
+/testClaim=TRUE 
+/materialDraws=TRUE 
+/trivialDraws=FALSE 
+/ruleMoves=51 
+/repeatsToDraw=6 
+These are all options that only affect engine-engine play, and can be set from the "Options -> Engine..." sub-menu. They are all related to adjudication of games by the GUI. Legality checking must be switched on for them to work. 
+If /detectMate is TRUE, the GUI recognizes checkmate and stalemate (but not in games with holdings!), and ends the game accordingly before the engines can claim. This is convenient for play with engines that fail to claim, and just exit. 
+With /testClaim set, all result and illegal-move claims by engines that claim more than their own loss are scrutinized for validity, and false claims result in forfeit of the game. Useful with buggy engines. 
+The option /materialDraws=TRUE causes games with insufficient mating material to be adjudicated immediately as draws, in case the engines would not claim them. 
+The option /trivialDraws adjudicates KNNK, KBKB, KNKN, KBKN, KRKR and KQKQ to draws after 3 moves (to allow for a quick tactical win. Note that in KQKQ this might not be sound, but that problem would disappear once bitbase probing is added). 
+The /ruleMoves determine after how many reversible moves the game is adjudicated as a draw. Setting this to 0 turns this option off. Draw claims by the engine are still accepted (by /testClaim) after 50 reversible moves, even if /ruleMoves species a larger number. Note that it is perfectly legal according to FIDE rules to play on after 50 reversible moves, but in tournaments having two engines that want to play on forever is a nuisance in endings like KBNKR, where one of the engines thinks it is ahead and can avoids repeats virtually forever. 
+The option /repeatsToDraw makes the GUI adjudicate a game as draw after the same position has occurred the specified number of times. If it is set to a value > 3, engines can still claim the draw after 3-fold repeat. 
+All these options are saved in the winboard.ini file. 
+
+/matchPause=10000 
+Determines the number of milliseconds that is paused between two games of a match. Saved in the Winboard.ini.
+
+Clocks
+There is an "Options -> flip Clocks" command, that swaps the position of white and black clocks (convenient in over-the-board matches, where the screen is next to the board, and you want your own time to be displayed on your side of the screen). The clocks can be adjusted in "edit game" mode: right-clicking them adds one minute, left-clicking subtracts one minute. (Also for OTB matches, to keep them synchronized with the official match clock.) The flag-fell condition is now indicated as (!) behind the time.
+
+Other improvements / changes
+Castling rights and e.p. rights are now fully maintained, and considered in legality testing. They are imported from and written to FEN, as is the 50-move counter. The time (in sec, or min:sec) is now always stored together with the PV information to the PGN, if storing the latter was requested (through ticking 'extended PGN info' in "Options -> General..."). The saved time is the Winboard clock time (as opposed to the time reported by the engine).
+--------------------------------------------------------------------
+Winboard_F.4.3.7 release notes
+
+This Winboard supports the following new options (shown here with their default values):
+
+/variant=normal 
+This (already existing) option has been expanded with several new variants, involving non-conventional pieces and deviating board sizes. The board size is automatically adapted to the selected variant, unless explicitly overruled (see below). The new variants are (with default board size, files x ranks, in parentheses): 
+
+variant name    Game           board     description
+knightmate    Knightmate        (8x8)  Variant where the King moves as a Knight, and vice versa 
+capablanca    Capablanca Chess (10x8)  Variant featuring Archbishop and Chancellor as new pieces 
+gothic        Gothic Chess     (10x8)  Same as Capablanca, with a more interesting opening position 
+courier       Courier Chess    (12x8)  a Medieval form that combines elements of Shatranj and modern Chess 
+shogi         Shogi             (9x9)  Japanese Chess 
+xiangqi       Xiangqi          (9x10)  Chinese Chess 
+fairy         Fairy Chess       (8x8)  Variant were you can use all pieces of other variants together 
+ 
+The variant can be set from the newly added "File -> New Variant..." sub-menu. 
+Extra board files are indicated by the letters i, j, k, l, ... For boards with more than 9 ranks, the counting starts at zero! Non-FIDE pieces will be referred to in FENs and PGN by letters that depend on the variant, and might collide with piece designators in other variants. E.g. in Xiangqi 'C' is a Cannon, in Capablanca Chess it is a Chancellor. Pieces that do not belong in a variant cannot be addressed in FEN and PGN either as long as that variant is selected, unless the letter assignment is overruled by the /pieceToCharTable option. The variant is not saved in the winboard.ini file; on start-up we always get variant "normal" unless we use the command-line opton, or have added the option to the winboard.ini file manually (in which case it will disappear when this file is overwritten). 
+WinBoard_F knows the movement of all pieces occurring in Capablanca Chess (of which FIDE Chess is a subset), Shatranj, Courier, Xiangqi and 9x9 Shogi, so that these games can be played with legality testing enabled. 
+
+/pieceToCharTable="PNBRQFWEMOUHACGSKpnbrqfwemouhacgsk" 
+Each piece that WinBoard knows (in its legality test) has a letter associated with it, by which it will be referred to in FEN or PGN. The default assignment can be overruled with this option. The value has to be a string of even length, with at least 12 characters. The first half of the string designates the white pieces, the second half the black. 
+The last letter for each color will be assigned to the King. (This is the piece that moves as an orthodox King; note that Nightmate and Xiangqi have a different royal piece.) All letters before it will be assigned to the other pieces in the order: 
+
+P Pawn                 (move often depends on variant) 
+N Knight               (move subtly different in Xiangqi (where it is written as H) or Shogi) 
+B Bishop 
+R Rook 
+Q Queen                (Lance L in Shogi) 
+F Ferz/General         (Silver General S in Shogi) 
+W Wazir/GrandVizer     (Gold General G in Shogi, in Xiangqi it is royal and denoted by K) 
+E Alfil/Elephant       (Moves subtly different in Xiangqi vs Shatranj/Courier) 
+M Commoner/Man 
+O Cannon/Pao 
+U Unicorn              (representation of Royal Knight in Knightmate, used as promoted Pawn in Shogi) 
+H Nightrider           (Promoted Knight in Shogi and CrazyHouse) 
+A Archbishop/Cardinal  (Promoted Bishop in Shogi and CrazyHouse) 
+C Chancellor/Marshall  (Promoted Rook   in Shogi and CrazyHouse) 
+G Grasshopper          (Promoted Queen in Crazyhouse, promoted Lance in Shogi) 
+S                      (Promoted Silver in Shogi) 
+K King 
+ 
+Pieces that are not mentioned (because the argument has less than 34 characters) will remain disabled. Mentioned pieces can be disabled by assigning them a '.' (period). They are then not recognized in FEN or PGN input. It is not advisable to disable a piece that is present in the opening position of the selected variant, though. 
+Promoted pieces that need to be distinguished from original pieces of the same type (because of demotion on capture and transfer to the holdings) will be indicated by the letter for the unpromoted piece with a '+' in front of it (Shogi), or by the letter of the promoted piece with a '~' after it (Crazyhouse, Bughouse, in general everything with holdings that is not Shogi). 
+All the new pieces have a native biytmap representation in the board sizes 'bulky' and 'middling'. For all window sizes that do not support such fairy bitmaps, promoted NBRQ are represented as a 2-sizes-smaller normal piece symbol, so that Crazyhouse can be played at any size. People disliking the fairy representations might even prefer that. 
+There is an enhanced 'Edit Position' menu popup (right-clicking on the squares after selecting this mode in the main menu), featuring some common non-FIDE pieces, and 'promote' and 'demote' options to make those not directly in the menu. The promotion popup shows ArchBishop and Chancellor in Capablanca and Gothic, (or in fact in any game where this piece is not disabled), and leaves only the options YES / NO in Shogi. In Xiangqi there are no promotions.
+
+/fontPieceToCharTable="PNBRQFWEMOUHACGSKpnbrqfwemouhacgsk" 
+This option is similar to /pieceToCharTable, but sets the font character that is used to display the piece on the screen (when font-based rendering is in use), rather than in the FEN or PGN. The default setting should work with the WinboardF font, which uses the 'intuitive' mapping of font characters to symbols. 
+Note that UHACGS are also used to represent the promoted versions of PNBRQF, in games like Crazyhouse and Shogi, where the promotion has to be undone on capture.
+
+/boardWidth=-1 /boardHeight=-1 
+Set a number of files and ranks of the playing board to a value that will override the defaults for the variant that is selected. A value of -1 means the variant default board size will be used for the corresponding parameter (and is itself the default value of these options). These parameters can be set in the "Files -> New Variant..." sub-menu, where they are reset to the default -1 is you OK the chosen variant without typing something to overrule it. These parameters are saved in the winboard.ini file. (But unless you saved while a variant with board-size override was selected, they will always be saved as -1.) 
+A variant with a non-standard board size will be communicated to the engine(s) with the board size prefixed to the variant name, e.g. "variant 12x8_capablanca". In protocol 2 the engine must first enable this feature by sending "boardsizeFxR" amongst the accepted variants, where F is the maximum number of files, and R the maximum number of ranks, as decimal numbers. 
+
+/holdingsSize=-1 
+Set the size of the holdings for dropable pieces to a value that will override the default for the variant that is selected. A value of -1 means the variant default holdings size will be used for that parameter (and is itself the default value of this options). This parameter can be set in the Files -> New Variant... sub-menu, where it is reset to the default -1 is you OK the chosen variant without typing something to overrule it. This parameters is saved in the winboard.ini file. 
+To disable holdings, set their size to 0. They will then not be displayed. For non-zero holding size N, the holdings are displayed left and right of the board, and piece drops can be effected by dragging pieces from the holdings to the drop square. In bughouse, the holdings will be filled by the ICS. In all other variants, captured pieces will go into the holdings (after reversing their color). Only the first N pieces of the /pieceToCharTable argument will go into the holdings. All other pieces will be converted to Pawns. (In Shogi, however they will be demoted in the regular way before determining if they fit.) Pieces that are disabled (per default and per /pieceToCharTable option) might not be counted when determining what are the first N pieces. 
+Non-standard holdingsize will be communicated to the engine by prefixing it (together with the board size, even if this is standard) to the variant name, e.g. "variant 7x7+5_shogi". In protocol 2 the engine should enable this feature by sending "holdingsH" amongst the variant names, where H is the maximum acceptable holdings size as a decimal number. 
+
+/alphaRank=FALSE 
+When this parameter is true, a-h are converted to 1-9, and vice versa, in all move output and input (to PGN files or SAN move display as well as in communication with the engine). This might be useful for Shogi, where conventionally one uses letters to designate ranks, and digits to designate files. Engines that want to use this option must make sure pieces are never represented by lower case! This option can be set from the Files -> New Variant... menu, where it defaults to FALSE unless you explicitly set it. It is not saved in the winboard.ini file. 
+Note that the PGN format in Shogi also leaves out the trailing '+' as check indicator: In Shogi such a trailing '+' means promotion, while a trailing '=' means defer promotion. Prefix '+' signs are used on moves with promoted pieces, disambiguation is done western SAN style.
+
+/allWhite=FALSE
+Causes the outline of the 'white' pieces to be superimposed onto the 'black' piece symbols as well (as a black outline) when native bitmaps are used (as opposed to font-based rendering). This is useful if we choose a very light color to represent the 'black' pieces. It might be particularly useful in Shogi, where the conventional representation of the 'black' pieces is as upside-down white pieces, so that both colors would be white. This option is saved in the winboard.ini file, and can be set in the "Options -> Board..." sub-menu. 
+
+/flipBlack=FALSE
+This option is reserved for future use. It will cause upside-down display of the 'black' native piece bitmaps, as would be needed for Shogi. For now it can be set from the "Options -> Board..." sub-menu, and it is saved in the winboard.ini file, but it is ignored.
+
+/detectMate=TRUE 
+/testClaim=TRUE 
+/materialDraws=TRUE 
+/trivialDraws=FALSE 
+/ruleMoves=51 
+/repeatsToDraw=6 
+These are all options that only affect engine-engine play, and can be set from the "Options -> Engine..." sub-menu. They are all related to adjudication of games by the GUI. Legality checking must be switched on for them to work. 
+If /detectMate is TRUE, the GUI recognizes checkmate and stalemate (but not in games with holdings!), and ends the game accordingly before the engines can claim. This is convenient for play with engines that fail to claim, and just exit. 
+With /testClaim set, all result and illegal-move claims by engines that claim more than their own loss are scrutinized for validity, and false claims result in forfeit of the game. Useful with buggy engines. 
+The option /materialDraws=TRUE causes games with insufficient mating material to be adjudicated immediately as draws, in case the engines would not claim them. 
+The option /trivialDraws adjudicates KNNK, KBKB, KNKN, KBKN, KRKR and KQKQ to draws after 3 moves (to allow for a quick tactical win. Note that in KQKQ this might not be sound, but that problem would disappear once bitbase probing is added). 
+The /ruleMoves determine after how many reversible moves the game is adjudicated as a draw. Setting this to 0 turns this option off. Draw claims by the engine are still accepted (by /testClaim) after 50 reversible moves, even if /ruleMoves species a larger number. Note that it is perfectly legal according to FIDE rules to play on after 50 reversible moves, but in tournaments having two engines that want to play on forever is a nuisance in endings like KBNKR, where one of the engines thinks it is ahead and can avoids repeats virtually forever. 
+The option /repeatsToDraw makes the GUI adjudicate a game as draw after the same position has occurred the specified number of times. If it is set to a value > 3, engines can still claim the draw after 3-fold repeat. 
+All these options are saved in the winboard.ini file. 
+
+/matchPause=10000 
+Determines the number of milliseconds that is paused between two games of a match. Saved in the Winboard.ini.
+
+Clocks
+There is an "Options -> flip Clocks" command, that swaps the position of white and black clocks (convenient in over-the-board matches, where the screen is next to the board, and you want your own time to be displayed on your side of the screen). The clocks can be adjusted in "edit game" mode: right-clicking them adds one minute, left-clicking subtracts one minute. (Also for OTB matches, to keep them synchronized with the official match clock.) The flag-fell condition is now indicated as (!) behind the time.
+
+Other improvements
+Castling rights and e.p. rights are now fully maintained, and considered in legality testing. They are imported from and written to FEN, as is the 50-move counter.
+-------------------------------------------------------------------
+These are the release notes of Winboard_F 4.3.2,
+which is released under the GPL.
+This version was derived from Allessandro Scotti's Winboard_x 4.2.7 source files.
+It only includes the files that were changed:
+
+config.h
+common.h
+parser.h
+moves.h
+resource.h
+
+winboard.c
+backend.c
+moves.c
+
+parser.l
+winboard.rc
+
+and some bitmaps for piece symbols
+
+
+
+I made modifications in the following areas: 
+
+1) Adjudication and claim verification 
+2) Fairy pieces and board sizes other than 8x8 
+3) Miscellaneous 
+
+Miscellaneous 
+
+/matchPause=10000 
+is an option to set the length of the pause between two games of a match. The value is in msec, default value is 10000 (I will present all newly implemented options with their default value as example). Be aware that some engines might not be stopped yet if you make the pause too small, but might still be puking output, which then will interfere with the next game. But the fixed value of 10 sec of the old Winboard seemed like overdoing it. 
+
+Time info in PGN 
+When you ask for the PV-info to be stored in the PGN (a Winboard_x option), it now also stores the time spent on the move with it. 
+
+Flag fell 
+In engine-engine games the messge "white/black/both" flag(s) fell" no longer appears in the window caption, but as an exclamation point behind the clock time. (To prevent the annoying overwriting of the normal header line). 
+
+Adjudications and Claim verification. 
+
+These functions are only present in engine-engine games, and only if legality-testing is switched on. (The latter will be typically switched off in games with bizarre rules, which the GUI doesn't know, and in that case the GUI can never have an opinion on the outcome of a game.) 
+
+Illegal-move forfeit 
+As soon as one of the engines plays an illegal move, it forfeits the game. This feature was already present, but it should be 100% reliable now, as it also takes e.p. and castling rights into account, rather than erring on the safe side. 
+
+Illegal-move claim 
+From the above, it follows that any illegal-move claims by an engine must be false, and will result in forfeiting the game. (In Winboard_x this message is ignored, causing the game or match to hang.) 
+
+Checkmate adjudication 
+As soon as one of the engines does a move that results in checkmate, the GUI declares the game won, without waiting for the engine to claim it. 
+
+Insufficient mating material 
+As soon as the material on the board has shrunk to KK, KNK or KBK, the game is declared draw. 
+
+/adjudicateLossThreshold=0 
+This option was already present in Winboard_x, (to declare a game lost for which both engines agree for 3 moves that the score is below the given threshold), but a non-zero value is now also used to enable the following adjudications. If you only want the latter, just make the threshold impossibly low (-40000 will usually do the trick). 
+
+Trivial draws 
+If we are 3 moves into a KQKQ, KRKR, KBKB KBKN or KNKN end-game, the game is adjudicated as draw. 
+
+/repeatsToDraw=6 
+When the specified number of repeats occurs, the game is adjudicated draw. Should keep track of e.p. and castling rights. This does not require legality-testing to be switched on. The engines retain the legal right to claim after a 3-fold repetition, though. If you set this parameter to 3 or less, they will never get the chance. Better not set it to 1 or less. 
+
+/ruleMoves=51 
+After the given number of full moves without capture or Pawn move, the game is adjudicated draw. Even without legality testing. The engines retain the legal right to claim after 50 moves. 
+
+/testClaims=FALSE 
+When enabled, this option verifies all result claims made by the engines, and overrules the claim if it is false (forfeiting the game for the claimer). An engine can still safely claim a win for its opponent on a nonsense reason, though; this is taken to be the equivalent of 'resign'. Draw claims (made before a draw adjudication) are checked against the 50-move, 3-fold-repetition or insufficient-material rules. Win claims are always considered false, as the GUI adjudicates checkmates (and stalemates) before any engine can claim them. 
+
+Fairy-Chess support 
+
+/boardWidth=8 
+Sets the number of files on the board. The additional files are named i, j, k, l... in PGN, and should be indicated this way in communicating moves to and from the engine. Currently works upto 12. No guarantees on how the rest of the display (clocks, etc.) looks if you make this number < 8. 
+
+/boardHeight=8 
+Sets the number of ranks. Extra ranks are numbered 9, 10, 11... in PGN. This is so far largely untested, and unlikely to work for double-digit ranks. Displaying boards with upto 12 ranks seems to work, though, but double-digit ranks might cause all kind of unforseen problems in PGN file and move parser, or in communication with the engine. To avoid such problems as much as possible, in boards with more than 9 ranks the counting of ranks will start at zero rather than one!
+
+/fontPieceToCharTable="......." 
+This paramater, controlling the mapping of font symbols to piece types, was already present in Winboard_x. The default is dependent on the font selected with the /renderPiecesWithFont option. It can now accept upto 32 pieces, but the length should always be even. The first half designates the white pieces, the second half the black, both in the order PNBRACHFEWDOGMQK. (The letters mentioned here are the letters by which the pieces will be indicated in PGN and FEN notation, what you have to give as argument depends on the font you use. A black king might be 'l', for instance).
+If you give fewer then 32 pieces, this will go at the expense of what is just before Queen. So the last two symbols you give for each color are always Queen and King, the others are assigned in the order Pawn, Knight, ... Pieces that do not get a symbol assigned will remain invisible.
+
+fairy-FEN support 
+The letters ACDEFGHMOW are accepted in FENs in addition to the regular PNBRQK,(and of course the lower case versions for black), and are passed to the engine in a setboard or edit menu.
+Double-digit skips are acceptable in FENs. 'x' is interpreted as a skip of 10. 
+Castling rights should no longer be ignored. (Doesn't work for FRC yet, though.) 
+The 50-move-plies field should also be meaningful now. 
+
+Legality testing for Fairy pieces
+There is a build in notion of what some of the new pieces can do, according to
+A = Archbishop (aka Cardinal) = N+B
+C = Chancellor (aka Marshall) = N+R
+F = Ferz (aka General), moves 1 step diagonal
+W = Wazir (aka Grand Vizer), moves 1 step orthogonal
+E = Elephant (aka Alfil), jumps 2 steps diagonal
+D = Dabbabah (aka War Machine), jumps 2 steps orthogonal
+M = Man (aka Commoner), moves as King, but is not a royal piece
+O = Cannon, moves along Rook lines, but cannot capture unless it jumps over
+            exactly one piece (friend or foe), and captures the first piece
+            it encounters thereafter. It can only jump if it captures something.
+            The piece jumped over (the 'platform') is not affected.
+The other pieces have not yet any moves implemented:
+H = Nightrider
+G = Grasshopper
+In games that use the mentioned pieces as described (Shatranj, Courier, Capablanca Chess) you can leave legality testing on. If you use them to represent pieces that move differently, you should switch legality testing off.
+
+Pawn moves
+Pawn motion is made dependent on the variant played: in Shatranj and Courier the double move is forbidden. In those games promotions are always to Ferz. In Capablanca Chess the ArchBishop and Chancellor also appear as choices in the promotion popup box.
+
+
+/variant="normal" 
+Several new variants names are added (replacing "variant31" upto "variant36"). They affect the initial position. (Board size has to be set separately.) They are:
+courier    (a Medieval predecessor of modern Chess, played on a 12x8 board)
+capablanca (on a 10x8 board, featuring Archbishop and Chancellor)
+gothic     (as Capablanca, but with a more exciting initial setup)
+xiangqi    (Chinese Chess)
+shogi      (Japanese Chess, no support yet)
+fairy      (This variant plays on 8x8 with HEW in stead of NBR on the Queen side, 
+            so that all back-rank pieces are (potentially) different)
+Make sure the selected board size matches the variant; this is not automatic
+
+Xiangqi and Shogi support (or lack thereof)
+Xiangqi is only partially supported. The board display is western-style (the pieces play on squares, rather than grid intersections). The legality testing uses the Shatranj Knight and Elephant, that cannot be blocked, and thus allows some moves that should be illegal in Xiangqi. The Palace region is indicated on the board, but there is no testing if the King or Mandarins (implemented as ordinary Ferzes) leave the Palace. SAN might be non-standard, as it uses O to indicate Cannon. Most of this will be fixed in a future version.
+Shogi is not yet supported at all, first the shaky implementation of Crazyhouse will have to be beefed up.
+
diff --git a/shiphtml b/shiphtml
old mode 100755
new mode 100644
diff --git a/shogibitmaps/README b/shogibitmaps/README
new file mode 100644
index 0000000..94e05c4
--- /dev/null
+++ b/shogibitmaps/README
@@ -0,0 +1,2 @@
+These bitmaps are distributed under the GNU GENERAL PUBLIC LICENSE
+coming with xboard.
diff --git a/shogibitmaps/sa58o.bmp b/shogibitmaps/sa58o.bmp
new file mode 100644
index 0000000..fcae346
Binary files /dev/null and b/shogibitmaps/sa58o.bmp differ
diff --git a/shogibitmaps/sb58o.bmp b/shogibitmaps/sb58o.bmp
new file mode 100644
index 0000000..75b2be2
Binary files /dev/null and b/shogibitmaps/sb58o.bmp differ
diff --git a/shogibitmaps/sc58o.bmp b/shogibitmaps/sc58o.bmp
new file mode 100644
index 0000000..84bef21
Binary files /dev/null and b/shogibitmaps/sc58o.bmp differ
diff --git a/shogibitmaps/sf58o.bmp b/shogibitmaps/sf58o.bmp
new file mode 100644
index 0000000..5c1d43a
Binary files /dev/null and b/shogibitmaps/sf58o.bmp differ
diff --git a/shogibitmaps/sg58o.bmp b/shogibitmaps/sg58o.bmp
new file mode 100644
index 0000000..580814c
Binary files /dev/null and b/shogibitmaps/sg58o.bmp differ
diff --git a/shogibitmaps/sh58o.bmp b/shogibitmaps/sh58o.bmp
new file mode 100644
index 0000000..8b906eb
Binary files /dev/null and b/shogibitmaps/sh58o.bmp differ
diff --git a/shogibitmaps/sk58o.bmp b/shogibitmaps/sk58o.bmp
new file mode 100644
index 0000000..8b57f9e
Binary files /dev/null and b/shogibitmaps/sk58o.bmp differ
diff --git a/shogibitmaps/sk58w.bmp b/shogibitmaps/sk58w.bmp
new file mode 100644
index 0000000..a419066
Binary files /dev/null and b/shogibitmaps/sk58w.bmp differ
diff --git a/shogibitmaps/sl58o.bmp b/shogibitmaps/sl58o.bmp
new file mode 100644
index 0000000..799b21a
Binary files /dev/null and b/shogibitmaps/sl58o.bmp differ
diff --git a/shogibitmaps/sl58w.bmp b/shogibitmaps/sl58w.bmp
new file mode 100644
index 0000000..dc1ce99
Binary files /dev/null and b/shogibitmaps/sl58w.bmp differ
diff --git a/shogibitmaps/sn58o.bmp b/shogibitmaps/sn58o.bmp
new file mode 100644
index 0000000..387e28f
Binary files /dev/null and b/shogibitmaps/sn58o.bmp differ
diff --git a/shogibitmaps/sn58w.bmp b/shogibitmaps/sn58w.bmp
new file mode 100644
index 0000000..b1c6af2
Binary files /dev/null and b/shogibitmaps/sn58w.bmp differ
diff --git a/shogibitmaps/sp58o.bmp b/shogibitmaps/sp58o.bmp
new file mode 100644
index 0000000..62be42b
Binary files /dev/null and b/shogibitmaps/sp58o.bmp differ
diff --git a/shogibitmaps/sp58w.bmp b/shogibitmaps/sp58w.bmp
new file mode 100644
index 0000000..2e623c8
Binary files /dev/null and b/shogibitmaps/sp58w.bmp differ
diff --git a/shogibitmaps/sr58o.bmp b/shogibitmaps/sr58o.bmp
new file mode 100644
index 0000000..6f6d142
Binary files /dev/null and b/shogibitmaps/sr58o.bmp differ
diff --git a/shogibitmaps/sr58w.bmp b/shogibitmaps/sr58w.bmp
new file mode 100644
index 0000000..87469d3
Binary files /dev/null and b/shogibitmaps/sr58w.bmp differ
diff --git a/shogibitmaps/ss58o.bmp b/shogibitmaps/ss58o.bmp
new file mode 100644
index 0000000..e1aa7ad
Binary files /dev/null and b/shogibitmaps/ss58o.bmp differ
diff --git a/shogibitmaps/su58o.bmp b/shogibitmaps/su58o.bmp
new file mode 100644
index 0000000..9bdce85
Binary files /dev/null and b/shogibitmaps/su58o.bmp differ
diff --git a/shogibitmaps/sw58o.bmp b/shogibitmaps/sw58o.bmp
new file mode 100644
index 0000000..cb6029f
Binary files /dev/null and b/shogibitmaps/sw58o.bmp differ
diff --git a/shogibitmaps/sw58w.bmp b/shogibitmaps/sw58w.bmp
new file mode 100644
index 0000000..e90dde3
Binary files /dev/null and b/shogibitmaps/sw58w.bmp differ
diff --git a/sounds/CVS/Entries b/sounds/CVS/Entries
deleted file mode 100644
index 6726f89..0000000
--- a/sounds/CVS/Entries
+++ /dev/null
@@ -1,35 +0,0 @@
-/alarm.wav/2.0/Sun Dec 17 02:25:03 2000//
-/challenge.wav/2.0/Sun Dec 17 02:25:03 2000//
-/channel.wav/2.0/Sun Dec 17 02:25:03 2000//
-/channel1.wav/2.0/Sun Dec 17 02:25:03 2000//
-/ching.wav/2.0/Sun Dec 17 02:25:03 2000//
-/click.wav/2.0/Sun Dec 17 02:25:03 2000//
-/cymbal.wav/2.0/Sun Dec 17 02:25:03 2000//
-/ding1.wav/2.0/Sun Dec 17 02:25:03 2000//
-/draw.wav/2.0/Sun Dec 17 02:25:03 2000//
-/drip.wav/2.0/Sun Dec 17 02:25:03 2000//
-/gong.wav/2.0/Sun Dec 17 02:25:03 2000//
-/honkhonk.wav/2.0/Sun Dec 17 02:25:03 2000//
-/kibitz.wav/2.0/Sun Dec 17 02:25:03 2000//
-/laser.wav/2.0/Sun Dec 17 02:25:03 2000//
-/lose.wav/2.0/Sun Dec 17 02:25:03 2000//
-/move.wav/2.0/Sun Dec 17 02:25:03 2000//
-/penalty.wav/2.0/Sun Dec 17 02:25:03 2000//
-/phone.wav/2.0/Sun Dec 17 02:25:03 2000//
-/pop.wav/2.0/Sun Dec 17 02:25:04 2000//
-/pop2.wav/2.0/Sun Dec 17 02:25:04 2000//
-/request.wav/2.0/Sun Dec 17 02:25:03 2000//
-/seek.wav/2.0/Sun Dec 17 02:25:03 2000//
-/shout.wav/2.0/Sun Dec 17 02:25:03 2000//
-/slap.wav/2.0/Sun Dec 17 02:25:04 2000//
-/squeak.wav/2.0/Sun Dec 17 02:25:04 2000//
-/sshout.wav/2.0/Sun Dec 17 02:25:03 2000//
-/swish.wav/2.0/Sun Dec 17 02:25:04 2000//
-/tell.wav/2.0/Sun Dec 17 02:25:03 2000//
-/thud.wav/2.0/Sun Dec 17 02:25:04 2000//
-/unfinished.wav/2.0/Sun Dec 17 02:25:03 2000//
-/whipcrak.wav/2.0/Sun Dec 17 02:25:04 2000//
-/win.wav/2.0/Sun Dec 17 02:25:03 2000//
-/woodthunk.wav/1.1/Wed Mar 20 06:54:56 2002/-kb/
-/README/1.2/Mon Nov 17 17:06:21 2003//
-D
diff --git a/sounds/CVS/Repository b/sounds/CVS/Repository
deleted file mode 100644
index ecde555..0000000
--- a/sounds/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-xboard/sounds
diff --git a/sounds/CVS/Root b/sounds/CVS/Root
deleted file mode 100644
index 489b0fb..0000000
--- a/sounds/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-mann at subversions.gnu.org:/cvsroot/xboard
diff --git a/uci.c b/uci.c
new file mode 100644
index 0000000..fe380ec
--- /dev/null
+++ b/uci.c
@@ -0,0 +1,112 @@
+/*
+ * UCI support thru Polyglot
+ *
+ * Author: Alessandro Scotti (Jan 2006)
+ *
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/. 
+ *
+ * ------------------------------------------------------------------------
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <malloc.h>
+
+#ifdef WIN32
+// [HGM] this was probably a Windows-specific constant. Needs to be defined here now I
+//       threw out the Windows-specific includes (winboard.h etc.). 100 seems enough.
+#include <windows.h>
+#define SLASH_CHAR "\\"
+#else
+#define MAX_PATH 100
+#define SLASH_CHAR "/"
+#endif
+
+#include "common.h"
+#include "backend.h"
+
+#define INIFILE_PREFIX      "polyglot_"
+#define INIFILE_SUFFIX_1ST  "1st"
+#define INIFILE_SUFFIX_2ND  "2nd"
+#define INIFILE_EXT         ".ini"
+
+
+static const char * GetIniFilename( ChessProgramState * cps )
+{
+    return cps == &first ? INIFILE_PREFIX INIFILE_SUFFIX_1ST INIFILE_EXT : INIFILE_PREFIX INIFILE_SUFFIX_2ND INIFILE_EXT;
+ }
+
+void InitEngineUCI( const char * iniDir, ChessProgramState * cps )
+{
+    if( cps->isUCI ) {
+        const char * iniFileName = GetIniFilename( cps );
+        char polyglotIniFile[ MAX_PATH ];
+        FILE * f;
+
+        /* Build name of initialization file */
+        if( strchr( iniDir, ' ' ) != NULL ) {
+            char iniDirShort[ MAX_PATH ];
+#ifdef WIN32
+            GetShortPathName( iniDir, iniDirShort, sizeof(iniDirShort) );
+
+            strcpy( polyglotIniFile, iniDirShort );
+#else
+	    // [HGM] UCI: not sure if this works, but GetShortPathName seems Windows pecific
+	    // and names with spaces in it do not work in xboard in many places, so ignore
+            strcpy( polyglotIniFile, iniDir );
+#endif
+        }
+        else {
+            strcpy( polyglotIniFile, iniDir );
+        }
+        
+        strcat( polyglotIniFile, SLASH_CHAR );
+        strcat( polyglotIniFile, iniFileName );
+
+        /* Create initialization file */
+        f = fopen( polyglotIniFile, "w" );
+
+        if( f != NULL ) {
+            fprintf( f, "[Polyglot]\n" );
+
+            if( cps->dir != 0 && strlen(cps->dir) > 0 ) {
+                fprintf( f, "EngineDir = %s\n", cps->dir );
+            }
+
+            if( cps->program != 0 && strlen(cps->program) > 0 ) {
+                fprintf( f, "EngineCommand = %s\n", cps->program );
+            }
+
+            fprintf( f, "Book = %s\n", appData.usePolyglotBook ? "true" : "false" );
+            fprintf( f, "BookFile = %s\n", appData.polyglotBook );
+        
+            fprintf( f, "[Engine]\n" );
+            fprintf( f, "Hash = %d\n", appData.defaultHashSize );
+
+            fprintf( f, "NalimovPath = %s\n", appData.defaultPathEGTB );
+            fprintf( f, "NalimovCache = %d\n", appData.defaultCacheSizeEGTB );
+
+            fprintf( f, "OwnBook = %s\n", cps->hasOwnBookUCI ? "true" : "false" );
+
+            fclose( f );
+
+            /* Replace program with properly configured Polyglot */
+            cps->dir = appData.polyglotDir;
+            cps->program = (char *) malloc( strlen(polyglotIniFile) + 32 );
+            strcpy( cps->program, "polyglot " );
+            strcat( cps->program, polyglotIniFile );
+        }
+    }
+}
diff --git a/winboard/CVS/Baserev b/winboard/CVS/Baserev
deleted file mode 100644
index 273de54..0000000
--- a/winboard/CVS/Baserev
+++ /dev/null
@@ -1 +0,0 @@
-BREAD_ME.txt/2.0/
diff --git a/winboard/CVS/Entries b/winboard/CVS/Entries
deleted file mode 100644
index 786f359..0000000
--- a/winboard/CVS/Entries
+++ /dev/null
@@ -1,26 +0,0 @@
-D/bitmaps////
-/bcc32.cfg/2.0/Thu Mar  2 02:39:34 2000//
-/borland.mak/2.0/Thu May 18 20:23:32 2000//
-/resource.h/2.0/Mon Dec  3 06:09:42 2001//
-/winboard.dsw/2.0/Fri Mar 14 01:39:54 1997//
-/winboard.h/2.0/Sun Dec  9 18:22:18 2001//
-/winboard.hpj/2.0/Sun Oct 26 07:28:08 2003//
-/woptions.h/2.0/Thu May 18 19:02:24 2000//
-/wsockerr.c/2.0/Wed May 13 06:47:42 1998//
-/wsockerr.h/2.0/Sat Oct 30 23:43:56 1999//
-/msvc.mak/2.1/Sun Oct 26 08:03:55 2003//
-/wclipbrd.c/2.1/Mon Oct 27 19:21:02 2003//
-/wclipbrd.h/2.1/Mon Oct 27 19:21:02 2003//
-/wedittags.c/2.1/Mon Oct 27 19:21:02 2003//
-/wedittags.h/2.1/Mon Oct 27 19:21:02 2003//
-/wgamelist.c/2.1/Mon Oct 27 19:21:02 2003//
-/wgamelist.h/2.1/Mon Oct 27 19:21:02 2003//
-/winboard.dsp/2.1/Sun Oct 26 02:08:44 2003//
-/woptions.c/2.1/Mon Oct 27 19:21:02 2003//
-/winboard.rtf/2.2/Mon Nov  3 02:20:28 2003//
-/READ_ME.txt/2.3/Tue Nov  4 07:09:55 2003//
-/winboard.rc/2.2/Mon Nov 17 17:06:10 2003//
-/cygwin.mak/2.2/Mon Nov 24 06:39:41 2003//
-/defaults.h/2.3/Tue Nov 25 05:26:23 2003//
-/winboard.c/2.3/Tue Nov 25 05:25:20 2003//
-/config.h/2.3/Thu Nov 27 19:49:41 2003//
diff --git a/winboard/CVS/Repository b/winboard/CVS/Repository
deleted file mode 100644
index 2439654..0000000
--- a/winboard/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-xboard/winboard
diff --git a/winboard/CVS/Root b/winboard/CVS/Root
deleted file mode 100644
index 489b0fb..0000000
--- a/winboard/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-mann at subversions.gnu.org:/cvsroot/xboard
diff --git a/winboard/READ_ME.txt b/winboard/READ_ME.txt
deleted file mode 100644
index 9afbe70..0000000
--- a/winboard/READ_ME.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-WinBoard is a graphical chessboard for 32-bit Microsoft
-Windows systems.  It can serve as a user interface for
-GNU Chess or for internet chess servers, or it can be
-used to play out games manually or from game files.
-For full details, see the Help file (WinBoard.hlp).
-For answers for frequently asked questions, see the FAQ
-file (FAQ.html).
-
-WinBoard is free software.  You can redistribute it
-and/or modify it under the GPL, as described in the
-files COPYRIGHT and COPYING.  If your distribution does
-not include the source code, you can get it from the
-project's Web site:
-
- http://savannah.gnu.org/projects/xboard/
-
-GNU CHESS
-
-Two versions of GNU Chess are included in the WinBoard
-distribution.  GNU Chess is free software released
-under the GPL.
-
-Source code for GNU Chess 5 is available from:
-
- http://savannah.gnu.org/projects/chess/
-
-Source code for GNU Chess 4 is available from:
-
- http://tim-mann.org/gnuchess.html
-
-BUGS AND IMPROVEMENTS
-
-Report bugs in WinBoard or XBoard by email to
-<bug-xboard at gnu.org>.  Report bugs in GNU Chess to
-<bug-gnu-chess at gnu.org>.  Give full details, including
-the program's version number and the exact text of any
-error messages.  If you improve WinBoard or XBoard,
-please send a message about your changes to
-<bug-xboard at gnu.org>.  Remember that these programs
-are released under the GPL, so source code is freely
-available, but if you distribute modified versions, you
-must distribute the source code modifications under the
-GPL as well.
-
-HISTORY
-
-WinBoard is a port of the Unix program XBoard to Win32,
-the 32-bit Microsoft Windows API.  The graphical front
-end (WinBoard.c, etc.) is all new, but the back end
-that understands chess rules, chess notation, GNU
-Chess, the ICS, etc., is shared with XBoard.  See
-WinBoard.hlp for a list of contributors to WinBoard and
-XBoard.
diff --git a/winboard/Winboard.dev b/winboard/Winboard.dev
new file mode 100644
index 0000000..5961142
--- /dev/null
+++ b/winboard/Winboard.dev
@@ -0,0 +1,258 @@
+[Project]
+FileName=Winboard.dev
+Name=Winboard
+UnitCount=21
+Type=0
+Ver=1
+ObjFiles=
+Includes=
+Libs=
+PrivateResource=Winboard_private.rc
+ResourceIncludes=..
+MakeIncludes=
+Compiler=-I.._@@_-I._@@_
+CppCompiler=
+Linker=-fpic_@@_-s_@@_-mwindows_@@_-lwsock32_@@_-lwinmm_@@_-lcomctl32_@@_
+IsCpp=0
+Icon=
+ExeOutput=
+ObjectOutput=
+OverrideOutput=0
+OverrideOutputName=Winboard.exe
+HostApplication=
+Folders=
+CommandLine=
+UseCustomMakefile=0
+CustomMakefile=makefile.gcc
+IncludeVersionInfo=1
+SupportXPThemes=0
+CompilerSet=0
+CompilerSettings=0000000000001000000100
+
+[Unit1]
+FileName=wsockerr.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit2]
+FileName=parser.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit3]
+FileName=wclipbrd.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit4]
+FileName=wedittags.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit5]
+FileName=wengineo.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit6]
+FileName=wevalgraph.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit7]
+FileName=wgamelist.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit8]
+FileName=whistory.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit9]
+FileName=winboard.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit10]
+FileName=wlayout.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit11]
+FileName=woptions.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit12]
+FileName=wsnap.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit13]
+FileName=..\uci.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit14]
+FileName=..\backend.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit15]
+FileName=..\book.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit16]
+FileName=..\gamelist.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit17]
+FileName=..\lists.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit18]
+FileName=..\moves.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit19]
+FileName=..\pgntags.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit20]
+FileName=winboard.rc
+Folder=Winboard
+Compile=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[VersionInfo]
+Major=4
+Minor=4
+Release=0
+Build=1
+LanguageID=1033
+CharsetID=1252
+CompanyName=
+FileVersion=4.4.0j
+FileDescription=Developed using the Dev-C++ IDE
+InternalName=winboard.exe
+LegalCopyright=GPLv2
+LegalTrademarks=
+OriginalFilename=winboard.exe
+ProductName=Winboard
+ProductVersion=4.4.0j
+AutoIncBuildNr=0
+
+[Unit21]
+FileName=..\zippy.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
diff --git a/winboard/bitmaps/CVS/Entries b/winboard/bitmaps/CVS/Entries
deleted file mode 100644
index 6c0ac63..0000000
--- a/winboard/bitmaps/CVS/Entries
+++ /dev/null
@@ -1,337 +0,0 @@
-/README.bitmaps/2.0/Sat Oct 21 05:57:26 2000//
-/b108o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b108s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b108w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b116o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b116s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b116w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b129o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b129s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b129w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b21o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b21s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b21w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b25o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b25s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b25w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b29o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b29s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b29w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b33o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b33s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b33w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b37o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b37s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b37w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b40o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b40s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b40w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b45o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b45s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b45w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b49o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b49s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b49w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b54o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b54s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b54w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b58o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b58s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b58w.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b64o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b64s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b64w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b72o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b72s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b72w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b80o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b80s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/b80w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b87o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b87s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b87w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b95o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b95s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/b95w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/board.ico/2.0/Sat Oct 21 05:57:24 2000//
-/galactic.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/icon_b.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/icon_b.ico/2.0/Sat Oct 21 05:57:24 2000//
-/icon_o.ico/2.0/Sat Oct 21 05:57:24 2000//
-/icon_ob.ico/2.0/Sat Oct 21 05:57:24 2000//
-/icon_ow.ico/2.0/Sat Oct 21 05:57:24 2000//
-/icon_w.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/icon_w.ico/2.0/Sat Oct 21 05:57:24 2000//
-/icon_whi.ico/2.0/Sat Oct 21 05:57:24 2000//
-/k108o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k108s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k108w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k116o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k116s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k116w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k129o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k129s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k129w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k21o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k21s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k21w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k25o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k25s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k25w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k29o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k29s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k29w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k33o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k33s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k33w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k37o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k37s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k37w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k40o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k40s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k40w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k45o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k45s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k45w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k49o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k49s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k49w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k54o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k54s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k54w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k58o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k58s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k58w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k64o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k64s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k64w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k72o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k72s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k72w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k80o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k80s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/k80w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k87o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k87s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k87w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k95o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k95s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/k95w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n108o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n108s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n108w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n116o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n116s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n116w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n129o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n129s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n129w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n21o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n21s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n21w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n25o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n25s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n25w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n29o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n29s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n29w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n33o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n33s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n33w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n37o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n37s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n37w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n40o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n40s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n40w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n45o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n45s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n45w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n49o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n49s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n49w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n54o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n54s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n54w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n58o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n58s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n58w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n64o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n64s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n64w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n72o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n72s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n72w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n80o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n80s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/n80w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n87o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n87s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n87w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n95o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n95s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/n95w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p108o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p108s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p108w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p116o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p116s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p116w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p129o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p129s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p129w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p21o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p21s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p21w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p25o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p25s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p25w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p29o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p29s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p29w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p33o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p33s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p33w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p37o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p37s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p37w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p40o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p40s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p40w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p45o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p45s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p45w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p49o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p49s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p49w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p54o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p54s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p54w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p58o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p58s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p58w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p64o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p64s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p64w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p72o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p72s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p72w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p80o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p80s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/p80w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p87o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p87s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p87w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p95o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p95s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/p95w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q108o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q108s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q108w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q116o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q116s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q116w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q129o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q129s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q129w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q21o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/q21s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/q21w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q25o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/q25s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/q25w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q29o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/q29s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/q29w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q33o.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/q33s.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/q33w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q37o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q37s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q37w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q40o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q40s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q40w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q45o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q45s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q45w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q49o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q49s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q49w.bmp/2.0/Sat Oct 21 05:57:24 2000//
-/q54o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q54s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q54w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q58o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q58s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q58w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q64o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q64s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q64w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q72o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q72s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q72w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q80o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q80s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q80w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q87o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q87s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q87w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q95o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q95s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/q95w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r108o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r108s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r108w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r116o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r116s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r116w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r129o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r129s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r129w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r21o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r21s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r21w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r25o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r25s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r25w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r29o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r29s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r29w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r33o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r33s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r33w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r37o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r37s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r37w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r40o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r40s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r40w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r45o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r45s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r45w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r49o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r49s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r49w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r54o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r54s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r54w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r58o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r58s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r58w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r64o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r64s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r64w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r72o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r72s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r72w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r80o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r80s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r80w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r87o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r87s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r87w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r95o.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r95s.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/r95w.bmp/2.0/Sat Oct 21 05:57:26 2000//
-/tim.bmp/2.0/Sat Oct 21 05:57:26 2000//
-D
diff --git a/winboard/bitmaps/CVS/Repository b/winboard/bitmaps/CVS/Repository
deleted file mode 100644
index 0045089..0000000
--- a/winboard/bitmaps/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-xboard/winboard/bitmaps
diff --git a/winboard/bitmaps/CVS/Root b/winboard/bitmaps/CVS/Root
deleted file mode 100644
index 489b0fb..0000000
--- a/winboard/bitmaps/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-mann at subversions.gnu.org:/cvsroot/xboard
diff --git a/winboard/bitmaps/a33o.bmp b/winboard/bitmaps/a33o.bmp
new file mode 100644
index 0000000..fcd6740
Binary files /dev/null and b/winboard/bitmaps/a33o.bmp differ
diff --git a/winboard/bitmaps/a33s.bmp b/winboard/bitmaps/a33s.bmp
new file mode 100644
index 0000000..2a1bb7d
Binary files /dev/null and b/winboard/bitmaps/a33s.bmp differ
diff --git a/winboard/bitmaps/a33w.bmp b/winboard/bitmaps/a33w.bmp
new file mode 100644
index 0000000..19598b4
Binary files /dev/null and b/winboard/bitmaps/a33w.bmp differ
diff --git a/winboard/bitmaps/a37o.bmp b/winboard/bitmaps/a37o.bmp
new file mode 100644
index 0000000..dfdc7ff
Binary files /dev/null and b/winboard/bitmaps/a37o.bmp differ
diff --git a/winboard/bitmaps/a37s.bmp b/winboard/bitmaps/a37s.bmp
new file mode 100644
index 0000000..ef1b222
Binary files /dev/null and b/winboard/bitmaps/a37s.bmp differ
diff --git a/winboard/bitmaps/a37w.bmp b/winboard/bitmaps/a37w.bmp
new file mode 100644
index 0000000..e0ed7cd
Binary files /dev/null and b/winboard/bitmaps/a37w.bmp differ
diff --git a/winboard/bitmaps/a40o.bmp b/winboard/bitmaps/a40o.bmp
new file mode 100644
index 0000000..7545fdd
Binary files /dev/null and b/winboard/bitmaps/a40o.bmp differ
diff --git a/winboard/bitmaps/a40s.bmp b/winboard/bitmaps/a40s.bmp
new file mode 100644
index 0000000..d2a67d6
Binary files /dev/null and b/winboard/bitmaps/a40s.bmp differ
diff --git a/winboard/bitmaps/a40w.bmp b/winboard/bitmaps/a40w.bmp
new file mode 100644
index 0000000..668ec31
Binary files /dev/null and b/winboard/bitmaps/a40w.bmp differ
diff --git a/winboard/bitmaps/a45o.bmp b/winboard/bitmaps/a45o.bmp
new file mode 100644
index 0000000..e6fbc98
Binary files /dev/null and b/winboard/bitmaps/a45o.bmp differ
diff --git a/winboard/bitmaps/a45s.bmp b/winboard/bitmaps/a45s.bmp
new file mode 100644
index 0000000..b6f36ae
Binary files /dev/null and b/winboard/bitmaps/a45s.bmp differ
diff --git a/winboard/bitmaps/a45w.bmp b/winboard/bitmaps/a45w.bmp
new file mode 100644
index 0000000..1b84946
Binary files /dev/null and b/winboard/bitmaps/a45w.bmp differ
diff --git a/winboard/bitmaps/a49c.bmp b/winboard/bitmaps/a49c.bmp
new file mode 100644
index 0000000..19b739a
Binary files /dev/null and b/winboard/bitmaps/a49c.bmp differ
diff --git a/winboard/bitmaps/a49o.bmp b/winboard/bitmaps/a49o.bmp
new file mode 100644
index 0000000..911d9fa
Binary files /dev/null and b/winboard/bitmaps/a49o.bmp differ
diff --git a/winboard/bitmaps/a49s.bmp b/winboard/bitmaps/a49s.bmp
new file mode 100644
index 0000000..7b3836f
Binary files /dev/null and b/winboard/bitmaps/a49s.bmp differ
diff --git a/winboard/bitmaps/a49w.bmp b/winboard/bitmaps/a49w.bmp
new file mode 100644
index 0000000..3a1b815
Binary files /dev/null and b/winboard/bitmaps/a49w.bmp differ
diff --git a/winboard/bitmaps/a54o.bmp b/winboard/bitmaps/a54o.bmp
new file mode 100644
index 0000000..5281a27
Binary files /dev/null and b/winboard/bitmaps/a54o.bmp differ
diff --git a/winboard/bitmaps/a54s.bmp b/winboard/bitmaps/a54s.bmp
new file mode 100644
index 0000000..a7a2339
Binary files /dev/null and b/winboard/bitmaps/a54s.bmp differ
diff --git a/winboard/bitmaps/a54w.bmp b/winboard/bitmaps/a54w.bmp
new file mode 100644
index 0000000..c0208da
Binary files /dev/null and b/winboard/bitmaps/a54w.bmp differ
diff --git a/winboard/bitmaps/a58o.bmp b/winboard/bitmaps/a58o.bmp
new file mode 100644
index 0000000..1661057
Binary files /dev/null and b/winboard/bitmaps/a58o.bmp differ
diff --git a/winboard/bitmaps/a58s.bmp b/winboard/bitmaps/a58s.bmp
new file mode 100644
index 0000000..e42dded
Binary files /dev/null and b/winboard/bitmaps/a58s.bmp differ
diff --git a/winboard/bitmaps/a58w.bmp b/winboard/bitmaps/a58w.bmp
new file mode 100644
index 0000000..6827e85
Binary files /dev/null and b/winboard/bitmaps/a58w.bmp differ
diff --git a/winboard/bitmaps/a64o.bmp b/winboard/bitmaps/a64o.bmp
new file mode 100644
index 0000000..4c72b61
Binary files /dev/null and b/winboard/bitmaps/a64o.bmp differ
diff --git a/winboard/bitmaps/a64s.bmp b/winboard/bitmaps/a64s.bmp
new file mode 100644
index 0000000..d8f467b
Binary files /dev/null and b/winboard/bitmaps/a64s.bmp differ
diff --git a/winboard/bitmaps/a64w.bmp b/winboard/bitmaps/a64w.bmp
new file mode 100644
index 0000000..a7fe420
Binary files /dev/null and b/winboard/bitmaps/a64w.bmp differ
diff --git a/winboard/bitmaps/a72o.bmp b/winboard/bitmaps/a72o.bmp
new file mode 100644
index 0000000..ea1680f
Binary files /dev/null and b/winboard/bitmaps/a72o.bmp differ
diff --git a/winboard/bitmaps/a72s.bmp b/winboard/bitmaps/a72s.bmp
new file mode 100644
index 0000000..6250378
Binary files /dev/null and b/winboard/bitmaps/a72s.bmp differ
diff --git a/winboard/bitmaps/a72w.bmp b/winboard/bitmaps/a72w.bmp
new file mode 100644
index 0000000..e041e34
Binary files /dev/null and b/winboard/bitmaps/a72w.bmp differ
diff --git a/winboard/bitmaps/analyze2_14.ico b/winboard/bitmaps/analyze2_14.ico
new file mode 100644
index 0000000..8f725f1
Binary files /dev/null and b/winboard/bitmaps/analyze2_14.ico differ
diff --git a/winboard/bitmaps/analyze_14.ico b/winboard/bitmaps/analyze_14.ico
new file mode 100644
index 0000000..f25d0fb
Binary files /dev/null and b/winboard/bitmaps/analyze_14.ico differ
diff --git a/winboard/bitmaps/as33o.bmp b/winboard/bitmaps/as33o.bmp
new file mode 100644
index 0000000..bae55ff
Binary files /dev/null and b/winboard/bitmaps/as33o.bmp differ
diff --git a/winboard/bitmaps/as33s.bmp b/winboard/bitmaps/as33s.bmp
new file mode 100644
index 0000000..7d028dc
Binary files /dev/null and b/winboard/bitmaps/as33s.bmp differ
diff --git a/winboard/bitmaps/as33w.bmp b/winboard/bitmaps/as33w.bmp
new file mode 100644
index 0000000..1f8a3a9
Binary files /dev/null and b/winboard/bitmaps/as33w.bmp differ
diff --git a/winboard/bitmaps/as45o.bmp b/winboard/bitmaps/as45o.bmp
new file mode 100644
index 0000000..e01dc8d
Binary files /dev/null and b/winboard/bitmaps/as45o.bmp differ
diff --git a/winboard/bitmaps/as45s.bmp b/winboard/bitmaps/as45s.bmp
new file mode 100644
index 0000000..f9df7c7
Binary files /dev/null and b/winboard/bitmaps/as45s.bmp differ
diff --git a/winboard/bitmaps/as45w.bmp b/winboard/bitmaps/as45w.bmp
new file mode 100644
index 0000000..359c061
Binary files /dev/null and b/winboard/bitmaps/as45w.bmp differ
diff --git a/winboard/bitmaps/as49o.bmp b/winboard/bitmaps/as49o.bmp
new file mode 100644
index 0000000..de6625a
Binary files /dev/null and b/winboard/bitmaps/as49o.bmp differ
diff --git a/winboard/bitmaps/as49s.bmp b/winboard/bitmaps/as49s.bmp
new file mode 100644
index 0000000..049ad53
Binary files /dev/null and b/winboard/bitmaps/as49s.bmp differ
diff --git a/winboard/bitmaps/as49w.bmp b/winboard/bitmaps/as49w.bmp
new file mode 100644
index 0000000..cfea22a
Binary files /dev/null and b/winboard/bitmaps/as49w.bmp differ
diff --git a/winboard/bitmaps/as72o.bmp b/winboard/bitmaps/as72o.bmp
new file mode 100644
index 0000000..fe967e9
Binary files /dev/null and b/winboard/bitmaps/as72o.bmp differ
diff --git a/winboard/bitmaps/as72s.bmp b/winboard/bitmaps/as72s.bmp
new file mode 100644
index 0000000..d1dcc7f
Binary files /dev/null and b/winboard/bitmaps/as72s.bmp differ
diff --git a/winboard/bitmaps/as72w.bmp b/winboard/bitmaps/as72w.bmp
new file mode 100644
index 0000000..ad07b7e
Binary files /dev/null and b/winboard/bitmaps/as72w.bmp differ
diff --git a/winboard/bitmaps/baloon_14.ico b/winboard/bitmaps/baloon_14.ico
new file mode 100644
index 0000000..dfe056f
Binary files /dev/null and b/winboard/bitmaps/baloon_14.ico differ
diff --git a/winboard/bitmaps/bas.gif b/winboard/bitmaps/bas.gif
new file mode 100644
index 0000000..7376f7e
Binary files /dev/null and b/winboard/bitmaps/bas.gif differ
diff --git a/winboard/bitmaps/bcv.gif b/winboard/bitmaps/bcv.gif
new file mode 100644
index 0000000..6576cf8
Binary files /dev/null and b/winboard/bitmaps/bcv.gif differ
diff --git a/winboard/bitmaps/bitmaps.h b/winboard/bitmaps/bitmaps.h
new file mode 100644
index 0000000..785c8fa
--- /dev/null
+++ b/winboard/bitmaps/bitmaps.h
@@ -0,0 +1,368 @@
+/*
+ * bitmaps.h - Include bitmap files for pieces and icons
+ * $Id: bitmaps.h,v 2.1 2003/10/27 19:21:01 mann Exp $
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 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 XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "p129s.bm"
+#include "n129s.bm"
+#include "b129s.bm"
+#include "r129s.bm"
+#include "q129s.bm"
+#include "k129s.bm"
+
+#include "p129o.bm"
+#include "n129o.bm"
+#include "b129o.bm"
+#include "r129o.bm"
+#include "q129o.bm"
+#include "k129o.bm"
+
+#include "p116s.bm"
+#include "n116s.bm"
+#include "b116s.bm"
+#include "r116s.bm"
+#include "q116s.bm"
+#include "k116s.bm"
+
+#include "p116o.bm"
+#include "n116o.bm"
+#include "b116o.bm"
+#include "r116o.bm"
+#include "q116o.bm"
+#include "k116o.bm"
+
+#include "p108s.bm"
+#include "n108s.bm"
+#include "b108s.bm"
+#include "r108s.bm"
+#include "q108s.bm"
+#include "k108s.bm"
+
+#include "p108o.bm"
+#include "n108o.bm"
+#include "b108o.bm"
+#include "r108o.bm"
+#include "q108o.bm"
+#include "k108o.bm"
+
+#include "p95s.bm"
+#include "n95s.bm"
+#include "b95s.bm"
+#include "r95s.bm"
+#include "q95s.bm"
+#include "k95s.bm"
+
+#include "p95o.bm"
+#include "n95o.bm"
+#include "b95o.bm"
+#include "r95o.bm"
+#include "q95o.bm"
+#include "k95o.bm"
+
+#include "p87s.bm"
+#include "n87s.bm"
+#include "b87s.bm"
+#include "r87s.bm"
+#include "q87s.bm"
+#include "k87s.bm"
+
+#include "p87o.bm"
+#include "n87o.bm"
+#include "b87o.bm"
+#include "r87o.bm"
+#include "q87o.bm"
+#include "k87o.bm"
+
+#include "p80s.bm"
+#include "n80s.bm"
+#include "b80s.bm"
+#include "r80s.bm"
+#include "q80s.bm"
+#include "k80s.bm"
+
+#include "p80o.bm"
+#include "n80o.bm"
+#include "b80o.bm"
+#include "r80o.bm"
+#include "q80o.bm"
+#include "k80o.bm"
+
+#include "p72s.bm"
+#include "n72s.bm"
+#include "b72s.bm"
+#include "r72s.bm"
+#include "q72s.bm"
+#include "k72s.bm"
+
+#include "p72o.bm"
+#include "n72o.bm"
+#include "b72o.bm"
+#include "r72o.bm"
+#include "q72o.bm"
+#include "k72o.bm"
+
+#include "p64s.bm"
+#include "n64s.bm"
+#include "b64s.bm"
+#include "r64s.bm"
+#include "q64s.bm"
+#include "k64s.bm"
+
+#include "p64o.bm"
+#include "n64o.bm"
+#include "b64o.bm"
+#include "r64o.bm"
+#include "q64o.bm"
+#include "k64o.bm"
+
+#include "p58s.bm"
+#include "n58s.bm"
+#include "b58s.bm"
+#include "r58s.bm"
+#include "q58s.bm"
+#include "k58s.bm"
+
+#include "p58o.bm"
+#include "n58o.bm"
+#include "b58o.bm"
+#include "r58o.bm"
+#include "q58o.bm"
+#include "k58o.bm"
+
+#include "p54s.bm"
+#include "n54s.bm"
+#include "b54s.bm"
+#include "r54s.bm"
+#include "q54s.bm"
+#include "k54s.bm"
+
+#include "p54o.bm"
+#include "n54o.bm"
+#include "b54o.bm"
+#include "r54o.bm"
+#include "q54o.bm"
+#include "k54o.bm"
+
+#include "p49s.bm"
+#include "n49s.bm"
+#include "b49s.bm"
+#include "r49s.bm"
+#include "q49s.bm"
+#include "k49s.bm"
+
+#include "p49o.bm"
+#include "n49o.bm"
+#include "b49o.bm"
+#include "r49o.bm"
+#include "q49o.bm"
+#include "k49o.bm"
+
+#include "p45s.bm"
+#include "n45s.bm"
+#include "b45s.bm"
+#include "r45s.bm"
+#include "q45s.bm"
+#include "k45s.bm"
+
+#include "p45o.bm"
+#include "n45o.bm"
+#include "b45o.bm"
+#include "r45o.bm"
+#include "q45o.bm"
+#include "k45o.bm"
+
+#include "p40s.bm"
+#include "n40s.bm"
+#include "b40s.bm"
+#include "r40s.bm"
+#include "q40s.bm"
+#include "k40s.bm"
+
+#include "p40o.bm"
+#include "n40o.bm"
+#include "b40o.bm"
+#include "r40o.bm"
+#include "q40o.bm"
+#include "k40o.bm"
+
+#include "p37s.bm"
+#include "n37s.bm"
+#include "b37s.bm"
+#include "r37s.bm"
+#include "q37s.bm"
+#include "k37s.bm"
+
+#include "p37o.bm"
+#include "n37o.bm"
+#include "b37o.bm"
+#include "r37o.bm"
+#include "q37o.bm"
+#include "k37o.bm"
+
+#include "p33s.bm"
+#include "n33s.bm"
+#include "b33s.bm"
+#include "r33s.bm"
+#include "q33s.bm"
+#include "k33s.bm"
+
+#include "p33o.bm"
+#include "n33o.bm"
+#include "b33o.bm"
+#include "r33o.bm"
+#include "q33o.bm"
+#include "k33o.bm"
+
+#include "p29s.bm"
+#include "n29s.bm"
+#include "b29s.bm"
+#include "r29s.bm"
+#include "q29s.bm"
+#include "k29s.bm"
+
+#include "p29o.bm"
+#include "n29o.bm"
+#include "b29o.bm"
+#include "r29o.bm"
+#include "q29o.bm"
+#include "k29o.bm"
+
+#include "p25s.bm"
+#include "n25s.bm"
+#include "b25s.bm"
+#include "r25s.bm"
+#include "q25s.bm"
+#include "k25s.bm"
+
+#include "p25o.bm"
+#include "n25o.bm"
+#include "b25o.bm"
+#include "r25o.bm"
+#include "q25o.bm"
+#include "k25o.bm"
+
+#include "p21s.bm"
+#include "n21s.bm"
+#include "b21s.bm"
+#include "r21s.bm"
+#include "q21s.bm"
+#include "k21s.bm"
+
+#include "p21o.bm"
+#include "n21o.bm"
+#include "b21o.bm"
+#include "r21o.bm"
+#include "q21o.bm"
+#include "k21o.bm"
+
+typedef struct {
+    int squareSize;
+    unsigned char *bits[2][6];
+} BuiltInBits;
+
+BuiltInBits builtInBits[] = {\
+{ 129,\
+  { { p129s_bits, n129s_bits, b129s_bits, r129s_bits, q129s_bits, k129s_bits },\
+    { p129o_bits, n129o_bits, b129o_bits, r129o_bits, q129o_bits, k129o_bits } } },\
+{ 116,\
+  { { p116s_bits, n116s_bits, b116s_bits, r116s_bits, q116s_bits, k116s_bits },\
+    { p116o_bits, n116o_bits, b116o_bits, r116o_bits, q116o_bits, k116o_bits } } },\
+{ 108,\
+  { { p108s_bits, n108s_bits, b108s_bits, r108s_bits, q108s_bits, k108s_bits },\
+    { p108o_bits, n108o_bits, b108o_bits, r108o_bits, q108o_bits, k108o_bits } } },\
+{ 95,\
+  { { p95s_bits, n95s_bits, b95s_bits, r95s_bits, q95s_bits, k95s_bits },\
+    { p95o_bits, n95o_bits, b95o_bits, r95o_bits, q95o_bits, k95o_bits } } },\
+{ 87,\
+  { { p87s_bits, n87s_bits, b87s_bits, r87s_bits, q87s_bits, k87s_bits },\
+    { p87o_bits, n87o_bits, b87o_bits, r87o_bits, q87o_bits, k87o_bits } } },\
+{ 80,\
+  { { p80s_bits, n80s_bits, b80s_bits, r80s_bits, q80s_bits, k80s_bits },\
+    { p80o_bits, n80o_bits, b80o_bits, r80o_bits, q80o_bits, k80o_bits } } },\
+{ 72,\
+  { { p72s_bits, n72s_bits, b72s_bits, r72s_bits, q72s_bits, k72s_bits },\
+    { p72o_bits, n72o_bits, b72o_bits, r72o_bits, q72o_bits, k72o_bits } } },\
+{ 64,\
+  { { p64s_bits, n64s_bits, b64s_bits, r64s_bits, q64s_bits, k64s_bits },\
+    { p64o_bits, n64o_bits, b64o_bits, r64o_bits, q64o_bits, k64o_bits } } },\
+{ 58,\
+  { { p58s_bits, n58s_bits, b58s_bits, r58s_bits, q58s_bits, k58s_bits },\
+    { p58o_bits, n58o_bits, b58o_bits, r58o_bits, q58o_bits, k58o_bits } } },\
+{ 54,\
+  { { p54s_bits, n54s_bits, b54s_bits, r54s_bits, q54s_bits, k54s_bits },\
+    { p54o_bits, n54o_bits, b54o_bits, r54o_bits, q54o_bits, k54o_bits } } },\
+{ 49,\
+  { { p49s_bits, n49s_bits, b49s_bits, r49s_bits, q49s_bits, k49s_bits },\
+    { p49o_bits, n49o_bits, b49o_bits, r49o_bits, q49o_bits, k49o_bits } } },\
+{ 45,\
+  { { p45s_bits, n45s_bits, b45s_bits, r45s_bits, q45s_bits, k45s_bits },\
+    { p45o_bits, n45o_bits, b45o_bits, r45o_bits, q45o_bits, k45o_bits } } },\
+{ 40,\
+  { { p40s_bits, n40s_bits, b40s_bits, r40s_bits, q40s_bits, k40s_bits },\
+    { p40o_bits, n40o_bits, b40o_bits, r40o_bits, q40o_bits, k40o_bits } } },\
+{ 37,\
+  { { p37s_bits, n37s_bits, b37s_bits, r37s_bits, q37s_bits, k37s_bits },\
+    { p37o_bits, n37o_bits, b37o_bits, r37o_bits, q37o_bits, k37o_bits } } },\
+{ 33,\
+  { { p33s_bits, n33s_bits, b33s_bits, r33s_bits, q33s_bits, k33s_bits },\
+    { p33o_bits, n33o_bits, b33o_bits, r33o_bits, q33o_bits, k33o_bits } } },\
+{ 29,\
+  { { p29s_bits, n29s_bits, b29s_bits, r29s_bits, q29s_bits, k29s_bits },\
+    { p29o_bits, n29o_bits, b29o_bits, r29o_bits, q29o_bits, k29o_bits } } },\
+{ 25,\
+  { { p25s_bits, n25s_bits, b25s_bits, r25s_bits, q25s_bits, k25s_bits },\
+    { p25o_bits, n25o_bits, b25o_bits, r25o_bits, q25o_bits, k25o_bits } } },\
+{ 21,\
+  { { p21s_bits, n21s_bits, b21s_bits, r21s_bits, q21s_bits, k21s_bits },\
+    { p21o_bits, n21o_bits, b21o_bits, r21o_bits, q21o_bits, k21o_bits } } },\
+{ 0,\
+  { { NULL, NULL, NULL, NULL, NULL, NULL },\
+    { NULL, NULL, NULL, NULL, NULL, NULL } } }\
+};
+
diff --git a/winboard/bitmaps/black_14.ico b/winboard/bitmaps/black_14.ico
new file mode 100644
index 0000000..9661f7c
Binary files /dev/null and b/winboard/bitmaps/black_14.ico differ
diff --git a/winboard/bitmaps/c33o.bmp b/winboard/bitmaps/c33o.bmp
new file mode 100644
index 0000000..d2fb0ff
Binary files /dev/null and b/winboard/bitmaps/c33o.bmp differ
diff --git a/winboard/bitmaps/c33s.bmp b/winboard/bitmaps/c33s.bmp
new file mode 100644
index 0000000..895e0a8
Binary files /dev/null and b/winboard/bitmaps/c33s.bmp differ
diff --git a/winboard/bitmaps/c33w.bmp b/winboard/bitmaps/c33w.bmp
new file mode 100644
index 0000000..057bca0
Binary files /dev/null and b/winboard/bitmaps/c33w.bmp differ
diff --git a/winboard/bitmaps/c37o.bmp b/winboard/bitmaps/c37o.bmp
new file mode 100644
index 0000000..882afe0
Binary files /dev/null and b/winboard/bitmaps/c37o.bmp differ
diff --git a/winboard/bitmaps/c37s.bmp b/winboard/bitmaps/c37s.bmp
new file mode 100644
index 0000000..6f3b87b
Binary files /dev/null and b/winboard/bitmaps/c37s.bmp differ
diff --git a/winboard/bitmaps/c37w.bmp b/winboard/bitmaps/c37w.bmp
new file mode 100644
index 0000000..f7e076d
Binary files /dev/null and b/winboard/bitmaps/c37w.bmp differ
diff --git a/winboard/bitmaps/c40o.bmp b/winboard/bitmaps/c40o.bmp
new file mode 100644
index 0000000..b5677fc
Binary files /dev/null and b/winboard/bitmaps/c40o.bmp differ
diff --git a/winboard/bitmaps/c40s.bmp b/winboard/bitmaps/c40s.bmp
new file mode 100644
index 0000000..7af0713
Binary files /dev/null and b/winboard/bitmaps/c40s.bmp differ
diff --git a/winboard/bitmaps/c40w.bmp b/winboard/bitmaps/c40w.bmp
new file mode 100644
index 0000000..a0b8d15
Binary files /dev/null and b/winboard/bitmaps/c40w.bmp differ
diff --git a/winboard/bitmaps/c45o.bmp b/winboard/bitmaps/c45o.bmp
new file mode 100644
index 0000000..971b7d0
Binary files /dev/null and b/winboard/bitmaps/c45o.bmp differ
diff --git a/winboard/bitmaps/c45s.bmp b/winboard/bitmaps/c45s.bmp
new file mode 100644
index 0000000..775ac47
Binary files /dev/null and b/winboard/bitmaps/c45s.bmp differ
diff --git a/winboard/bitmaps/c45w.bmp b/winboard/bitmaps/c45w.bmp
new file mode 100644
index 0000000..3b9687c
Binary files /dev/null and b/winboard/bitmaps/c45w.bmp differ
diff --git a/winboard/bitmaps/c49o.bmp b/winboard/bitmaps/c49o.bmp
new file mode 100644
index 0000000..fd470a9
Binary files /dev/null and b/winboard/bitmaps/c49o.bmp differ
diff --git a/winboard/bitmaps/c49s.bmp b/winboard/bitmaps/c49s.bmp
new file mode 100644
index 0000000..bac2d94
Binary files /dev/null and b/winboard/bitmaps/c49s.bmp differ
diff --git a/winboard/bitmaps/c49w.bmp b/winboard/bitmaps/c49w.bmp
new file mode 100644
index 0000000..069a524
Binary files /dev/null and b/winboard/bitmaps/c49w.bmp differ
diff --git a/winboard/bitmaps/c54o.bmp b/winboard/bitmaps/c54o.bmp
new file mode 100644
index 0000000..6a597db
Binary files /dev/null and b/winboard/bitmaps/c54o.bmp differ
diff --git a/winboard/bitmaps/c54s.bmp b/winboard/bitmaps/c54s.bmp
new file mode 100644
index 0000000..4571271
Binary files /dev/null and b/winboard/bitmaps/c54s.bmp differ
diff --git a/winboard/bitmaps/c54w.bmp b/winboard/bitmaps/c54w.bmp
new file mode 100644
index 0000000..61caf6d
Binary files /dev/null and b/winboard/bitmaps/c54w.bmp differ
diff --git a/winboard/bitmaps/c58o.bmp b/winboard/bitmaps/c58o.bmp
new file mode 100644
index 0000000..15d110e
Binary files /dev/null and b/winboard/bitmaps/c58o.bmp differ
diff --git a/winboard/bitmaps/c58s.bmp b/winboard/bitmaps/c58s.bmp
new file mode 100644
index 0000000..0bb3cf9
Binary files /dev/null and b/winboard/bitmaps/c58s.bmp differ
diff --git a/winboard/bitmaps/c58w.bmp b/winboard/bitmaps/c58w.bmp
new file mode 100644
index 0000000..41f05cf
Binary files /dev/null and b/winboard/bitmaps/c58w.bmp differ
diff --git a/winboard/bitmaps/c64o.bmp b/winboard/bitmaps/c64o.bmp
new file mode 100644
index 0000000..6edd01e
Binary files /dev/null and b/winboard/bitmaps/c64o.bmp differ
diff --git a/winboard/bitmaps/c64s.bmp b/winboard/bitmaps/c64s.bmp
new file mode 100644
index 0000000..6dac16f
Binary files /dev/null and b/winboard/bitmaps/c64s.bmp differ
diff --git a/winboard/bitmaps/c64w.bmp b/winboard/bitmaps/c64w.bmp
new file mode 100644
index 0000000..5c3c8ff
Binary files /dev/null and b/winboard/bitmaps/c64w.bmp differ
diff --git a/winboard/bitmaps/c72o.bmp b/winboard/bitmaps/c72o.bmp
new file mode 100644
index 0000000..28bc14f
Binary files /dev/null and b/winboard/bitmaps/c72o.bmp differ
diff --git a/winboard/bitmaps/c72s.bmp b/winboard/bitmaps/c72s.bmp
new file mode 100644
index 0000000..963afdf
Binary files /dev/null and b/winboard/bitmaps/c72s.bmp differ
diff --git a/winboard/bitmaps/c72w.bmp b/winboard/bitmaps/c72w.bmp
new file mode 100644
index 0000000..d1f773d
Binary files /dev/null and b/winboard/bitmaps/c72w.bmp differ
diff --git a/winboard/bitmaps/clock_14.ico b/winboard/bitmaps/clock_14.ico
new file mode 100644
index 0000000..0785d5c
Binary files /dev/null and b/winboard/bitmaps/clock_14.ico differ
diff --git a/winboard/bitmaps/convert.c b/winboard/bitmaps/convert.c
new file mode 100644
index 0000000..c56cf4e
--- /dev/null
+++ b/winboard/bitmaps/convert.c
@@ -0,0 +1,73 @@
+#include <stdio.h>
+
+// [HGM] This program converts a WinBoard monochrome .bmp piece-symbol bitmap file
+//       to a .bm C-source file suitable for inclusion in xboard as buit-in bitmap.
+//       You will have to convert the bitmaps one by one, and re-direct the output to the desired file!
+
+main(int argc, char **argv)
+{
+	int i, j, k, d, cnt; char c, h, w, *p, data[10000], *name;
+	FILE *f;
+
+	if(argc<2) { printf("usage is: convert <bmp filename>\n"); exit(0); }
+	f = fopen(argv[1], "rb");
+	if(f == NULL) { printf("file %s not found\n", argv[1]); exit(0); }
+
+	if(fscanf(f, "BM%c", &i) != 1) { printf("%s does not have bitmap format\n"); exit(0); }
+	for(i=0; i<15; i++) fgetc(f); fscanf(f, "%c%c%c%c%c", &h, &i, &i, &i, &w);
+	for(i=0; i<39; i++) fgetc(f);
+
+// printf("h=%d, w=%d\n", h, w);
+
+	p = data;
+	for(i=0; i<h; i++) {
+		for(j=0; j<w; j+=32) {
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+				d = (d>>1) | (c&0x80);
+				c <<= 1;
+			}
+			*p++ = d;
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+				d = (d>>1) | (c&0x80);
+				c <<= 1;
+			}
+			*p++ = d;
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+				d = (d>>1) | (c&0x80);
+				c <<= 1;
+			}
+			*p++ = d;
+			c = fgetc(f);
+			for(k=0; k<8; k++) {
+				d = (d>>1) | (c&0x80);
+				c <<= 1;
+			}
+			*p++ = d;
+		}
+	}
+
+	name = argv[1];
+	for(i=0; argv[1][i]; i++) if(argv[1][i] == '\\') name = argv[1]+i+1;
+	for(i=0; name[i]; i++) if(name[i] == '.') name[i] = 0;
+	printf("#define %s_width %d\n", name, w);
+	printf("#define %s_height %d\n", name, h);
+	printf("static char %s_bits[] = {\n", name);
+	cnt = 0;
+	for(i=h-1; i>=0; i--) {
+		for(j=0; j<w; j+=8) {
+			c = ~data[i*((w+31)/8&~3)+j/8];
+			if(w-j<8) c &= 255>>(8+j-w);
+//			for(k=0; k<8; k++) {
+//				printf("%c", c&1 ? 'X' : '.');
+//				c >>= 1;
+//			}
+			if(cnt!=0) printf(",");
+			printf("0x%02x", c&255);
+			if(++cnt % 15 == 0) { printf("\n"); }
+		}
+	}
+	printf("\n};\n");
+}
diff --git a/winboard/bitmaps/convert.exe b/winboard/bitmaps/convert.exe
new file mode 100644
index 0000000..713a2fc
Binary files /dev/null and b/winboard/bitmaps/convert.exe differ
diff --git a/winboard/bitmaps/cv33o.bmp b/winboard/bitmaps/cv33o.bmp
new file mode 100644
index 0000000..eba036e
Binary files /dev/null and b/winboard/bitmaps/cv33o.bmp differ
diff --git a/winboard/bitmaps/cv33s.bmp b/winboard/bitmaps/cv33s.bmp
new file mode 100644
index 0000000..31f6a45
Binary files /dev/null and b/winboard/bitmaps/cv33s.bmp differ
diff --git a/winboard/bitmaps/cv33w.bmp b/winboard/bitmaps/cv33w.bmp
new file mode 100644
index 0000000..7a86530
Binary files /dev/null and b/winboard/bitmaps/cv33w.bmp differ
diff --git a/winboard/bitmaps/cv37o.bmp b/winboard/bitmaps/cv37o.bmp
new file mode 100644
index 0000000..9075dd6
Binary files /dev/null and b/winboard/bitmaps/cv37o.bmp differ
diff --git a/winboard/bitmaps/cv37s.bmp b/winboard/bitmaps/cv37s.bmp
new file mode 100644
index 0000000..1b31080
Binary files /dev/null and b/winboard/bitmaps/cv37s.bmp differ
diff --git a/winboard/bitmaps/cv37w.bmp b/winboard/bitmaps/cv37w.bmp
new file mode 100644
index 0000000..abf95b3
Binary files /dev/null and b/winboard/bitmaps/cv37w.bmp differ
diff --git a/winboard/bitmaps/cv40o.bmp b/winboard/bitmaps/cv40o.bmp
new file mode 100644
index 0000000..7fe8326
Binary files /dev/null and b/winboard/bitmaps/cv40o.bmp differ
diff --git a/winboard/bitmaps/cv40s.bmp b/winboard/bitmaps/cv40s.bmp
new file mode 100644
index 0000000..bb2065e
Binary files /dev/null and b/winboard/bitmaps/cv40s.bmp differ
diff --git a/winboard/bitmaps/cv40w.bmp b/winboard/bitmaps/cv40w.bmp
new file mode 100644
index 0000000..cc195bb
Binary files /dev/null and b/winboard/bitmaps/cv40w.bmp differ
diff --git a/winboard/bitmaps/cv45o.bmp b/winboard/bitmaps/cv45o.bmp
new file mode 100644
index 0000000..55b4087
Binary files /dev/null and b/winboard/bitmaps/cv45o.bmp differ
diff --git a/winboard/bitmaps/cv45s.bmp b/winboard/bitmaps/cv45s.bmp
new file mode 100644
index 0000000..22b05b7
Binary files /dev/null and b/winboard/bitmaps/cv45s.bmp differ
diff --git a/winboard/bitmaps/cv45w.bmp b/winboard/bitmaps/cv45w.bmp
new file mode 100644
index 0000000..250984d
Binary files /dev/null and b/winboard/bitmaps/cv45w.bmp differ
diff --git a/winboard/bitmaps/cv49o.bmp b/winboard/bitmaps/cv49o.bmp
new file mode 100644
index 0000000..95fd748
Binary files /dev/null and b/winboard/bitmaps/cv49o.bmp differ
diff --git a/winboard/bitmaps/cv49s.bmp b/winboard/bitmaps/cv49s.bmp
new file mode 100644
index 0000000..5fc24b9
Binary files /dev/null and b/winboard/bitmaps/cv49s.bmp differ
diff --git a/winboard/bitmaps/cv49w.bmp b/winboard/bitmaps/cv49w.bmp
new file mode 100644
index 0000000..cbf8e92
Binary files /dev/null and b/winboard/bitmaps/cv49w.bmp differ
diff --git a/winboard/bitmaps/cv54o.bmp b/winboard/bitmaps/cv54o.bmp
new file mode 100644
index 0000000..a74cbbb
Binary files /dev/null and b/winboard/bitmaps/cv54o.bmp differ
diff --git a/winboard/bitmaps/cv54s.bmp b/winboard/bitmaps/cv54s.bmp
new file mode 100644
index 0000000..9c5bd8b
Binary files /dev/null and b/winboard/bitmaps/cv54s.bmp differ
diff --git a/winboard/bitmaps/cv54w.bmp b/winboard/bitmaps/cv54w.bmp
new file mode 100644
index 0000000..fff12e3
Binary files /dev/null and b/winboard/bitmaps/cv54w.bmp differ
diff --git a/winboard/bitmaps/cv58o.bmp b/winboard/bitmaps/cv58o.bmp
new file mode 100644
index 0000000..1622ca5
Binary files /dev/null and b/winboard/bitmaps/cv58o.bmp differ
diff --git a/winboard/bitmaps/cv58s.bmp b/winboard/bitmaps/cv58s.bmp
new file mode 100644
index 0000000..5b7674d
Binary files /dev/null and b/winboard/bitmaps/cv58s.bmp differ
diff --git a/winboard/bitmaps/cv58w.bmp b/winboard/bitmaps/cv58w.bmp
new file mode 100644
index 0000000..2f37d5b
Binary files /dev/null and b/winboard/bitmaps/cv58w.bmp differ
diff --git a/winboard/bitmaps/cv64o.bmp b/winboard/bitmaps/cv64o.bmp
new file mode 100644
index 0000000..522bb6c
Binary files /dev/null and b/winboard/bitmaps/cv64o.bmp differ
diff --git a/winboard/bitmaps/cv64s.bmp b/winboard/bitmaps/cv64s.bmp
new file mode 100644
index 0000000..1787acd
Binary files /dev/null and b/winboard/bitmaps/cv64s.bmp differ
diff --git a/winboard/bitmaps/cv64w.bmp b/winboard/bitmaps/cv64w.bmp
new file mode 100644
index 0000000..b3e1bfd
Binary files /dev/null and b/winboard/bitmaps/cv64w.bmp differ
diff --git a/winboard/bitmaps/cv72o.bmp b/winboard/bitmaps/cv72o.bmp
new file mode 100644
index 0000000..d72c45d
Binary files /dev/null and b/winboard/bitmaps/cv72o.bmp differ
diff --git a/winboard/bitmaps/cv72s.bmp b/winboard/bitmaps/cv72s.bmp
new file mode 100644
index 0000000..e22fdd5
Binary files /dev/null and b/winboard/bitmaps/cv72s.bmp differ
diff --git a/winboard/bitmaps/cv72w.bmp b/winboard/bitmaps/cv72w.bmp
new file mode 100644
index 0000000..65e7e1d
Binary files /dev/null and b/winboard/bitmaps/cv72w.bmp differ
diff --git a/winboard/bitmaps/dk33o.bmp b/winboard/bitmaps/dk33o.bmp
new file mode 100644
index 0000000..9b00f94
Binary files /dev/null and b/winboard/bitmaps/dk33o.bmp differ
diff --git a/winboard/bitmaps/dk33s.bmp b/winboard/bitmaps/dk33s.bmp
new file mode 100644
index 0000000..f1c8bc9
Binary files /dev/null and b/winboard/bitmaps/dk33s.bmp differ
diff --git a/winboard/bitmaps/dk33w.bmp b/winboard/bitmaps/dk33w.bmp
new file mode 100644
index 0000000..c77c3b2
Binary files /dev/null and b/winboard/bitmaps/dk33w.bmp differ
diff --git a/winboard/bitmaps/dk49o.bmp b/winboard/bitmaps/dk49o.bmp
new file mode 100644
index 0000000..e3f6f3a
Binary files /dev/null and b/winboard/bitmaps/dk49o.bmp differ
diff --git a/winboard/bitmaps/dk49s.bmp b/winboard/bitmaps/dk49s.bmp
new file mode 100644
index 0000000..46b05b1
Binary files /dev/null and b/winboard/bitmaps/dk49s.bmp differ
diff --git a/winboard/bitmaps/dk49w.bmp b/winboard/bitmaps/dk49w.bmp
new file mode 100644
index 0000000..4e05b8f
Binary files /dev/null and b/winboard/bitmaps/dk49w.bmp differ
diff --git a/winboard/bitmaps/dk72o.bmp b/winboard/bitmaps/dk72o.bmp
new file mode 100644
index 0000000..e531478
Binary files /dev/null and b/winboard/bitmaps/dk72o.bmp differ
diff --git a/winboard/bitmaps/dk72s.bmp b/winboard/bitmaps/dk72s.bmp
new file mode 100644
index 0000000..da3d696
Binary files /dev/null and b/winboard/bitmaps/dk72s.bmp differ
diff --git a/winboard/bitmaps/dk72w.bmp b/winboard/bitmaps/dk72w.bmp
new file mode 100644
index 0000000..66ee835
Binary files /dev/null and b/winboard/bitmaps/dk72w.bmp differ
diff --git a/winboard/bitmaps/e129o.bmp b/winboard/bitmaps/e129o.bmp
new file mode 100644
index 0000000..f464adf
Binary files /dev/null and b/winboard/bitmaps/e129o.bmp differ
diff --git a/winboard/bitmaps/e33o.bmp b/winboard/bitmaps/e33o.bmp
new file mode 100644
index 0000000..b7f0aac
Binary files /dev/null and b/winboard/bitmaps/e33o.bmp differ
diff --git a/winboard/bitmaps/e33s.bmp b/winboard/bitmaps/e33s.bmp
new file mode 100644
index 0000000..d132c2d
Binary files /dev/null and b/winboard/bitmaps/e33s.bmp differ
diff --git a/winboard/bitmaps/e33w.bmp b/winboard/bitmaps/e33w.bmp
new file mode 100644
index 0000000..2ce9548
Binary files /dev/null and b/winboard/bitmaps/e33w.bmp differ
diff --git a/winboard/bitmaps/e49o.bmp b/winboard/bitmaps/e49o.bmp
new file mode 100644
index 0000000..ebb5c6b
Binary files /dev/null and b/winboard/bitmaps/e49o.bmp differ
diff --git a/winboard/bitmaps/e49s.bmp b/winboard/bitmaps/e49s.bmp
new file mode 100644
index 0000000..46ffee2
Binary files /dev/null and b/winboard/bitmaps/e49s.bmp differ
diff --git a/winboard/bitmaps/e49w.bmp b/winboard/bitmaps/e49w.bmp
new file mode 100644
index 0000000..b2f3587
Binary files /dev/null and b/winboard/bitmaps/e49w.bmp differ
diff --git a/winboard/bitmaps/e72o.bmp b/winboard/bitmaps/e72o.bmp
new file mode 100644
index 0000000..e6c8d83
Binary files /dev/null and b/winboard/bitmaps/e72o.bmp differ
diff --git a/winboard/bitmaps/e72s.bmp b/winboard/bitmaps/e72s.bmp
new file mode 100644
index 0000000..6d756a5
Binary files /dev/null and b/winboard/bitmaps/e72s.bmp differ
diff --git a/winboard/bitmaps/e72w.bmp b/winboard/bitmaps/e72w.bmp
new file mode 100644
index 0000000..2339883
Binary files /dev/null and b/winboard/bitmaps/e72w.bmp differ
diff --git a/winboard/bitmaps/f33o.bmp b/winboard/bitmaps/f33o.bmp
new file mode 100644
index 0000000..588010b
Binary files /dev/null and b/winboard/bitmaps/f33o.bmp differ
diff --git a/winboard/bitmaps/f33s.bmp b/winboard/bitmaps/f33s.bmp
new file mode 100644
index 0000000..6ef112d
Binary files /dev/null and b/winboard/bitmaps/f33s.bmp differ
diff --git a/winboard/bitmaps/f33w.bmp b/winboard/bitmaps/f33w.bmp
new file mode 100644
index 0000000..b7f7069
Binary files /dev/null and b/winboard/bitmaps/f33w.bmp differ
diff --git a/winboard/bitmaps/f49o.bmp b/winboard/bitmaps/f49o.bmp
new file mode 100644
index 0000000..9653fa6
Binary files /dev/null and b/winboard/bitmaps/f49o.bmp differ
diff --git a/winboard/bitmaps/f49s.bmp b/winboard/bitmaps/f49s.bmp
new file mode 100644
index 0000000..f85fb56
Binary files /dev/null and b/winboard/bitmaps/f49s.bmp differ
diff --git a/winboard/bitmaps/f49w.bmp b/winboard/bitmaps/f49w.bmp
new file mode 100644
index 0000000..98f0b16
Binary files /dev/null and b/winboard/bitmaps/f49w.bmp differ
diff --git a/winboard/bitmaps/f72o.bmp b/winboard/bitmaps/f72o.bmp
new file mode 100644
index 0000000..257c225
Binary files /dev/null and b/winboard/bitmaps/f72o.bmp differ
diff --git a/winboard/bitmaps/f72s.bmp b/winboard/bitmaps/f72s.bmp
new file mode 100644
index 0000000..271e64f
Binary files /dev/null and b/winboard/bitmaps/f72s.bmp differ
diff --git a/winboard/bitmaps/f72w.bmp b/winboard/bitmaps/f72w.bmp
new file mode 100644
index 0000000..3347e0f
Binary files /dev/null and b/winboard/bitmaps/f72w.bmp differ
diff --git a/winboard/bitmaps/g33o.bmp b/winboard/bitmaps/g33o.bmp
new file mode 100644
index 0000000..6f3cc18
Binary files /dev/null and b/winboard/bitmaps/g33o.bmp differ
diff --git a/winboard/bitmaps/g33s.bmp b/winboard/bitmaps/g33s.bmp
new file mode 100644
index 0000000..31dd9e8
Binary files /dev/null and b/winboard/bitmaps/g33s.bmp differ
diff --git a/winboard/bitmaps/g33w.bmp b/winboard/bitmaps/g33w.bmp
new file mode 100644
index 0000000..0c52cea
Binary files /dev/null and b/winboard/bitmaps/g33w.bmp differ
diff --git a/winboard/bitmaps/g49o.bmp b/winboard/bitmaps/g49o.bmp
new file mode 100644
index 0000000..2930420
Binary files /dev/null and b/winboard/bitmaps/g49o.bmp differ
diff --git a/winboard/bitmaps/g49s.bmp b/winboard/bitmaps/g49s.bmp
new file mode 100644
index 0000000..835cd41
Binary files /dev/null and b/winboard/bitmaps/g49s.bmp differ
diff --git a/winboard/bitmaps/g49w.bmp b/winboard/bitmaps/g49w.bmp
new file mode 100644
index 0000000..4cf34ac
Binary files /dev/null and b/winboard/bitmaps/g49w.bmp differ
diff --git a/winboard/bitmaps/g72o.bmp b/winboard/bitmaps/g72o.bmp
new file mode 100644
index 0000000..6eb6bcf
Binary files /dev/null and b/winboard/bitmaps/g72o.bmp differ
diff --git a/winboard/bitmaps/g72s.bmp b/winboard/bitmaps/g72s.bmp
new file mode 100644
index 0000000..751be79
Binary files /dev/null and b/winboard/bitmaps/g72s.bmp differ
diff --git a/winboard/bitmaps/g72w.bmp b/winboard/bitmaps/g72w.bmp
new file mode 100644
index 0000000..aaae0c4
Binary files /dev/null and b/winboard/bitmaps/g72w.bmp differ
diff --git a/winboard/bitmaps/h129o.bmp b/winboard/bitmaps/h129o.bmp
new file mode 100644
index 0000000..563da93
Binary files /dev/null and b/winboard/bitmaps/h129o.bmp differ
diff --git a/winboard/bitmaps/h33o.bmp b/winboard/bitmaps/h33o.bmp
new file mode 100644
index 0000000..d811f80
Binary files /dev/null and b/winboard/bitmaps/h33o.bmp differ
diff --git a/winboard/bitmaps/h33s.bmp b/winboard/bitmaps/h33s.bmp
new file mode 100644
index 0000000..95e5dbe
Binary files /dev/null and b/winboard/bitmaps/h33s.bmp differ
diff --git a/winboard/bitmaps/h33w.bmp b/winboard/bitmaps/h33w.bmp
new file mode 100644
index 0000000..cebb7a3
Binary files /dev/null and b/winboard/bitmaps/h33w.bmp differ
diff --git a/winboard/bitmaps/h49o.bmp b/winboard/bitmaps/h49o.bmp
new file mode 100644
index 0000000..8ae9967
Binary files /dev/null and b/winboard/bitmaps/h49o.bmp differ
diff --git a/winboard/bitmaps/h49s.bmp b/winboard/bitmaps/h49s.bmp
new file mode 100644
index 0000000..1ace8fe
Binary files /dev/null and b/winboard/bitmaps/h49s.bmp differ
diff --git a/winboard/bitmaps/h49w.bmp b/winboard/bitmaps/h49w.bmp
new file mode 100644
index 0000000..0163d1e
Binary files /dev/null and b/winboard/bitmaps/h49w.bmp differ
diff --git a/winboard/bitmaps/h72o.bmp b/winboard/bitmaps/h72o.bmp
new file mode 100644
index 0000000..cdef69a
Binary files /dev/null and b/winboard/bitmaps/h72o.bmp differ
diff --git a/winboard/bitmaps/h72s.bmp b/winboard/bitmaps/h72s.bmp
new file mode 100644
index 0000000..44baa80
Binary files /dev/null and b/winboard/bitmaps/h72s.bmp differ
diff --git a/winboard/bitmaps/h72w.bmp b/winboard/bitmaps/h72w.bmp
new file mode 100644
index 0000000..eac2216
Binary files /dev/null and b/winboard/bitmaps/h72w.bmp differ
diff --git a/winboard/bitmaps/l33o.bmp b/winboard/bitmaps/l33o.bmp
new file mode 100644
index 0000000..510882b
Binary files /dev/null and b/winboard/bitmaps/l33o.bmp differ
diff --git a/winboard/bitmaps/l33s.bmp b/winboard/bitmaps/l33s.bmp
new file mode 100644
index 0000000..4c1ce81
Binary files /dev/null and b/winboard/bitmaps/l33s.bmp differ
diff --git a/winboard/bitmaps/l33w.bmp b/winboard/bitmaps/l33w.bmp
new file mode 100644
index 0000000..fff3ec7
Binary files /dev/null and b/winboard/bitmaps/l33w.bmp differ
diff --git a/winboard/bitmaps/l37o.bmp b/winboard/bitmaps/l37o.bmp
new file mode 100644
index 0000000..473b0f7
Binary files /dev/null and b/winboard/bitmaps/l37o.bmp differ
diff --git a/winboard/bitmaps/l37s.bmp b/winboard/bitmaps/l37s.bmp
new file mode 100644
index 0000000..5709f68
Binary files /dev/null and b/winboard/bitmaps/l37s.bmp differ
diff --git a/winboard/bitmaps/l37w.bmp b/winboard/bitmaps/l37w.bmp
new file mode 100644
index 0000000..e9d27fa
Binary files /dev/null and b/winboard/bitmaps/l37w.bmp differ
diff --git a/winboard/bitmaps/l40o.bmp b/winboard/bitmaps/l40o.bmp
new file mode 100644
index 0000000..c97e0f2
Binary files /dev/null and b/winboard/bitmaps/l40o.bmp differ
diff --git a/winboard/bitmaps/l40s.bmp b/winboard/bitmaps/l40s.bmp
new file mode 100644
index 0000000..50bc67a
Binary files /dev/null and b/winboard/bitmaps/l40s.bmp differ
diff --git a/winboard/bitmaps/l40w.bmp b/winboard/bitmaps/l40w.bmp
new file mode 100644
index 0000000..ca11b56
Binary files /dev/null and b/winboard/bitmaps/l40w.bmp differ
diff --git a/winboard/bitmaps/l45o.bmp b/winboard/bitmaps/l45o.bmp
new file mode 100644
index 0000000..757f9cc
Binary files /dev/null and b/winboard/bitmaps/l45o.bmp differ
diff --git a/winboard/bitmaps/l45s.bmp b/winboard/bitmaps/l45s.bmp
new file mode 100644
index 0000000..72e451b
Binary files /dev/null and b/winboard/bitmaps/l45s.bmp differ
diff --git a/winboard/bitmaps/l45w.bmp b/winboard/bitmaps/l45w.bmp
new file mode 100644
index 0000000..9b2050f
Binary files /dev/null and b/winboard/bitmaps/l45w.bmp differ
diff --git a/winboard/bitmaps/l49o.bmp b/winboard/bitmaps/l49o.bmp
new file mode 100644
index 0000000..4a83007
Binary files /dev/null and b/winboard/bitmaps/l49o.bmp differ
diff --git a/winboard/bitmaps/l49s.bmp b/winboard/bitmaps/l49s.bmp
new file mode 100644
index 0000000..9dbea26
Binary files /dev/null and b/winboard/bitmaps/l49s.bmp differ
diff --git a/winboard/bitmaps/l49w.bmp b/winboard/bitmaps/l49w.bmp
new file mode 100644
index 0000000..da13b66
Binary files /dev/null and b/winboard/bitmaps/l49w.bmp differ
diff --git a/winboard/bitmaps/l54o.bmp b/winboard/bitmaps/l54o.bmp
new file mode 100644
index 0000000..4fc6484
Binary files /dev/null and b/winboard/bitmaps/l54o.bmp differ
diff --git a/winboard/bitmaps/l54s.bmp b/winboard/bitmaps/l54s.bmp
new file mode 100644
index 0000000..7abf49d
Binary files /dev/null and b/winboard/bitmaps/l54s.bmp differ
diff --git a/winboard/bitmaps/l54w.bmp b/winboard/bitmaps/l54w.bmp
new file mode 100644
index 0000000..2ba36b8
Binary files /dev/null and b/winboard/bitmaps/l54w.bmp differ
diff --git a/winboard/bitmaps/l58o.bmp b/winboard/bitmaps/l58o.bmp
new file mode 100644
index 0000000..584a038
Binary files /dev/null and b/winboard/bitmaps/l58o.bmp differ
diff --git a/winboard/bitmaps/l58s.bmp b/winboard/bitmaps/l58s.bmp
new file mode 100644
index 0000000..1c7ba69
Binary files /dev/null and b/winboard/bitmaps/l58s.bmp differ
diff --git a/winboard/bitmaps/l58w.bmp b/winboard/bitmaps/l58w.bmp
new file mode 100644
index 0000000..2ec0f44
Binary files /dev/null and b/winboard/bitmaps/l58w.bmp differ
diff --git a/winboard/bitmaps/l64o.bmp b/winboard/bitmaps/l64o.bmp
new file mode 100644
index 0000000..dcd5a4c
Binary files /dev/null and b/winboard/bitmaps/l64o.bmp differ
diff --git a/winboard/bitmaps/l64s.bmp b/winboard/bitmaps/l64s.bmp
new file mode 100644
index 0000000..0bdc5bb
Binary files /dev/null and b/winboard/bitmaps/l64s.bmp differ
diff --git a/winboard/bitmaps/l64w.bmp b/winboard/bitmaps/l64w.bmp
new file mode 100644
index 0000000..80342c3
Binary files /dev/null and b/winboard/bitmaps/l64w.bmp differ
diff --git a/winboard/bitmaps/l72o.bmp b/winboard/bitmaps/l72o.bmp
new file mode 100644
index 0000000..130cbfd
Binary files /dev/null and b/winboard/bitmaps/l72o.bmp differ
diff --git a/winboard/bitmaps/l72s.bmp b/winboard/bitmaps/l72s.bmp
new file mode 100644
index 0000000..798e908
Binary files /dev/null and b/winboard/bitmaps/l72s.bmp differ
diff --git a/winboard/bitmaps/l72w.bmp b/winboard/bitmaps/l72w.bmp
new file mode 100644
index 0000000..6914cb1
Binary files /dev/null and b/winboard/bitmaps/l72w.bmp differ
diff --git a/winboard/bitmaps/b129o.bmp b/winboard/bitmaps/m129o.bmp
similarity index 100%
copy from winboard/bitmaps/b129o.bmp
copy to winboard/bitmaps/m129o.bmp
diff --git a/winboard/bitmaps/m33o.bmp b/winboard/bitmaps/m33o.bmp
new file mode 100644
index 0000000..313e998
Binary files /dev/null and b/winboard/bitmaps/m33o.bmp differ
diff --git a/winboard/bitmaps/m33s.bmp b/winboard/bitmaps/m33s.bmp
new file mode 100644
index 0000000..e2571b6
Binary files /dev/null and b/winboard/bitmaps/m33s.bmp differ
diff --git a/winboard/bitmaps/m33w.bmp b/winboard/bitmaps/m33w.bmp
new file mode 100644
index 0000000..110f29e
Binary files /dev/null and b/winboard/bitmaps/m33w.bmp differ
diff --git a/winboard/bitmaps/m49o.bmp b/winboard/bitmaps/m49o.bmp
new file mode 100644
index 0000000..a70fb3e
Binary files /dev/null and b/winboard/bitmaps/m49o.bmp differ
diff --git a/winboard/bitmaps/m49s.bmp b/winboard/bitmaps/m49s.bmp
new file mode 100644
index 0000000..516ef04
Binary files /dev/null and b/winboard/bitmaps/m49s.bmp differ
diff --git a/winboard/bitmaps/m49w.bmp b/winboard/bitmaps/m49w.bmp
new file mode 100644
index 0000000..eaa0795
Binary files /dev/null and b/winboard/bitmaps/m49w.bmp differ
diff --git a/winboard/bitmaps/m72o.bmp b/winboard/bitmaps/m72o.bmp
new file mode 100644
index 0000000..1e1ad2a
Binary files /dev/null and b/winboard/bitmaps/m72o.bmp differ
diff --git a/winboard/bitmaps/m72s.bmp b/winboard/bitmaps/m72s.bmp
new file mode 100644
index 0000000..e9ac763
Binary files /dev/null and b/winboard/bitmaps/m72s.bmp differ
diff --git a/winboard/bitmaps/m72w.bmp b/winboard/bitmaps/m72w.bmp
new file mode 100644
index 0000000..a1958ea
Binary files /dev/null and b/winboard/bitmaps/m72w.bmp differ
diff --git a/winboard/bitmaps/ni49o.bmp b/winboard/bitmaps/ni49o.bmp
new file mode 100644
index 0000000..42f9021
Binary files /dev/null and b/winboard/bitmaps/ni49o.bmp differ
diff --git a/winboard/bitmaps/ni49s.bmp b/winboard/bitmaps/ni49s.bmp
new file mode 100644
index 0000000..dbb4397
Binary files /dev/null and b/winboard/bitmaps/ni49s.bmp differ
diff --git a/winboard/bitmaps/ni49w.bmp b/winboard/bitmaps/ni49w.bmp
new file mode 100644
index 0000000..7964c14
Binary files /dev/null and b/winboard/bitmaps/ni49w.bmp differ
diff --git a/winboard/bitmaps/ni72o.bmp b/winboard/bitmaps/ni72o.bmp
new file mode 100644
index 0000000..fe4bd69
Binary files /dev/null and b/winboard/bitmaps/ni72o.bmp differ
diff --git a/winboard/bitmaps/ni72s.bmp b/winboard/bitmaps/ni72s.bmp
new file mode 100644
index 0000000..644a54b
Binary files /dev/null and b/winboard/bitmaps/ni72s.bmp differ
diff --git a/winboard/bitmaps/ni72w.bmp b/winboard/bitmaps/ni72w.bmp
new file mode 100644
index 0000000..81cc086
Binary files /dev/null and b/winboard/bitmaps/ni72w.bmp differ
diff --git a/winboard/bitmaps/o33o.bmp b/winboard/bitmaps/o33o.bmp
new file mode 100644
index 0000000..667dc83
Binary files /dev/null and b/winboard/bitmaps/o33o.bmp differ
diff --git a/winboard/bitmaps/o33s.bmp b/winboard/bitmaps/o33s.bmp
new file mode 100644
index 0000000..a063095
Binary files /dev/null and b/winboard/bitmaps/o33s.bmp differ
diff --git a/winboard/bitmaps/o33w.bmp b/winboard/bitmaps/o33w.bmp
new file mode 100644
index 0000000..d782bd5
Binary files /dev/null and b/winboard/bitmaps/o33w.bmp differ
diff --git a/winboard/bitmaps/o49o.bmp b/winboard/bitmaps/o49o.bmp
new file mode 100644
index 0000000..7cefe71
Binary files /dev/null and b/winboard/bitmaps/o49o.bmp differ
diff --git a/winboard/bitmaps/o49s.bmp b/winboard/bitmaps/o49s.bmp
new file mode 100644
index 0000000..61e191f
Binary files /dev/null and b/winboard/bitmaps/o49s.bmp differ
diff --git a/winboard/bitmaps/o49w.bmp b/winboard/bitmaps/o49w.bmp
new file mode 100644
index 0000000..a4092ee
Binary files /dev/null and b/winboard/bitmaps/o49w.bmp differ
diff --git a/winboard/bitmaps/o72o.bmp b/winboard/bitmaps/o72o.bmp
new file mode 100644
index 0000000..f0d0d52
Binary files /dev/null and b/winboard/bitmaps/o72o.bmp differ
diff --git a/winboard/bitmaps/o72s.bmp b/winboard/bitmaps/o72s.bmp
new file mode 100644
index 0000000..f9aa0ff
Binary files /dev/null and b/winboard/bitmaps/o72s.bmp differ
diff --git a/winboard/bitmaps/o72w.bmp b/winboard/bitmaps/o72w.bmp
new file mode 100644
index 0000000..3e557be
Binary files /dev/null and b/winboard/bitmaps/o72w.bmp differ
diff --git a/winboard/bitmaps/ponder_14.ico b/winboard/bitmaps/ponder_14.ico
new file mode 100644
index 0000000..484deaa
Binary files /dev/null and b/winboard/bitmaps/ponder_14.ico differ
diff --git a/winboard/bitmaps/s49o.bmp b/winboard/bitmaps/s49o.bmp
new file mode 100644
index 0000000..e6755c9
Binary files /dev/null and b/winboard/bitmaps/s49o.bmp differ
diff --git a/winboard/bitmaps/s49s.bmp b/winboard/bitmaps/s49s.bmp
new file mode 100644
index 0000000..0f0efbb
Binary files /dev/null and b/winboard/bitmaps/s49s.bmp differ
diff --git a/winboard/bitmaps/s49w.bmp b/winboard/bitmaps/s49w.bmp
new file mode 100644
index 0000000..cc7354a
Binary files /dev/null and b/winboard/bitmaps/s49w.bmp differ
diff --git a/winboard/bitmaps/s72o.bmp b/winboard/bitmaps/s72o.bmp
new file mode 100644
index 0000000..4df9aa8
Binary files /dev/null and b/winboard/bitmaps/s72o.bmp differ
diff --git a/winboard/bitmaps/s72s.bmp b/winboard/bitmaps/s72s.bmp
new file mode 100644
index 0000000..d5ed119
Binary files /dev/null and b/winboard/bitmaps/s72s.bmp differ
diff --git a/winboard/bitmaps/s72w.bmp b/winboard/bitmaps/s72w.bmp
new file mode 100644
index 0000000..e042e37
Binary files /dev/null and b/winboard/bitmaps/s72w.bmp differ
diff --git a/winboard/bitmaps/trans_14.ico b/winboard/bitmaps/trans_14.ico
new file mode 100644
index 0000000..a096131
Binary files /dev/null and b/winboard/bitmaps/trans_14.ico differ
diff --git a/winboard/bitmaps/u49o.bmp b/winboard/bitmaps/u49o.bmp
new file mode 100644
index 0000000..6548a24
Binary files /dev/null and b/winboard/bitmaps/u49o.bmp differ
diff --git a/winboard/bitmaps/u49s.bmp b/winboard/bitmaps/u49s.bmp
new file mode 100644
index 0000000..ca21af0
Binary files /dev/null and b/winboard/bitmaps/u49s.bmp differ
diff --git a/winboard/bitmaps/u49w.bmp b/winboard/bitmaps/u49w.bmp
new file mode 100644
index 0000000..d790963
Binary files /dev/null and b/winboard/bitmaps/u49w.bmp differ
diff --git a/winboard/bitmaps/u72o.bmp b/winboard/bitmaps/u72o.bmp
new file mode 100644
index 0000000..d4ea856
Binary files /dev/null and b/winboard/bitmaps/u72o.bmp differ
diff --git a/winboard/bitmaps/u72s.bmp b/winboard/bitmaps/u72s.bmp
new file mode 100644
index 0000000..ff6f72b
Binary files /dev/null and b/winboard/bitmaps/u72s.bmp differ
diff --git a/winboard/bitmaps/u72w.bmp b/winboard/bitmaps/u72w.bmp
new file mode 100644
index 0000000..d9dbca7
Binary files /dev/null and b/winboard/bitmaps/u72w.bmp differ
diff --git a/winboard/bitmaps/unknown_14.ico b/winboard/bitmaps/unknown_14.ico
new file mode 100644
index 0000000..ea3cef3
Binary files /dev/null and b/winboard/bitmaps/unknown_14.ico differ
diff --git a/winboard/bitmaps/v33o.bmp b/winboard/bitmaps/v33o.bmp
new file mode 100644
index 0000000..29edd62
Binary files /dev/null and b/winboard/bitmaps/v33o.bmp differ
diff --git a/winboard/bitmaps/v33s.bmp b/winboard/bitmaps/v33s.bmp
new file mode 100644
index 0000000..d28863c
Binary files /dev/null and b/winboard/bitmaps/v33s.bmp differ
diff --git a/winboard/bitmaps/v33w.bmp b/winboard/bitmaps/v33w.bmp
new file mode 100644
index 0000000..718729c
Binary files /dev/null and b/winboard/bitmaps/v33w.bmp differ
diff --git a/winboard/bitmaps/v49o.bmp b/winboard/bitmaps/v49o.bmp
new file mode 100644
index 0000000..bd2f8a1
Binary files /dev/null and b/winboard/bitmaps/v49o.bmp differ
diff --git a/winboard/bitmaps/v49s.bmp b/winboard/bitmaps/v49s.bmp
new file mode 100644
index 0000000..9bf4b10
Binary files /dev/null and b/winboard/bitmaps/v49s.bmp differ
diff --git a/winboard/bitmaps/v49w.bmp b/winboard/bitmaps/v49w.bmp
new file mode 100644
index 0000000..076ea0f
Binary files /dev/null and b/winboard/bitmaps/v49w.bmp differ
diff --git a/winboard/bitmaps/v54o.bmp b/winboard/bitmaps/v54o.bmp
new file mode 100644
index 0000000..2499562
Binary files /dev/null and b/winboard/bitmaps/v54o.bmp differ
diff --git a/winboard/bitmaps/v54s.bmp b/winboard/bitmaps/v54s.bmp
new file mode 100644
index 0000000..1c69916
Binary files /dev/null and b/winboard/bitmaps/v54s.bmp differ
diff --git a/winboard/bitmaps/v54w.bmp b/winboard/bitmaps/v54w.bmp
new file mode 100644
index 0000000..57bf8d6
Binary files /dev/null and b/winboard/bitmaps/v54w.bmp differ
diff --git a/winboard/bitmaps/v72o.bmp b/winboard/bitmaps/v72o.bmp
new file mode 100644
index 0000000..cd2bbcd
Binary files /dev/null and b/winboard/bitmaps/v72o.bmp differ
diff --git a/winboard/bitmaps/v72s.bmp b/winboard/bitmaps/v72s.bmp
new file mode 100644
index 0000000..3dd30dc
Binary files /dev/null and b/winboard/bitmaps/v72s.bmp differ
diff --git a/winboard/bitmaps/v72w.bmp b/winboard/bitmaps/v72w.bmp
new file mode 100644
index 0000000..3797c5a
Binary files /dev/null and b/winboard/bitmaps/v72w.bmp differ
diff --git a/winboard/bitmaps/w33o.bmp b/winboard/bitmaps/w33o.bmp
new file mode 100644
index 0000000..5de631d
Binary files /dev/null and b/winboard/bitmaps/w33o.bmp differ
diff --git a/winboard/bitmaps/w33s.bmp b/winboard/bitmaps/w33s.bmp
new file mode 100644
index 0000000..4defb6a
Binary files /dev/null and b/winboard/bitmaps/w33s.bmp differ
diff --git a/winboard/bitmaps/w33w.bmp b/winboard/bitmaps/w33w.bmp
new file mode 100644
index 0000000..d7a3994
Binary files /dev/null and b/winboard/bitmaps/w33w.bmp differ
diff --git a/winboard/bitmaps/w49o.bmp b/winboard/bitmaps/w49o.bmp
new file mode 100644
index 0000000..3ff1ce4
Binary files /dev/null and b/winboard/bitmaps/w49o.bmp differ
diff --git a/winboard/bitmaps/w49s.bmp b/winboard/bitmaps/w49s.bmp
new file mode 100644
index 0000000..d51a73c
Binary files /dev/null and b/winboard/bitmaps/w49s.bmp differ
diff --git a/winboard/bitmaps/w49w.bmp b/winboard/bitmaps/w49w.bmp
new file mode 100644
index 0000000..d8158af
Binary files /dev/null and b/winboard/bitmaps/w49w.bmp differ
diff --git a/winboard/bitmaps/w54o.bmp b/winboard/bitmaps/w54o.bmp
new file mode 100644
index 0000000..ee12647
Binary files /dev/null and b/winboard/bitmaps/w54o.bmp differ
diff --git a/winboard/bitmaps/w54s.bmp b/winboard/bitmaps/w54s.bmp
new file mode 100644
index 0000000..1984975
Binary files /dev/null and b/winboard/bitmaps/w54s.bmp differ
diff --git a/winboard/bitmaps/w54w.bmp b/winboard/bitmaps/w54w.bmp
new file mode 100644
index 0000000..8db2f9e
Binary files /dev/null and b/winboard/bitmaps/w54w.bmp differ
diff --git a/winboard/bitmaps/w72o.bmp b/winboard/bitmaps/w72o.bmp
new file mode 100644
index 0000000..c9c8969
Binary files /dev/null and b/winboard/bitmaps/w72o.bmp differ
diff --git a/winboard/bitmaps/w72s.bmp b/winboard/bitmaps/w72s.bmp
new file mode 100644
index 0000000..693e36c
Binary files /dev/null and b/winboard/bitmaps/w72s.bmp differ
diff --git a/winboard/bitmaps/w72w.bmp b/winboard/bitmaps/w72w.bmp
new file mode 100644
index 0000000..b7d0682
Binary files /dev/null and b/winboard/bitmaps/w72w.bmp differ
diff --git a/winboard/bitmaps/was.gif b/winboard/bitmaps/was.gif
new file mode 100644
index 0000000..bebbc25
Binary files /dev/null and b/winboard/bitmaps/was.gif differ
diff --git a/winboard/bitmaps/wcv.gif b/winboard/bitmaps/wcv.gif
new file mode 100644
index 0000000..ff56268
Binary files /dev/null and b/winboard/bitmaps/wcv.gif differ
diff --git a/winboard/bitmaps/white_14.ico b/winboard/bitmaps/white_14.ico
new file mode 100644
index 0000000..4783e0f
Binary files /dev/null and b/winboard/bitmaps/white_14.ico differ
diff --git a/winboard/bitmaps/wl49o.bmp b/winboard/bitmaps/wl49o.bmp
new file mode 100644
index 0000000..9e71d68
Binary files /dev/null and b/winboard/bitmaps/wl49o.bmp differ
diff --git a/winboard/bitmaps/wl49s.bmp b/winboard/bitmaps/wl49s.bmp
new file mode 100644
index 0000000..a24a4f4
Binary files /dev/null and b/winboard/bitmaps/wl49s.bmp differ
diff --git a/winboard/bitmaps/wl72o.bmp b/winboard/bitmaps/wl72o.bmp
new file mode 100644
index 0000000..1e07a90
Binary files /dev/null and b/winboard/bitmaps/wl72o.bmp differ
diff --git a/winboard/bitmaps/wl72s.bmp b/winboard/bitmaps/wl72s.bmp
new file mode 100644
index 0000000..4ea254a
Binary files /dev/null and b/winboard/bitmaps/wl72s.bmp differ
diff --git a/winboard/bitmaps/wn49o.bmp b/winboard/bitmaps/wn49o.bmp
new file mode 100644
index 0000000..e89eb7a
Binary files /dev/null and b/winboard/bitmaps/wn49o.bmp differ
diff --git a/winboard/bitmaps/wn49s.bmp b/winboard/bitmaps/wn49s.bmp
new file mode 100644
index 0000000..0ab191a
Binary files /dev/null and b/winboard/bitmaps/wn49s.bmp differ
diff --git a/winboard/bitmaps/wn72o.bmp b/winboard/bitmaps/wn72o.bmp
new file mode 100644
index 0000000..24f2a33
Binary files /dev/null and b/winboard/bitmaps/wn72o.bmp differ
diff --git a/winboard/bitmaps/wn72s.bmp b/winboard/bitmaps/wn72s.bmp
new file mode 100644
index 0000000..7a91eff
Binary files /dev/null and b/winboard/bitmaps/wn72s.bmp differ
diff --git a/winboard/bitmaps/wp49o.bmp b/winboard/bitmaps/wp49o.bmp
new file mode 100644
index 0000000..f6e90fa
Binary files /dev/null and b/winboard/bitmaps/wp49o.bmp differ
diff --git a/winboard/bitmaps/wp49s.bmp b/winboard/bitmaps/wp49s.bmp
new file mode 100644
index 0000000..88f96aa
Binary files /dev/null and b/winboard/bitmaps/wp49s.bmp differ
diff --git a/winboard/bitmaps/wp72o.bmp b/winboard/bitmaps/wp72o.bmp
new file mode 100644
index 0000000..7c359be
Binary files /dev/null and b/winboard/bitmaps/wp72o.bmp differ
diff --git a/winboard/bitmaps/wp72s.bmp b/winboard/bitmaps/wp72s.bmp
new file mode 100644
index 0000000..933f377
Binary files /dev/null and b/winboard/bitmaps/wp72s.bmp differ
diff --git a/winboard/bitmaps/ws49o.bmp b/winboard/bitmaps/ws49o.bmp
new file mode 100644
index 0000000..fe77467
Binary files /dev/null and b/winboard/bitmaps/ws49o.bmp differ
diff --git a/winboard/bitmaps/ws49s.bmp b/winboard/bitmaps/ws49s.bmp
new file mode 100644
index 0000000..5d2ad69
Binary files /dev/null and b/winboard/bitmaps/ws49s.bmp differ
diff --git a/winboard/bitmaps/ws72o.bmp b/winboard/bitmaps/ws72o.bmp
new file mode 100644
index 0000000..316da61
Binary files /dev/null and b/winboard/bitmaps/ws72o.bmp differ
diff --git a/winboard/bitmaps/ws72s.bmp b/winboard/bitmaps/ws72s.bmp
new file mode 100644
index 0000000..382b4dc
Binary files /dev/null and b/winboard/bitmaps/ws72s.bmp differ
diff --git a/winboard/config.h b/winboard/config.h
index 8d76073..a219a96 100644
--- a/winboard/config.h
+++ b/winboard/config.h
@@ -1,5 +1,6 @@
 /* config.h.in.  Generated automatically from configure.in by autoheader.  */
 
+
 /* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */
 /*#undef HAVE_SYS_WAIT_H*/
 
@@ -27,9 +28,7 @@
 #define HAVE_GETTIMEOFDAY 0
 
 /* Use our own random() defined in winboard.c. */
-#define HAVE_RANDOM 1
-#define random myrandom
-#define srandom mysrandom
+#define HAVE_RANDOM 0
 
 #define HAVE_SYS_SOCKET_H 0
 
@@ -37,7 +36,7 @@
 
 #define LAST_PTY_LETTER 'q'
 
-#define PATCHLEVEL "7"
+#define PATCHLEVEL "0j"
 
 #define PRODUCT "WinBoard"
 
@@ -55,7 +54,7 @@
 
 #define USE_PTYS 0
 
-#define VERSION "4.2"
+#define VERSION "4.4"
 
 /*#undef X_WCHAR*/
 
@@ -130,4 +129,3 @@
 #define SCF_DEFAULT 0x0000
 #define SCF_ALL 0x0004
 #endif
-
diff --git a/winboard/cygwin.mak b/winboard/cygwin.mak
old mode 100755
new mode 100644
index c83f0a7..1323670
--- a/winboard/cygwin.mak
+++ b/winboard/cygwin.mak
@@ -10,11 +10,15 @@ linkdebug= -g
 proj=winboard
 allobj=  winboard.o backend.o parser.o moves.o lists.o \
 	 gamelist.o pgntags.o wedittags.o wgamelist.o zippy.o \
-         wsockerr.o wbres.o wclipbrd.o woptions.o
+	 wsockerr.o wbres.o wclipbrd.o woptions.o uci.o \
+	 wengineo.o wevalgraph.o whistory.o wlayout.o \
+	 wplugin.o wsnap.o book.o
 
 dotc=   winboard.c backend.c parser.c moves.c lists.c \
-	 gamelist.c pgntags.c wedittags.c wgamelist.c zippy.c \
-         wsockerr.c winboard.rc wclipbrd.c woptions.c
+	gamelist.c pgntags.c wedittags.c wgamelist.c zippy.c \
+	wsockerr.c winboard.rc wclipbrd.c woptions.c uci.c \
+	wengineo.c wevalgraph.c whistory.c wlayout.c \
+	wplugin.c wsnap.c book.c
 
 # Currently WinBoard will build either with or without -mno-cygwin
 # however, a Cygwin bug in forming the command line to WinMain() is
@@ -27,7 +31,7 @@ INCLUDES= -I. -I..
 CVARS= $(INCLUDES) $(cygwin)
 CC = gcc $(CVARS)
 WCC = $(CC) -mwindows $(linkdebug)
-HC="/c/program files/help workshop/hcrtf.exe" -xn
+HC="c:/program files/help workshop/hcrtf.exe" -xn
 
 all: $(proj).exe
 
@@ -89,3 +93,4 @@ wclipbrd.o: config.h ../common.h winboard.h resource.h ../frontend.h
 wclipbrd.o: ../backend.h ../lists.h wclipbrd.h
 woptions.o: config.h ../common.h winboard.h resource.h ../backend.h
 woptions.o: ../lists.h ../frontend.h woptions.h defaults.h wedittags.h
+book.o: ../common.h ../backend.h
\ No newline at end of file
diff --git a/winboard/defaults.h b/winboard/defaults.h
index f129447..4c44350 100644
--- a/winboard/defaults.h
+++ b/winboard/defaults.h
@@ -1,8 +1,10 @@
 /*
  * defaults.h -- Default settings for Windows NT front end to XBoard
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-97 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
@@ -26,28 +28,30 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 /* Static */
 #define POSITION_FILT "Position files (*.fen,*.epd,*.pos)\0*.fen;*.epd;*.pos\0All files (*.*)\0*.*\0"
 #define GAME_FILT     "Game files (*.pgn,*.gam)\0*.pgn;*.gam\0All files (*.*)\0*.*\0"
+#define DIAGRAM_FILT  "bitmap files (*.bmp)\0*.bmp\0All files (*.*)\0*.*\0"
 #define SOUND_FILT    "Wave files (*.wav)\0*.wav\0All files (*.*)\0*.*\0"
 #define OUTER_MARGIN (tinyLayout ? 0 : 4)
 #define INNER_MARGIN (tinyLayout ? 0 : 2)
@@ -177,6 +181,8 @@
 #define EDITTAGS_FONT_COLOSSAL "Courier New:8.0"
 #define EDITTAGS_FONT_TITANIC  "Courier New:8.0"
 
+#define MOVEHISTORY_FONT_ALL    "MS Sans Serif:8.0"
+
 #define COLOR_SHOUT            "#209000"
 #define COLOR_SSHOUT         "b #289808"
 #define COLOR_CHANNEL1         "#2020E0"
@@ -211,6 +217,7 @@ freechess.org /icsport=5000 /icshelper=timeseal\n\
 global.chessparlor.com /icsport=6000 /icshelper=timeseal\n\
 chessanytime.com /icsport=5000\n\
 chess.net /icsport=5000\n\
+chess.deepnet.com /icsport=5000 /icshelper=timeseal\n\
 zics.org /icsport=5000\n\
 jogo.cex.org.br /icsport=5000\n\
 ajedrez.cec.uchile.cl /icsport=5000\n\
@@ -238,11 +245,13 @@ Pl&ay (name),play,1,1\n\
 "
 
 #define FCP_NAMES "\
+fmax /fd=Fairy-Max\n\
 GNUChess\n\
 \"GNUChes5 xboard\"\n\
 "
 
 #define SCP_NAMES "\
+fmax /sd=Fairy-Max\n\
 GNUChess\n\
 \"GNUChes5 xboard\"\n\
 "
diff --git a/winboard/makefile.gcc b/winboard/makefile.gcc
new file mode 100644
index 0000000..5bd49dd
--- /dev/null
+++ b/winboard/makefile.gcc
@@ -0,0 +1,159 @@
+# WinBoard makefile using gcc
+
+
+PROJ=winboard
+
+
+OBJS=backend.o book.o gamelist.o lists.o moves.o pgntags.o uci.o zippy.o\
+ parser.o wbres.o wclipbrd.o wedittags.o wengineo.o wevalgraph.o\
+ wgamelist.o whistory.o winboard.o wlayout.o woptions.o wsnap.o\
+ wsockerr.o
+
+
+# make compiling less spammy
+compile = @echo "$1"; $(CC) $(CFLAGS) $1
+
+
+# Debugging?
+USE_DEBUG=0
+
+
+# set this to 1 unless you don't mind linking with cygwin1.dll
+USE_MINGW=1
+
+
+# set up for cygwin or not
+ifeq ($(USE_MINGW),1)
+CFCYG = -mno-cygwin
+LFCYG = -mno-cygwin -lmsvcrt
+endif
+
+
+CC = gcc
+FLEX = "flex.exe" # we need version 2.5.4 or later, cygwin's is 2.5.35
+#      "c:/mingw/mingw32/bin/flex.exe"
+HC="C:/Program Files/Help Workshop/hcrtf" -xn
+DEFS = -D_WIN32_IE=0x0300 -DWIN32
+WARN = -Wall -Wno-char-subscripts -Wno-parentheses
+ARCH =
+ifeq ($(USE_DEBUG),0)
+  CFDEBUG = -DNDEBUG
+  OPTS = -Os -frename-registers -funit-at-a-time -fstrict-aliasing -fstrength-reduce
+else
+  CFDEBUG = -D_DEBUG -DDEBUG -g
+endif
+CF = -c $(WARN) -pipe $(CFDEBUG) $(DEFS) -I. -I..
+CFLAGS = $(CF) $(ARCH) $(OPTS) $(CFCYG)
+LFLAGS = $(LFCYG) $(CFDEBUG) -fpic -s -mwindows -lwsock32 -lwinmm -lcomctl32
+
+
+all: $(PROJ).exe
+
+
+clean:
+	rm -f *~ $(PROJ).exe $(PROJ).err $(PROJ).rbj $(PROJ).RES $(PROJ).res\
+	*.sbr *.bsc *.o *.obj *.plg *.opt *.ncb *.debug *.bak *.gid *.GID\
+	*.map *.pdb *.tmp $(PROJ).ini
+
+
+# Update the help file if necessary
+$(PROJ).hlp : $(PROJ).rtf
+	$(HC) $(PROJ).hpj
+	@cat $(PROJ).err
+	@mv $(PROJ).hlp tmp.hlp
+	@mv tmp.hlp $(PROJ).hlp # these moves to get the case right
+
+
+# Update the resource if necessary
+wbres.o: $(PROJ).rc $(PROJ).h resource.h
+	windres --use-temp-file --include-dir .. $< -O coff -o $@
+
+
+# note: cygwin flex needs m4 package.  cygwin-setup forgets this dependency
+# note2: use mingw flex instead... although I got cygwin's flex working (with m4),
+#        it didn't produce a useable parser.c (1000's of errors)
+parser.c: ../parser.l
+	$(FLEX) -oparser.c -L ../parser.l
+
+
+$(PROJ).exe: $(OBJS) $(PROJ).hlp
+	$(CC) $(guiflags) $(OBJS) $(LFLAGS) -o $(PROJ).exe
+
+
+winboard.o: winboard.c config.h winboard.h ../common.h ../frontend.h ../backend.h \
+	../moves.h wgamelist.h defaults.h resource.h wclipbrd.h \
+	wedittags.h wsockerr.h woptions.h wsnap.h ../lists.h
+	$(call compile, $<)
+
+backend.o: ../backend.c config.h ../common.h ../frontend.h ../backend.h \
+	../parser.h ../moves.h ../zippy.h ../backendz.h ../gettext.h ../lists.h
+	$(call compile, $<)
+
+parser.o: parser.c config.h ../common.h ../backend.h ../parser.h \
+	../frontend.h ../moves.h ../lists.h
+	$(call compile, $<)
+
+moves.o: ../moves.c config.h ../backend.h ../common.h ../parser.h \
+	../moves.h ../lists.h
+	$(call compile, $<)
+
+lists.o: ../lists.c config.h ../lists.h ../common.h
+	$(call compile, $<)
+
+gamelist.o: ../gamelist.c config.h ../lists.h ../common.h ../frontend.h \
+	../backend.h ../parser.h
+	$(call compile, $<)
+
+wclipbrd.obj: wclipbrd.c config.h ../common.h ../frontend.h ../backend.h \
+	winboard.h resource.h wclipbrd.h ../lists.h
+	$(call compile, $<)
+
+wedittags.obj: wedittags.c config.h ../common.h winboard.h resource.h ../frontend.h \
+	../backend.h ../lists.h wedittags.h
+	$(call compile, $<)
+
+wgamelist.obj: wgamelist.c config.h. ../common.h winboard.h resource.h ../frontend.h \
+	../backend.h wgamelist.h ../lists.h
+	$(call compile, $<)
+
+woptions.obj: woptions.c config.h ../common.h ../frontend.h ../backend.h ../lists.h \
+	defaults.h winboard.h resource.h
+	$(call compile, $<)
+
+wengineo.obj: wengineo.c config.h ../common.h ../frontend.h ../backend.h \
+	../lists.h winboard.h resource.h wsnap.h
+	$(call compile, $<)
+
+whistory.obj: whistory.c config.h ../common.h ../frontend.h ../backend.h \
+	../lists.h winboard.h resource.h wsnap.h
+	$(call compile, $<)
+
+wevalgraph.obj: wevalgraph.c config.h ../common.h ../frontend.h ../backend.h \
+	../lists.h winboard.h resource.h wsnap.h
+	$(call compile, $<)
+
+wlayout.obj: wlayout.c config.h ../common.h winboard.h resource.h
+	$(call compile, $<)
+
+wsockerr.obj: wsockerr.c wsockerr.h
+	$(call compile, $<)
+
+wsnap.obj: wsnap.c wsnap.h
+	$(call compile, $<)
+
+pgntags.o: ../pgntags.c config.h ../common.h ../frontend.h ../backend.h \
+	../parser.h ../lists.h
+	$(call compile, $<)
+
+zippy.o: ../zippy.c config.h ../common.h ../zippy.h ../frontend.h \
+	../backend.h ../backendz.h ../lists.h
+	$(call compile, $<)
+
+book.o: ../book.c ../common.h ../backend.h ../lists.h
+	$(call compile, $<)
+
+uci.o: ../uci.c ..//common.h ../backend.h ../frontend.h ../lists.h
+	$(call compile, $<)
+
+%.o: %.c
+	$(call compile, $<)
diff --git a/winboard/makefile.ms b/winboard/makefile.ms
new file mode 100644
index 0000000..d406aef
--- /dev/null
+++ b/winboard/makefile.ms
@@ -0,0 +1,160 @@
+# Command line: nmake /f makefile.ms
+# Set VCVER=6 for MSVC 4.x through 7.0(aka 2002 aka .NET).
+# For MSVC 8 (aka 2005) set VCVER=8.  Beyond that try 8 first.
+VCVER=6
+
+
+PROJ = winboard
+
+
+OBJS=backend.obj book.obj gamelist.obj lists.obj moves.obj pgntags.obj uci.obj zippy.obj\
+ parser.obj wclipbrd.obj wedittags.obj wengineo.obj wevalgraph.obj wgamelist.obj\
+ whistory.obj winboard.obj wlayout.obj woptions.obj wsnap.obj wsockerr.obj
+
+
+# Debugging?
+USE_DEBUG=0
+
+
+CC = @cl
+RC = @rc
+LINK = link
+HC="c:\program files\help workshop\hcrtf.exe" -xn
+FLEX = "c:/mingw/mingw32/bin/flex.exe"
+DEFS = -D_WIN32_IE=0x300 -DWIN32 -DWINVER=0x400 -D_WIN32_WINDOWS=0x500
+#WARN = -W3
+ARCH =
+
+
+!if $(VCVER) >= 8
+CLIB= libcmt
+LIBF= -MT
+DEPRECATE=-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_USE_32BIT_TIME_T
+!else
+VSO = -Gf -Og
+CLIB = msvcrt
+LIBF = -MD
+!endif
+
+
+!if $(USE_DEBUG) == 0
+CFDEBUG = -DNDEBUG
+OPTS = -Os -Oy -Gs -GA -Zl $(VSO) $(LIBF)
+LFDEBUG = $(CLIB).lib
+!else
+CFDEBUG = -D_DEBUG -DDEBUG
+OPTS = -Od -Zi -Fd$(PROJ).pdb $(LIBF)d
+LFDEBUG = -DEBUG -PDB:$(PROJ).pdb -MAP:$(PROJ).map $(CLIB)d.lib
+!endif
+CF = $(CFDEBUG) $(DEFS) $(DEPRECATE) -I. -I..
+CFLAGS = -c -nologo $(WARN) $(CF) $(ARCH) $(OPTS)
+LFLAGS = -nologo $(LFDEBUG)
+
+
+all: $(PROJ).exe
+
+
+clean:
+        -erase *~ $(PROJ).exe $(PROJ).err $(PROJ).rbj $(PROJ).res *.sbr *.bsc\
+        *.o *.obj *.plg *.opt *.ncb *.debug *.bak *.gid *.map *.pdb *.ini
+
+
+# Update the help file if necessary
+$(PROJ).hlp : $(PROJ).rtf
+        $(HC) $(PROJ).hpj
+        - at type $(PROJ).err
+        - at rename $(PROJ).hlp $(PROJ).hlp.tmp
+        - at rename $(PROJ).hlp.tmp $(PROJ).hlp
+
+
+# Update the resource if necessary
+$(PROJ).res: $(PROJ).rc $(PROJ).h resource.h
+    $(RC) $(CF) -r -fo $(PROJ).res $(PROJ).rc
+
+parser.c: ../parser.l
+    $(FLEX) -oparser.c -L ../parser.l
+
+winboard.obj: winboard.c config.h winboard.h ../common.h ../frontend.h \
+        ../backend.h ../moves.h wgamelist.h defaults.h resource.h wclipbrd.h \
+        wedittags.h wsockerr.h woptions.h wsnap.h ../lists.h
+        $(CC) $(CFLAGS) winboard.c
+
+backend.obj: ../backend.c config.h ../common.h ../frontend.h ../backend.h \
+        ../parser.h ../moves.h ../zippy.h ../backendz.h ../gettext.h ../lists.h
+        $(CC) $(CFLAGS) ../backend.c
+
+parser.obj: parser.c config.h ../common.h ../backend.h ../parser.h \
+        ../frontend.h ../moves.h ../lists.h
+        $(CC) $(CFLAGS) parser.c
+
+book.obj: ../book.c ../common.h ../backend.h ../lists.h
+        $(CC) $(CFLAGS) ../book.c
+
+gamelist.obj: ../gamelist.c config.h ../lists.h ../common.h ../frontend.h \
+        ../backend.h ../parser.h
+        $(CC) $(CFLAGS) ../gamelist.c
+
+lists.obj: ../lists.c config.h ../lists.h ../common.h
+        $(CC) $(CFLAGS) ../lists.c
+
+moves.obj: ../moves.c config.h ../backend.h ../common.h ../parser.h \
+        ../moves.h ../lists.h
+        $(CC) $(CFLAGS) ../moves.c
+
+wclipbrd.obj: wclipbrd.c config.h ../common.h ../frontend.h ../backend.h \
+        winboard.h resource.h wclipbrd.h ../lists.h
+        $(CC) $(CFLAGS) wclipbrd.c
+
+wedittags.obj: wedittags.c config.h ../common.h winboard.h resource.h ../frontend.h \
+        ../backend.h ../lists.h wedittags.h
+        $(CC) $(CFLAGS) wedittags.c
+
+wgamelist.obj: wgamelist.c config.h. ../common.h winboard.h resource.h ../frontend.h \
+        ../backend.h wgamelist.h ../lists.h
+        $(CC) $(CFLAGS) wgamelist.c
+
+woptions.obj: woptions.c config.h ../common.h ../frontend.h ../backend.h \
+	../lists.h defaults.h winboard.h resource.h
+        $(CC) $(CFLAGS) woptions.c
+
+wengineo.obj: wengineo.c config.h ../common.h ../frontend.h ../backend.h \
+	../lists.h winboard.h resource.h wsnap.h
+        $(CC) $(CFLAGS) wengineo.c
+
+whistory.obj: whistory.c config.h ../common.h ../frontend.h ../backend.h \
+	../lists.h winboard.h resource.h wsnap.h
+        $(CC) $(CFLAGS) whistory.c
+
+wevalgraph.obj: wevalgraph.c config.h ../common.h ../frontend.h ../backend.h \
+	../lists.h winboard.h resource.h wsnap.h
+        $(CC) $(CFLAGS) wevalgraph.c
+
+wlayout.obj: wlayout.c config.h ../common.h winboard.h resource.h
+        $(CC) $(CFLAGS) wlayout.c
+
+wsockerr.obj: wsockerr.c wsockerr.h
+        $(CC) $(CFLAGS) wsockerr.c
+
+wsnap.obj: wsnap.c wsnap.h
+        $(CC) $(CFLAGS) wsnap.c
+
+pgntags.obj: ../pgntags.c config.h ../common.h ../frontend.h ../backend.h \
+        ../parser.h ../lists.h
+        $(CC) $(CFLAGS) ../pgntags.c
+
+zippy.obj: ../zippy.c config.h ../common.h ../zippy.h ../frontend.h \
+	../backend.h ../backendz.h ../lists.h
+        $(CC) $(CFLAGS) ../zippy.c
+
+uci.obj: ../uci.c ..//common.h ../backend.h ../frontend.h ../lists.h
+        $(CC) $(CFLAGS) ../uci.c
+
+
+$(PROJ).exe: $(OBJS) $(PROJ).res $(PROJ).hlp
+    $(LINK) $(LFLAGS) $(OBJS) wsock32.lib comctl32.lib winmm.lib shell32.lib\
+ oldnames.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib\
+ $(PROJ).res -out:$(PROJ).exe
+
+
+.c.obj:
+        $(CC) $(CFLAGS) $< 
\ No newline at end of file
diff --git a/winboard/mingw32.mak b/winboard/mingw32.mak
new file mode 100644
index 0000000..f60de0f
--- /dev/null
+++ b/winboard/mingw32.mak
@@ -0,0 +1,90 @@
+#
+# Makefile for WinBoard, using the GNU Cygwin toolset
+#
+
+# Uncomment both lines to turn on debugging symbols #######
+cdebug= -g
+linkdebug= -g
+#######################################################
+
+proj=winboard
+allobj=  winboard.o backend.o parser.o moves.o lists.o \
+	 gamelist.o pgntags.o wedittags.o wgamelist.o zippy.o \
+         wsockerr.o wbres.o wclipbrd.o woptions.o
+
+dotc=   winboard.c ../backend.c ../parser.c ../moves.c ../lists.c \
+	 ../gamelist.c ../pgntags.c wedittags.c wgamelist.c ../zippy.c \
+         wsockerr.c winboard.rc wclipbrd.c woptions.c
+
+# Currently WinBoard will build either with or without -mno-cygwin
+# however, a Cygwin bug in forming the command line to WinMain() is
+# exposed if -mno-cygwin is not used.
+#cygwin= -mno-cygwin
+
+VPATH= .:..
+CFLAGS= $(cdebug)
+INCLUDES= -I. -I..
+CVARS= $(INCLUDES) $(cygwin)
+CC =i686-pc-mingw32-gcc $(CVARS)
+WCC = $(CC) -mwindows $(linkdebug)
+
+all: $(proj).exe
+
+depend: $(dotc)
+	makedepend -Y -f cygwin.mak $(INCLUDES) $^
+
+clean:
+	rm -f *.obj *~ $(proj).exe $(proj).err $(proj).rbj \
+		$(proj).RES $(proj).res $(proj).ini *.sbr *.bsc *.o \
+		*.plg *.opt *.ncb *.debug *.bak *.gid *.GID
+
+maintainer-clean: clean
+	rm -f parser.c *.hlp *.HLP
+
+# Update the help file if necessary
+#$(proj).hlp : $(proj).rtf
+#	$(HC) $(proj).hpj
+#	cat $(proj).err
+
+# Update the resource if necessary
+wbres.o: $(proj).rc $(proj).h resource.h
+	i686-pc-mingw32-windres --use-temp-file --include-dir .. $<  -O coff -o $@
+
+# Update the object files if necessary
+
+parser.c: parser.l
+	flex -oparser.c -L $<
+
+$(proj).exe: $(allobj)  $(proj).rc
+	$(WCC) $(guiflags) $(allobj) \
+	-lwsock32 -lwinmm -lintl -lm -liberty \
+	-o $(proj).exe
+
+# DO NOT DELETE
+
+winboard.o: config.h ../common.h winboard.h resource.h ../frontend.h
+winboard.o: ../backend.h ../lists.h ../moves.h wclipbrd.h wgamelist.h
+winboard.o: wedittags.h woptions.h wsockerr.h defaults.h
+backend.o: config.h ../common.h ../frontend.h ../backend.h ../lists.h
+backend.o: ../parser.h ../moves.h ../zippy.h ../backendz.h
+parser.o: config.h ../common.h ../backend.h ../lists.h ../frontend.h
+parser.o: ../parser.h ../moves.h
+moves.o: config.h ../common.h ../backend.h ../lists.h ../frontend.h
+moves.o: ../moves.h ../parser.h
+lists.o: config.h ../common.h ../lists.h
+gamelist.o: config.h ../common.h ../frontend.h ../backend.h ../lists.h
+gamelist.o: ../parser.h
+pgntags.o: config.h ../common.h ../frontend.h ../backend.h ../lists.h
+pgntags.o: ../parser.h
+wedittags.o: config.h ../common.h winboard.h resource.h ../frontend.h
+wedittags.o: ../backend.h ../lists.h
+wgamelist.o: config.h ../common.h winboard.h resource.h ../frontend.h
+wgamelist.o: ../backend.h ../lists.h
+zippy.o: config.h ../common.h ../zippy.h ../frontend.h ../backend.h
+zippy.o: ../lists.h ../backendz.h
+wsockerr.o: wsockerr.h
+winboard.o: resource.h
+wclipbrd.o: config.h ../common.h winboard.h resource.h ../frontend.h
+wclipbrd.o: ../backend.h ../lists.h wclipbrd.h
+woptions.o: config.h ../common.h winboard.h resource.h ../backend.h
+woptions.o: ../lists.h ../frontend.h woptions.h defaults.h wedittags.h
diff --git a/winboard/msvc7.mak b/winboard/msvc7.mak
new file mode 100644
index 0000000..bb4cd4f
--- /dev/null
+++ b/winboard/msvc7.mak
@@ -0,0 +1,113 @@
+#
+# Makefile for WinBoard, using Microsoft Visual C++ and nmake
+# Command line:   nmake /f msvc.mak
+#
+
+OS=NT
+ENV=WIN32
+CPU=i386
+
+!include <$(OS)$(ENV).MAK>
+
+# Use up to date help compiler
+hc=hcrtf.exe -xn
+
+# Comment out both to turn on debugging symbols #######
+cdebug=
+linkdebug=
+#######################################################
+
+proj = winboard
+allobj = winboard.obj backend.obj parser.obj moves.obj lists.obj \
+	 gamelist.obj pgntags.obj wedittags.obj wgamelist.obj zippy.obj \
+         wsockerr.obj wclipbrd.obj woptions.obj
+
+cvars = $(cvars) -I. -I.. -DWINVER=0x0400
+#cflags = $(cflags) /FR
+cflags = $(cflags)
+
+all: $(proj).exe
+
+clean:
+	del /f *.obj *~ $(proj).exe $(proj).err $(proj).rbj $(proj).res \
+	  $(proj).ini *.sbr *.bsc *.o *.plg *.opt *.ncb *.debug *.bak *.gid
+
+# Update the help file if necessary
+$(proj).hlp : $(proj).rtf
+    $(hc) $(proj).hpj
+    type $(proj).err
+
+# Update the resource if necessary
+$(proj).rbj: $(proj).rc $(proj).h $(proj).res resource.h
+    $(rc) $(rcvars) -r -fo $(proj).res $(proj).rc
+    cvtres  /machine:X86 /out:$(proj).rbj $(proj).res
+
+# Update the object files if necessary
+winboard.obj: winboard.c config.h winboard.h ../common.h ../frontend.h \
+        ../backend.h ../moves.h wgamelist.h defaults.h resource.h wclipbrd.h \
+        wedittags.h wsockerr.h ../lists.h
+    $(cc) $(cflags) $(cvars) $(cdebug) winboard.c
+
+backend.obj: ../backend.c config.h ../common.h ../frontend.h ../backend.h \
+        ../parser.h ../moves.h ../zippy.h ../backendz.h ../lists.h
+    $(cc) $(cflags) $(cvars) $(cdebug) ../backend.c
+
+parser.obj: parser.c config.h ../common.h ../backend.h ../parser.h \
+        ../frontend.h ../moves.h ../lists.h
+    $(cc) $(cflags) $(cvars) $(cdebug) parser.c
+
+parser.c: ../parser.l
+    flex -oparser.c -L ../parser.l
+
+moves.obj: ../moves.c config.h ../backend.h ../common.h ../parser.h \
+        ../moves.h ../lists.h ../frontend.h
+    $(cc) $(cflags) $(cvars) $(cdebug) ../moves.c
+
+lists.obj: ../lists.c config.h ../lists.h ../common.h
+    $(cc) $(cflags) $(cvars) $(cdebug) ../lists.c
+
+gamelist.obj: ../gamelist.c config.h ../lists.h ../common.h ../frontend.h \
+        ../backend.h ../parser.h ../lists.h
+    $(cc) $(cflags) $(cvars) $(cdebug) ../gamelist.c
+
+pgntags.obj: ../pgntags.c config.h ../common.h ../frontend.h ../backend.h \
+    ../parser.h ../lists.h
+    $(cc) $(cflags) $(cvars) $(cdebug) ../pgntags.c
+
+wclipbrd.obj: wclipbrd.c config.h ../common.h ../frontend.h ../backend.h \
+              winboard.h wclipbrd.h ../lists.h resource.h
+    $(cc) $(cflags) $(cvars) $(cdebug) wclipbrd.c
+
+wedittags.obj: wedittags.c config.h ../common.h winboard.h ../frontend.h \
+        ../backend.h ../lists.h resource.h
+    $(cc) $(cflags) $(cvars) $(cdebug) wedittags.c
+
+wgamelist.obj: wgamelist.c config.h. ../common.h winboard.h ../frontend.h \
+        ../backend.h wgamelist.h ../lists.h resource.h
+    $(cc) $(cflags) $(cvars) $(cdebug) wgamelist.c
+
+woptions.obj: woptions.c config.h ../common.h ../frontend.h ../backend.h \
+	../lists.h defaults.h
+    $(cc) $(cflags) $(cvars) $(cdebug) woptions.c
+
+wsockerr.obj: wsockerr.c wsockerr.h
+    $(cc) $(cflags) $(cvars) $(cdebug) wsockerr.c
+
+zippy.obj: ../zippy.c config.h ../common.h ../zippy.h ../frontend.h \
+	../backend.h ../backendz.h ../lists.h
+    $(cc) $(cflags) $(cvars) $(cdebug) ../zippy.c
+
+$(proj).exe: $(allobj) $(proj).rbj $(proj).hlp $(proj).rc
+    $(link) $(linkdebug) /NODEFAULTLIB:LIBCD $(guiflags) $(allobj) \
+	wsock32.lib comctl32.lib winmm.lib libc.lib oldnames.lib kernel32.lib \
+	advapi32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib \
+	ws2_32.lib \
+	$(proj).rbj -out:$(proj).exe
+
+# I don't use the .sbr, but it can be reenabled.  Also turn /FR back on above.
+#	bscmake *.sbr
+
+test.exe: test.c
+	$(cc) $(cflags) $(cvars) $(cdebug) test.c
+	$(link) $(linkdebug) $(conflags) test.obj $(conlibs) -out:test.exe
+
diff --git a/winboard/parser.c b/winboard/parser.c
new file mode 100644
index 0000000..81e4c76
--- /dev/null
+++ b/winboard/parser.c
@@ -0,0 +1,4057 @@
+/* A lexical scanner generated by flex */
+
+/* Scanner skeleton version:
+ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include <stdio.h>
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif	/* __STDC__ */
+#endif	/* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator).  This
+ * avoids problems with code like:
+ *
+ * 	if ( condition_holds )
+ *		yyless( 5 );
+ *	else
+ *		do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+		*yy_cp = yy_hold_char; \
+		YY_RESTORE_YY_MORE_OFFSET \
+		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+	};
+
+static YY_BUFFER_STATE yy_current_buffer = 0;
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! yy_current_buffer ) \
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+	yy_current_buffer->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! yy_current_buffer ) \
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+	yy_current_buffer->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+
+#define YY_USES_REJECT
+typedef unsigned char YY_CHAR;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+typedef int yy_state_type;
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	yytext_ptr = yy_bp; \
+	yyleng = (int) (yy_cp - yy_bp); \
+	yy_hold_char = *yy_cp; \
+	*yy_cp = '\0'; \
+	yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 42
+#define YY_END_OF_BUFFER 43
+static yyconst short int yy_acclist[650] =
+    {   0,
+       43,   41,   42,   41,   42,   41,   42,   40,   41,   42,
+       41,   42,   25,   41,   42,   41,   42,   40,   41,   42,
+       40,   41,   42,16410,   40,   41,   42,16410,   41,   42,
+       40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
+       41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
+       42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
+       40,   41,   42,   41,   42,   40,   41,   42,   40,   41,
+       42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
+       40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
+       41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
+
+       42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
+       40,   41,   42,   40,   41,   42,   41,   42,   41,   42,
+       40,   41,   42,   40,   41,   42,   40,   41,   42,16410,
+       40,   41,   42,16410,   41,   42,   40,   41,   42,   40,
+       41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
+       42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
+       40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
+       41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
+       42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
+       40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
+
+       41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
+       42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
+       41,   42,   33,   40,   17,   40,    9,   40,   40,   40,
+    16410, 8218,   40,   35,   40,   40,   40,   40,   40,   40,
+       40,   40,   40,   40,   40,    9,   40,   40,   40,   40,
+       40,   40,   36,   40,    3,   40,   40,    4,   40,   40,
+       40,   40,   40,   40,    9,   40,   40,   40,   34,   40,
+       40,    9,   40,   40,   40,16410, 8218,   40,   40,   40,
+       40,   40,   40,   40,   40,   40,   40,   40,   40,    9,
+       40,   40,   40,   40,   40,   40,   40,    3,   40,   40,
+
+        4,   40,   40,   40,   40,   40,   40,    9,   40,   40,
+       40,   15,    9,   40,   23,   40,   23,    8,   40, 8218,
+       22,   40,   22,   24,   40,   40,   40,    6,   40,   40,
+       40,   40,   40,   40,   40,    9,   40,   40,   40,   40,
+       20,   40,    4,   40,   40,    3,    3,   40,    3,   40,
+       40,    4,    5,   40,    4,    4,   40,   40,   40,   40,
+        9,   40,   40,   34,   39,    9,   40,   23,   40,    8,
+       40,   22,   40,   35,   40,   40,   40,    6,   40,   40,
+       40,   40,   40,   40,   40,    9,   40,   40,   40,   40,
+       20,   40,    4,   40,   40,    3,   40,    3,   40,   40,
+
+        5,   40,    4,   40,   40,   40,   40,    9,   40,   40,
+       38,   38,   37,   25,   25,    6,   40,   10,    6,   40,
+        7,   40,    6,   40,    6,   40,   40,   40,   19,   40,
+       40,   21,   40,   16,   40,   40,   40,   40,   40,   20,
+       20,   40,   20,   40,   36,    3,    3,    2,   40,    5,
+        4,    5,    5,   40,   40,    4,    4,   40,   40,   25,
+       39,   40,    6,   40,    7,   40,   40,   40,   40,   40,
+       19,   40,   40,   21,   40,   16,   40,   40,   40,   40,
+       40,   20,   40,   20,   20,   40,    2,   40,    5,   40,
+       40,    4,   40,   40,    7,    7,    1,   40,   40,   40,
+
+       19,   40,   40,   40,   21,   21,   40,   21,   40,   40,
+       40,   40,   30,   36,    2,    2,    2,   40,    5,    5,
+        5,   40,   39,    1,   40,   40,   40,   19,   40,   40,
+       40,   21,   40,   21,   21,   40,   40,   40,   40,   20,
+       39,    2,   40,    5,   40,   27,   38,    1,   23,   23,
+       22,   22,   24,   24,    1,    1,   40,   20,   21,   40,
+       40,   40,   11,   40,   40,   28,   36,   30,    2,    2,
+       27,   34,   39,   39,    1,   40,   40,   40,   40,   21,
+       39,   11,   40,   40,   20,   39,   18,    1,   24,    1,
+       20,   21,   19,   40,   40,   40,   11,   40,   40,   40,
+
+       40,   21,   39,   40,   11,   40,   40,   12,   40,   40,
+       40,   40,   12,   40,   40,   14,   40,   40,   40,   14,
+       40,   40,   40,   39,   40,   40,   40,   40,   39,   39,
+       40,   40,   31,   40,   39,   39,   31,   40,   13,   31,
+       32,   32,   35,   39,   39,   31,   39,   34,   29
+    } ;
+
+static yyconst short int yy_accept[698] =
+    {   0,
+        1,    1,    1,    2,    4,    6,    8,   11,   13,   16,
+       18,   21,   25,   29,   31,   34,   37,   40,   43,   46,
+       49,   52,   55,   58,   61,   64,   66,   69,   72,   75,
+       78,   81,   84,   87,   90,   93,   96,   99,  102,  105,
+      108,  111,  114,  117,  119,  121,  124,  127,  131,  135,
+      137,  140,  143,  146,  149,  152,  155,  158,  161,  164,
+      167,  170,  173,  176,  179,  182,  185,  188,  191,  194,
+      197,  200,  203,  206,  209,  212,  215,  218,  221,  223,
+      223,  224,  225,  225,  225,  225,  225,  226,  226,  226,
+      226,  227,  227,  229,  229,  229,  229,  230,  230,  230,
+
+      232,  232,  234,  234,  235,  235,  236,  236,  237,  237,
+      238,  238,  239,  240,  241,  242,  243,  244,  245,  246,
+      248,  249,  250,  251,  252,  253,  253,  253,  253,  253,
+      254,  255,  257,  257,  258,  260,  261,  262,  263,  264,
+      265,  267,  268,  269,  269,  269,  269,  270,  270,  271,
+      271,  272,  274,  274,  275,  277,  277,  279,  279,  280,
+      281,  281,  282,  283,  284,  285,  286,  287,  288,  289,
+      290,  292,  293,  294,  295,  296,  297,  298,  300,  300,
+      301,  303,  304,  305,  306,  307,  308,  310,  311,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+
+      312,  313,  313,  313,  313,  313,  313,  315,  317,  318,
+      320,  321,  321,  321,  321,  323,  324,  325,  325,  326,
+      326,  327,  327,  328,  328,  330,  330,  330,  330,  330,
+      331,  332,  333,  334,  335,  336,  338,  339,  340,  341,
+      343,  343,  343,  343,  343,  345,  345,  346,  346,  347,
+      349,  351,  352,  353,  353,  355,  356,  358,  359,  360,
+      361,  363,  364,  365,  365,  365,  365,  365,  366,  368,
+      370,  372,  374,  374,  375,  375,  376,  377,  377,  378,
+      380,  381,  382,  383,  384,  385,  386,  388,  389,  390,
+      391,  393,  395,  396,  396,  398,  400,  401,  403,  405,
+
+      406,  407,  408,  410,  411,  411,  411,  412,  413,  413,
+      413,  414,  414,  414,  415,  415,  416,  416,  417,  417,
+      417,  417,  418,  418,  418,  418,  418,  418,  418,  418,
+      419,  421,  421,  423,  424,  425,  425,  426,  427,  427,
+      427,  427,  427,  428,  429,  431,  431,  432,  434,  436,
+      437,  438,  439,  440,  441,  443,  445,  445,  445,  445,
+      445,  446,  447,  447,  448,  450,  451,  452,  452,  452,
+      453,  455,  456,  457,  457,  459,  460,  460,  461,  461,
+      461,  461,  461,  462,  462,  463,  463,  463,  465,  467,
+      468,  468,  469,  470,  471,  473,  474,  476,  478,  479,
+
+      480,  481,  482,  484,  485,  487,  489,  491,  492,  494,
+      495,  495,  495,  495,  495,  496,  496,  496,  496,  496,
+      496,  496,  496,  496,  496,  497,  499,  499,  499,  499,
+      499,  500,  501,  501,  503,  503,  504,  505,  506,  508,
+      510,  511,  512,  513,  513,  513,  515,  515,  515,  516,
+      516,  517,  519,  520,  520,  521,  521,  523,  523,  523,
+      523,  523,  523,  523,  523,  524,  524,  524,  526,  527,
+      528,  530,  531,  532,  534,  535,  537,  538,  539,  540,
+      542,  544,  546,  546,  546,  548,  548,  549,  549,  550,
+      550,  551,  551,  552,  552,  553,  553,  554,  554,  555,
+
+      555,  555,  555,  556,  558,  558,  558,  560,  560,  561,
+      561,  561,  561,  561,  561,  562,  563,  565,  566,  568,
+      568,  569,  570,  571,  571,  571,  573,  573,  573,  574,
+      575,  575,  575,  577,  578,  579,  580,  582,  584,  585,
+      587,  587,  588,  588,  588,  589,  589,  590,  591,  591,
+      591,  591,  593,  593,  593,  594,  594,  594,  594,  594,
+      595,  596,  597,  599,  600,  600,  600,  600,  600,  600,
+      601,  602,  604,  605,  607,  608,  608,  608,  608,  608,
+      608,  608,  609,  609,  609,  609,  609,  610,  611,  611,
+      611,  611,  611,  612,  613,  613,  613,  613,  613,  614,
+
+      614,  614,  614,  615,  616,  618,  618,  618,  618,  618,
+      619,  619,  620,  622,  622,  622,  622,  622,  623,  624,
+      624,  624,  624,  624,  625,  626,  627,  627,  627,  627,
+      627,  627,  628,  629,  629,  629,  629,  629,  630,  631,
+      632,  633,  633,  633,  633,  633,  633,  635,  635,  635,
+      635,  635,  636,  637,  639,  639,  639,  640,  640,  641,
+      641,  642,  642,  642,  644,  644,  645,  646,  646,  646,
+      646,  646,  648,  648,  648,  648,  648,  648,  648,  648,
+      648,  648,  648,  648,  648,  648,  648,  648,  648,  648,
+      648,  648,  648,  648,  649,  650,  650
+
+    } ;
+
+static yyconst int yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    4,    1,    5,    6,    7,    8,    1,    9,   10,
+       11,   12,   13,    1,   14,   15,   16,   17,   18,   19,
+       20,   20,   20,   20,   20,   20,   20,   21,   22,    1,
+       23,    1,    1,   24,   25,   26,   27,   28,   29,   30,
+       31,   32,   33,   33,   34,   35,   36,   37,   38,   34,
+       34,   39,   40,   33,   41,   33,   42,   43,   33,   33,
+       44,    1,   45,    1,   46,    1,   47,   48,   49,   50,
+
+       51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
+       61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
+       71,   68,   72,    1,   73,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst int yy_meta[74] =
+    {   0,
+        1,    2,    3,    2,    1,    1,    1,    1,    4,    5,
+        6,    1,    7,    8,    1,    1,    9,    9,    9,    9,
+       10,    1,   11,    1,   12,   12,   12,   12,   12,   12,
+       12,   12,   13,   12,   13,   13,   12,   12,   12,   13,
+       13,   12,   14,    1,    1,    1,   15,   15,   15,   15,
+       16,   15,   15,   15,   15,   15,   15,   15,   17,   18,
+       18,   18,   18,   18,   17,   17,   17,   17,   17,   19,
+       17,    1,    1
+    } ;
+
+static yyconst short int yy_base[784] =
+    {   0,
+        0,   73, 2729, 4517,  122,  131,    0,  142, 2724,  140,
+      151,  171,  162, 2724,  231,  159, 2672, 2661,  119, 2660,
+     2673,  143, 2668, 2652,  211,  301,  361,  212,  209,  279,
+      243,  284,  301,  286,  221,  303,  309,  329, 2670,  239,
+     2665, 2649,  338,  403, 2710,  149,  380,  475,  348,  190,
+      538,  240, 2659, 2648,  236, 2650, 2663,  157, 2658, 2642,
+      379,  600,  314,  353,  377,  395,  401,  413,  382,  408,
+      513,  424,  516,  423,  562,  448,  544,  607,  612, 2654,
+      468,    0, 2696,  309,  617,  174, 4517, 2692,  672,  246,
+      353, 2686, 2686, 2680,  517,  661, 2680,  576,  280,  655,
+
+     2679,    0, 2692, 4517,    0,  696,    0,  741,    0,  580,
+      644,  586,  622, 2645, 2640, 2592, 2592,  692, 2617, 2616,
+      714, 2606,  680,  720, 2592, 2606,  811,  537,  884, 4517,
+      911,  961,    0,  986, 1035,  687,  753,  757, 2584, 2588,
+     2587, 2582, 2591,  318, 2568,  825, 2636, 2635,  430, 2634,
+      747,  820,  253,  830, 1085,  160,  563,  455, 1148, 1193,
+     2633,  784,  843,  850,  760,  603,  692,  844,  854, 2596,
+      657,  858,  893,  862,  893,  658, 1217, 1267, 2629, 1292,
+     1342,  913,  926, 1157,  831,  894,  915,  918,  895,  845,
+     2568,  464,  487,  538, 2620,  556, 1162, 1073, 2619, 2556,
+
+     4517, 1146, 1209, 2624, 2623, 2622, 2611, 2620, 2619,    0,
+     4517, 2618, 2616, 2615, 2614, 2613,  384, 1029, 1062, 1078,
+     1367, 1147, 1145, 1167, 1412, 2558, 2551, 2564, 2559, 1240,
+     1422, 2540,  756,  651, 2557, 2593, 2551, 2547, 1214, 1482,
+      722, 1208,  761, 1555, 1619,    0, 1624,    0, 2594, 2592,
+     2591, 1174, 1426, 1490, 1673, 2591, 2589,  560, 2550, 2549,
+     2583, 2530, 4517, 1499, 1039, 2591,  725, 2587,  928,  845,
+      592,  917,  642, 2585, 1156, 1503, 1716, 2584, 1516, 1761,
+     1531, 1564, 1470, 1565, 1464, 1429, 1580, 1490, 1566, 1598,
+     1831, 1896, 1901, 2583, 1582, 2573, 1613, 1950, 1587, 1676,
+
+     1588, 1614, 1581, 1149, 1539, 2528, 4517,  775,  799, 2562,
+     4517, 1709, 2557, 2556, 2493, 2492, 1202, 1709, 2546, 2545,
+     2544, 2544,  615, 2543,  744, 2542, 1099, 1674,  832, 4517,
+     2535, 1719, 2534, 2533, 1955, 1622, 4517, 1410, 2490, 2490,
+     2487, 2487, 2494, 2493,  778,  892,  920, 2013,    0, 2511,
+     2495, 2496, 2495,    0, 2086, 2159,  940, 1210, 1233, 1309,
+     2540, 2533, 1434, 4517, 1776, 1424, 2529,  910, 1615, 1616,
+     2528, 1173, 4517, 2476,    0, 2476, 1842, 2532, 1727, 1735,
+     2488, 2473, 2530, 1003, 1736,  904,  599, 1216, 1523, 2186,
+     2528, 1847, 1726, 1767, 1880, 1771, 2244, 1522, 1813, 1849,
+
+     1848, 1862, 2317, 2527, 2390, 2029, 1869, 1879, 1713, 2021,
+     1747, 2479, 2517, 1595, 2500, 1809, 2511, 2443, 2504, 2441,
+     2500, 2433, 2460, 1869, 4517, 2454, 2427, 2423, 2423, 2418,
+     2468, 1049, 2006, 2467, 1075, 2440, 2410,    0, 2497, 2570,
+     2400, 2394, 2448, 1341, 1756, 4517, 2446, 1803, 1343, 1491,
+     1768, 2439, 2438, 1416, 4517, 2386,    0, 2425, 1871, 2421,
+     1240, 2416, 2373, 2366, 1454, 1718, 1473, 2635, 1888, 2044,
+     1889, 2042, 2023, 2678, 2425, 1990, 1886, 2052, 2063, 2425,
+     1870, 1899, 1958, 1000, 4517, 2095, 1777, 2416, 2415, 2351,
+     2350, 2411, 2410, 2347, 2346, 2407, 2406, 2343, 2342, 2393,
+
+     2388, 1840, 2017, 2382, 2320, 2326, 2011, 2298, 2303, 2338,
+     2296, 2275, 2316, 2293, 2302, 2270, 2018, 2264, 4517, 2117,
+     4517, 2296, 4517, 2290, 2119, 2300, 2251, 2231, 2282, 1960,
+     1445,  289, 2107, 2108, 2114, 2068, 2281, 2125, 2131, 2280,
+     2139, 4517, 2227, 2176, 2262, 2267, 2258, 4517, 2187, 2173,
+     2177, 4517, 2166, 2214, 2211, 2157, 2198, 2148, 2103, 2111,
+     2085, 2098,    0, 2077, 2196, 2071, 2002,  827, 1575, 2168,
+     2135, 2063, 2170, 2136, 2164, 2203, 2000, 2014, 1683, 1939,
+     1931, 2030, 1944, 1630, 1954, 1906, 2751, 1919, 1917, 1913,
+     1385, 1565, 2824, 2249, 2204, 1850, 1863, 1832, 4517, 1806,
+
+     1637, 1912, 2897, 1920,    0, 1775, 1762, 1585,  945, 2970,
+     2096, 1949, 2188, 2207, 1772, 1743, 2250, 1745, 1677, 1563,
+     1551, 1686,  681, 2260, 1568, 1502, 2258, 1408, 1406, 2243,
+     2170, 1358, 1313, 1240, 1258, 1751, 1127, 2261, 2312, 1072,
+      926, 2279, 2133,  809, 1969, 2073,    0,  855,  705,  711,
+     1429, 2317, 2305,    0, 2284,  631, 4517,  546, 2094,  480,
+     4517,  413,  392, 4517, 1794, 2351, 2357, 2298,  325,  206,
+     1884, 2303, 2352,  203, 1915,  365, 2138, 2221, 2364, 2365,
+     2369, 2370, 2371, 2372, 2373, 2427, 2444, 2451, 2452, 2453,
+     2454, 2456, 2296,  179, 4517, 4517, 3040, 3059, 3072, 3086,
+
+     3105, 3124, 3140, 3159, 3178, 3196, 1267, 1342, 1671, 3214,
+     3233, 1702, 3252, 3271, 3290, 3309, 3328, 3347, 3366, 3385,
+     3404, 3416, 3435, 3454, 3473, 3492, 3511, 3519, 1896, 3529,
+     3545, 3564, 3580, 3599, 3618, 3637, 3656, 3675, 3694, 3713,
+     3732, 3744, 3763, 3782, 3801, 3820, 3839, 3858, 3877, 3893,
+     3908, 3924, 3943, 3962, 3981, 3997, 4016, 4035, 4054, 4073,
+     4092, 4111, 4130, 4149, 4168, 4187, 4206, 4225, 4244, 4259,
+     4278, 4297, 4316, 4331, 4345, 4364, 4383, 4402, 4421, 4440,
+     4459, 4478, 4497
+    } ;
+
+static yyconst short int yy_def[784] =
+    {   0,
+      696,  696,  696,  696,  696,  696,  697,  698,  696,  699,
+      697,  696,   12,  700,  697,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,  701,  697,   27,   27,   27,
+       27,   27,   27,   27,   27,   27,   27,   27,  697,  697,
+      697,  697,  697,  702,  696,  703,  703,  696,   48,  700,
+      703,   51,   51,   51,   51,   51,   51,   51,   51,   51,
+       51,  703,   62,   62,   62,   62,   62,   62,   62,   62,
+       62,   62,   62,  703,  703,  703,  703,  703,  702,  696,
+      696,  697,  704,  705,  704,  696,  696,  696,  696,  696,
+      697,  696,  697,  696,  706,  706,  697,  706,  696,   12,
+
+      696,  697,  700,  696,  707,  697,  708,  697,  709,  108,
+      696,  108,  108,  697,  697,  697,  697,  108,  106,  697,
+      108,  697,  108,  108,  697,  710,  701,  710,  711,  696,
+      697,  696,  712,  697,  697,  697,  697,  697,  697,  697,
+      697,  697,  697,  702,  713,  702,  696,  714,  703,  696,
+      703,  703,  696,  703,  696,  696,  703,  715,  703,  159,
+      709,  160,  160,  160,  703,  703,  703,  703,  160,  159,
+      703,  160,  703,  160,  160,  703,  159,  696,  712,  159,
+      696,  703,  703,  703,  703,  703,  703,  703,  703,  702,
+      696,  716,  717,  717,  718,  719,  716,  716,  720,  721,
+
+      696,  722,  722,  696,  696,  696,  697,  697,  696,  697,
+      696,  696,  696,  696,  697,  696,  696,  696,  697,  696,
+      697,  722,  697,  696,  697,  696,  696,  696,  696,  697,
+      697,  697,  697,  697,  697,  697,  697,  697,  697,  723,
+      724,  725,  726,  727,  697,  728,  697,  729,  728,  697,
+      247,  697,  730,  730,  697,  254,  697,  697,  697,  697,
+      697,  697,  696,  702,  696,  731,  696,  732,  733,  733,
+      733,  733,  734,  731,  735,  733,  733,  222,  733,  277,
+      733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
+      736,  733,  277,  729,  733,  293,  733,  292,  733,  733,
+
+      733,  733,  733,  733,  702,  696,  696,  737,  737,  738,
+      696,  739,  740,  740,  741,  741,  696,  742,  696,  696,
+      696,  697,  696,  696,  696,  696,  696,  696,  696,  696,
+      697,  742,  697,  696,  697,  332,  696,  697,  696,  696,
+      696,  696,  697,  697,  697,  696,  697,  743,  697,  697,
+      697,  697,  697,  744,  745,  745,  746,  746,  747,  748,
+      749,  696,  696,  696,  750,  751,  696,  696,  751,  751,
+      697,  697,  696,  696,  697,  697,  702,  696,  696,  696,
+      696,  696,  752,  696,  733,  753,  753,  733,  733,  293,
+      336,  733,  733,  733,  733,  733,  754,  733,  733,  733,
+
+      733,  733,  755,  744,  755,  756,  733,  733,  733,  733,
+      702,  696,  757,  758,  696,  696,  759,  760,  761,  762,
+      763,  764,  696,  696,  696,  697,  696,  696,  696,  696,
+      697,  697,  696,  697,  696,  697,  697,  765,  766,  766,
+      697,  697,  697,  767,  768,  696,  769,  696,  770,  770,
+      770,  697,  696,  696,  696,  696,  697,  696,  702,  696,
+      696,  696,  696,  696,  771,  772,  772,  733,  733,  733,
+      733,  733,  733,  754,  765,  474,  733,  733,  733,  773,
+      733,  733,  702,  696,  696,  758,  774,  759,  759,  760,
+      760,  761,  761,  762,  762,  763,  763,  764,  764,  696,
+
+      696,  774,  774,  697,  696,  696,  696,  696,  697,  775,
+      696,  696,  696,  696,  697,  697,  697,  697,  696,  696,
+      696,  696,  696,  696,  702,  696,  696,  696,  771,  771,
+      772,  772,  733,  733,  733,  733,  776,  733,  733,  773,
+      702,  696,  696,  758,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  775,  775,  696,  696,  696,  696,  697,
+      697,  697,  697,  697,  702,  696,  696,  772,  772,  733,
+      733,  776,  733,  733,  733,  702,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  777,  697,  696,  696,
+      772,  772,  778,  733,  702,  696,  696,  696,  696,  696,
+
+      779,  779,  777,  603,  697,  696,  696,  772,  772,  778,
+      779,  610,  733,  702,  696,  696,  779,  603,  603,  696,
+      696,  772,  772,  780,  610,  610,  702,  696,  696,  779,
+      779,  603,  603,  696,  696,  772,  772,  780,  780,  610,
+      610,  702,  696,  696,  779,  779,  603,  781,  696,  782,
+      772,  780,  780,  610,  702,  696,  696,  696,  779,  781,
+      696,  696,  782,  696,  772,  780,  780,  702,  696,  696,
+      772,  780,  702,  696,  772,  702,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  696,  696,    0,  696,  696,  696,  696,
+
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696
+    } ;
+
+static yyconst short int yy_nxt[4591] =
+    {   0,
+        4,    4,    4,    5,    4,    4,    6,    4,    7,    8,
+        4,    9,   10,    7,    4,    4,   11,   12,   13,   13,
+        4,   14,    4,    4,   15,   16,   17,   18,   15,   15,
+       19,   15,   15,   15,   20,   21,   15,   22,   23,   24,
+       15,   25,   15,   26,    4,    4,   27,   28,   29,   30,
+       31,   32,   33,   34,   35,   36,   37,   38,   39,    7,
+       40,    7,    7,   41,   42,    7,    7,    7,   43,    7,
+        7,   44,    4,    4,    4,    4,    5,    4,   45,    6,
+       45,    7,    8,    4,    9,   10,   46,    4,    4,   47,
+       48,   49,   49,    4,   50,    4,    4,   51,   52,   53,
+
+       54,   51,   51,   55,   51,   51,   51,   56,   57,   51,
+       58,   59,   60,   51,   61,   51,   26,    4,    4,   62,
+       63,   64,   65,   66,   67,   68,   69,   70,   71,   72,
+       73,   74,   46,   75,   46,   46,   76,   77,   46,   46,
+       46,   78,   46,   46,   79,    4,   80,   81,   81,   81,
+       81,   84,   87,   88,   90,  115,  119,   82,   85,   85,
+       85,   85,  111,  268,   91,   95,   92,   93,   80,  150,
+      170,   94,   95,   95,   96,   82,  216,  696,  116,   82,
+      120,  695,  696,  199,   97,   98,   99,  100,  100,  100,
+      100,  101,  104,  158,  171,  102,  102,  102,  102,  102,
+
+      102,  102,  102,   82,  102,   82,   82,  102,  102,  102,
+       82,   82,  102,   82,  111,  111,  112,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,   82,
+      102,  102,  102,  102,  102,   82,   82,   82,   82,   82,
+       82,   82,  105,  111,  106,  200,  107,  108,  108,  108,
+      108,  109,  140,  648,  105,  136,  268,  135,  135,  204,
+      135,  205,  138,  674,  123,  124,  206,  136,  136,  137,
+      209,  125,  166,  106,  135,  135,  135,  110,  110,  110,
+      110,  110,  110,  110,  110,  110,  110,  110,  110,  136,
+      136,  104,  135,  135,  135,  167,  216,  163,  217,  141,
+
+      106,  126,  127,  127,  127,  126,  126,  126,  126,  126,
+      126,  126,  126,  126,  128,  126,  126,  111,  195,  196,
+      145,  126,  126,  126,  126,  136,  136,  135,  135,  135,
+      136,  136,  136,  136,  135,  135,  135,  115,  135,  135,
+      135,  111,  114,  569,  126,  130,  126,  136,  136,  136,
+      136,   95,  135,  135,  135,  136,  136,  135,  135,  135,
+      116,  149,  181,  696,  135,  135,  135,  677,  150,  207,
+      208,  183,  126,  126,  131,  136,  136,  132,  132,  132,
+      132,  133,  111,   90,  542,  135,  135,  328,   82,  117,
+      147,  143,  125,  151,  664,   92,  152,  329,  125,  182,
+
+      153,  181,  181,  134,  329,  145,  184,  135,  135,  136,
+      136,  136,  136,  136,  136,  136,  136,  136,  136,  146,
+      146,  146,  146,  182,  182,  181,  181,  181,  182,  182,
+      134,   82,  174,  175,  181,  181,  181,  147,   82,  176,
+      165,  182,  182,  150,  181,  181,  181,  182,  182,  166,
+      150,  181,  181,  181,  182,  182,   82,  274,  275,  182,
+      182,  181,  181,  181,  181,  181,  181,  670,  150,  185,
+      182,  182,  167,  193,  307,  147,   95,   95,   96,  181,
+      181,  181,  661,   82,   81,   81,   81,   81,  154,   98,
+       99,  155,  155,  155,  155,  156,  195,  308,  188,  157,
+
+      157,  157,  157,  157,  157,  157,  157,  149,  157,  149,
+      149,  157,  157,  157,  149,  149,  157,  149,   95,   95,
+       95,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  149,  157,  157,  157,  157,  157,  149,
+      149,  149,  149,  149,  149,  149,   82,  195,  308,  105,
+      241,  159,   82,  107,  160,  160,  160,  160,  161,  182,
+      182,  105,  182,  182,  150,  310,  311,  181,  181,  181,
+       82,   82,  181,  181,  374,  186,  168,   95,   95,   95,
+      159,  130,  150,  150,  162,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  225,  225,  225,  225,
+
+       82,  104,  225,  225,  225,  225,  669,  159,   82,  173,
+      111,   82,  150,  177,  145,   82,  178,  178,  178,  178,
+      179,  375,  187,  150,  417,  190,  193,  150,  146,  146,
+      146,  146,  230,  197,  197,  197,  197,  198,  225,  225,
+      225,  225,  180,  284,  274,  275,  181,  181,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,   95,  467,
+      189,  176,   95,   95,   95,   82,   82,  176,   82,  180,
+      696,  226,  231,  227,  212,  696,  213,  150,  150,  228,
+      657,  214,  229,  104,  147,  109,  418,  107,  202,  202,
+      202,  202,  109,  226,  271,  227,  225,  225,  225,  225,
+
+       82,  348,  228,  255,  255,  255,  255,  229,  225,  225,
+      225,  225,  150,  664,  109,  348,  348,  291,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+      225,  225,  225,  225,  239,  358,  225,  225,  225,  225,
+      637,  109,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  221,   82,  662,  235,  284,  346,
+      216,  222,  217,  269,  270,  360,  130,  150,   82,  255,
+      255,  255,  255,  255,  255,  255,  255,  381,  237,  240,
+      150,  433,  347,  221,  310,  311,  382,  223,  223,  223,
+      223,  223,  223,  223,  223,  223,  223,  223,  223,  259,
+
+      280,  280,  280,  280,  347,  361,  283,  260,  310,  311,
+      221,  126,  127,  127,  127,  126,  126,  126,  126,  126,
+      126,  126,  126,  126,  126,  126,  126,  145,   82,  104,
+      591,  126,  126,  126,  126,  423,  271,  434,   82,   82,
+      150,  146,  146,  146,  146,  264,  272,  145,  323,  424,
+      150,  150,   82,   82,  126,  130,  126,  661,  305,  280,
+      280,  280,  280,  658,  150,  150,  280,  280,  280,  280,
+      280,  280,  280,  280,  280,  280,  280,  280,  280,  280,
+      280,  280,  126,  126,  126,  242,  242,  242,  243,  281,
+      126,  126,  126,  126,  126,  126,  286,  147,  126,  126,
+
+      282,   82,   82,   82,  126,  126,  104,  126,  285,  280,
+      280,  280,  280,  150,  150,  150,  290,  147,  435,  286,
+      327,   82,  288,   82,  374,   82,   82,  126,  130,  298,
+      298,  298,  298,  150,   82,  150,   82,  150,  150,  289,
+      435,  385,  298,  298,  298,  298,  150,  104,  150,  304,
+      466,  436,  291,  358,  303,  126,  126,  245,  245,  245,
+      245,  245,  245,  245,  245,  245,  245,  245,  245,   82,
+      246,  373,  301,  437,  247,  271,  654,   82,   82,   82,
+       82,  248,  288,  249,  130,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+
+      250,  250,  250,  251,  465,  623,  465,  252,  252,  252,
+      252,  252,  252,  252,  252,  252,  252,  252,  252,   82,
+       82,   82,   82,   82,   82,   82,   82,   82,   82,   82,
+      247,   82,  135,  135,  135,  135,  135,  135,  135,  135,
+      135,  135,  135,  135,  254,  330,  330,  330,  330,  542,
+      378,  255,  255,  255,  255,  379,  380,  256,  543,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  331,  331,
+      331,  331,  193,  307,  509,  258,   95,   95,   95,  312,
+      312,  312,  312,   82,  332,  332,  332,  332,  149,   98,
+
+      654,  155,  155,  155,  155,  150,  513,  509,  419,  157,
+      157,  157,  157,  157,  157,  157,  157,  149,  157,  149,
+      149,  157,  157,  157,  149,  149,  157,  149,  514,  104,
+      651,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  149,  157,  157,  157,  157,  157,  149,
+      149,  149,  149,  149,  149,  149,   82,   82,  104,  222,
+      696,  333,  333,  333,  333,   82,  222,  696,  150,  150,
+      420,  193,  307,  298,  298,  298,  298,  150,  197,  197,
+      197,  197,  198,  334,  334,  334,  334,  456,  222,  696,
+      365,  365,  365,  365,  276,  276,  276,  276,  276,  276,
+
+      276,  276,  276,  276,  276,  276,  277,  302,  386,  242,
+      242,  242,  243,  278,  402,  222,  696,  387,  415,  415,
+      415,  415,  222,  444,   82,  318,  318,  318,  318,  222,
+      333,  333,  333,  333,  457,  277,  150,  360,  337,  279,
+      279,  279,  279,  279,  279,  279,  279,  279,  279,  279,
+      279,  222,  130,  212,  130,  213,  333,  333,  333,  333,
+      214,  649,  277,  292,  292,  292,  292,  292,  292,  292,
+      292,  292,  292,  292,  292,   82,  246,  361,  222,  353,
+      293,  218,  218,  149,  149,  149,  149,  294,  343,  249,
+      648,  295,  295,  295,  295,  295,  295,  295,  295,  295,
+
+      295,  295,  295,  295,  295,  295,  295,  295,  295,  296,
+      445,  445,  445,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  149,  149,  149,  149,  149,
+      149,  149,  149,  149,  149,  149,  293,  149,  181,  181,
+      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
+       82,  254,  450,  446,  444,  149,  220,  220,  298,  298,
+      298,  298,  150,  647,  256,  451,  299,  299,  299,  299,
+      299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
+      299,  299,  299,  299,  299,  519,  647,  104,  149,  149,
+      149,  149,  300,  149,  149,  149,  149,  149,  149,  149,
+
+      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
+      149,  149,  149,  223,  223,  223,  223,  223,  223,  223,
+      223,  223,  223,  223,  223,  335,  426,  426,  426,  426,
+      456,  104,  336,  369,  337,  254,  608,   82,  333,  333,
+      333,  333,  366,  366,  366,  366,  370,  104,  256,  150,
+      449,  449,  449,  449,  335,  530,  384,  530,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      344,  644,   82,  643,  454,  104,  368,  455,   82,  398,
+      665,  335,  354,  354,  150,  354,  354,  354,  354,  354,
+      150,  354,  354,  354,  354,  568,  354,  354,   82,  696,
+
+      696,  145,  354,  354,  354,  354,  696,  696,  696,  696,
+      150,   82,  696,  696,  397,  377,  377,  377,  377,  388,
+      388,  388,  388,  150,   82,  354,  354,  354,  397,  397,
+       82,   82,  389,  389,  389,  389,  150,  532,  395,   82,
+      696,  145,  150,  150,  400,  425,  356,  389,  389,  389,
+      389,  150,  411,  354,  354,  126,  242,  242,  242,  243,
+      641,  126,  126,  126,  126,  126,  126,  104,  346,  126,
+      126,  147,   82,   82,   82,  126,  126,  104,  126,  393,
+      389,  389,  389,  389,  150,  150,  150,  104,   82,   82,
+       82,  396,  364,  399,  410,   82,   82,  373,  126,  130,
+
+      150,  150,  150,  640,  193,  485,   82,  150,  150,  486,
+      635,  147,  394,  396,  389,  389,  389,  389,  150,  609,
+      634,   82,   82,  401,  696,  369,  126,  126,  254,  406,
+      406,  406,  406,  150,  150,  696,  393,  696,  696,  622,
+      592,  256,  696,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  394,  402,  696,  696,  696,  617,  511,  258,
+      252,  252,  252,  252,  252,  252,  252,  252,  252,  252,
+      252,  252,  369,  421,   82,  224,  224,  329,  104,  617,
+      374,  696,  421,  511,  329,  370,  150,  371,  371,  371,
+
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  253,  253,  193,  307,
+      104,   82,  336,  372,   82,  414,  414,  414,  414,  336,
+       90,  337,  336,  150,   82,  633,  150,  409,  461,  336,
+      460,  696,   92,  636,   82,  422,  150,   94,  462,  145,
+       99,  336,  271,  104,  422,  101,  150,  445,  445,  445,
+      483,  336,  279,  279,  279,  279,  279,  279,  279,  279,
+      279,  279,  279,  279,  390,   82,  531,  450,  336,   82,
+      632,  391,  469,  337,   82,  450,  502,  150,  336,   82,
+      696,  150,   82,   82,   82,   82,  104,  629,  451,  503,
+
+      446,  650,  472,  390,  520,  520,  520,  392,  392,  392,
+      392,  392,  392,  392,  392,  392,  392,  392,  392,  147,
+      628,   82,  621,  470,  473,  487,  487,  487,  487,  620,
+      390,  354,  354,  150,  354,  354,  354,  354,  354,  355,
+      354,  354,  354,  354,  145,  354,  354,  521,  671,  696,
+      271,  404,  354,  354,  354,   82,   82,   82,  459,  459,
+      459,  459,  696,  468,  468,  468,  468,  150,  150,  150,
+       82,  616,  500,  145,  354,  354,  354,   82,   82,  455,
+      523,  599,  150,  433,  501,  525,  104,   82,   82,  150,
+      150,  111,  433,  456,   82,  405,   82,   82,  478,  150,
+
+      150,  477,  354,  354,   82,  254,  150,   82,  150,  150,
+      363,  363,  479,  615,  147,  542,  150,  104,  256,  150,
+      299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
+      299,  299,  299,  299,  299,  299,  299,  299,  299,  471,
+      482,  675,  617,  526,  618,  538,  300,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  369,
+      145,  530,  384,  530,  617,  650,  619,  607,  606,  605,
+      601,  541,  370,  625,  407,  407,  407,  407,  407,  407,
+      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
+      407,  407,  407,  601,  600,  626,  582,  659,  597,  617,
+
+      408,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  438,  438,  510,  438,  438,  438,  438,
+      438,  617,  438,  438,  438,  438,  502,  438,  438,   82,
+      147,   82,  547,  438,  438,  438,  438,   82,  450,  696,
+      476,  150,  149,  150,  511,  149,  149,  149,  149,  150,
+       82,  451,   82,  512,  476,  476,  438,  438,  438,  596,
+       82,  551,  150,  440,  150,  384,  111,  590,  562,  511,
+      535,   82,  150,  536,  589,  552,   82,  440,  440,  534,
+      598,  271,  563,  150,  438,  438,  354,  354,  150,  354,
+      354,  354,  354,  354,  599,  354,  354,  354,  354,  624,
+
+      354,  354,  534,  617,  193,  307,  354,  354,  354,  354,
+      539,  544,  544,  544,  544,   82,   82,  548,  520,  520,
+      520,  145,   82,  659,  617,  617,  617,  150,  150,  354,
+      354,  354,  571,   82,  150,  565,  565,  565,  565,   82,
+      679,  145,  588,   82,   82,  150,  617,  563,  617,  587,
+      587,  150,  576,  570,  185,  150,  150,  354,  354,  354,
+      354,  521,  354,  354,  354,  354,  354,  586,  354,  354,
+      354,  354,   82,  354,  354,  573,   82,  575,   82,  354,
+      354,  354,  354,  656,  150,  193,  485,  585,  150,  574,
+      150,  147,  544,  544,  544,  544,   82,  657,  145,  593,
+
+      617,  584,  354,  354,  354,  145,  145,  593,  150,  145,
+      263,  147,  565,  565,  565,  565,  595,  614,  583,  574,
+      627,  555,  617,  679,  555,  582,  552,  581,  646,  594,
+      354,  354,  392,  392,  392,  392,  392,  392,  392,  392,
+      392,  392,  392,  392,  438,  438,  580,  438,  438,  438,
+      438,  438,  439,  438,  438,  438,  438,   82,  438,  438,
+      145,  579,  384,  384,  475,  438,  438,  438,  526,  150,
+      578,  642,  548,  617,  630,  147,  147,  577,  645,  147,
+      617,  145,  384,  384,  384,  567,  145,  438,  438,  438,
+      639,  639,  655,  263,  476,  617,  631,  668,  679,  613,
+
+      145,  566,  617,  265,  455,  384,  523,  384,  476,  476,
+      564,  673,  639,  639,  384,  438,  438,  354,  354,  384,
+      354,  354,  354,  354,  354,  355,  354,  354,  354,  354,
+      147,  354,  354,  639,  561,  639,  652,  404,  354,  354,
+      354,  560,  639,  559,  558,  557,  556,  639,  555,  139,
+      553,  147,  666,  384,  145,  639,  147,  639,  653,  384,
+      354,  354,  354,  667,  639,  676,  679,  679,  694,  639,
+      147,  679,  679,  679,  679,  679,  550,  680,  681,  672,
+      549,  639,  682,  683,  684,  685,  686,  639,  354,  354,
+      354,  354,  548,  354,  354,  354,  354,  354,  355,  354,
+
+      354,  354,  354,  639,  354,  354,  547,  672,  546,  639,
+      404,  354,  354,  354,  499,  499,  497,  497,  495,  495,
+      493,  493,  491,  491,  147,  489,  489,  384,  537,  679,
+      528,  527,  216,  354,  354,  354,  263,  263,  209,  373,
+      687,  263,  263,  263,  263,  263,  679,  524,  455,  523,
+      448,  111,  518,  679,  679,  679,  679,  688,  679,  517,
+      516,  354,  354,  502,  689,  690,  691,  692,  515,  693,
+      433,  111,  508,  507,  506,  505,  503,  424,  504,  504,
+      504,  504,  504,  504,  504,  504,  504,  504,  504,  504,
+      504,  504,  504,  504,  504,  504,  504,  438,  438,  263,
+
+      438,  438,  438,  438,  438,  499,  438,  438,  438,  438,
+      497,  438,  438,  495,  493,  491,  263,  438,  438,  438,
+      438,  489,  425,  263,  263,  263,  263,  196,  263,  484,
+      480,  268,  384,  464,  463,   86,  210,  458,  455,  373,
+      438,  438,  438,  364,  448,  443,  442,  441,  210,  432,
+      431,  430,  429,  428,  427,  337,  425,  337,  216,  216,
+      210,  209,  209,  209,  316,  316,  314,  314,  438,  438,
+      438,  438,  196,  438,  438,  438,  438,  438,  412,  438,
+      438,  438,  438,  364,  438,  438,  268,  268,  267,  384,
+      438,  438,  438,  438,  267,  353,  376,  344,  343,  373,
+
+      254,  364,  364,  246,  352,  351,  350,  349,  345,  342,
+      341,  340,  339,  438,  438,  438,  327,  327,  326,  325,
+      440,  324,  323,  323,  322,  321,  320,  319,  316,  314,
+      307,  306,  268,  287,  440,  440,  268,  268,  267,  265,
+      263,  438,  438,   82,  502,  262,  237,  210,  261,  235,
+      130,  240,  238,  210,  236,  150,  234,  503,  233,  533,
+      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
+      533,  533,  533,  533,  533,  533,  533,  533,  438,  438,
+      233,  438,  438,  438,  438,  438,  439,  438,  438,  438,
+      438,  232,  438,  438,  104,  216,  215,  209,  475,  438,
+
+      438,  438,  210,  209,  201,  193,  191,  173,  172,  169,
+      168,  165,  164,  148,  122,  142,  139,  122,  121,  118,
+      117,  438,  438,  438,  114,  113,  104,   86,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  438,
+      438,  602,  602,  696,  602,  602,  602,  602,  602,  696,
+      602,  602,  602,  602,  696,  602,  602,  696,  696,  696,
+      696,  602,  602,  602,  602,  696,  696,  696,  696,  696,
+      696,  604,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  602,  602,  602,  696,  696,  696,
+
+      696,  696,  696,  604,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  602,  602,  602,  602,  696,  602,  602,  602,
+      602,  602,  603,  602,  602,  602,  602,  696,  602,  602,
+      696,  696,  696,  696,  611,  602,  602,  602,  696,  696,
+      696,  696,  696,  696,  612,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  602,  602,  602,
+      696,  696,  696,  696,  696,  696,  612,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  602,  602,  602,  602,  696,
+
+      602,  602,  602,  602,  602,  696,  602,  602,  602,  602,
+      696,  602,  602,  696,  696,  696,  696,  602,  602,  602,
+      602,  696,  696,  696,  696,  696,  696,  604,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      602,  602,  602,  696,  696,  696,  696,  696,  696,  604,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  602,  602,
+      602,  602,  696,  602,  602,  602,  602,  602,  603,  602,
+      602,  602,  602,  696,  602,  602,  696,  696,  696,  696,
+      611,  602,  602,  602,  696,  696,  696,  696,  696,  696,
+
+      612,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  602,  602,  602,  696,  696,  696,  696,
+      696,  696,  612,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  602,  602,   82,  696,  696,  696,   82,   82,  696,
+      696,   82,   82,   82,   82,   82,   82,   82,   82,   83,
+       83,   83,   83,   83,  696,   83,   83,   83,   83,   83,
+       83,   83,   83,   83,   83,   83,   83,   83,   89,   89,
+      696,  696,  696,   89,   89,   89,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+
+      103,  103,  103,  103,  103,  129,  129,  129,  129,  129,
+      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
+      129,  129,  129,  129,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  149,  696,  696,  696,  149,  149,  149,
+      696,  149,  149,  149,  149,  149,  149,  149,  149,  192,
+      192,  192,  192,  192,  696,  192,  192,  192,  192,  192,
+      192,  192,  192,  192,  192,  192,  192,  192,  194,  194,
+      194,  194,  194,  194,  194,  194,  194,  194,  194,  194,
+      194,  194,  194,  194,  194,  194,  194,  211,  211,  696,
+
+      696,  696,  696,  696,  696,  696,  696,  211,  696,  696,
+      211,  211,  696,  211,  126,  126,  126,  126,  126,  126,
+      126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
+      126,  126,  126,  244,  244,  244,  244,  244,  244,  244,
+      244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
+      244,  244,  145,  145,  145,  145,  145,  145,  145,  145,
+      145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
+      145,  266,  266,  266,  266,  266,  266,  266,  266,  266,
+      266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
+      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
+
+      273,  273,  273,  273,  273,  273,  273,  273,  273,  192,
+      192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
+      192,  192,  192,  192,  192,  192,  192,  192,  194,  194,
+      194,  194,  194,  194,  194,  194,  194,  194,  194,  194,
+      194,  194,  194,  194,  194,  194,  194,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  313,  313,  696,  313,  313,
+      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
+
+      313,  313,  313,  313,  315,  315,  696,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  317,  696,  317,  696,  696,  696,  317,
+      317,  317,  696,  696,  317,  355,  355,  696,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  357,  357,  357,  357,  357,  357,
+      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
+      357,  357,  357,  126,  126,  126,  126,  126,  126,  126,
+      126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
+      126,  126,  359,  359,  359,  359,  359,  359,  359,  359,
+
+      359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
+      359,  244,  244,  244,  244,  244,  244,  244,  244,  244,
+      244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
+      362,  362,  362,  367,  696,  696,  696,  367,  696,  367,
+      367,  367,  367,  696,  367,  266,  266,  266,  266,  266,
+      266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
+      266,  266,  266,  266,  383,  383,  383,  383,  383,  383,
+      383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
+      383,  383,  383,  149,  696,  696,  696,  149,  149,  149,
+      696,  149,  149,  149,  149,  149,  149,  149,  149,  273,
+
+      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
+      273,  273,  273,  273,  273,  273,  273,  273,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  403,  403,  696,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  413,  413,  413,  413,  696,
+      413,  413,  413,  413,  413,  413,  413,  413,  413,  413,
+      413,  413,  413,  413,  192,  192,  192,  192,  192,  192,
+
+      192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
+      192,  192,  192,  313,  313,  696,  313,  313,  313,  313,
+      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
+      313,  313,  315,  315,  696,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  416,  696,  416,  416,  696,  696,  416,  416,  416,
+      696,  696,  416,  439,  439,  696,  439,  439,  439,  439,
+      439,  439,  439,  439,  439,  439,  439,  439,  439,  439,
+      439,  439,  354,  354,  696,  354,  354,  354,  354,  354,
+      354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
+
+      354,  355,  355,  696,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
+      357,  357,  357,  357,  357,  357,  357,  357,  357,  359,
+      359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
+      359,  359,  359,  359,  359,  359,  359,  359,  126,  126,
+      126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
+      126,  126,  126,  126,  126,  126,  126,  447,  447,  447,
+      447,  447,  447,  447,  447,  447,  447,  447,  447,  447,
+      447,  447,  447,  447,  447,  447,  452,  452,  696,  696,
+
+      452,  452,  696,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  453,  696,  696,  696,  696,  696,  453,  453,
+      453,  453,  696,  453,  383,  383,  383,  383,  383,  383,
+      383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
+      383,  383,  383,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  474,  474,  696,  474,  474,  474,  474,  474,
+      474,  474,  474,  474,  474,  474,  474,  474,  474,  474,
+      474,  403,  403,  696,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+
+      481,  481,  696,  696,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  413,  413,  413,  413,
+      696,  413,  413,  413,  413,  413,  413,  413,  413,  413,
+      413,  413,  413,  413,  413,  192,  192,  192,  192,  192,
+      192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
+      192,  192,  192,  192,  488,  488,  696,  488,  488,  488,
+      488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
+      488,  488,  488,  490,  490,  696,  490,  490,  490,  490,
+      490,  490,  490,  490,  490,  490,  490,  490,  490,  490,
+      490,  490,  492,  492,  696,  492,  492,  492,  492,  492,
+
+      492,  492,  492,  492,  492,  492,  492,  492,  492,  492,
+      492,  494,  494,  696,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
+      496,  496,  696,  496,  496,  496,  496,  496,  496,  496,
+      496,  496,  496,  496,  496,  496,  496,  496,  496,  498,
+      498,  696,  498,  498,  498,  498,  498,  498,  498,  498,
+      498,  498,  498,  498,  498,  498,  498,  498,  438,  438,
+      696,  438,  438,  438,  438,  438,  438,  438,  438,  438,
+      438,  438,  438,  438,  438,  438,  438,  439,  439,  696,
+      439,  439,  439,  439,  439,  439,  439,  439,  439,  439,
+
+      439,  439,  439,  439,  439,  439,  357,  357,  357,  357,
+      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
+      357,  357,  357,  357,  357,  126,  126,  126,  126,  126,
+      126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
+      126,  126,  126,  126,  447,  447,  447,  447,  447,  447,
+      447,  447,  447,  447,  447,  447,  447,  447,  447,  447,
+      447,  447,  447,  522,  696,  696,  696,  696,  696,  522,
+      522,  522,  522,  522,  522,  522,  522,  522,  529,  529,
+      529,  529,  529,  529,  529,  529,  529,  529,  529,  529,
+      529,  529,  529,  529,  529,  529,  529,  103,  103,  103,
+
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  545,  696,  696,  696,  696,
+      696,  545,  545,  545,  545,  554,  554,  696,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  572,  572,  572,  572,  572,  572,
+      572,  572,  572,  572,  572,  572,  572,  572,  572,  572,
+      572,  572,  572,  603,  603,  696,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+
+      603,  603,  610,  610,  696,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
+      610,  602,  602,  696,  602,  602,  602,  602,  602,  602,
+      602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
+      638,  638,  638,  638,  638,  638,  638,  638,  638,  638,
+      638,  638,  638,  638,  638,  638,  638,  638,  638,  660,
+      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
+      660,  660,  660,  660,  660,  660,  660,  660,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  678,  678,  678,
+
+      678,  678,  678,  678,  678,  678,  678,  678,  678,  678,
+      678,  678,  678,  678,  678,  678,    3,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696
+    } ;
+
+static yyconst short int yy_chk[4591] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    2,    2,    2,    2,    2,    2,    2,
+        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+
+        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+        2,    2,    2,    2,    2,    2,    5,    6,    6,    6,
+        6,    8,   10,   10,   11,   19,   22,   46,    8,    8,
+        8,    8,   16,  156,   11,   13,   11,   11,    5,   46,
+       58,   11,   12,   12,   12,   13,  156,   13,   19,   12,
+       22,  694,   13,   86,   12,   12,   12,   12,   12,   12,
+       12,   12,   50,   50,   58,   12,   12,   12,   12,   12,
+
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   25,   28,   16,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   15,   52,   15,   86,   15,   15,   15,   15,
+       15,   15,   40,  674,   15,   29,  153,   29,   29,   90,
+       28,   90,   29,  670,   25,   25,   90,   35,   35,   28,
+      153,   25,   55,   15,   35,   35,   35,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   31,
+       31,  532,   31,   31,   31,   55,   99,   52,   99,   40,
+
+       15,   26,   26,   26,   26,   26,   26,   26,   26,   26,
+       26,   26,   26,   26,   26,   26,   26,   63,   84,   84,
+      144,   26,   26,   26,   26,   30,   30,   30,   30,   30,
+       32,   32,   34,   34,   32,   32,   32,   33,   34,   34,
+       34,   43,   30,  532,   26,   26,   26,   33,   33,   36,
+       36,   49,   33,   33,   33,   37,   37,   36,   36,   36,
+       33,   49,   63,   49,   37,   37,   37,  676,   49,   91,
+       91,   63,   26,   26,   27,   38,   38,   27,   27,   27,
+       27,   27,   61,   47,  669,   38,   38,  217,   47,   38,
+      144,   43,   43,   47,  663,   47,   47,  217,   43,   64,
+
+       47,   64,   64,   27,  217,   44,   64,   27,   27,   27,
+       27,   27,   27,   27,   27,   27,   27,   27,   27,   44,
+       44,   44,   44,   65,   65,   65,   65,   65,   69,   69,
+       27,   74,   61,   61,   69,   69,   69,  676,  149,   61,
+       65,   66,   66,   74,   66,   66,   66,   67,   67,   68,
+      149,   67,   67,   67,   70,   70,   76,  158,  158,   68,
+       68,   70,   70,   70,   68,   68,   68,  662,   76,   74,
+       72,   72,   68,  192,  192,   44,   48,   48,   48,   72,
+       72,   72,  660,   48,   81,   81,   81,   81,   48,   48,
+       48,   48,   48,   48,   48,   48,  193,  193,   76,   48,
+
+       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   48,   48,   95,   95,
+       95,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   51,  194,  194,   51,
+      128,   51,   77,   51,   51,   51,   51,   51,   51,   71,
+       71,   51,   73,   73,   77,  196,  196,   71,   71,   71,
+       75,  157,   73,   73,  258,   75,   73,   98,   98,   98,
+       51,  128,   75,  157,   51,   51,   51,   51,   51,   51,
+       51,   51,   51,   51,   51,   51,  110,  110,  110,  110,
+
+      271,  387,  112,  112,  112,  112,  658,   51,   62,   77,
+       78,  166,  271,   62,   79,   78,   62,   62,   62,   62,
+       62,  258,   75,  166,  323,   79,   85,   78,   79,   79,
+       79,   79,  112,   85,   85,   85,   85,   85,  113,  113,
+      113,  113,   62,  166,  273,  273,   62,   62,   62,   62,
+       62,   62,   62,   62,   62,   62,   62,   62,  100,  387,
+       78,   78,   96,   96,   96,  171,  176,   78,  100,   62,
+      100,  111,  113,  111,   96,  100,   96,  171,  176,  111,
+      656,   96,  111,  623,   79,   89,  323,   89,   89,   89,
+       89,   89,   89,  111,  171,  111,  123,  123,  123,  123,
+
+      167,  234,  111,  136,  136,  136,  136,  111,  118,  118,
+      118,  118,  167,  650,   89,  234,  234,  176,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+      121,  121,  121,  121,  123,  241,  124,  124,  124,  124,
+      623,   89,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  108,  151,  649,  118,  167,  233,
+      325,  108,  325,  151,  151,  243,  241,  151,  165,  137,
+      137,  137,  137,  138,  138,  138,  138,  267,  121,  124,
+      165,  345,  233,  108,  308,  308,  267,  108,  108,  108,
+      108,  108,  108,  108,  108,  108,  108,  108,  108,  137,
+
+      162,  162,  162,  162,  233,  243,  165,  138,  309,  309,
+      108,  127,  127,  127,  127,  127,  127,  127,  127,  127,
+      127,  127,  127,  127,  127,  127,  127,  146,  152,  568,
+      568,  127,  127,  127,  127,  329,  152,  345,  154,  185,
+      152,  146,  146,  146,  146,  146,  154,  190,  270,  329,
+      154,  185,  168,  270,  127,  127,  127,  648,  190,  163,
+      163,  163,  163,  644,  168,  270,  164,  164,  164,  164,
+      169,  169,  169,  169,  172,  172,  172,  172,  174,  174,
+      174,  174,  127,  127,  129,  129,  129,  129,  129,  163,
+      129,  129,  129,  129,  129,  129,  185,  146,  129,  129,
+
+      164,  173,  186,  189,  129,  129,  386,  129,  168,  175,
+      175,  175,  175,  173,  186,  189,  174,  190,  346,  169,
+      272,  182,  172,  187,  368,  272,  188,  129,  129,  182,
+      182,  182,  182,  182,  183,  187,  269,  272,  188,  173,
+      346,  269,  183,  183,  183,  183,  183,  609,  269,  189,
+      386,  347,  175,  357,  186,  129,  129,  131,  131,  131,
+      131,  131,  131,  131,  131,  131,  131,  131,  131,  132,
+      132,  368,  183,  347,  132,  187,  641,  132,  132,  132,
+      132,  132,  188,  132,  357,  132,  132,  132,  132,  132,
+      132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+
+      132,  132,  132,  132,  384,  609,  384,  132,  132,  132,
+      132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+      132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+      132,  132,  134,  134,  134,  134,  134,  134,  134,  134,
+      134,  134,  134,  134,  135,  218,  218,  218,  218,  484,
+      265,  135,  135,  135,  135,  265,  265,  135,  484,  135,
+      135,  135,  135,  135,  135,  135,  135,  135,  135,  135,
+      135,  135,  135,  135,  135,  135,  135,  135,  219,  219,
+      219,  219,  198,  198,  432,  135,  155,  155,  155,  198,
+      198,  198,  198,  155,  220,  220,  220,  220,  155,  155,
+
+      640,  155,  155,  155,  155,  155,  435,  432,  327,  155,
+      155,  155,  155,  155,  155,  155,  155,  155,  155,  155,
+      155,  155,  155,  155,  155,  155,  155,  155,  435,  637,
+      637,  155,  155,  155,  155,  155,  155,  155,  155,  155,
+      155,  155,  155,  155,  155,  155,  155,  155,  155,  155,
+      155,  155,  155,  155,  155,  155,  159,  304,  275,  202,
+      222,  223,  223,  223,  223,  184,  202,  222,  159,  304,
+      327,  197,  197,  184,  184,  184,  184,  184,  197,  197,
+      197,  197,  197,  224,  224,  224,  224,  372,  202,  222,
+      252,  252,  252,  252,  159,  159,  159,  159,  159,  159,
+
+      159,  159,  159,  159,  159,  159,  160,  184,  275,  242,
+      242,  242,  242,  160,  304,  202,  222,  275,  317,  317,
+      317,  317,  203,  358,  388,  203,  203,  203,  203,  203,
+      239,  239,  239,  239,  372,  160,  388,  359,  388,  160,
+      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+      160,  203,  242,  461,  358,  461,  230,  230,  230,  230,
+      461,  635,  160,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  178,  178,  359,  203,  239,
+      178,  707,  707,  178,  178,  178,  178,  178,  230,  178,
+      634,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      360,  360,  360,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  180,  180,
+      180,  180,  180,  180,  180,  180,  180,  180,  180,  180,
+      181,  181,  449,  360,  444,  181,  708,  708,  181,  181,
+      181,  181,  181,  633,  181,  449,  181,  181,  181,  181,
+      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
+      181,  181,  181,  181,  181,  444,  632,  591,  181,  181,
+      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
+
+      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
+      181,  181,  181,  221,  221,  221,  221,  221,  221,  221,
+      221,  221,  221,  221,  221,  225,  338,  338,  338,  338,
+      454,  651,  225,  366,  225,  253,  591,  286,  231,  231,
+      231,  231,  253,  253,  253,  253,  366,  531,  253,  286,
+      363,  363,  363,  363,  225,  465,  465,  465,  225,  225,
+      225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
+      231,  629,  285,  628,  366,  467,  253,  454,  283,  286,
+      651,  225,  240,  240,  285,  240,  240,  240,  240,  240,
+      283,  240,  240,  240,  240,  531,  240,  240,  288,  254,
+
+      450,  264,  240,  240,  240,  240,  254,  254,  254,  254,
+      288,  276,  254,  450,  285,  264,  264,  264,  264,  276,
+      276,  276,  276,  276,  279,  240,  240,  240,  285,  285,
+      398,  389,  279,  279,  279,  279,  279,  467,  283,  281,
+      254,  305,  398,  389,  288,  389,  240,  281,  281,  281,
+      281,  281,  305,  240,  240,  244,  244,  244,  244,  244,
+      626,  244,  244,  244,  244,  244,  244,  592,  284,  244,
+      244,  264,  282,  284,  289,  244,  244,  569,  244,  281,
+      282,  282,  282,  282,  282,  284,  289,  608,  287,  303,
+      295,  284,  295,  287,  303,  299,  301,  299,  244,  244,
+
+      287,  303,  295,  625,  414,  414,  290,  299,  301,  414,
+      621,  305,  282,  284,  290,  290,  290,  290,  290,  592,
+      620,  297,  302,  289,  369,  370,  244,  244,  245,  297,
+      297,  297,  297,  297,  302,  336,  301,  369,  370,  608,
+      569,  245,  336,  245,  245,  245,  245,  245,  245,  245,
+      245,  245,  245,  245,  245,  245,  245,  245,  245,  245,
+      245,  245,  302,  290,  336,  369,  370,  601,  584,  245,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  255,  328,  300,  709,  709,  328,  622,  601,
+      300,  336,  579,  584,  328,  255,  300,  255,  255,  255,
+
+      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
+      255,  255,  255,  255,  255,  255,  712,  712,  312,  312,
+      466,  409,  318,  255,  277,  312,  312,  312,  312,  318,
+      379,  318,  332,  409,  393,  619,  277,  300,  380,  332,
+      379,  332,  379,  622,  385,  328,  393,  379,  380,  411,
+      380,  318,  385,  636,  579,  380,  385,  445,  445,  445,
+      411,  332,  277,  277,  277,  277,  277,  277,  277,  277,
+      277,  277,  277,  277,  280,  394,  466,  451,  318,  396,
+      618,  280,  393,  280,  365,  365,  487,  394,  332,  365,
+      451,  396,  365,  365,  365,  365,  665,  616,  365,  487,
+
+      445,  636,  396,  280,  448,  448,  448,  280,  280,  280,
+      280,  280,  280,  280,  280,  280,  280,  280,  280,  411,
+      615,  399,  607,  394,  396,  416,  416,  416,  416,  606,
+      280,  291,  291,  399,  291,  291,  291,  291,  291,  291,
+      291,  291,  291,  291,  377,  291,  291,  448,  665,  502,
+      399,  291,  291,  291,  291,  392,  401,  400,  377,  377,
+      377,  377,  502,  392,  392,  392,  392,  392,  401,  400,
+      402,  600,  424,  459,  291,  291,  291,  407,  481,  407,
+      481,  598,  402,  395,  424,  459,  671,  408,  395,  407,
+      481,  469,  471,  408,  477,  291,  469,  471,  401,  408,
+
+      395,  400,  291,  291,  292,  292,  477,  482,  469,  471,
+      729,  729,  402,  597,  377,  596,  292,  675,  292,  482,
+      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      292,  292,  292,  292,  292,  292,  292,  292,  292,  395,
+      408,  671,  602,  459,  604,  477,  292,  293,  293,  293,
+      293,  293,  293,  293,  293,  293,  293,  293,  293,  298,
+      483,  530,  530,  530,  602,  675,  604,  590,  589,  588,
+      586,  483,  298,  612,  298,  298,  298,  298,  298,  298,
+      298,  298,  298,  298,  298,  298,  298,  298,  298,  298,
+      298,  298,  298,  585,  583,  612,  581,  645,  580,  645,
+
+      298,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  348,  348,  433,  348,  348,  348,  348,
+      348,  645,  348,  348,  348,  348,  503,  348,  348,  410,
+      483,  473,  578,  348,  348,  348,  348,  406,  406,  503,
+      476,  410,  406,  473,  433,  406,  406,  406,  406,  406,
+      472,  406,  470,  433,  476,  476,  348,  348,  348,  577,
+      478,  507,  472,  348,  470,  572,  479,  567,  517,  433,
+      472,  479,  478,  473,  566,  507,  536,  348,  348,  470,
+      582,  410,  517,  479,  348,  348,  355,  355,  536,  355,
+      355,  355,  355,  355,  582,  355,  355,  355,  355,  611,
+
+      355,  355,  470,  646,  486,  486,  355,  355,  355,  355,
+      478,  486,  486,  486,  486,  533,  534,  533,  520,  520,
+      520,  525,  535,  646,  659,  646,  611,  533,  534,  355,
+      355,  355,  536,  538,  535,  525,  525,  525,  525,  539,
+      677,  541,  564,  571,  574,  538,  659,  562,  611,  561,
+      560,  539,  541,  535,  534,  571,  574,  355,  355,  356,
+      356,  520,  356,  356,  356,  356,  356,  559,  356,  356,
+      356,  356,  575,  356,  356,  538,  570,  539,  573,  356,
+      356,  356,  356,  643,  575,  544,  544,  558,  570,  538,
+      573,  525,  544,  544,  544,  544,  613,  643,  565,  571,
+
+      631,  557,  356,  356,  356,  576,  595,  570,  613,  614,
+      677,  541,  565,  565,  565,  565,  576,  595,  556,  573,
+      614,  555,  631,  678,  554,  553,  551,  550,  631,  575,
+      356,  356,  390,  390,  390,  390,  390,  390,  390,  390,
+      390,  390,  390,  390,  397,  397,  549,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  594,  397,  397,
+      627,  547,  624,  638,  397,  397,  397,  397,  565,  594,
+      546,  627,  545,  630,  617,  576,  595,  543,  630,  614,
+      617,  642,  540,  537,  529,  528,  655,  397,  397,  397,
+      624,  638,  642,  678,  397,  630,  617,  655,  693,  594,
+
+      668,  527,  617,  526,  524,  672,  522,  653,  397,  397,
+      518,  668,  624,  638,  639,  397,  397,  403,  403,  652,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      627,  403,  403,  672,  516,  653,  639,  403,  403,  403,
+      403,  515,  639,  514,  513,  512,  511,  652,  510,  509,
+      508,  642,  652,  666,  673,  672,  655,  653,  639,  667,
+      403,  403,  403,  653,  639,  673,  679,  680,  693,  652,
+      668,  681,  682,  683,  684,  685,  506,  679,  680,  666,
+      505,  666,  681,  682,  683,  684,  685,  667,  403,  403,
+      405,  405,  504,  405,  405,  405,  405,  405,  405,  405,
+
+      405,  405,  405,  666,  405,  405,  501,  667,  500,  667,
+      405,  405,  405,  405,  499,  498,  497,  496,  495,  494,
+      493,  492,  491,  490,  673,  489,  488,  480,  475,  686,
+      464,  463,  462,  405,  405,  405,  679,  680,  460,  458,
+      686,  681,  682,  683,  684,  685,  687,  456,  453,  452,
+      447,  443,  442,  688,  689,  690,  691,  687,  692,  441,
+      437,  405,  405,  426,  688,  689,  690,  691,  436,  692,
+      434,  431,  430,  429,  428,  427,  426,  423,  426,  426,
+      426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
+      426,  426,  426,  426,  426,  426,  426,  439,  439,  686,
+
+      439,  439,  439,  439,  439,  422,  439,  439,  439,  439,
+      421,  439,  439,  420,  419,  418,  687,  439,  439,  439,
+      439,  417,  415,  688,  689,  690,  691,  413,  692,  412,
+      404,  391,  383,  382,  381,  378,  376,  374,  371,  367,
+      439,  439,  439,  362,  361,  353,  352,  351,  350,  344,
+      343,  342,  341,  340,  339,  334,  333,  331,  326,  324,
+      322,  321,  320,  319,  316,  315,  314,  313,  439,  439,
+      440,  440,  310,  440,  440,  440,  440,  440,  306,  440,
+      440,  440,  440,  296,  440,  440,  294,  278,  274,  268,
+      440,  440,  440,  440,  266,  262,  261,  260,  259,  257,
+
+      256,  251,  250,  249,  238,  237,  236,  235,  232,  229,
+      228,  227,  226,  440,  440,  440,  216,  215,  214,  213,
+      440,  212,  209,  208,  207,  206,  205,  204,  200,  199,
+      195,  191,  179,  170,  440,  440,  161,  150,  148,  147,
+      145,  440,  440,  468,  468,  143,  142,  141,  140,  139,
+      126,  125,  122,  120,  119,  468,  117,  468,  116,  468,
+      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
+      468,  468,  468,  468,  468,  468,  468,  468,  474,  474,
+      115,  474,  474,  474,  474,  474,  474,  474,  474,  474,
+      474,  114,  474,  474,  103,  101,   97,   94,  474,  474,
+
+      474,  474,   93,   92,   88,   83,   80,   60,   59,   57,
+       56,   54,   53,   45,   42,   41,   39,   24,   23,   21,
+       20,  474,  474,  474,   18,   17,   14,    9,    3,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  474,
+      474,  587,  587,    0,  587,  587,  587,  587,  587,    0,
+      587,  587,  587,  587,    0,  587,  587,    0,    0,    0,
+        0,  587,  587,  587,  587,    0,    0,    0,    0,    0,
+        0,  587,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  587,  587,  587,    0,    0,    0,
+
+        0,    0,    0,  587,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  587,  587,  593,  593,    0,  593,  593,  593,
+      593,  593,  593,  593,  593,  593,  593,    0,  593,  593,
+        0,    0,    0,    0,  593,  593,  593,  593,    0,    0,
+        0,    0,    0,    0,  593,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  593,  593,  593,
+        0,    0,    0,    0,    0,    0,  593,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  593,  593,  603,  603,    0,
+
+      603,  603,  603,  603,  603,    0,  603,  603,  603,  603,
+        0,  603,  603,    0,    0,    0,    0,  603,  603,  603,
+      603,    0,    0,    0,    0,    0,    0,  603,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      603,  603,  603,    0,    0,    0,    0,    0,    0,  603,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  603,  603,
+      610,  610,    0,  610,  610,  610,  610,  610,  610,  610,
+      610,  610,  610,    0,  610,  610,    0,    0,    0,    0,
+      610,  610,  610,  610,    0,    0,    0,    0,    0,    0,
+
+      610,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  610,  610,  610,    0,    0,    0,    0,
+        0,    0,  610,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  610,  610,  697,    0,    0,    0,  697,  697,    0,
+        0,  697,  697,  697,  697,  697,  697,  697,  697,  698,
+      698,  698,  698,  698,    0,  698,  698,  698,  698,  698,
+      698,  698,  698,  698,  698,  698,  698,  698,  699,  699,
+        0,    0,    0,  699,  699,  699,  700,  700,  700,  700,
+      700,  700,  700,  700,  700,  700,  700,  700,  700,  700,
+
+      700,  700,  700,  700,  700,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  702,  702,  702,  702,  702,  702,
+      702,  702,  702,  702,  702,  702,  702,  702,  702,  702,
+      702,  702,  702,  703,    0,    0,    0,  703,  703,  703,
+        0,  703,  703,  703,  703,  703,  703,  703,  703,  704,
+      704,  704,  704,  704,    0,  704,  704,  704,  704,  704,
+      704,  704,  704,  704,  704,  704,  704,  704,  705,  705,
+      705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
+      705,  705,  705,  705,  705,  705,  705,  706,  706,    0,
+
+        0,    0,    0,    0,    0,    0,    0,  706,    0,    0,
+      706,  706,    0,  706,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  711,  711,  711,  711,  711,  711,  711,
+      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
+      711,  711,  713,  713,  713,  713,  713,  713,  713,  713,
+      713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
+      713,  714,  714,  714,  714,  714,  714,  714,  714,  714,
+      714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
+      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
+
+      715,  715,  715,  715,  715,  715,  715,  715,  715,  716,
+      716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
+      716,  716,  716,  716,  716,  716,  716,  716,  717,  717,
+      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
+      717,  717,  717,  717,  717,  717,  717,  718,  718,  718,
+      718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
+      718,  718,  718,  718,  718,  718,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  720,  720,    0,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+
+      720,  720,  720,  720,  721,  721,    0,  721,  721,  721,
+      721,  721,  721,  721,  721,  721,  721,  721,  721,  721,
+      721,  721,  721,  722,    0,  722,    0,    0,    0,  722,
+      722,  722,    0,    0,  722,  723,  723,    0,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  724,  724,  724,  724,  724,  724,
+      724,  724,  724,  724,  724,  724,  724,  724,  724,  724,
+      724,  724,  724,  725,  725,  725,  725,  725,  725,  725,
+      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
+      725,  725,  726,  726,  726,  726,  726,  726,  726,  726,
+
+      726,  726,  726,  726,  726,  726,  726,  726,  726,  726,
+      726,  727,  727,  727,  727,  727,  727,  727,  727,  727,
+      727,  727,  727,  727,  727,  727,  727,  727,  727,  727,
+      728,  728,  728,  730,    0,    0,    0,  730,    0,  730,
+      730,  730,  730,    0,  730,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  732,  732,  732,  732,  732,  732,
+      732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
+      732,  732,  732,  733,    0,    0,    0,  733,  733,  733,
+        0,  733,  733,  733,  733,  733,  733,  733,  733,  734,
+
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  735,  735,
+      735,  735,  735,  735,  735,  735,  735,  735,  735,  735,
+      735,  735,  735,  735,  735,  735,  735,  736,  736,    0,
+      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
+      736,  736,  736,  736,  736,  736,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  738,  738,  738,  738,    0,
+      738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
+      738,  738,  738,  738,  739,  739,  739,  739,  739,  739,
+
+      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
+      739,  739,  739,  740,  740,    0,  740,  740,  740,  740,
+      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
+      740,  740,  741,  741,    0,  741,  741,  741,  741,  741,
+      741,  741,  741,  741,  741,  741,  741,  741,  741,  741,
+      741,  742,    0,  742,  742,    0,    0,  742,  742,  742,
+        0,    0,  742,  743,  743,    0,  743,  743,  743,  743,
+      743,  743,  743,  743,  743,  743,  743,  743,  743,  743,
+      743,  743,  744,  744,    0,  744,  744,  744,  744,  744,
+      744,  744,  744,  744,  744,  744,  744,  744,  744,  744,
+
+      744,  745,  745,    0,  745,  745,  745,  745,  745,  745,
+      745,  745,  745,  745,  745,  745,  745,  745,  745,  745,
+      746,  746,  746,  746,  746,  746,  746,  746,  746,  746,
+      746,  746,  746,  746,  746,  746,  746,  746,  746,  747,
+      747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  747,  747,  748,  748,
+      748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
+      748,  748,  748,  748,  748,  748,  748,  749,  749,  749,
+      749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
+      749,  749,  749,  749,  749,  749,  750,  750,    0,    0,
+
+      750,  750,    0,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  751,    0,    0,    0,    0,    0,  751,  751,
+      751,  751,    0,  751,  752,  752,  752,  752,  752,  752,
+      752,  752,  752,  752,  752,  752,  752,  752,  752,  752,
+      752,  752,  752,  753,  753,  753,  753,  753,  753,  753,
+      753,  753,  753,  753,  753,  753,  753,  753,  753,  753,
+      753,  753,  754,  754,    0,  754,  754,  754,  754,  754,
+      754,  754,  754,  754,  754,  754,  754,  754,  754,  754,
+      754,  755,  755,    0,  755,  755,  755,  755,  755,  755,
+      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
+
+      756,  756,    0,    0,  756,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  756,  756,  757,  757,  757,  757,
+        0,  757,  757,  757,  757,  757,  757,  757,  757,  757,
+      757,  757,  757,  757,  757,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  759,  759,    0,  759,  759,  759,
+      759,  759,  759,  759,  759,  759,  759,  759,  759,  759,
+      759,  759,  759,  760,  760,    0,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  761,  761,    0,  761,  761,  761,  761,  761,
+
+      761,  761,  761,  761,  761,  761,  761,  761,  761,  761,
+      761,  762,  762,    0,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      763,  763,    0,  763,  763,  763,  763,  763,  763,  763,
+      763,  763,  763,  763,  763,  763,  763,  763,  763,  764,
+      764,    0,  764,  764,  764,  764,  764,  764,  764,  764,
+      764,  764,  764,  764,  764,  764,  764,  764,  765,  765,
+        0,  765,  765,  765,  765,  765,  765,  765,  765,  765,
+      765,  765,  765,  765,  765,  765,  765,  766,  766,    0,
+      766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
+
+      766,  766,  766,  766,  766,  766,  767,  767,  767,  767,
+      767,  767,  767,  767,  767,  767,  767,  767,  767,  767,
+      767,  767,  767,  767,  767,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  769,  769,  769,  769,  769,  769,
+      769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
+      769,  769,  769,  770,    0,    0,    0,    0,    0,  770,
+      770,  770,  770,  770,  770,  770,  770,  770,  771,  771,
+      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
+      771,  771,  771,  771,  771,  771,  771,  772,  772,  772,
+
+      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
+      772,  772,  772,  772,  772,  772,  773,  773,  773,  773,
+      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
+      773,  773,  773,  773,  773,  774,    0,    0,    0,    0,
+        0,  774,  774,  774,  774,  775,  775,    0,  775,  775,
+      775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
+      775,  775,  775,  775,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  777,  777,    0,  777,  777,  777,  777,
+      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
+
+      777,  777,  778,  778,    0,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  779,  779,    0,  779,  779,  779,  779,  779,  779,
+      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  781,  781,  782,  782,
+      782,  782,  782,  782,  782,  782,  782,  782,  782,  782,
+      782,  782,  782,  782,  782,  782,  782,  783,  783,  783,
+
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696
+    } ;
+
+static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
+static char *yy_full_match;
+static int yy_lp;
+static int yy_looking_for_trail_begin = 0;
+static int yy_full_lp;
+static int *yy_full_state;
+#define YY_TRAILING_MASK 0x2000
+#define YY_TRAILING_HEAD_MASK 0x4000
+#define REJECT \
+{ \
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
+yy_cp = yy_full_match; /* restore poss. backed-over text */ \
+yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
+yy_state_ptr = yy_full_state; /* restore orig. state */ \
+yy_current_state = *yy_state_ptr; /* restore curr. state */ \
+++yy_lp; \
+goto find_rule; \
+}
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#define INITIAL 0
+/*
+ * parser.l -- lex parser of algebraic chess moves for XBoard
+ * $Id: parser.l,v 2.1 2003/10/27 19:21:00 mann Exp $
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 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 XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+/* This parser handles all forms of promotion.
+ * The parser resolves ambiguous moves by searching and check-testing.
+ * It also parses comments of the form [anything] or (anything).
+ *
+ * [HGM] Parser extensively modified for bigger boards, Shogi-like syntax,
+ * and unknow pieces. All pieces are now mandatory upper case, but can be
+ * any letter A-Z. Files must be lower case (as before), but can run upto 'l'.
+ * Ranks can be 0-9. The parser returns 0 for off-board files and ranks.
+ * For an unknown piece (as mover or promotion piece) it returns
+ * IllegalMove, like it does when the piece doesn't match.
+ * Promotions can now also be appended Shogi-style, a bare '=' or '+',
+ * and this is then returned as promotion character. The piece indicator
+ * can be prefixed by a '+' to indicate it is a promoted piece.
+ */
+
+#include "config.h"
+
+#define NO_CONSTRAINT	-1
+#undef YYLMAX
+#define YYLMAX			4096
+#define UNPUT_BUF_SIZE		YYLMAX
+
+#ifdef FLEX_SCANNER
+/* yytext is probably a char*, but could be a char[].  yy_text is set
+   in YY_DECL below, because if yytext is a char*, its value is not
+   constant. */
+char *yy_text;
+#else /*!FLEX_SCANNER*/
+/* yytext is definitely a char[], so yy_text can be set here, statically. */
+char *yy_text = (char *) yytext;
+#endif
+
+#ifdef FLEX_SCANNER
+/* This is flex */
+/* [AP] use prototypes in function declarations */
+#define YY_USE_PROTOS
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+/* end of [AP] fix */
+
+#undef YY_INPUT
+#define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
+#undef YY_DECL
+#define YY_DECL                     \
+    int _yylex YY_PROTO((void));    \
+    int yylex YY_PROTO((void))      \
+    {                               \
+	int result = _yylex();      \
+	yy_text = (char *) yytext;  \
+	return(result);             \
+    }                               \
+    int _yylex YY_PROTO((void))
+#else
+/* This is lex */
+#undef input
+#undef output
+#undef unput
+#endif
+
+/* The includes must be here, below the #undef input */
+
+#include <ctype.h>
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else /* not STDC_HEADERS */
+# if HAVE_STRING_H
+#  include <string.h>
+# else /* not HAVE_STRING_H */
+#  include <strings.h>
+# endif /* not HAVE_STRING_H */
+#endif /* not STDC_HEADERS */
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if defined(_amigados)
+# include <errno.h>
+# if HAVE_FCNTL_H
+#  include <fcntl.h>    /*  isatty() prototype  */
+# endif /*  HAVE_FCNTL_H        */
+#endif  /*  defined(_amigados)  */
+
+#include "common.h"
+#include "backend.h"
+#include "frontend.h"
+#include "parser.h"
+#include "moves.h"
+
+extern int PosFlags P((int));
+
+extern Board	boards[MAX_MOVES];
+int		yyboardindex;
+int             yyskipmoves = FALSE;
+char		currentMoveString[YYLMAX];
+#ifndef FLEX_SCANNER
+char		unputBuffer[UNPUT_BUF_SIZE];
+int		unputCount = 0;
+#endif
+
+#ifdef FLEX_SCANNER
+void my_yy_input P((char *buf, int *result, int max_size));
+#else /*!FLEX_SCANNER*/
+static int input P((void));
+static void output P((int ch));
+static void unput P((int ch));
+int yylook P((void));
+int yyback P((int *, int));
+#endif
+#undef yywrap
+int yywrap P((void));
+extern void CopyBoard P((Board to, Board from));
+
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines.  This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( yy_current_buffer->yy_is_interactive ) \
+		{ \
+		int c = '*', n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+		  && ferror( yyin ) ) \
+		YY_FATAL_ERROR( "input in flex scanner failed" );
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL int yylex YY_PROTO(( void ))
+#endif
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	if ( yyleng > 0 ) \
+		yy_current_buffer->yy_at_bol = \
+				(yytext[yyleng - 1] == '\n'); \
+	YY_USER_ACTION
+
+YY_DECL
+	{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+
+
+
+
+	if ( yy_init )
+		{
+		yy_init = 0;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! yy_start )
+			yy_start = 1;	/* first start state */
+
+		if ( ! yyin )
+			yyin = stdin;
+
+		if ( ! yyout )
+			yyout = stdout;
+
+		if ( ! yy_current_buffer )
+			yy_current_buffer =
+				yy_create_buffer( yyin, YY_BUF_SIZE );
+
+		yy_load_buffer_state();
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = yy_c_buf_p;
+
+		/* Support of yytext. */
+		*yy_cp = yy_hold_char;
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = yy_start;
+		yy_current_state += YY_AT_BOL();
+		yy_state_ptr = yy_state_buf;
+		*yy_state_ptr++ = yy_current_state;
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 697 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			*yy_state_ptr++ = yy_current_state;
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 4517 );
+
+yy_find_action:
+		yy_current_state = *--yy_state_ptr;
+		yy_lp = yy_accept[yy_current_state];
+find_rule: /* we branch to this label when backing up */
+		for ( ; ; ) /* until we find what rule we matched */
+			{
+			if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
+				{
+				yy_act = yy_acclist[yy_lp];
+				if ( yy_act & YY_TRAILING_HEAD_MASK ||
+				     yy_looking_for_trail_begin )
+					{
+					if ( yy_act == yy_looking_for_trail_begin )
+						{
+						yy_looking_for_trail_begin = 0;
+						yy_act &= ~YY_TRAILING_HEAD_MASK;
+						break;
+						}
+					}
+				else if ( yy_act & YY_TRAILING_MASK )
+					{
+					yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
+					yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
+					}
+				else
+					{
+					yy_full_match = yy_cp;
+					yy_full_state = yy_state_ptr;
+					yy_full_lp = yy_lp;
+					break;
+					}
+				++yy_lp;
+				goto find_rule;
+				}
+			--yy_cp;
+			yy_current_state = *--yy_state_ptr;
+			yy_lp = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+
+do_action:	/* This label is used only to access EOF actions. */
+
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+case 1:
+YY_RULE_SETUP
+{
+    /*
+     * Fully-qualified algebraic move, possibly with promotion
+     */
+    int skip1 = 0, skip2 = 0, skip3 = 0, promoted = 0;
+    ChessSquare piece;
+    ChessMove result;
+    char c;
+    
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    if (yytext[0] == '+') skip1 = skip3 = promoted = 1; /* [HGM] Shogi promoted */
+
+    /* remove the / */
+    if (yytext[1+skip1] == '/')  skip1++; 
+    
+    /* remove the [xX:-] */
+    if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
+        (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
+    
+    currentMoveString[0] = yytext[1+skip1];
+    currentMoveString[1] = yytext[2+skip1];
+    currentMoveString[2] = yytext[3+skip1+skip2];
+    currentMoveString[3] = yytext[4+skip1+skip2];
+    currentMoveString[4] = NULLCHAR;
+    
+    if (appData.debugMode) {
+        fprintf(debugFP, "Parser Qa1b2: yyleng=%d\n",
+        yyleng);
+    }
+
+    if (yyleng-skip1-skip2 > 5) { char c;
+        if (yytext[yyleng-1] == ')') {
+            c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
+	} else {
+            c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
+	}
+	currentMoveString[5] = NULLCHAR;
+        if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
+            return IllegalMove; /* [HGM] promotion to invalid piece */
+    }
+
+    if (appData.debugMode) {
+        fprintf(debugFP, "parser: %s\n", currentMoveString);
+    }
+    /* [HGM] do not allow values beyond board size */
+    if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[1] - ONE <  0            ||
+       currentMoveString[0] - AAA >= BOARD_RGHT   ||
+       currentMoveString[3] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[3] - ONE <  0            ||
+       currentMoveString[2] - AAA >= BOARD_RGHT   ||
+       currentMoveString[0] - AAA <  BOARD_LEFT   ||
+       currentMoveString[2] - AAA <  BOARD_LEFT     )
+      return 0;
+
+    piece = boards[yyboardindex]
+      [currentMoveString[1] - ONE][currentMoveString[0] - AAA];
+    if(promoted) piece = (ChessSquare) (DEMOTED piece);
+    c = PieceToChar(piece);
+    if(c == '~') c = PieceToChar((ChessSquare) (DEMOTED piece));
+    if (ToLower(yytext[skip3]) != ToLower(c))
+      return (int) IllegalMove;
+
+    result = LegalityTest(boards[yyboardindex],
+			  PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
+			  EP_UNKNOWN,
+                          initialRights, /* [HGM] assume all castlings allowed */
+                          currentMoveString[1] - ONE,
+                          currentMoveString[0] - AAA,
+                          currentMoveString[3] - ONE,
+                          currentMoveString[2] - AAA,
+			  currentMoveString[4]);
+
+    if (currentMoveString[4] == NULLCHAR &&
+        (result == WhitePromotionKnight || result == BlackPromotionKnight ||
+         result == WhitePromotionQueen  || result == BlackPromotionQueen)) {
+        currentMoveString[4] = PieceToChar(BlackQueen);
+	currentMoveString[5] = NULLCHAR;
+    }
+
+    return (int) result;
+}
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+{
+    /*
+     * Simple algebraic move, possibly with promotion
+     * [HGM] Engine moves are received in this format, with lower-case promoChar!
+     */
+    int skip = 0;
+    ChessMove result;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    /* remove the [xX:-] */
+    if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
+	(yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
+
+    currentMoveString[0] = yytext[0];
+    currentMoveString[1] = yytext[1];
+    currentMoveString[2] = yytext[2+skip];
+    currentMoveString[3] = yytext[3+skip];
+    currentMoveString[4] = NULLCHAR;
+
+    if (yyleng-skip > 4) { char c;
+	if (yytext[yyleng-1] == ')') {
+            c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
+	} else {
+            c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
+	}
+	currentMoveString[5] = NULLCHAR;
+        if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
+            return IllegalMove;
+    }
+
+    /* [HGM] do not allow values beyond board size */
+    if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[1] - ONE <  0            ||
+       currentMoveString[0] - AAA >= BOARD_RGHT   ||
+       currentMoveString[3] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[3] - ONE <  0            ||
+       currentMoveString[2] - AAA >= BOARD_RGHT   ||
+       currentMoveString[0] - AAA <  BOARD_LEFT   ||
+       currentMoveString[2] - AAA <  BOARD_LEFT     )
+      return 0;
+
+    result = LegalityTest(boards[yyboardindex],
+			  PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
+			  EP_UNKNOWN,
+                          initialRights, /* [HGM] assume all castlings allowed */
+                          currentMoveString[1] - ONE,
+                          currentMoveString[0] - AAA,
+                          currentMoveString[3] - ONE,
+                          currentMoveString[2] - AAA,
+			  currentMoveString[4]);
+
+    if (currentMoveString[4] == NULLCHAR &&
+        (result == WhitePromotionKnight || result == BlackPromotionKnight ||
+         result == WhitePromotionQueen  || result == BlackPromotionQueen)) {
+        if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
+            currentMoveString[4] = PieceToChar(BlackFerz);
+        else if(gameInfo.variant == VariantGreat)
+            currentMoveString[4] = PieceToChar(BlackMan);
+        else
+            currentMoveString[4] = PieceToChar(BlackQueen);
+	currentMoveString[5] = NULLCHAR;
+    }
+
+    return (int) result;
+}
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+{
+    /*
+     * Pawn move, possibly with promotion
+     */
+    DisambiguateClosure cl;
+    int skip = 0; char c;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    /* remove the =() */
+    if (yytext[2] == '=' && yytext[3] != NULLCHAR) skip++;
+    if (yytext[2+skip] == '(') skip++;
+
+    cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
+    cl.rfIn = -1;
+    cl.ffIn = yytext[0] - AAA;
+    cl.rtIn = yytext[1] - ONE;
+    cl.ftIn = yytext[0] - AAA;
+    c = cl.promoCharIn = yytext[2+skip];
+
+    /* [HGM] do not allow values beyond board size */
+    if(cl.rtIn >= BOARD_HEIGHT ||
+       cl.rtIn <  0            ||
+       cl.ffIn >= BOARD_RGHT   ||
+       cl.ftIn <  BOARD_LEFT     )
+      return 0;
+
+    if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
+      return IllegalMove;
+
+
+    Disambiguate(boards[yyboardindex],
+		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
+
+    currentMoveString[0] = cl.ff + AAA;
+    currentMoveString[1] = cl.rf + ONE;
+    currentMoveString[2] = cl.ft + AAA;
+    currentMoveString[3] = cl.rt + ONE;
+    currentMoveString[4] = cl.promoChar;
+    currentMoveString[5] = NULLCHAR;
+
+    return (int) cl.kind;
+}
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+{
+    /*
+     * Pawn capture, possibly with promotion, possibly ambiguous
+     */
+    DisambiguateClosure cl;
+    int skip1 = 0, skip2 = 0; char c;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    /* remove trailing ep or e.p. (nonstandard PGN) */
+    if (yytext[yyleng-1] == 'p') {
+      yyleng -= 2;
+      yytext[yyleng] = NULLCHAR;
+    } else if (yytext[yyleng-1] == '.') {
+      yyleng -= 4;
+      yytext[yyleng] = NULLCHAR;
+    }
+
+    /* remove the [xX:-] and =() */
+    if ((yytext[1] == 'x') || (yytext[1] == 'X')
+	|| (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
+    if (yytext[2+skip1] == '=' && yytext[3+skip1] != NULLCHAR) skip2++;
+    if (yytext[2+skip1+skip2] == '(') skip2++;
+
+    cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
+    cl.rfIn = -1;
+    cl.ffIn = yytext[0] - AAA;
+    cl.rtIn = -1;
+    cl.ftIn = yytext[1+skip1] - AAA;
+    c = cl.promoCharIn = yytext[2+skip1+skip2];
+
+    /* [HGM] do not allow values beyond board size */
+    if(cl.ffIn >= BOARD_RGHT  ||
+       cl.ffIn <  BOARD_LEFT  ||
+       cl.ftIn >= BOARD_RGHT  ||
+       cl.ftIn <  BOARD_LEFT     )
+      return 0;
+
+    if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
+      return IllegalMove;
+
+    Disambiguate(boards[yyboardindex],
+		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
+
+    currentMoveString[0] = cl.ff + AAA;
+    currentMoveString[1] = cl.rf + ONE;
+    currentMoveString[2] = cl.ft + AAA;
+    currentMoveString[3] = cl.rt + ONE;
+    currentMoveString[4] = cl.promoChar;
+    currentMoveString[5] = NULLCHAR;
+
+    return (int) cl.kind;
+}
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+{
+    /*
+     * unambiguously abbreviated Pawn capture, possibly with promotion
+     */
+    int skip = 0;
+    ChessMove result; char c;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    /* remove trailing ep or e.p. (nonstandard PGN) */
+    if (yytext[yyleng-1] == 'p') {
+      yyleng -= 2;
+      yytext[yyleng] = NULLCHAR;
+    } else if (yytext[yyleng-1] == '.') {
+      yyleng -= 4;
+      yytext[yyleng] = NULLCHAR;
+    }
+
+    /* remove the [xX:-] */
+    if ((yytext[1] == 'x') || (yytext[1] == 'X')
+	|| (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
+
+    currentMoveString[0] = yytext[0];
+    currentMoveString[2] = yytext[1+skip];
+    currentMoveString[3] = yytext[2+skip];
+
+    /* [HGM] do not allow values beyond board size */
+    if(currentMoveString[0] - AAA >= BOARD_RGHT   ||
+       currentMoveString[3] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[3] - ONE <  0            ||
+       currentMoveString[2] - AAA >= BOARD_RGHT   ||
+       currentMoveString[0] - AAA <  BOARD_LEFT   ||
+       currentMoveString[2] - AAA <  BOARD_LEFT     )
+      return 0;
+
+    if (gameInfo.variant == VariantXiangqi && /* [HGM] In Xiangqi rank stays same */
+         currentMoveString[0] != currentMoveString[2] ) {
+        currentMoveString[1] = yytext[2+skip];
+    } else 
+    if (WhiteOnMove(yyboardindex)) {
+        if (yytext[2+skip] == ONE) return (int) ImpossibleMove;
+	currentMoveString[1] = yytext[2+skip] - 1;
+    } else {
+        currentMoveString[1] = currentMoveString[3] + 1;
+        if (currentMoveString[3] == ONE+BOARD_HEIGHT-1) return (int) ImpossibleMove;
+    }
+    if (yyleng-skip > 3) {
+	if (yytext[yyleng-1] == ')')
+          c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
+	else
+          c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
+	currentMoveString[5] = NULLCHAR;
+        if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
+            return IllegalMove;
+    } else {
+	currentMoveString[4] = NULLCHAR;
+    }
+
+    result = LegalityTest(boards[yyboardindex],
+			  PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
+			  EP_UNKNOWN,
+                          initialRights, /* [HGM] assume all castlings allowed */
+                          currentMoveString[1] - ONE,
+                          currentMoveString[0] - AAA,
+                          currentMoveString[3] - ONE,
+                          currentMoveString[2] - AAA,
+			  currentMoveString[4]);
+
+    if (currentMoveString[4] == NULLCHAR &&
+        (result == WhitePromotionQueen  || result == BlackPromotionQueen ||
+         result == WhitePromotionKnight || result == BlackPromotionKnight)) {
+        currentMoveString[4] = PieceToChar(BlackQueen);
+	// [HGM] shatranj: take care of variants without Queen
+	if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
+            currentMoveString[4] = PieceToChar(BlackFerz);
+	if(gameInfo.variant == VariantGreat)
+            currentMoveString[4] = PieceToChar(BlackMan);
+	currentMoveString[5] = NULLCHAR;
+    }
+
+    if (result != IllegalMove) return (int) result;
+
+    /* Special case: improperly written en passant capture */
+    if (WhiteOnMove(yyboardindex)) {
+	if (currentMoveString[3] == '5') {
+	    currentMoveString[1] = '5';
+	    currentMoveString[3] = '6';
+	} else {
+	    return (int) IllegalMove;
+	}
+    } else {
+	if (currentMoveString[3] == '4') {
+	    currentMoveString[1] = '4';
+	    currentMoveString[3] = '3';
+	} else {
+	    return (int) IllegalMove;
+	}
+    }
+
+    result = LegalityTest(boards[yyboardindex],
+			  PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
+			  EP_UNKNOWN,
+                          initialRights, /* [HGM] assume all castlings allowed */
+                          currentMoveString[1] - ONE,
+                          currentMoveString[0] - AAA,
+                          currentMoveString[3] - ONE,
+                          currentMoveString[2] - AAA,
+			  currentMoveString[4]);
+
+    if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
+      return (int) result;
+    else
+      return (int) IllegalMove;
+}
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+{
+    /*
+     * piece move, possibly ambiguous
+     */
+    DisambiguateClosure cl;
+    int skip = 0, skip2 = 0, promoted = 0;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    if(yytext[0] == '+') promoted = skip = skip2 = 1;
+
+    /* remove the [xX:-] */
+    if ((yytext[1+skip] == 'x') || (yytext[1+skip] == 'X')
+        || (yytext[1+skip] == ':') || (yytext[1+skip] == '-')) skip++;
+
+    if (WhiteOnMove(yyboardindex)) {
+        cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
+    } else {
+        cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
+    }
+    if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
+
+    cl.rfIn = -1;
+    cl.ffIn = -1;
+    cl.rtIn = yytext[2+skip] - ONE;
+    cl.ftIn = yytext[1+skip] - AAA;
+    cl.promoCharIn = NULLCHAR;
+
+    if(yyleng-skip > 3) /* [HGM] can have Shogi-style promotion */
+        cl.promoCharIn = yytext[yyleng-1];
+
+    if (appData.debugMode) {
+        fprintf(debugFP, "Parser Qa1: yyleng=%d,  %d(%d,%d)-(%d,%d) = %d (%c)\n",
+        yyleng,
+        cl.pieceIn,cl.ffIn,cl.rfIn,cl.ftIn,cl.rtIn,cl.promoCharIn,cl.promoCharIn?cl.promoCharIn:' ');
+    }
+
+    /* [HGM] but do not allow values beyond board size */
+    if(cl.rtIn >= BOARD_HEIGHT ||
+       cl.rtIn <  0            ||
+       cl.ftIn >= BOARD_RGHT   ||
+       cl.ftIn <  BOARD_LEFT     )
+      return 0;
+
+    Disambiguate(boards[yyboardindex],
+		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
+
+    currentMoveString[0] = cl.ff + AAA;
+    currentMoveString[1] = cl.rf + ONE;
+    currentMoveString[2] = cl.ft + AAA;
+    currentMoveString[3] = cl.rt + ONE;
+    currentMoveString[4] = cl.promoChar;
+    currentMoveString[5] = NULLCHAR;
+
+    return (int) cl.kind;
+}
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+{
+    /*
+     * piece move with rank or file disambiguator
+     */
+    DisambiguateClosure cl;
+    int skip = 0, skip2 = 0; int promoted=0;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    if(yytext[0]=='+') promoted = skip = skip2 = 1;
+
+    /* remove the [xX:-] */
+    if ((yytext[2+skip] == 'x') || (yytext[2+skip] == 'X')
+        || (yytext[2+skip] == ':') || (yytext[2+skip] == '-')) skip++;
+
+    if (WhiteOnMove(yyboardindex)) {
+        cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
+    } else {
+        cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
+    }
+    if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
+
+    if (isalpha(yytext[1+skip2])) {
+	cl.rfIn = -1;
+        cl.ffIn = yytext[1+skip2] - AAA;
+       
+        if(cl.ffIn >= BOARD_RGHT ||
+           cl.ffIn <  BOARD_LEFT   ) return 0;
+    } else {
+        cl.rfIn = yytext[1+skip2] - ONE;
+	cl.ffIn = -1;
+        if(cl.rfIn >= BOARD_HEIGHT ||
+           cl.rfIn <  0) return 0;
+    }
+    cl.rtIn = yytext[3+skip] - ONE;
+    cl.ftIn = yytext[2+skip] - AAA;
+    cl.promoCharIn = NULLCHAR;
+
+    if(yyleng-skip > 4) /* [HGM] can have Shogi-style promotion */
+        cl.promoCharIn = yytext[yyleng-1];
+
+    /* [HGM] do not allow values beyond board size */
+    if(cl.rtIn >= BOARD_HEIGHT ||
+       cl.rtIn <  0            ||
+       cl.ftIn >= BOARD_RGHT   ||
+       cl.ftIn <  BOARD_LEFT     )
+      return 0;
+
+    Disambiguate(boards[yyboardindex],
+		 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
+
+    currentMoveString[0] = cl.ff + AAA;
+    currentMoveString[1] = cl.rf + ONE;
+    currentMoveString[2] = cl.ft + AAA;
+    currentMoveString[3] = cl.rt + ONE;
+    currentMoveString[4] = cl.promoChar;
+    currentMoveString[5] = NULLCHAR;
+
+    return (int) cl.kind;
+}
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+{
+    int rf, ff, rt, ft;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    /* [HGM] all squares referenced to board edges in stead of absolute */
+    if (WhiteOnMove(yyboardindex)) {
+        if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
+	    /* ICS wild castling */
+	    rf = 0;
+            ff = (BOARD_WIDTH-1)>>1;
+	    rt = 0;
+            ft = BOARD_RGHT-3;
+	} else {
+	    rf = 0;
+            ff = BOARD_WIDTH>>1;
+	    rt = 0;
+            ft = BOARD_LEFT+2;
+	}
+    } else{ 
+        if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
+	    /* ICS wild castling */
+            rf = BOARD_HEIGHT-1;
+            ff = (BOARD_WIDTH-1)>>1;
+            rt = BOARD_HEIGHT-1;
+            ft = BOARD_RGHT-3;
+	} else {
+            rf = BOARD_HEIGHT-1;
+            ff = BOARD_WIDTH>>1;
+            rt = BOARD_HEIGHT-1;
+            ft = BOARD_LEFT+2;
+	}
+    }
+    if(gameInfo.variant == VariantFischeRandom) {
+        if (WhiteOnMove(yyboardindex)) {
+            ff = initialRights[2];
+            ft = initialRights[1];
+        } else {
+            ff = initialRights[5];
+            ft = initialRights[4];
+        }
+        fprintf(debugFP, "Parser FRC long %d %d\n", ff, ft);
+        if(ff < 0 || ft < 0) return 0;
+    }
+    sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
+    if (appData.debugMode) {
+        fprintf(debugFP, "long castling %d %d\n", ff, ft);
+    }
+    return (int) LegalityTest(boards[yyboardindex],
+			      PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: e.p.!
+			      EP_UNKNOWN,
+                              castlingRights[yyboardindex], /* [HGM] use true castling rights */
+			      rf, ff, rt, ft, NULLCHAR);
+}
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+{
+    int rf, ff, rt, ft;
+
+    if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
+
+    if (WhiteOnMove(yyboardindex)) {
+        if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
+	    /* ICS wild castling */
+	    rf = 0;
+            ff = (BOARD_WIDTH-1)>>1;
+	    rt = 0;
+            ft = BOARD_LEFT+1;
+	} else {
+	    rf = 0;
+            ff = BOARD_WIDTH>>1;
+	    rt = 0;
+            ft = BOARD_RGHT-2;
+	}
+    } else {
+        if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
+	    /* ICS wild castling */
+            rf = BOARD_HEIGHT-1;
+            ff = (BOARD_WIDTH-1)>>1;
+            rt = BOARD_HEIGHT-1;
+            ft = BOARD_LEFT+1;
+	} else {
+            rf = BOARD_HEIGHT-1;
+            ff = BOARD_WIDTH>>1;
+            rt = BOARD_HEIGHT-1;
+            ft = BOARD_RGHT-2;
+	}
+    }
+    if(gameInfo.variant == VariantFischeRandom) {
+        if (WhiteOnMove(yyboardindex)) {
+            ff = initialRights[2];
+            ft = initialRights[0];
+        } else {
+            ff = initialRights[5];
+            ft = initialRights[3];
+        }
+    if (appData.debugMode) {
+        fprintf(debugFP, "Parser FRC short %d %d\n", ff, ft);
+    }
+        if(ff < 0 || ft < 0) return 0;
+    }
+    sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
+    if (appData.debugMode) {
+        fprintf(debugFP, "short castling %d %d\n", ff, ft);
+    }
+
+    return (int) LegalityTest(boards[yyboardindex],
+			      PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: e.p.!
+			      EP_UNKNOWN,
+                              castlingRights[yyboardindex], /* [HGM] use true castling rights */
+			      rf, ff, rt, ft, NULLCHAR);
+}
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+{
+    /* Bughouse piece drop.  No legality checking for now. */
+    currentMoveString[1] = '@';
+    currentMoveString[2] = yytext[2];
+    currentMoveString[3] = yytext[3];
+    currentMoveString[4] = NULLCHAR;
+
+    if (appData.debugMode) {
+        fprintf(debugFP, "Drop: %s\n", currentMoveString);
+    }
+    /* [HGM] do not allow values beyond board size */
+    if(currentMoveString[3] - ONE >= BOARD_HEIGHT ||
+       currentMoveString[2] - AAA >= BOARD_WIDTH     )
+      return 0;
+
+    if (WhiteOnMove(yyboardindex)) {
+	currentMoveString[0] = ToUpper(yytext[0]);
+	return (int) WhiteDrop;
+    } else {
+	currentMoveString[0] = ToLower(yytext[0]);
+	return (int) BlackDrop;
+    }
+}
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+{
+    if (WhiteOnMove(yyboardindex))
+      return (int) BlackWins;
+    else
+      return (int) WhiteWins;
+}
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+{
+    return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
+}
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+{
+    return (int) GameUnfinished;
+}
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+{
+    return (int) GameIsDrawn;
+}
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+{
+    return (int) GameIsDrawn;
+}
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+{
+    if (WhiteOnMove(yyboardindex))
+      return (int) BlackWins;
+    else
+      return (int) WhiteWins;
+}
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+{
+    if (WhiteOnMove(yyboardindex))
+      return (int) BlackWins;
+    else
+      return (int) WhiteWins;
+}
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+{
+    return (int) GameIsDrawn;
+}
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+{
+    return (int) GameIsDrawn;
+}
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+{
+    return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
+}
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+{
+    return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
+}
+	YY_BREAK
+case 22:
+YY_RULE_SETUP
+{ 
+    return (int) WhiteWins;
+}
+	YY_BREAK
+case 23:
+YY_RULE_SETUP
+{ 
+    return (int) BlackWins;
+}
+	YY_BREAK
+case 24:
+YY_RULE_SETUP
+{
+    return (int) GameIsDrawn;
+}
+	YY_BREAK
+case 25:
+YY_RULE_SETUP
+{
+    return (int) GameUnfinished;
+}
+	YY_BREAK
+case 26:
+YY_RULE_SETUP
+{
+    /* move numbers */
+    if ((yyleng == 1) && (yytext[0] == '1'))
+      return (int) MoveNumberOne;
+}
+	YY_BREAK
+case 27:
+YY_RULE_SETUP
+{
+    /* elapsed time indication, e.g. (0:12) or {10:21.071} */ 
+    return (int) ElapsedTime;
+}
+	YY_BREAK
+case 28:
+YY_RULE_SETUP
+{
+    /* position diagram enclosed in [-- --] */
+    return (int) PositionDiagram;
+}
+	YY_BREAK
+case 29:
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
+yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{
+    /* position diagram enclosed in {-- --} */
+    return (int) PositionDiagram;
+}
+	YY_BREAK
+case 30:
+YY_RULE_SETUP
+{
+    return (int) PGNTag;
+}    
+	YY_BREAK
+case 31:
+YY_RULE_SETUP
+{
+    return (int) GNUChessGame;
+}
+	YY_BREAK
+case 32:
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
+yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{
+    return (int) XBoardGame;
+}
+	YY_BREAK
+case 33:
+YY_RULE_SETUP
+{				/* numeric annotation glyph */
+    return (int) NAG;
+}
+	YY_BREAK
+case 34:
+YY_RULE_SETUP
+{        			/* anything in {} */
+    return (int) Comment; 
+}
+	YY_BREAK
+case 35:
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
+yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{                                          /* ; to end of line */
+    return (int) Comment;
+}
+	YY_BREAK
+case 36:
+YY_RULE_SETUP
+{        			/* anything in [] */
+    return (int) Comment; 
+}
+	YY_BREAK
+case 37:
+YY_RULE_SETUP
+{ 	  	/* nested () */
+    return (int) Comment; 
+}
+	YY_BREAK
+case 38:
+YY_RULE_SETUP
+{ 				/* >=2 chars in () */
+    return (int) Comment; 
+}       
+	YY_BREAK
+case 39:
+YY_RULE_SETUP
+{
+        /* Skip mail headers */
+}
+	YY_BREAK
+case 40:
+YY_RULE_SETUP
+{
+        /* Skip random words */
+}
+	YY_BREAK
+case 41:
+YY_RULE_SETUP
+{
+        /* Skip everything else */
+}
+	YY_BREAK
+case 42:
+YY_RULE_SETUP
+ECHO;
+	YY_BREAK
+			case YY_STATE_EOF(INITIAL):
+				yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = yy_hold_char;
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * yylex().  If so, then we have to assure
+			 * consistency between yy_current_buffer and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			yy_n_chars = yy_current_buffer->yy_n_chars;
+			yy_current_buffer->yy_input_file = yyin;
+			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state();
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = yytext_ptr + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++yy_c_buf_p;
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = yy_c_buf_p;
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer() )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				yy_did_buffer_switch_on_eof = 0;
+
+				if ( yywrap() )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				yy_c_buf_p =
+					yytext_ptr + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state();
+
+				yy_cp = yy_c_buf_p;
+				yy_bp = yytext_ptr + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				yy_c_buf_p =
+				&yy_current_buffer->yy_ch_buf[yy_n_chars];
+
+				yy_current_state = yy_get_previous_state();
+
+				yy_cp = yy_c_buf_p;
+				yy_bp = yytext_ptr + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+	} /* end of yylex */
+
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+
+static int yy_get_next_buffer()
+	{
+	register char *dest = yy_current_buffer->yy_ch_buf;
+	register char *source = yytext_ptr;
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( yy_current_buffer->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+	else
+		{
+		int num_to_read =
+			yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+			YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = yy_current_buffer;
+
+			int yy_c_buf_p_offset =
+				(int) (yy_c_buf_p - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					yy_flex_realloc( (void *) b->yy_ch_buf,
+							 b->yy_buf_size + 2 );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = yy_current_buffer->yy_buf_size -
+						number_to_move - 1;
+#endif
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+			yy_n_chars, num_to_read );
+
+		yy_current_buffer->yy_n_chars = yy_n_chars;
+		}
+
+	if ( yy_n_chars == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			yyrestart( yyin );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			yy_current_buffer->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	yy_n_chars += number_to_move;
+	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+
+	return ret_val;
+	}
+
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+static yy_state_type yy_get_previous_state()
+	{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+
+	yy_current_state = yy_start;
+	yy_current_state += YY_AT_BOL();
+	yy_state_ptr = yy_state_buf;
+	*yy_state_ptr++ = yy_current_state;
+
+	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 697 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		*yy_state_ptr++ = yy_current_state;
+		}
+
+	return yy_current_state;
+	}
+
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+	{
+	register int yy_is_jam;
+
+	register YY_CHAR yy_c = 1;
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 697 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 696);
+	if ( ! yy_is_jam )
+		*yy_state_ptr++ = yy_current_state;
+
+	return yy_is_jam ? 0 : yy_current_state;
+	}
+
+
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+	{
+	register char *yy_cp = yy_c_buf_p;
+
+	/* undo effects of setting up yytext */
+	*yy_cp = yy_hold_char;
+
+	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = yy_n_chars + 2;
+		register char *dest = &yy_current_buffer->yy_ch_buf[
+					yy_current_buffer->yy_buf_size + 2];
+		register char *source =
+				&yy_current_buffer->yy_ch_buf[number_to_move];
+
+		while ( source > yy_current_buffer->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		yy_current_buffer->yy_n_chars =
+			yy_n_chars = yy_current_buffer->yy_buf_size;
+
+		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+
+	yytext_ptr = yy_bp;
+	yy_hold_char = *yy_cp;
+	yy_c_buf_p = yy_cp;
+	}
+#endif	/* ifndef YY_NO_UNPUT */
+
+
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
+	{
+	int c;
+
+	*yy_c_buf_p = yy_hold_char;
+
+	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+			/* This was really a NUL. */
+			*yy_c_buf_p = '\0';
+
+		else
+			{ /* need more input */
+			int offset = yy_c_buf_p - yytext_ptr;
+			++yy_c_buf_p;
+
+			switch ( yy_get_next_buffer() )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					yyrestart( yyin );
+
+					/* fall through */
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( yywrap() )
+						return EOF;
+
+					if ( ! yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					yy_c_buf_p = yytext_ptr + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
+	*yy_c_buf_p = '\0';	/* preserve yytext */
+	yy_hold_char = *++yy_c_buf_p;
+
+	yy_current_buffer->yy_at_bol = (c == '\n');
+
+	return c;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+	{
+	if ( ! yy_current_buffer )
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+	yy_init_buffer( yy_current_buffer, input_file );
+	yy_load_buffer_state();
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+	{
+	if ( yy_current_buffer == new_buffer )
+		return;
+
+	if ( yy_current_buffer )
+		{
+		/* Flush out information for old buffer. */
+		*yy_c_buf_p = yy_hold_char;
+		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+		yy_current_buffer->yy_n_chars = yy_n_chars;
+		}
+
+	yy_current_buffer = new_buffer;
+	yy_load_buffer_state();
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (yywrap()) processing, but the only time this flag
+	 * is looked at is after yywrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	yy_did_buffer_switch_on_eof = 1;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+	{
+	yy_n_chars = yy_current_buffer->yy_n_chars;
+	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+	yyin = yy_current_buffer->yy_input_file;
+	yy_hold_char = *yy_c_buf_p;
+	}
+
+
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+	{
+	YY_BUFFER_STATE b;
+
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	yy_init_buffer( b, file );
+
+	return b;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+	{
+	if ( ! b )
+		return;
+
+	if ( b == yy_current_buffer )
+		yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		yy_flex_free( (void *) b->yy_ch_buf );
+
+	yy_flex_free( (void *) b );
+	}
+
+
+#ifndef YY_ALWAYS_INTERACTIVE
+#ifndef YY_NEVER_INTERACTIVE
+extern int isatty YY_PROTO(( int ));
+#endif
+#endif
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+
+	{
+	yy_flush_buffer( b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+#if YY_ALWAYS_INTERACTIVE
+	b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+	b->yy_is_interactive = 0;
+#else
+	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+	{
+	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == yy_current_buffer )
+		yy_load_buffer_state();
+	}
+
+
+#ifndef YY_NO_SCAN_BUFFER
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+	{
+	YY_BUFFER_STATE b;
+
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	yy_switch_to_buffer( b );
+
+	return b;
+	}
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+	{
+	int len;
+	for ( len = 0; yy_str[len]; ++len )
+		;
+
+	return yy_scan_bytes( yy_str, len );
+	}
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+	{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = len + 2;
+	buf = (char *) yy_flex_alloc( n );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+	for ( i = 0; i < len; ++i )
+		buf[i] = bytes[i];
+
+	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = yy_scan_buffer( buf, n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+	}
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+	{
+	if ( yy_start_stack_ptr >= yy_start_stack_depth )
+		{
+		yy_size_t new_size;
+
+		yy_start_stack_depth += YY_START_STACK_INCR;
+		new_size = yy_start_stack_depth * sizeof( int );
+
+		if ( ! yy_start_stack )
+			yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+		else
+			yy_start_stack = (int *) yy_flex_realloc(
+					(void *) yy_start_stack, new_size );
+
+		if ( ! yy_start_stack )
+			YY_FATAL_ERROR(
+			"out of memory expanding start-condition stack" );
+		}
+
+	yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+	BEGIN(new_state);
+	}
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state()
+	{
+	if ( --yy_start_stack_ptr < 0 )
+		YY_FATAL_ERROR( "start-condition stack underflow" );
+
+	BEGIN(yy_start_stack[yy_start_stack_ptr]);
+	}
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state()
+	{
+	return yy_start_stack[yy_start_stack_ptr - 1];
+	}
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+	{
+	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+	}
+
+
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+		yytext[yyleng] = yy_hold_char; \
+		yy_c_buf_p = yytext + n; \
+		yy_hold_char = *yy_c_buf_p; \
+		*yy_c_buf_p = '\0'; \
+		yyleng = n; \
+		} \
+	while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+	{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+	}
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+	{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+	}
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+	{
+	return (void *) malloc( size );
+	}
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+	{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+	}
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+	{
+	free( ptr );
+	}
+
+#if YY_MAIN
+int main()
+	{
+	yylex();
+	return 0;
+	}
+#endif
+
+
+
+static char *StringToLex;
+
+#ifndef FLEX_SCANNER
+static FILE *lexFP;
+
+static int input()
+{
+    int ret;
+    
+    if (StringToLex != NULL) {
+	ret = *StringToLex;
+	if (ret == NULLCHAR)
+	  ret = EOF;
+	else
+	  StringToLex++;
+    } else if (unputCount > 0) {
+	ret = unputBuffer[--unputCount];
+    } else {
+	ret = fgetc(lexFP);
+    }    
+
+    if (ret == EOF) 
+      return 0;
+    else
+      return ret;
+}
+
+/*
+ * Return offset of next pattern within current file
+ */
+int yyoffset()
+{
+    int offset = ftell(lexFP) - unputCount;
+
+    if (offset < 0) {
+	offset = 0;
+    }
+    return(offset);
+}
+ 
+static void output(ch)
+     int ch;
+{
+    fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
+	    ch, ch);
+}
+
+static void unput(ch)
+     int ch;
+{
+    if (ch == 0) return;
+    if (StringToLex != NULL) {
+	StringToLex--;
+    } else {
+	if (unputCount >= UNPUT_BUF_SIZE)
+	  fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
+		  ch, ch);
+	unputBuffer[unputCount++] = ch;
+    }
+}
+
+/* Get ready to lex from a new file.  Kludge below sticks
+   an artificial newline at the front of the file, which the
+   above grammar ignores, but which makes ^ at start of pattern
+   match at the real start of the file.
+*/
+void yynewfile(f)
+     FILE *f;
+{
+    lexFP = f;
+    StringToLex = NULL;
+    unputCount = 0;
+    unput('\n'); /* kludge */
+}
+
+/* Get ready to lex from a string.  ^ at start of pattern WON'T
+   match at the start of the string!
+*/
+void yynewstr(s)
+     char *s;
+{
+    lexFP = NULL;
+    StringToLex = s;
+    unputCount = 0;
+}
+#endif /*!FLEX_SCANNER*/
+
+#ifdef FLEX_SCANNER
+void my_yy_input(buf, result, max_size)
+     char *buf;
+     int *result;
+     int max_size;
+{
+    int count;
+
+    if (StringToLex != NULL) {
+	count = 0;
+	while (*StringToLex != NULLCHAR) {
+	    *buf++ = *StringToLex++;
+	    count++;
+	}
+	*result = count;
+	return;
+    } else {
+	count = fread(buf, 1, max_size, yyin);
+	if (count == 0) {
+	    *result = YY_NULL;
+	} else {
+	    *result = count;
+	}
+	return;
+    }    
+}
+
+static YY_BUFFER_STATE my_file_buffer = NULL;
+
+/*
+    Return offset of next pattern in the current file.
+*/
+int yyoffset()
+{
+    int pos = yy_c_buf_p - YY_CURRENT_BUFFER->yy_ch_buf;
+
+    return(ftell(YY_CURRENT_BUFFER->yy_input_file) -
+         yy_n_chars + pos);
+}
+
+
+void yynewstr(s)
+     char *s;
+{
+    if (my_file_buffer != NULL)
+      yy_delete_buffer(my_file_buffer);
+    StringToLex = s;
+    my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
+    yy_switch_to_buffer(my_file_buffer);
+}
+
+void yynewfile(f)
+     FILE *f;
+{
+    if (my_file_buffer != NULL)
+      yy_delete_buffer(my_file_buffer);
+    StringToLex = NULL;
+    my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
+    yy_switch_to_buffer(my_file_buffer);
+}
+#endif /*FLEX_SCANNER*/
+
+int yywrap()
+{
+    return TRUE;
+}
+
+/* Parse a move from the given string s */
+/* ^ at start of pattern WON'T work here unless using flex */
+ChessMove yylexstr(boardIndex, s)
+     int boardIndex;
+     char *s;
+{
+    ChessMove ret;
+    char *oldStringToLex;
+#ifdef FLEX_SCANNER
+    YY_BUFFER_STATE buffer, oldBuffer;
+#endif
+    
+    yyboardindex = boardIndex;
+    oldStringToLex = StringToLex;
+    StringToLex = s;
+#ifdef FLEX_SCANNER
+    buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
+    oldBuffer = YY_CURRENT_BUFFER;
+    yy_switch_to_buffer(buffer);
+#endif /*FLEX_SCANNER*/
+
+    ret = (ChessMove) yylex();
+
+#ifdef FLEX_SCANNER
+    if (oldBuffer != NULL) 
+      yy_switch_to_buffer(oldBuffer);
+    yy_delete_buffer(buffer);
+#endif /*FLEX_SCANNER*/
+    StringToLex = oldStringToLex;
+
+    return ret;
+}
diff --git a/winboard/res/winboard.exe.manifest b/winboard/res/winboard.exe.manifest
new file mode 100644
index 0000000..349abd5
--- /dev/null
+++ b/winboard/res/winboard.exe.manifest
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<assemblyIdentity
+    version="1.0.0.0"
+    processorArchitecture="X86"
+    name="Winboard.Application"
+    type="win32"
+/>
+<description>Winboard 32-bit application.</description>
+<dependency>
+    <dependentAssembly>
+        <assemblyIdentity
+            type="win32"
+            name="Microsoft.Windows.Common-Controls"
+            version="6.0.0.0"
+            processorArchitecture="X86"
+            publicKeyToken="6595b64144ccf1df"
+            language="*"
+        />
+    </dependentAssembly>
+</dependency>
+</assembly>
diff --git a/winboard/resource.h b/winboard/resource.h
index 8da09ae..3ab644a 100644
--- a/winboard/resource.h
+++ b/winboard/resource.h
@@ -2,6 +2,7 @@
 // Microsoft Developer Studio generated include file.
 // Used by winboard.rc
 //
+#define MANIFEST_RESOURCE_ID              1
 #define IDM_NewGame                     100
 #define IDM_LoadGame                    101
 #define IDM_SaveGame                    102
@@ -21,6 +22,7 @@
 #define IDM_Pause                       116
 #define IDM_CallFlag                    117
 #define IDM_Draw                        118
+#define IDM_SaveDiagram                 119
 #define IDM_Abort                       120
 #define IDM_Adjourn                     122
 #define IDM_Resign                      124
@@ -55,6 +57,9 @@
 #define IDM_PasteGame                   181
 #define IDM_CopyPosition                182
 #define IDM_PastePosition               183
+#define IDM_NewVariant                  184  
+#define IDM_TypeInName                  185  
+#define IDM_MachineBoth                 186  
 #define OPT_TCtext1                     202
 #define OPT_TCTime                      203
 #define OPT_TCtext2                     204
@@ -81,16 +86,39 @@
 #define OPT_TCInc                       407
 #define OPT_TCitext3                    408
 #define OPT_TCTime2                     409
+#define OPT_TCOdds1                     410
+#define OPT_TCOdds2                     411
 #define DLG_PremoveOptions              450
 #define DLG_GeneralOptions              453
 #define DLG_IcsOptions                  454
 #define DLG_BoardOptions                455
 #define DLG_Fonts                       456
+#define DLG_NewGameFRC                  457
+#define DLG_GameListOptions             458
+#define DLG_MoveHistory                 459
+#define DLG_EvalGraph                   461
+#define DLG_EngineOutput                463
+#define DLG_EnginePlayOptions           464
+#define IDI_WHITE_14                    466
+#define IDI_BLACK_14                    467
+#define DLG_OptionsUCI                  467
+#define IDI_PONDER_14                   468
+#define IDI_TRANS_14                    469
+#define IDI_CLOCK_14                    470
+#define IDI_UNKNOWN_14                  471
+#define IDI_BALOON_14                   472
+#define IDI_ANALYZE_14                  473
+#define IDI_ANALYZE2_14                 474
 #define DLG_Promotion                   500
 #define PB_Queen                        502
 #define PB_Rook                         503
 #define PB_Bishop                       504
 #define PB_Knight                       505
+#define PB_Chancellor                   506 /* [HGM] Capablanca pieces */
+#define PB_Archbishop                   507
+#define IDC_Yes                         520
+#define IDC_No                          521
+#define IDC_Centaur                     522
 #define EP_White                        600
 #define EP_WhitePawn                    601
 #define EP_WhiteKnight                  602
@@ -112,6 +140,22 @@
 #define DP_Bishop                       618
 #define DP_Rook                         619
 #define DP_Queen                        620
+
+#define EP_WhiteCardinal                630
+#define EP_WhiteMarshall                631
+#define EP_WhiteAlfil                   632
+#define EP_WhiteCannon                  633
+#define EP_WhiteFerz                    634
+#define EP_WhiteWazir                   635
+#define EP_BlackCardinal                640
+#define EP_BlackMarshall                641
+#define EP_BlackAlfil                   642
+#define EP_BlackCannon                  643
+#define EP_BlackFerz                    644
+#define EP_BlackWazir                   645
+#define EP_Promote                      650
+#define EP_Demote                       651
+
 #define DLG_LoadOptions                 700
 #define DLG_SaveOptions                 800
 #define OPT_PGN                         802
@@ -151,6 +195,10 @@
 #define DLG_ConsoleRich                 1022
 #define IDC_EDIT1                       1023
 #define OPT_DarkSquareColor             1023
+#define IDC_GameListFilter              1023
+#define IDC_NFG_Edit                    1023
+#define IDC_EpDrawMoveCount             1023
+#define IDC_PolyglotDir                 1023
 #define OPT_ConsoleText                 1024
 #define OPT_LightSquareColor            1024
 #define OPT_CommandInput                1025
@@ -167,11 +215,14 @@
 #define OPT_SampleDarkSquare            1030
 #define OPT_PremoveWhiteText            1031
 #define IDC_EDIT2                       1032
+#define IDC_EpAdjudicationThreshold     1032
+#define IDC_HashSize                    1032
 #define OPT_ConsoleInput                1033
 #define OPT_AdditionalOptions           1034
 #define OPT_PremoveBlackText            1035
 #define OPT_ErrorText                   1036
 #define OPT_IcsAlarmTime                1037
+#define OPT_Name                        1038
 #define DLG_Console                     1100
 #define DLG_PromotionKing               1102
 #define DLG_Colorize                    1106
@@ -181,6 +232,7 @@
 #define DLG_Sound                       1127
 #define DLG_IndexNumber                 1149
 #define DLG_TypeInMove                  1151
+#define DLG_TypeInName                  1152
 #define OPT_IndexNumberOld              1155
 #define IDM_Rematch                     1203
 #define IDA_PAGEUP                      1216
@@ -214,10 +266,22 @@
 #define IDM_GeneralOptions              1299
 #define IDM_BoardOptions                1300
 #define IDM_Fonts                       1301
+#define IDM_UserAdjudication_White      1302
+#define IDM_UserAdjudication_Black      1303
+#define IDM_UserAdjudication_Draw       1304
+#define IDM_NewGameFRC                  1305
+#define IDM_GameListOptions             1306
 #define PB_King                         1307
+#define IDM_ShowMoveHistory             1307
+#define IDM_PasteAny                    1309
+#define IDM_ShowEvalGraph               1310
+#define IDM_CopyGameListToClipboard     1311
 #define OPT_Bold                        1312
+#define IDM_ShowEngineOutput            1312
 #define OPT_Italic                      1313
+#define IDM_EnginePlayOptions           1313
 #define OPT_Underline                   1314
+#define IDM_OptionsUCI                  1314
 #define OPT_Strikeout                   1315
 #define OPT_ChooseColor                 1316
 #define OPT_Sample                      1318
@@ -338,8 +402,97 @@
 #define OPT_ChooseCommentsFont          1417
 #define OPT_ChooseConsoleFont           1418
 #define OPT_DefaultFonts                1419
+#define OPT_ChooseMoveHistoryFont       1420
 #define OPT_AutoRaiseBoard              1421
+#define OPT_SampleMoveHistoryFont       1421
 #define OPT_ShowButtonBar               1422
+#define OPT_MessageFont6                1422
+#define OPT_SaveExtPGN                  1423
+#define OPT_HideThinkFromHuman          1424
+#define IDC_GameListDoFilter            1425
+#define IDC_NFG_Random                  1426
+#define IDC_NFG_Label                   1427
+#define IDC_GameListTags                1428
+#define IDC_GLT                         1429
+#define IDC_GLT_Up                      1430
+#define IDC_GLT_Down                    1431
+#define IDC_GLT_Restore                 1432
+#define IDC_GLT_Default                 1433
+#define IDC_GLT_RestoreTo               1434
+#define IDC_MoveHistory                 1435
+#define OPT_OutOfBookInfo               1436
+#define OPT_ExtraInfoInMoveHistory      1437
+#define OPT_HighlightMoveArrow          1438
+#define IDC_BUTTON1                     1440
+#define IDC_BrowseForPolyglotDir        1440
+#define IDC_BrowseForEGTB               1441
+#define IDC_BrowseForBook               1442
+#define IDC_EngineMemo1                 1443
+#define IDC_EngineMemo2                 1444
+#define IDC_EngineLabel1                1445
+#define IDC_EngineLabel2                1446
+#define IDC_EpShowThinking              1447
+#define IDC_EpHideThinkingHuman         1448
+#define IDC_EpPonder                    1449
+#define IDC_EpPeriodicUpdates           1450
+#define IDC_Engine1_NPS                 1451
+#define IDC_Engine2_NPS                 1452
+#define IDC_Color1                      1459
+#define IDC_Color2                      1460
+#define IDC_StateIcon1                  1461
+#define IDC_StateData1                  1462
+#define IDC_StateData2                  1463
+#define IDC_StateIcon2                  1464
+#define IDC_PathToEGTB                  1466
+#define IDC_SizeOfEGTB                  1467
+#define IDC_BookFile                    1469
+#define IDC_UseBook                     1470
+#define IDC_OwnBook1                    1471
+#define IDC_OwnBook2                    1472
+#define IDC_Cores                       1473
+#define DLG_NewVariant                  1500
+#define OPT_VariantGothic               1501
+#define OPT_VariantCrazyhouse           1502
+#define OPT_VariantBughouse             1503
+#define OPT_VariantCourier              1504
+#define OPT_VariantShatranj             1505
+#define OPT_VariantShogi                1506
+#define OPT_VariantXiangqi              1507
+#define OPT_VariantCapablanca           1508
+#define OPT_VariantTwoKings             1509
+#define OPT_VariantKnightmate           1510
+#define OPT_VariantLosers               1511
+#define OPT_VariantSuicide              1512
+#define OPT_VariantAtomic               1513
+#define OPT_VariantNormal               1514
+#define OPT_VariantFairy                1515
+#define OPT_VariantFRC                  1516
+#define OPT_VariantCylinder             1517
+#define OPT_VariantFalcon               1518
+#define OPT_VariantCRC                  1519
+#define OPT_VariantBerolina             1520
+#define OPT_VariantSuper                1521
+#define OPT_VariantJanus                1522
+#define OPT_VariantWildcastle           1523
+#define OPT_VariantNocastle             1524
+#define OPT_VariantGiveaway             1525
+#define OPT_Variant3Check               1526
+#define OPT_VariantGreat                1527
+#define OPT_VariantTwilight             1528
+#define IDC_Files                       1550
+#define IDC_Ranks                       1551
+#define IDC_Holdings                    1552
+#define IDC_TestClaims                  1600
+#define IDC_DetectMates                 1601
+#define IDC_MaterialDraws               1602
+#define IDC_TrivialDraws                1603
+#define IDC_RuleMoves                   1604
+#define IDC_DrawRepeats                 1605
+#define IDC_ScoreAbs1                   1606
+#define IDC_ScoreAbs2                   1607
+#define IDM_FlipClock                   1700
+#define OPT_AllWhite                    1701
+#define OPT_UpsideDown                  1702
 #define IDC_STATIC                      -1
 
 // Next default values for new objects
@@ -347,9 +500,9 @@
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NO_MFC                     1
-#define _APS_NEXT_RESOURCE_VALUE        457
-#define _APS_NEXT_COMMAND_VALUE         1302
-#define _APS_NEXT_CONTROL_VALUE         1423
+#define _APS_NEXT_RESOURCE_VALUE        468
+#define _APS_NEXT_COMMAND_VALUE         1315
+#define _APS_NEXT_CONTROL_VALUE         1471
 #define _APS_NEXT_SYMED_VALUE           1404
 #endif
 #endif
diff --git a/winboard/shogibitmaps/README b/winboard/shogibitmaps/README
new file mode 100644
index 0000000..94e05c4
--- /dev/null
+++ b/winboard/shogibitmaps/README
@@ -0,0 +1,2 @@
+These bitmaps are distributed under the GNU GENERAL PUBLIC LICENSE
+coming with xboard.
diff --git a/winboard/shogibitmaps/bamazon.bmp b/winboard/shogibitmaps/bamazon.bmp
new file mode 100644
index 0000000..e9ed472
Binary files /dev/null and b/winboard/shogibitmaps/bamazon.bmp differ
diff --git a/winboard/shogibitmaps/king.bmp b/winboard/shogibitmaps/king.bmp
new file mode 100644
index 0000000..c80a2b3
Binary files /dev/null and b/winboard/shogibitmaps/king.bmp differ
diff --git a/winboard/shogibitmaps/largeking.bmp b/winboard/shogibitmaps/largeking.bmp
new file mode 100644
index 0000000..20c4c0c
Binary files /dev/null and b/winboard/shogibitmaps/largeking.bmp differ
diff --git a/winboard/shogibitmaps/sa58o.bmp b/winboard/shogibitmaps/sa58o.bmp
new file mode 100644
index 0000000..fcae346
Binary files /dev/null and b/winboard/shogibitmaps/sa58o.bmp differ
diff --git a/winboard/shogibitmaps/sb58o.bmp b/winboard/shogibitmaps/sb58o.bmp
new file mode 100644
index 0000000..75b2be2
Binary files /dev/null and b/winboard/shogibitmaps/sb58o.bmp differ
diff --git a/winboard/shogibitmaps/sc58o.bmp b/winboard/shogibitmaps/sc58o.bmp
new file mode 100644
index 0000000..84bef21
Binary files /dev/null and b/winboard/shogibitmaps/sc58o.bmp differ
diff --git a/winboard/shogibitmaps/sf58o.bmp b/winboard/shogibitmaps/sf58o.bmp
new file mode 100644
index 0000000..5c1d43a
Binary files /dev/null and b/winboard/shogibitmaps/sf58o.bmp differ
diff --git a/winboard/shogibitmaps/sg58o.bmp b/winboard/shogibitmaps/sg58o.bmp
new file mode 100644
index 0000000..580814c
Binary files /dev/null and b/winboard/shogibitmaps/sg58o.bmp differ
diff --git a/winboard/shogibitmaps/sh58o.bmp b/winboard/shogibitmaps/sh58o.bmp
new file mode 100644
index 0000000..8b906eb
Binary files /dev/null and b/winboard/shogibitmaps/sh58o.bmp differ
diff --git a/winboard/shogibitmaps/sk58o.bmp b/winboard/shogibitmaps/sk58o.bmp
new file mode 100644
index 0000000..8b57f9e
Binary files /dev/null and b/winboard/shogibitmaps/sk58o.bmp differ
diff --git a/winboard/shogibitmaps/sk58w.bmp b/winboard/shogibitmaps/sk58w.bmp
new file mode 100644
index 0000000..a419066
Binary files /dev/null and b/winboard/shogibitmaps/sk58w.bmp differ
diff --git a/winboard/shogibitmaps/sl58o.bmp b/winboard/shogibitmaps/sl58o.bmp
new file mode 100644
index 0000000..799b21a
Binary files /dev/null and b/winboard/shogibitmaps/sl58o.bmp differ
diff --git a/winboard/shogibitmaps/sl58w.bmp b/winboard/shogibitmaps/sl58w.bmp
new file mode 100644
index 0000000..dc1ce99
Binary files /dev/null and b/winboard/shogibitmaps/sl58w.bmp differ
diff --git a/winboard/shogibitmaps/sn58o.bmp b/winboard/shogibitmaps/sn58o.bmp
new file mode 100644
index 0000000..387e28f
Binary files /dev/null and b/winboard/shogibitmaps/sn58o.bmp differ
diff --git a/winboard/shogibitmaps/sn58w.bmp b/winboard/shogibitmaps/sn58w.bmp
new file mode 100644
index 0000000..b1c6af2
Binary files /dev/null and b/winboard/shogibitmaps/sn58w.bmp differ
diff --git a/winboard/shogibitmaps/sp58o.bmp b/winboard/shogibitmaps/sp58o.bmp
new file mode 100644
index 0000000..62be42b
Binary files /dev/null and b/winboard/shogibitmaps/sp58o.bmp differ
diff --git a/winboard/shogibitmaps/sp58w.bmp b/winboard/shogibitmaps/sp58w.bmp
new file mode 100644
index 0000000..2e623c8
Binary files /dev/null and b/winboard/shogibitmaps/sp58w.bmp differ
diff --git a/winboard/shogibitmaps/sr58o.bmp b/winboard/shogibitmaps/sr58o.bmp
new file mode 100644
index 0000000..6f6d142
Binary files /dev/null and b/winboard/shogibitmaps/sr58o.bmp differ
diff --git a/winboard/shogibitmaps/sr58w.bmp b/winboard/shogibitmaps/sr58w.bmp
new file mode 100644
index 0000000..87469d3
Binary files /dev/null and b/winboard/shogibitmaps/sr58w.bmp differ
diff --git a/winboard/shogibitmaps/ss58o.bmp b/winboard/shogibitmaps/ss58o.bmp
new file mode 100644
index 0000000..e1aa7ad
Binary files /dev/null and b/winboard/shogibitmaps/ss58o.bmp differ
diff --git a/winboard/shogibitmaps/su58o.bmp b/winboard/shogibitmaps/su58o.bmp
new file mode 100644
index 0000000..9bdce85
Binary files /dev/null and b/winboard/shogibitmaps/su58o.bmp differ
diff --git a/winboard/shogibitmaps/sw58o.bmp b/winboard/shogibitmaps/sw58o.bmp
new file mode 100644
index 0000000..cb6029f
Binary files /dev/null and b/winboard/shogibitmaps/sw58o.bmp differ
diff --git a/winboard/shogibitmaps/sw58w.bmp b/winboard/shogibitmaps/sw58w.bmp
new file mode 100644
index 0000000..e90dde3
Binary files /dev/null and b/winboard/shogibitmaps/sw58w.bmp differ
diff --git a/winboard/wclipbrd.c b/winboard/wclipbrd.c
index ecd54bd..838d250 100644
--- a/winboard/wclipbrd.c
+++ b/winboard/wclipbrd.c
@@ -2,24 +2,25 @@
  * wclipbrd.c -- Clipboard routines for WinBoard
  * $Id: wclipbrd.c,v 2.1 2003/10/27 19:21:02 mann Exp $
  *
- * Copyright 2000 Free Software Foundation, Inc.
+ * Copyright 2000,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include "config.h"
 
@@ -47,7 +48,7 @@ CopyFENToClipboard()
 {
   char *fen = NULL;
 
-  fen = PositionToFEN(currentMove);
+  fen = PositionToFEN(currentMove,1);
   if (!fen) {
     DisplayError("Unable to convert position to FEN.", 0);
     return;
@@ -57,6 +58,38 @@ CopyFENToClipboard()
   free(fen);
 }
 
+/* [AS] */
+HGLOBAL ExportGameListAsText();
+
+VOID CopyGameListToClipboard()
+{
+    HGLOBAL hMem = ExportGameListAsText();
+    
+    if( hMem != NULL ) {
+        /* Assign memory block to clipboard */
+        BOOL ok = OpenClipboard( hwndMain );
+
+        if( ok ) {
+            ok = EmptyClipboard();
+
+            if( ok ) {
+                if( hMem != SetClipboardData( CF_TEXT, hMem ) ) {
+                    ok = FALSE;
+                }
+            }
+
+            CloseClipboard();
+
+            if( ! ok ) {
+                GlobalFree( hMem );
+            }
+        }
+
+        if( ! ok ) {
+            DisplayError( "Cannot copy list to clipboard.", 0 );
+        }
+    }
+}
 
 VOID
 CopyGameToClipboard()
@@ -165,7 +198,7 @@ CopyTextToClipboard(char *text)
     locked = !((err == NO_ERROR) || (err == ERROR_NOT_LOCKED));
     if (appData.debugMode) {
       fprintf(debugFP, 
-	      "CopyTextToClipboard(): err %d locked %d\n", err, locked);
+	      "CopyTextToClipboard(): err %d locked %d\n", (int)err, locked);
     }
   }
   if (locked) {
@@ -194,6 +227,16 @@ CopyTextToClipboard(char *text)
   return TRUE;
 }
 
+/* [AS] Reworked paste functions so they can work with strings too */
+
+VOID PasteFENFromString( char * fen )
+{
+  if (appData.debugMode) {
+    fprintf(debugFP, "PasteFenFromString(): fen '%s'\n", fen);
+  }
+  EditPositionPasteFEN(fen); /* call into backend */
+  free(fen);
+}
 
 
 VOID
@@ -204,42 +247,68 @@ PasteFENFromClipboard()
       DisplayError("Unable to paste FEN from clipboard.", 0);
       return;
   }
-  if (appData.debugMode) {
-    fprintf(debugFP, "PasteFenFromClipboard(): fen '%s'\n", fen);
-  }
-  EditPositionPasteFEN(fen); /* call into backend */
-  free(fen);
+  PasteFENFromString( fen );
 }
 
-
-VOID
-PasteGameFromClipboard()
+VOID PasteGameFromString( char * buf )
 {
-  /* Write the clipboard to a temp file, then let LoadGameFromFile()
-   * do all the work.  */
-  char *buf;
   FILE *f;
   size_t len;
-  if (!PasteTextFromClipboard(&buf)) {
-    return;
-  }
   if (!pasteTemp) {
     pasteTemp = tempnam(NULL, "wbpt");
   }
   f = fopen(pasteTemp, "w");
   if (!f) {
     DisplayError("Unable to create temporary file.", 0);
+    free(buf); /* [AS] */
     return;
   }
   len = fwrite(buf, sizeof(char), strlen(buf), f);
   fclose(f);
   if (len != strlen(buf)) {
     DisplayError("Error writing to temporary file.", 0);
+    free(buf); /* [AS] */
     return;
   }
   LoadGameFromFile(pasteTemp, 0, "Clipboard", TRUE);
+  free( buf ); /* [AS] */
+}
+
+
+VOID
+PasteGameFromClipboard()
+{
+  /* Write the clipboard to a temp file, then let LoadGameFromFile()
+   * do all the work.  */
+  char *buf;
+  if (!PasteTextFromClipboard(&buf)) {
+    return;
+  }
+  PasteGameFromString( buf );
 }
 
+/* [AS] Try to detect whether the clipboard contains FEN or PGN data */
+VOID PasteGameOrFENFromClipboard()
+{
+  char *buf;
+  char *tmp;
+
+  if (!PasteTextFromClipboard(&buf)) {
+    return;
+  }
+
+  tmp = buf;
+  while( *tmp == ' ' || *tmp == '\t' || *tmp == '\r' || *tmp == '\n' ) {
+      tmp++;
+  }
+
+  if( *tmp == '[' ) {
+      PasteGameFromString( buf );
+  }
+  else {
+      PasteFENFromString( buf );
+  }
+}
 
 int 
 PasteTextFromClipboard(char **text)
@@ -299,7 +368,7 @@ PasteTextFromClipboard(char **text)
     locked = !((err == NO_ERROR) || (err == ERROR_NOT_LOCKED));
     if (appData.debugMode) {
       fprintf(debugFP, 
-	      "PasteTextFromClipboard(): err %d locked %d\n", err, locked);
+	      "PasteTextFromClipboard(): err %d locked %d\n", (int)err, locked);
     }
   }
   if (locked) 
diff --git a/winboard/wclipbrd.h b/winboard/wclipbrd.h
index 6566ecd..0403354 100644
--- a/winboard/wclipbrd.h
+++ b/winboard/wclipbrd.h
@@ -2,27 +2,29 @@
  * wclipbrd.c -- Clipboard routines for WinBoard
  * $Id: wclipbrd.h,v 2.1 2003/10/27 19:21:02 mann Exp $
  *
- * Copyright 2000 Free Software Foundation, Inc.
+ * Copyright 2000,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 VOID CopyFENToClipboard();
 VOID CopyGameToClipboard();
+VOID CopyGameListToClipboard();
 int CopyTextToClipboard(char *text);
 
 VOID PasteFENFromClipboard();
@@ -30,3 +32,5 @@ VOID PasteGameFromClipboard();
 int PasteTextFromClipboard(char **text);
 
 VOID DeleteClipboardTempFiles();
+
+VOID PasteGameOrFENFromClipboard(); /* [AS] */
diff --git a/winboard/wedittags.c b/winboard/wedittags.c
index 83cd607..19f1bd4 100644
--- a/winboard/wedittags.c
+++ b/winboard/wedittags.c
@@ -2,24 +2,25 @@
  * wedittags.c -- EditTags window for WinBoard
  * $Id: wedittags.c,v 2.1 2003/10/27 19:21:02 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include "config.h"
 
@@ -36,6 +37,7 @@
 #include "winboard.h"
 #include "frontend.h"
 #include "backend.h"
+#include "wedittags.h"
 
 /* Module globals */
 static char *editTagsText;
diff --git a/winboard/wedittags.h b/winboard/wedittags.h
index 0851d39..b951945 100644
--- a/winboard/wedittags.h
+++ b/winboard/wedittags.h
@@ -2,24 +2,25 @@
  * wedittags.h -- EditTags window for WinBoard
  * $Id: wedittags.h,v 2.1 2003/10/27 19:21:02 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 VOID EditTagsProc(void);
 extern HWND editTagsDialog;
diff --git a/winboard/wengineo.c b/winboard/wengineo.c
new file mode 100644
index 0000000..ff7b3b1
--- /dev/null
+++ b/winboard/wengineo.c
@@ -0,0 +1,846 @@
+/*
+ * Engine output (PV)
+ *
+ * Author: Alessandro Scotti (Dec 2005)
+ *
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "config.h"
+
+#include <windows.h> /* required for all Windows applications */
+#include <richedit.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <commdlg.h>
+#include <dlgs.h>
+
+#include "common.h"
+#include "winboard.h"
+#include "frontend.h"
+#include "backend.h"
+
+#include "wsnap.h"
+
+// [HGM] define numbers to indicate icons, for referring to them in platform-independent way
+#define nColorBlack   1
+#define nColorWhite   2
+#define nColorUnknown 3
+#define nClear        4
+#define nPondering    5
+#define nThinking     6
+#define nAnalyzing    7
+
+HICON icons[8]; // [HGM] this front-end array translates back-end icon indicator to handle
+
+// [HGM] same for output fields (note that there are two of each type, one per color)
+#define nColorIcon 1
+#define nStateIcon 2
+#define nLabel     3
+#define nStateData 4
+#define nLabelNPS  5
+#define nMemo      6
+
+HWND outputField[2][7]; // [HGM] front-end array to translate output field to window handle
+
+void EngineOutputPopUp();
+void EngineOutputPopDown();
+int  EngineOutputIsUp();
+
+#define SHOW_PONDERING
+
+/* Imports from backend.c */
+char * SavePart(char *str);
+extern int opponentKibitzes;
+
+/* Imports from winboard.c */
+extern HWND engineOutputDialog;
+extern int     engineOutputDialogUp;
+
+extern HINSTANCE hInst;
+extern HWND hwndMain;
+
+extern WindowPlacement wpEngineOutput;
+
+/* Module variables */
+#define H_MARGIN            2
+#define V_MARGIN            2
+#define LABEL_V_DISTANCE    1   /* Distance between label and memo */
+#define SPLITTER_SIZE       4   /* Distance between first memo and second label */
+
+#define ICON_SIZE           14
+
+#define STATE_UNKNOWN   -1
+#define STATE_THINKING   0
+#define STATE_IDLE       1
+#define STATE_PONDERING  2
+#define STATE_ANALYZING  3
+
+static int  windowMode = 1;
+
+static int  needInit = TRUE;
+
+static int  lastDepth[2] = { -1, -1 };
+static int  lastForwardMostMove[2] = { -1, -1 };
+static int  engineState[2] = { -1, -1 };
+
+typedef struct {
+//    HWND hColorIcon; // [HGM] the output-control handles are no loger passed,
+//    HWND hLabel;     //       to give better front-end / back-end separation
+//    HWND hStateIcon; //       the front-end routines now get them from a (front-end)
+//    HWND hStateData; //       table, indexed by output-field indicators.
+//    HWND hLabelNPS;
+//    HWND hMemo;
+    char * name;
+    int which;
+    int depth;
+    u64 nodes;
+    int score;
+    int time;
+    char * pv;
+    char * hint;
+    int an_move_index;
+    int an_move_count;
+} EngineOutputData;
+
+static void VerifyDisplayMode();
+static void UpdateControls( EngineOutputData * ed );
+static void SetEngineState( int which, int state, char * state_data );
+
+// front end
+static HICON LoadIconEx( int id )
+{
+    return LoadImage( hInst, MAKEINTRESOURCE(id), IMAGE_ICON, ICON_SIZE, ICON_SIZE, 0 );
+}
+
+// [HGM] the platform-dependent way of indicating where output should go is now all
+// concentrated here, where a table of platform-dependent handles are initialized.
+// This cleanses most other routines of front-end stuff, so they can go into the back end.
+static void InitializeEngineOutput()
+{
+ //   if( needInit ) { // needInit was already tested before call
+	// [HGM] made this into a table, rather than separate global variables
+        icons[nColorBlack]   = LoadIconEx( IDI_BLACK_14 );
+        icons[nColorWhite]   = LoadIconEx( IDI_WHITE_14 );
+        icons[nColorUnknown] = LoadIconEx( IDI_UNKNOWN_14 );
+        icons[nClear]        = LoadIconEx( IDI_TRANS_14 );
+        icons[nPondering]    = LoadIconEx( IDI_PONDER_14 );
+        icons[nThinking]     = LoadIconEx( IDI_CLOCK_14 );
+        icons[nAnalyzing]    = LoadIconEx( IDI_ANALYZE2_14 );
+
+	// [HGM] also make a table of handles to output controls
+	// Note that engineOutputDialog must be defined first!
+        outputField[0][nColorIcon] = GetDlgItem( engineOutputDialog, IDC_Color1 );
+        outputField[0][nLabel]     = GetDlgItem( engineOutputDialog, IDC_EngineLabel1 );
+        outputField[0][nStateIcon] = GetDlgItem( engineOutputDialog, IDC_StateIcon1 );
+        outputField[0][nStateData] = GetDlgItem( engineOutputDialog, IDC_StateData1 );
+        outputField[0][nLabelNPS]  = GetDlgItem( engineOutputDialog, IDC_Engine1_NPS );
+        outputField[0][nMemo]      = GetDlgItem( engineOutputDialog, IDC_EngineMemo1 );
+
+        outputField[1][nColorIcon] = GetDlgItem( engineOutputDialog, IDC_Color2 );
+        outputField[1][nLabel]     = GetDlgItem( engineOutputDialog, IDC_EngineLabel2 );
+        outputField[1][nStateIcon] = GetDlgItem( engineOutputDialog, IDC_StateIcon2 );
+        outputField[1][nStateData] = GetDlgItem( engineOutputDialog, IDC_StateData2 );
+        outputField[1][nLabelNPS]  = GetDlgItem( engineOutputDialog, IDC_Engine2_NPS );
+        outputField[1][nMemo]      = GetDlgItem( engineOutputDialog, IDC_EngineMemo2 );
+//        needInit = FALSE;
+//    }
+}
+
+// front end
+static void SetControlPos( HWND hDlg, int id, int x, int y, int width, int height )
+{
+    HWND hControl = GetDlgItem( hDlg, id );
+
+    SetWindowPos( hControl, HWND_TOP, x, y, width, height, SWP_NOZORDER );
+}
+
+#define HIDDEN_X    20000
+#define HIDDEN_Y    20000
+
+// front end
+static void HideControl( HWND hDlg, int id )
+{
+    HWND hControl = GetDlgItem( hDlg, id );
+    RECT rc;
+
+    GetWindowRect( hControl, &rc );
+
+    /* 
+        Avoid hiding an already hidden control, because that causes many
+        unnecessary WM_ERASEBKGND messages!
+    */
+    if( rc.left != HIDDEN_X || rc.top != HIDDEN_Y ) {
+        SetControlPos( hDlg, id, 20000, 20000, 100, 100 );
+    }
+}
+
+// front end, although we might make GetWindowRect front end instead
+static int GetControlWidth( HWND hDlg, int id )
+{
+    RECT rc;
+
+    GetWindowRect( GetDlgItem( hDlg, id ), &rc );
+
+    return rc.right - rc.left;
+}
+
+// front end?
+static int GetControlHeight( HWND hDlg, int id )
+{
+    RECT rc;
+
+    GetWindowRect( GetDlgItem( hDlg, id ), &rc );
+
+    return rc.bottom - rc.top;
+}
+
+static int GetHeaderHeight()
+{
+    int result = GetControlHeight( engineOutputDialog, IDC_EngineLabel1 );
+
+    if( result < ICON_SIZE ) result = ICON_SIZE;
+
+    return result;
+}
+
+// The size calculations should be backend? If setControlPos is a platform-dependent way of doing things,
+// a platform-independent wrapper for it should be supplied.
+static void PositionControlSet( HWND hDlg, int x, int y, int clientWidth, int memoHeight, int idColor, int idEngineLabel, int idNPS, int idMemo, int idStateIcon, int idStateData )
+{
+    int label_x = x + ICON_SIZE + H_MARGIN;
+    int label_h = GetControlHeight( hDlg, IDC_EngineLabel1 );
+    int label_y = y + ICON_SIZE - label_h;
+    int nps_w = GetControlWidth( hDlg, IDC_Engine1_NPS );
+    int nps_x = clientWidth - H_MARGIN - nps_w;
+    int state_data_w = GetControlWidth( hDlg, IDC_StateData1 );
+    int state_data_x = nps_x - H_MARGIN - state_data_w;
+    int state_icon_x = state_data_x - ICON_SIZE - 2;
+    int max_w = clientWidth - 2*H_MARGIN;
+    int memo_y = y + ICON_SIZE + LABEL_V_DISTANCE;
+
+    SetControlPos( hDlg, idColor, x, y, ICON_SIZE, ICON_SIZE );
+    SetControlPos( hDlg, idEngineLabel, label_x, label_y, state_icon_x - label_x, label_h );
+    SetControlPos( hDlg, idStateIcon, state_icon_x, y, ICON_SIZE, ICON_SIZE );
+    SetControlPos( hDlg, idStateData, state_data_x, label_y, state_data_w, label_h );
+    SetControlPos( hDlg, idNPS, nps_x, label_y, nps_w, label_h );
+    SetControlPos( hDlg, idMemo, x, memo_y, max_w, memoHeight );
+}
+
+// Also here some of the size calculations should go to the back end, and their actual application to a front-end routine
+static void ResizeWindowControls( HWND hDlg, int mode )
+{
+    RECT rc;
+    int headerHeight = GetHeaderHeight();
+//    int labelHeight = GetControlHeight( hDlg, IDC_EngineLabel1 );
+//    int labelOffset = H_MARGIN + ICON_SIZE + H_MARGIN;
+//    int labelDeltaY = ICON_SIZE - labelHeight;
+    int clientWidth;
+    int clientHeight;
+    int maxControlWidth;
+    int npsWidth;
+
+    /* Initialize variables */
+    GetClientRect( hDlg, &rc );
+
+    clientWidth = rc.right - rc.left;
+    clientHeight = rc.bottom - rc.top;
+
+    maxControlWidth = clientWidth - 2*H_MARGIN;
+
+    npsWidth = GetControlWidth( hDlg, IDC_Engine1_NPS );
+
+    /* Resize controls */
+    if( mode == 0 ) {
+        /* One engine */
+        PositionControlSet( hDlg, H_MARGIN, V_MARGIN, 
+            clientWidth, 
+            clientHeight - V_MARGIN - LABEL_V_DISTANCE - headerHeight- V_MARGIN,
+            IDC_Color1, IDC_EngineLabel1, IDC_Engine1_NPS, IDC_EngineMemo1, IDC_StateIcon1, IDC_StateData1 );
+
+        /* Hide controls for the second engine */
+        HideControl( hDlg, IDC_Color2 );
+        HideControl( hDlg, IDC_EngineLabel2 );
+        HideControl( hDlg, IDC_StateIcon2 );
+        HideControl( hDlg, IDC_StateData2 );
+        HideControl( hDlg, IDC_Engine2_NPS );
+        HideControl( hDlg, IDC_EngineMemo2 );
+        SendDlgItemMessage( hDlg, IDC_EngineMemo2, WM_SETTEXT, 0, (LPARAM) "" );
+        /* TODO: we should also hide/disable them!!! what about tab stops?!?! */
+    }
+    else {
+        /* Two engines */
+        int memo_h = (clientHeight - headerHeight*2 - V_MARGIN*2 - LABEL_V_DISTANCE*2 - SPLITTER_SIZE) / 2;
+        int header1_y = V_MARGIN;
+        int header2_y = V_MARGIN + headerHeight + LABEL_V_DISTANCE + memo_h + SPLITTER_SIZE;
+
+        PositionControlSet( hDlg, H_MARGIN, header1_y, clientWidth, memo_h,
+            IDC_Color1, IDC_EngineLabel1, IDC_Engine1_NPS, IDC_EngineMemo1, IDC_StateIcon1, IDC_StateData1 );
+
+        PositionControlSet( hDlg, H_MARGIN, header2_y, clientWidth, memo_h,
+            IDC_Color2, IDC_EngineLabel2, IDC_Engine2_NPS, IDC_EngineMemo2, IDC_StateIcon2, IDC_StateData2 );
+    }
+
+    InvalidateRect( GetDlgItem(hDlg,IDC_EngineMemo1), NULL, FALSE );
+    InvalidateRect( GetDlgItem(hDlg,IDC_EngineMemo2), NULL, FALSE );
+}
+
+// front end. Actual printing of PV lines into the output field
+static void InsertIntoMemo( int which, char * text )
+{
+    SendMessage( outputField[which][nMemo], EM_SETSEL, 0, 0 );
+
+    SendMessage( outputField[which][nMemo], EM_REPLACESEL, (WPARAM) FALSE, (LPARAM) text );
+}
+
+// front end. Associates an icon with an output field ("control" in Windows jargon).
+// [HGM] let it find out the output field from the 'which' number by itself
+static void SetIcon( int which, int field, int nIcon )
+{
+
+    if( nIcon != 0 ) {
+        SendMessage( outputField[which][field], STM_SETICON, (WPARAM) icons[nIcon], 0 );
+    }
+}
+
+// front end wrapper for SetWindowText, taking control number in stead of handle
+void DoSetWindowText(int which, int field, char *s_label)
+{
+    SetWindowText( outputField[which][field], s_label );
+}
+
+// This seems pure front end
+LRESULT CALLBACK EngineOutputProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
+{
+    static SnapData sd;
+
+    switch (message) {
+    case WM_INITDIALOG:
+        if( engineOutputDialog == NULL ) {
+            engineOutputDialog = hDlg;
+
+            RestoreWindowPlacement( hDlg, &wpEngineOutput ); /* Restore window placement */
+
+            ResizeWindowControls( hDlg, windowMode );
+
+            SetEngineState( 0, STATE_IDLE, "" );
+            SetEngineState( 1, STATE_IDLE, "" );
+        }
+
+        return FALSE;
+
+    case WM_COMMAND:
+        switch (LOWORD(wParam)) {
+        case IDOK:
+          EndDialog(hDlg, TRUE);
+          return TRUE;
+
+        case IDCANCEL:
+          EndDialog(hDlg, FALSE);
+          return TRUE;
+
+        default:
+          break;
+        }
+
+        break;
+
+    case WM_GETMINMAXINFO:
+        {
+            MINMAXINFO * mmi = (MINMAXINFO *) lParam;
+        
+            mmi->ptMinTrackSize.x = 100;
+            mmi->ptMinTrackSize.y = 160;
+        }
+        break;
+
+    case WM_CLOSE:
+        EngineOutputPopDown();
+        break;
+
+    case WM_SIZE:
+        ResizeWindowControls( hDlg, windowMode );
+        break;
+
+    case WM_ENTERSIZEMOVE:
+        return OnEnterSizeMove( &sd, hDlg, wParam, lParam );
+
+    case WM_SIZING:
+        return OnSizing( &sd, hDlg, wParam, lParam );
+
+    case WM_MOVING:
+        return OnMoving( &sd, hDlg, wParam, lParam );
+
+    case WM_EXITSIZEMOVE:
+        return OnExitSizeMove( &sd, hDlg, wParam, lParam );
+    }
+
+    return FALSE;
+}
+
+// front end
+void EngineOutputPopUp()
+{
+  FARPROC lpProc;
+  
+  CheckMenuItem(GetMenu(hwndMain), IDM_ShowEngineOutput, MF_CHECKED);
+
+  if( engineOutputDialog ) {
+    SendMessage( engineOutputDialog, WM_INITDIALOG, 0, 0 );
+
+    if( ! engineOutputDialogUp ) {
+        ShowWindow(engineOutputDialog, SW_SHOW);
+    }
+  }
+  else {
+    lpProc = MakeProcInstance( (FARPROC) EngineOutputProc, hInst );
+
+    /* Note to self: dialog must have the WS_VISIBLE style set, otherwise it's not shown! */
+    CreateDialog( hInst, MAKEINTRESOURCE(DLG_EngineOutput), hwndMain, (DLGPROC)lpProc );
+
+    FreeProcInstance(lpProc);
+  }
+
+  // [HGM] displaced to after creation of dialog, to allow initialization of output fields
+  if( needInit ) {
+      InitializeEngineOutput();
+      needInit = FALSE;
+  }
+
+  engineOutputDialogUp = TRUE;
+}
+
+// front end
+void EngineOutputPopDown()
+{
+  CheckMenuItem(GetMenu(hwndMain), IDM_ShowEngineOutput, MF_UNCHECKED);
+
+  if( engineOutputDialog ) {
+      ShowWindow(engineOutputDialog, SW_HIDE);
+  }
+
+  engineOutputDialogUp = FALSE;
+}
+
+// front end. [HGM] Takes handle of output control from table, so only number is passed
+void DoClearMemo(int which)
+{
+        SendMessage( outputField[which][nMemo], WM_SETTEXT, 0, (LPARAM) "" );
+}
+
+//------------------------ pure back-end routines -------------------------------
+
+
+// back end, due to front-end wrapper for SetWindowText, and new SetIcon arguments
+static void SetEngineState( int which, int state, char * state_data )
+{
+    int x_which = 1 - which;
+
+    if( engineState[ which ] != state ) {
+        engineState[ which ] = state;
+
+        switch( state ) {
+        case STATE_THINKING:
+            SetIcon( which, nStateIcon, nThinking );
+            if( engineState[ x_which ] == STATE_THINKING ) {
+                SetEngineState( x_which, STATE_IDLE, "" );
+            }
+            break;
+        case STATE_PONDERING:
+            SetIcon( which, nStateIcon, nPondering );
+            break;
+        case STATE_ANALYZING:
+            SetIcon( which, nStateIcon, nAnalyzing );
+            break;
+        default:
+            SetIcon( which, nStateIcon, nClear );
+            break;
+        }
+    }
+
+    if( state_data != 0 ) {
+        DoSetWindowText( which, nStateData, state_data );
+    }
+}
+
+// back end, now the front-end wrapper ClearMemo is used, and ed no longer contains handles.
+void EngineOutputUpdate( FrontEndProgramStats * stats )
+{
+    EngineOutputData ed;
+    int clearMemo = FALSE;
+    int which;
+    int depth;
+
+    if( stats == 0 ) {
+        SetEngineState( 0, STATE_IDLE, "" );
+        SetEngineState( 1, STATE_IDLE, "" );
+        return;
+    }
+
+    if(gameMode == IcsObserving && !appData.icsEngineAnalyze)
+	return; // [HGM] kibitz: shut up engine if we are observing an ICS game
+
+    which = stats->which;
+    depth = stats->depth;
+
+    if( which < 0 || which > 1 || depth < 0 || stats->time < 0 || stats->pv == 0 ) {
+        return;
+    }
+
+    if( engineOutputDialog == NULL ) {
+        return;
+    }
+
+    VerifyDisplayMode();
+
+    ed.which = which;
+    ed.depth = depth;
+    ed.nodes = stats->nodes;
+    ed.score = stats->score;
+    ed.time = stats->time;
+    ed.pv = stats->pv;
+    ed.hint = stats->hint;
+    ed.an_move_index = stats->an_move_index;
+    ed.an_move_count = stats->an_move_count;
+
+    /* Get target control. [HGM] this is moved to front end, which get them from a table */
+    if( which == 0 ) {
+        ed.name = first.tidy;
+    }
+    else {
+        ed.name = second.tidy;
+    }
+
+    /* Clear memo if needed */
+    if( lastDepth[which] > depth || (lastDepth[which] == depth && depth <= 1) ) {
+        clearMemo = TRUE;
+    }
+
+    if( lastForwardMostMove[which] != forwardMostMove ) {
+        clearMemo = TRUE;
+    }
+
+    if( clearMemo ) DoClearMemo(which);
+
+    /* Update */
+    lastDepth[which] = depth;
+    lastForwardMostMove[which] = forwardMostMove;
+
+    if( ed.pv != 0 && ed.pv[0] == ' ' ) {
+        if( strncmp( ed.pv, " no PV", 6 ) == 0 ) { /* Hack on hack! :-O */
+            ed.pv = "";
+        }
+    }
+
+    UpdateControls( &ed );
+}
+
+#define ENGINE_COLOR_WHITE      'w'
+#define ENGINE_COLOR_BLACK      'b'
+#define ENGINE_COLOR_UNKNOWN    ' '
+
+// pure back end
+char GetEngineColor( int which )
+{
+    char result = ENGINE_COLOR_UNKNOWN;
+
+    if( which == 0 || which == 1 ) {
+        ChessProgramState * cps;
+
+        switch (gameMode) {
+        case MachinePlaysBlack:
+        case IcsPlayingBlack:
+            result = ENGINE_COLOR_BLACK;
+            break;
+        case MachinePlaysWhite:
+        case IcsPlayingWhite:
+            result = ENGINE_COLOR_WHITE;
+            break;
+        case AnalyzeMode:
+        case AnalyzeFile:
+            result = WhiteOnMove(forwardMostMove) ? ENGINE_COLOR_WHITE : ENGINE_COLOR_BLACK;
+            break;
+        case TwoMachinesPlay:
+            cps = (which == 0) ? &first : &second;
+            result = cps->twoMachinesColor[0];
+            result = result == 'w' ? ENGINE_COLOR_WHITE : ENGINE_COLOR_BLACK;
+            break;
+        default: ; // does not happen, but suppresses pedantic warnings
+        }
+    }
+
+    return result;
+}
+
+// pure back end
+char GetActiveEngineColor()
+{
+    char result = ENGINE_COLOR_UNKNOWN;
+
+    if( gameMode == TwoMachinesPlay ) {
+        result = WhiteOnMove(forwardMostMove) ? ENGINE_COLOR_WHITE : ENGINE_COLOR_BLACK;
+    }
+
+    return result;
+}
+
+// pure back end
+static int IsEnginePondering( int which )
+{
+    int result = FALSE;
+
+    switch (gameMode) {
+    case MachinePlaysBlack:
+    case IcsPlayingBlack:
+        if( WhiteOnMove(forwardMostMove) ) result = TRUE;
+        break;
+    case MachinePlaysWhite:
+    case IcsPlayingWhite:
+        if( ! WhiteOnMove(forwardMostMove) ) result = TRUE;
+        break;
+    case TwoMachinesPlay:
+        if( GetActiveEngineColor() != ENGINE_COLOR_UNKNOWN ) {
+            if( GetEngineColor( which ) != GetActiveEngineColor() ) result = TRUE;
+        }
+        break;
+    default: ; // does not happen, but suppresses pedantic warnings
+    }
+
+    return result;
+}
+
+// back end
+static void SetDisplayMode( int mode )
+{
+    if( windowMode != mode ) {
+        windowMode = mode;
+
+        ResizeWindowControls( engineOutputDialog, mode );
+    }
+}
+
+// pure back end
+static void VerifyDisplayMode()
+{
+    int mode;
+
+    /* Get proper mode for current game */
+    switch( gameMode ) {
+    case IcsObserving:    // [HGM] ICS analyze
+	if(!appData.icsEngineAnalyze) return;
+    case AnalyzeMode:
+    case AnalyzeFile:
+    case MachinePlaysWhite:
+    case MachinePlaysBlack:
+        mode = 0;
+        break;
+    case IcsPlayingWhite:
+    case IcsPlayingBlack:
+        mode = appData.zippyPlay && opponentKibitzes; // [HGM] kibitz
+        break;
+    case TwoMachinesPlay:
+        mode = 1;
+        break;
+    default:
+        /* Do not change */
+        return;
+    }
+
+    SetDisplayMode( mode );
+}
+
+// back end. Determine what icon to se in the color-icon field, and print it
+static void SetEngineColorIcon( int which )
+{
+    char color = GetEngineColor(which);
+    int nicon = 0;
+
+    if( color == ENGINE_COLOR_BLACK )
+        nicon = nColorBlack;
+    else if( color == ENGINE_COLOR_WHITE )
+        nicon = nColorWhite;
+    else
+        nicon = nColorUnknown;
+
+    SetIcon( which, nColorIcon, nicon );
+}
+
+#define MAX_NAME_LENGTH 32
+
+// pure back end, now SetWindowText is called via wrapper DoSetWindowText
+static void UpdateControls( EngineOutputData * ed )
+{
+//    int isPondering = FALSE;
+
+    char s_label[MAX_NAME_LENGTH + 32];
+    
+    char * name = ed->name;
+
+    /* Label */
+    if( name == 0 || *name == '\0' ) {
+        name = "?";
+    }
+
+    strncpy( s_label, name, MAX_NAME_LENGTH );
+    s_label[ MAX_NAME_LENGTH-1 ] = '\0';
+
+#ifdef SHOW_PONDERING
+    if( IsEnginePondering( ed->which ) ) {
+        char buf[8];
+
+        buf[0] = '\0';
+
+        if( ed->hint != 0 && *ed->hint != '\0' ) {
+            strncpy( buf, ed->hint, sizeof(buf) );
+            buf[sizeof(buf)-1] = '\0';
+        }
+        else if( ed->pv != 0 && *ed->pv != '\0' ) {
+            char * sep = strchr( ed->pv, ' ' );
+            int buflen = sizeof(buf);
+
+            if( sep != NULL ) {
+                buflen = sep - ed->pv + 1;
+                if( buflen > sizeof(buf) ) buflen = sizeof(buf);
+            }
+
+            strncpy( buf, ed->pv, buflen );
+            buf[ buflen-1 ] = '\0';
+        }
+
+        SetEngineState( ed->which, STATE_PONDERING, buf );
+    }
+    else if( gameMode == TwoMachinesPlay ) {
+        SetEngineState( ed->which, STATE_THINKING, "" );
+    }
+    else if( gameMode == AnalyzeMode || gameMode == AnalyzeFile
+	  || (gameMode == IcsObserving && appData.icsEngineAnalyze)) { // [HGM] ICS-analyze
+        char buf[64];
+        int time_secs = ed->time / 100;
+        int time_mins = time_secs / 60;
+
+        buf[0] = '\0';
+
+        if( ed->an_move_index != 0 && ed->an_move_count != 0 && *ed->hint != '\0' ) {
+            char mov[16];
+
+            strncpy( mov, ed->hint, sizeof(mov) );
+            mov[ sizeof(mov)-1 ] = '\0';
+
+            sprintf( buf, "%d/%d: %s [%02d:%02d:%02d]", ed->an_move_index, ed->an_move_count, mov, time_mins / 60, time_mins % 60, time_secs % 60 );
+        }
+
+        SetEngineState( ed->which, STATE_ANALYZING, buf );
+    }
+    else {
+        SetEngineState( ed->which, STATE_IDLE, "" );
+    }
+#endif
+
+    DoSetWindowText( ed->which, nLabel, s_label );
+
+    s_label[0] = '\0';
+
+    if( ed->time > 0 && ed->nodes > 0 ) {
+        unsigned long nps_100 = ed->nodes / ed->time;
+
+        if( nps_100 < 100000 ) {
+            sprintf( s_label, "NPS: %lu", nps_100 * 100 );
+        }
+        else {
+            sprintf( s_label, "NPS: %.1fk", nps_100 / 10.0 );
+        }
+    }
+
+    DoSetWindowText( ed->which, nLabelNPS, s_label );
+
+    /* Memo */
+    if( ed->pv != 0 && *ed->pv != '\0' ) {
+        char s_nodes[24];
+        char s_score[16];
+        char s_time[24];
+        char buf[256];
+        int buflen;
+        int time_secs = ed->time / 100;
+        int time_cent = ed->time % 100;
+
+        /* Nodes */
+        if( ed->nodes < 1000000 ) {
+            sprintf( s_nodes, u64Display, ed->nodes );
+        }
+        else {
+            sprintf( s_nodes, "%.1fM", u64ToDouble(ed->nodes) / 1000000.0 );
+        }
+
+        /* Score */
+        if( ed->score > 0 ) {
+            sprintf( s_score, "+%.2f", ed->score / 100.0 );
+        }
+        else {
+            sprintf( s_score, "%.2f", ed->score / 100.0 );
+        }
+
+        /* Time */
+        sprintf( s_time, "%d:%02d.%02d", time_secs / 60, time_secs % 60, time_cent );
+
+        /* Put all together... */
+        sprintf( buf, "%3d\t%s\t%s\t%s\t", ed->depth, s_score, s_nodes, s_time );
+
+        /* Add PV */
+        buflen = strlen(buf);
+
+        strncpy( buf + buflen, ed->pv, sizeof(buf) - buflen );
+
+        buf[ sizeof(buf) - 3 ] = '\0';
+
+        strcat( buf + buflen, "\r\n" );
+
+        /* Update memo */
+        InsertIntoMemo( ed->which, buf );
+    }
+
+    /* Colors */
+    SetEngineColorIcon( ed->which );
+}
+
+// back end
+int EngineOutputIsUp()
+{
+    return engineOutputDialogUp;
+}
+
+// [HGM] kibitz: write kibitz line; split window for it if necessary
+void OutputKibitz(int window, char *text)
+{
+	if(!EngineOutputIsUp()) return;
+	if(!opponentKibitzes) { // on first kibitz of game, clear memos
+	    DoClearMemo(1);
+	    if(gameMode == IcsObserving) DoClearMemo(0);
+	}
+	opponentKibitzes = TRUE; // this causes split window DisplayMode in ICS modes.
+	VerifyDisplayMode();
+	if(gameMode == IcsObserving) {
+	    DoSetWindowText(0, nLabel, gameInfo.white);
+	    SetIcon( 0, nColorIcon,  nColorWhite);
+	    SetIcon( 0, nStateIcon,  nClear);
+	}
+	DoSetWindowText(1, nLabel, gameMode == IcsPlayingBlack ? gameInfo.white : gameInfo.black); // opponent name
+	SetIcon( 1, nColorIcon,  gameMode == IcsPlayingBlack ? nColorWhite : nColorBlack);
+	SetIcon( 1, nStateIcon,  nClear);
+	InsertIntoMemo(window-1, text);
+}
diff --git a/winboard/wevalgraph.c b/winboard/wevalgraph.c
new file mode 100644
index 0000000..3e57bb9
--- /dev/null
+++ b/winboard/wevalgraph.c
@@ -0,0 +1,615 @@
+/*
+ * Evaluation graph
+ *
+ * Author: Alessandro Scotti (Dec 2005)
+ *
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "config.h"
+
+#include <windows.h> /* required for all Windows applications */
+#include <richedit.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <commdlg.h>
+#include <dlgs.h>
+
+#include "common.h"
+#include "winboard.h"
+#include "frontend.h"
+#include "backend.h"
+
+#include "wsnap.h"
+
+VOID EvalGraphSet( int first, int last, int current, ChessProgramStats_Move * pvInfo );
+VOID EvalGraphPopUp();
+VOID EvalGraphPopDown();
+BOOL EvalGraphIsUp();
+
+#define WM_REFRESH_GRAPH    (WM_USER + 1)
+
+/* Imports from backend.c */
+char * SavePart(char *str);
+
+/* Imports from winboard.c */
+extern HWND evalGraphDialog;
+extern BOOLEAN evalGraphDialogUp;
+
+extern HINSTANCE hInst;
+extern HWND hwndMain;
+
+extern WindowPlacement wpEvalGraph;
+
+/* Module globals */
+static ChessProgramStats_Move * currPvInfo;
+static int currFirst = 0;
+static int currLast = 0;
+static int currCurrent = -1;
+
+static COLORREF crWhite = RGB( 0xFF, 0xFF, 0xB0 );
+static COLORREF crBlack = RGB( 0xAD, 0x5D, 0x3D );
+
+static HDC hdcPB = NULL;
+static HBITMAP hbmPB = NULL;
+static int nWidthPB = 0;
+static int nHeightPB = 0;
+static HPEN hpenDotted = NULL;
+static HPEN hpenBlueDotted = NULL;
+static HPEN hpenBold[2] = { NULL, NULL };
+static HBRUSH hbrHist[2] = { NULL, NULL };
+
+static int MarginX = 18;
+static int MarginW = 4;
+static int MarginH = 4;
+
+#define MIN_HIST_WIDTH  4
+#define MAX_HIST_WIDTH  10
+
+static int GetPvScore( int index )
+{
+    int score = currPvInfo[ index ].score;
+
+    if( index & 1 ) score = -score; /* Flip score for black */
+
+    return score;
+}
+
+static VOID DrawLine( int x1, int y1, int x2, int y2 )
+{
+    MoveToEx( hdcPB, x1, y1, NULL );
+
+    LineTo( hdcPB, x2, y2 );
+}
+
+static VOID DrawLineEx( int x1, int y1, int x2, int y2 )
+{
+    POINT stPT;
+
+    MoveToEx( hdcPB, x1, y1, &stPT );
+
+    LineTo( hdcPB, x2, y2 );
+
+    MoveToEx( hdcPB, stPT.x, stPT.y, NULL );
+}
+
+static HBRUSH CreateBrush( UINT style, COLORREF color )
+{
+    LOGBRUSH stLB;
+
+    stLB.lbStyle = style;
+    stLB.lbColor = color;
+    stLB.lbHatch = 0;
+
+    return CreateBrushIndirect( &stLB );
+}
+
+/*
+    For a centipawn value, this function returns the height of the corresponding
+    histogram, centered on the reference axis.
+
+    Note: height can be negative!
+*/
+static int GetValueY( int value )
+{
+    if( value < -700 ) value = -700;
+    if( value > +700 ) value = +700;
+
+    return (nHeightPB / 2) - (int)(value * (nHeightPB - 2*MarginH) / 1400.0);
+}
+
+static VOID DrawAxisSegmentHoriz( int value, BOOL drawValue )
+{
+    int y = GetValueY( value*100 );
+
+    SelectObject( hdcPB, GetStockObject(BLACK_PEN) );
+    DrawLine( MarginX, y, MarginX + MarginW, y );
+    SelectObject( hdcPB, hpenDotted );
+    DrawLine( MarginX + MarginW, y, nWidthPB - MarginW, y );
+
+    if( drawValue ) {
+        SIZE stSize;
+        char buf[MSG_SIZ], *b = buf;
+        int cbBuf;
+
+        if( value > 0 ) *b++ = '+';
+	sprintf(b, "%d", value);
+
+        cbBuf = strlen( buf );
+        GetTextExtentPoint32( hdcPB, buf, cbBuf, &stSize );
+        TextOut( hdcPB, MarginX - stSize.cx - 2, y - stSize.cy / 2, buf, cbBuf );
+    }
+}
+
+static VOID DrawAxis()
+{
+    int cy = nHeightPB / 2;
+    
+    SelectObject( hdcPB, GetStockObject(NULL_BRUSH) );
+
+    SetBkMode( hdcPB, TRANSPARENT );
+
+    DrawAxisSegmentHoriz( +5, TRUE );
+    DrawAxisSegmentHoriz( +3, FALSE );
+    DrawAxisSegmentHoriz( +1, FALSE );
+    DrawAxisSegmentHoriz(  0, TRUE );
+    DrawAxisSegmentHoriz( -1, FALSE );
+    DrawAxisSegmentHoriz( -3, FALSE );
+    DrawAxisSegmentHoriz( -5, TRUE );
+
+    SelectObject( hdcPB, GetStockObject(BLACK_PEN) );
+
+    DrawLine( MarginX + MarginW, cy, nWidthPB - MarginW, cy );
+    DrawLine( MarginX + MarginW, MarginH, MarginX + MarginW, nHeightPB - MarginH );
+}
+
+static VOID DrawHistogram( int x, int y, int width, int value, int side )
+{
+    RECT rc;
+
+    if( value > -25 && value < +25 ) return;
+
+    rc.left = x;
+    rc.right = rc.left + width + 1;
+
+    if( value > 0 ) {
+        rc.top = GetValueY( value );
+        rc.bottom = y+1;
+    }
+    else {
+        rc.top = y;
+        rc.bottom = GetValueY( value ) + 1;
+    }
+
+
+    if( width == MIN_HIST_WIDTH ) {
+        rc.right--;
+        FillRect( hdcPB, &rc, hbrHist[side] );
+    }
+    else {
+        SelectObject( hdcPB, hbrHist[side] );
+        Rectangle( hdcPB, rc.left, rc.top, rc.right, rc.bottom );
+    }
+}
+
+static VOID DrawSeparator( int index, int x )
+{
+    if( index > 0 ) {
+        if( index == currCurrent ) {
+            HPEN hp = SelectObject( hdcPB, hpenBlueDotted );
+            DrawLineEx( x, MarginH, x, nHeightPB - MarginH );
+            SelectObject( hdcPB, hp );
+        }
+        else if( (index % 20) == 0 ) {
+            HPEN hp = SelectObject( hdcPB, hpenDotted );
+            DrawLineEx( x, MarginH, x, nHeightPB - MarginH );
+            SelectObject( hdcPB, hp );
+        }
+    }
+}
+
+/* Actually draw histogram as a diagram, cause there's too much data */
+static VOID DrawHistogramAsDiagram( int cy, int paint_width, int hist_count )
+{
+    double step;
+    int i;
+
+    /* Rescale the graph every few moves (as opposed to every move) */
+    hist_count -= hist_count % 8;
+    hist_count += 8;
+    hist_count /= 2;
+
+    step = (double) paint_width / (hist_count + 1);
+
+    for( i=0; i<2; i++ ) {
+        int index = currFirst;
+        int side = (currCurrent + i + 1) & 1; /* Draw current side last */
+        double x = MarginX + MarginW;
+
+        if( (index & 1) != side ) {
+            x += step / 2;
+            index++;
+        }
+
+        SelectObject( hdcPB, hpenBold[side] );
+
+        MoveToEx( hdcPB, (int) x, cy, NULL );
+
+        index += 2;
+
+        while( index < currLast ) {
+            x += step;
+
+            DrawSeparator( index, (int) x );
+
+            /* Extend line up to current point */
+            if( currPvInfo[index].depth > 0 ) {
+                LineTo( hdcPB, (int) x, GetValueY( GetPvScore(index) ) );
+            }
+
+            index += 2;
+        }
+    }
+}
+
+static VOID DrawHistogramFull( int cy, int hist_width, int hist_count )
+{
+    int i;
+
+    SelectObject( hdcPB, GetStockObject(BLACK_PEN) );
+
+    for( i=0; i<hist_count; i++ ) {
+        int index = currFirst + i;
+        int x = MarginX + MarginW + index * hist_width;
+
+        /* Draw a separator every 10 moves */
+        DrawSeparator( index, x );
+
+        /* Draw histogram */
+        if( currPvInfo[i].depth > 0 ) {
+            DrawHistogram( x, cy, hist_width, GetPvScore(index), index & 1 );
+        }
+    }
+}
+
+typedef struct {
+    int cy;
+    int hist_width;
+    int hist_count;
+    int paint_width;
+} VisualizationData;
+
+static BOOL InitVisualization( VisualizationData * vd )
+{
+    BOOL result = FALSE;
+
+    vd->cy = nHeightPB / 2;
+    vd->hist_width = MIN_HIST_WIDTH;
+    vd->hist_count = currLast - currFirst;
+    vd->paint_width = nWidthPB - MarginX - 2*MarginW;
+
+    if( vd->hist_count > 0 ) {
+        result = TRUE;
+
+        /* Compute width */
+        vd->hist_width = vd->paint_width / vd->hist_count;
+
+        if( vd->hist_width > MAX_HIST_WIDTH ) vd->hist_width = MAX_HIST_WIDTH;
+
+        vd->hist_width -= vd->hist_width % 2;
+    }
+
+    return result;
+}
+
+static VOID DrawHistograms()
+{
+    VisualizationData vd;
+
+    if( InitVisualization( &vd ) ) {
+        if( vd.hist_width < MIN_HIST_WIDTH ) {
+            DrawHistogramAsDiagram( vd.cy, vd.paint_width, vd.hist_count );
+        }
+        else {
+            DrawHistogramFull( vd.cy, vd.hist_width, vd.hist_count );
+        }
+    }
+}
+
+static int GetMoveIndexFromPoint( int x, int y )
+{
+    int result = -1;
+    int start_x = MarginX + MarginW;
+    VisualizationData vd;
+
+    if( x >= start_x && InitVisualization( &vd ) ) {
+        /* Almost an hack here... we duplicate some of the paint logic */
+        if( vd.hist_width < MIN_HIST_WIDTH ) {
+            double step;
+
+            vd.hist_count -= vd.hist_count % 8;
+            vd.hist_count += 8;
+            vd.hist_count /= 2;
+
+            step = (double) vd.paint_width / (vd.hist_count + 1);
+            step /= 2;
+
+            result = (int) (0.5 + (double) (x - start_x) / step);
+        }
+        else {
+            result = (x - start_x) / vd.hist_width;
+        }
+    }
+
+    if( result >= currLast ) {
+        result = -1;
+    }
+
+    return result;
+}
+
+static VOID DrawBackground()
+{
+    HBRUSH hbr;
+    RECT rc;
+
+    hbr = CreateBrush( BS_SOLID, GetSysColor( COLOR_3DFACE ) );
+
+    rc.left = 0;
+    rc.top = 0;
+    rc.right = nWidthPB;
+    rc.bottom = nHeightPB;
+
+    FillRect( hdcPB, &rc, hbr );
+
+    DeleteObject( hbr );
+}
+
+static VOID PaintEvalGraph( HWND hWnd, HDC hDC )
+{
+    RECT rcClient;
+    int width;
+    int height;
+
+    /* Get client area */
+    GetClientRect( hWnd, &rcClient );
+
+    width = rcClient.right - rcClient.left;
+    height = rcClient.bottom - rcClient.top;
+
+    /* Create or recreate paint box if needed */
+    if( hbmPB == NULL || width != nWidthPB || height != nHeightPB ) {
+        if( hpenDotted == NULL ) {
+            hpenDotted = CreatePen( PS_DOT, 0, RGB(0xA0,0xA0,0xA0) );
+            hpenBlueDotted = CreatePen( PS_DOT, 0, RGB(0x00,0x00,0xFF) );
+            hpenBold[0] = CreatePen( PS_SOLID, 2, crWhite );
+            hpenBold[1] = CreatePen( PS_SOLID, 2, crBlack );
+            hbrHist[0] = CreateBrush( BS_SOLID, crWhite );
+            hbrHist[1] = CreateBrush( BS_SOLID, crBlack );
+        }
+
+        if( hdcPB != NULL ) {
+            DeleteDC( hdcPB );
+            hdcPB = NULL;
+        }
+
+        if( hbmPB != NULL ) {
+            DeleteObject( hbmPB );
+            hbmPB = NULL;
+        }
+
+        hdcPB = CreateCompatibleDC( hDC );
+
+        nWidthPB = width;
+        nHeightPB = height;
+        hbmPB = CreateCompatibleBitmap( hDC, nWidthPB, nHeightPB );
+
+        SelectObject( hdcPB, hbmPB );
+    }
+
+    /* Draw */
+    DrawBackground();
+    DrawAxis();
+    DrawHistograms();
+
+    /* Copy bitmap into destination DC */
+    BitBlt( hDC, 0, 0, width, height, hdcPB, 0, 0, SRCCOPY );
+}
+
+LRESULT CALLBACK EvalGraphProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
+{
+    static SnapData sd;
+
+    PAINTSTRUCT stPS;
+    HDC hDC;
+
+    switch (message) {
+    case WM_INITDIALOG:
+        if( evalGraphDialog == NULL ) {
+            evalGraphDialog = hDlg;
+
+            RestoreWindowPlacement( hDlg, &wpEvalGraph ); /* Restore window placement */
+        }
+
+        return FALSE;
+
+    case WM_COMMAND:
+        switch (LOWORD(wParam)) {
+        case IDOK:
+          EndDialog(hDlg, TRUE);
+          return TRUE;
+
+        case IDCANCEL:
+          EndDialog(hDlg, FALSE);
+          return TRUE;
+
+        default:
+          break;
+        }
+
+        break;
+
+    case WM_ERASEBKGND:
+        return TRUE;
+
+    case WM_PAINT:
+        hDC = BeginPaint( hDlg, &stPS );
+        PaintEvalGraph( hDlg, hDC );
+        EndPaint( hDlg, &stPS );
+        break;
+
+    case WM_REFRESH_GRAPH:
+        hDC = GetDC( hDlg );
+        PaintEvalGraph( hDlg, hDC );
+        ReleaseDC( hDlg, hDC );
+        break;
+
+    case WM_LBUTTONDBLCLK:
+        if( wParam == 0 || wParam == MK_LBUTTON ) {
+            int index = GetMoveIndexFromPoint( LOWORD(lParam), HIWORD(lParam) );
+
+            if( index >= 0 && index < currLast ) {
+                ToNrEvent( index + 1 );
+            }
+        }
+        return TRUE;
+
+    case WM_SIZE:
+        InvalidateRect( hDlg, NULL, FALSE );
+        break;
+
+    case WM_GETMINMAXINFO:
+        {
+            MINMAXINFO * mmi = (MINMAXINFO *) lParam;
+        
+            mmi->ptMinTrackSize.x = 100;
+            mmi->ptMinTrackSize.y = 100;
+        }
+        break;
+
+    /* Support for captionless window */
+#if 0
+    case WM_NCLBUTTONDBLCLK:
+        if( wParam == HTCAPTION ) {
+            int index;
+            POINT mouse_xy;
+            POINTS pts = MAKEPOINTS(lParam);
+
+            mouse_xy.x = pts.x;
+            mouse_xy.y = pts.y;
+            ScreenToClient( hDlg, &mouse_xy );
+
+            index = GetMoveIndexFromPoint( mouse_xy.x, mouse_xy.y );
+
+            if( index >= 0 && index < currLast ) {
+                ToNrEvent( index + 1 );
+            }
+        }
+        break;
+
+    case WM_NCHITTEST:
+        {
+            LRESULT res = DefWindowProc( hDlg, message, wParam, lParam );
+
+            if( res == HTCLIENT ) res = HTCAPTION;
+
+            SetWindowLong( hDlg, DWL_MSGRESULT, res );
+
+            return TRUE;
+        }
+        break;
+#endif
+
+    case WM_CLOSE:
+        EvalGraphPopDown();
+        break;
+
+    case WM_ENTERSIZEMOVE:
+        return OnEnterSizeMove( &sd, hDlg, wParam, lParam );
+
+    case WM_SIZING:
+        return OnSizing( &sd, hDlg, wParam, lParam );
+
+    case WM_MOVING:
+        return OnMoving( &sd, hDlg, wParam, lParam );
+
+    case WM_EXITSIZEMOVE:
+        return OnExitSizeMove( &sd, hDlg, wParam, lParam );
+    }
+
+    return FALSE;
+}
+
+VOID EvalGraphPopUp()
+{
+  FARPROC lpProc;
+  
+  CheckMenuItem(GetMenu(hwndMain), IDM_ShowEvalGraph, MF_CHECKED);
+
+  if( evalGraphDialog ) {
+    SendMessage( evalGraphDialog, WM_INITDIALOG, 0, 0 );
+
+    if( ! evalGraphDialogUp ) {
+        ShowWindow(evalGraphDialog, SW_SHOW);
+    }
+  }
+  else {
+    crWhite = appData.evalHistColorWhite;
+    crBlack = appData.evalHistColorBlack;
+
+    lpProc = MakeProcInstance( (FARPROC) EvalGraphProc, hInst );
+
+    /* Note to self: dialog must have the WS_VISIBLE style set, otherwise it's not shown! */
+    CreateDialog( hInst, MAKEINTRESOURCE(DLG_EvalGraph), hwndMain, (DLGPROC)lpProc );
+
+    FreeProcInstance(lpProc);
+  }
+
+  evalGraphDialogUp = TRUE;
+}
+
+VOID EvalGraphPopDown()
+{
+  CheckMenuItem(GetMenu(hwndMain), IDM_ShowEvalGraph, MF_UNCHECKED);
+
+  if( evalGraphDialog ) {
+      ShowWindow(evalGraphDialog, SW_HIDE);
+  }
+
+  evalGraphDialogUp = FALSE;
+}
+
+VOID EvalGraphSet( int first, int last, int current, ChessProgramStats_Move * pvInfo )
+{
+    /* [AS] Danger! For now we rely on the pvInfo parameter being a static variable! */
+
+    currFirst = first;
+    currLast = last;
+    currCurrent = current;
+    currPvInfo = pvInfo;
+
+    if( evalGraphDialog ) {
+        SendMessage( evalGraphDialog, WM_REFRESH_GRAPH, 0, 0 );
+    }
+}
+
+BOOL EvalGraphIsUp()
+{
+    return evalGraphDialogUp;
+}
diff --git a/winboard/wgamelist.c b/winboard/wgamelist.c
index c018718..1c8a15d 100644
--- a/winboard/wgamelist.c
+++ b/winboard/wgamelist.c
@@ -2,24 +2,25 @@
  * wgamelist.c -- Game list window for WinBoard
  * $Id: wgamelist.c,v 2.1 2003/10/27 19:21:02 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include "config.h"
 
@@ -37,6 +38,9 @@
 #include "frontend.h"
 #include "backend.h"
 
+#include "wsnap.h"
+#include "wgamelist.h"
+
 /* Module globals */
 HWND gameListDialog = NULL;
 BOOLEAN gameListUp = FALSE;
@@ -48,33 +52,185 @@ int gameListX, gameListY, gameListW, gameListH;
 extern HINSTANCE hInst;
 extern HWND hwndMain;
 
+struct GameListStats
+{
+    int white_wins;
+    int black_wins;
+    int drawn;
+    int unfinished;
+};
+
+/* [AS] Wildcard pattern matching */
+static BOOL HasPattern( const char * text, const char * pattern )
+{
+    while( *pattern != '\0' ) {
+        if( *pattern == '*' ) {
+            while( *pattern == '*' ) {
+                pattern++;
+            }
+
+            if( *pattern == '\0' ) {
+                return TRUE;
+            }
+
+            while( *text != '\0' ) {
+                if( HasPattern( text, pattern ) ) {
+                    return TRUE;
+                }
+                text++;
+            }
+        }
+        else if( (*pattern == *text) || ((*pattern == '?') && (*text != '\0')) ) {
+            pattern++;
+            text++;
+            continue;
+        }
+
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+static BOOL SearchPattern( const char * text, const char * pattern )
+{
+    BOOL result = TRUE;
+
+    if( pattern != NULL && *pattern != '\0' ) {
+        if( *pattern == '*' ) {
+            result = HasPattern( text, pattern );
+        }
+        else {
+            result = FALSE;
+
+            while( *text != '\0' ) {
+                if( HasPattern( text, pattern ) ) {
+                    result = TRUE;
+                    break;
+                }
+                text++;
+            }
+        }
+    }
+
+    return result;
+}
+
+/* [AS] Setup the game list according to the specified filter */
+static int GameListToListBox( HWND hDlg, BOOL boReset, char * pszFilter, struct GameListStats * stats )
+{
+    ListGame * lg = (ListGame *) gameList.head;
+    int nItem;
+    BOOL hasFilter = FALSE;
+    int count = 0;
+    struct GameListStats dummy;
+
+    /* Initialize stats (use a dummy variable if caller not interested in them) */
+    if( stats == NULL ) { 
+        stats = &dummy;
+    }
+
+    stats->white_wins = 0;
+    stats->black_wins = 0;
+    stats->drawn = 0;
+    stats->unfinished = 0;
+
+    if( boReset ) {
+        SendDlgItemMessage(hDlg, OPT_GameListText, LB_RESETCONTENT, 0, 0);
+    }
+
+    if( pszFilter != NULL ) {
+        if( strlen( pszFilter ) > 0 ) {
+            hasFilter = TRUE;
+        }
+    }
+
+    for (nItem = 0; nItem < ((ListGame *) gameList.tailPred)->number; nItem++){
+        char * st = GameListLine(lg->number, &lg->gameInfo);
+        BOOL skip = FALSE;
+
+        if( hasFilter ) {
+            if( ! SearchPattern( st, pszFilter ) ) {
+                skip = TRUE;
+            }
+        }
+
+        if( ! skip ) {
+            SendDlgItemMessage(hDlg, OPT_GameListText, LB_ADDSTRING, 0, (LPARAM) st);
+            count++;
+
+            /* Update stats */
+            if( lg->gameInfo.result == WhiteWins )
+                stats->white_wins++;
+            else if( lg->gameInfo.result == BlackWins )
+                stats->black_wins++;
+            else if( lg->gameInfo.result == GameIsDrawn )
+                stats->drawn++;
+            else
+                stats->unfinished++;
+        }
+
+        free(st);
+        lg = (ListGame *) lg->node.succ;
+    }
+
+    SendDlgItemMessage(hDlg, OPT_GameListText, LB_SETCURSEL, 0, 0);
+
+    return count;
+}
+
+/* [AS] Show number of visible (filtered) games and total on window caption */
+static int GameListUpdateTitle( HWND hDlg, char * pszTitle, int item_count, int item_total, struct GameListStats * stats )
+{
+    char buf[256];
+
+    sprintf( buf, "%s - %d/%d games", pszTitle, item_count, item_total );
+
+    if( stats != 0 ) {
+        sprintf( buf+strlen(buf), " (%d-%d-%d)", stats->white_wins, stats->black_wins, stats->drawn );
+    }
+
+    SetWindowText( hDlg, buf );
+
+    return 0;
+}
+
+#define MAX_FILTER_LENGTH   128
 
 LRESULT CALLBACK
 GameListDialog(HWND hDlg, UINT message,	WPARAM wParam, LPARAM lParam)
 {
+  static char szDlgTitle[64];
   static HANDLE hwndText;
   int nItem;
-  ListGame *lg;
   RECT rect;
   static int sizeX, sizeY;
   int newSizeX, newSizeY, flags;
   MINMAXINFO *mmi;
+  static BOOL filterHasFocus = FALSE;
+  int count;
+  struct GameListStats stats;
+  static SnapData sd;
 
   switch (message) {
   case WM_INITDIALOG: 
+    GetWindowText( hDlg, szDlgTitle, sizeof(szDlgTitle) );
+    szDlgTitle[ sizeof(szDlgTitle)-1 ] = '\0';
+
     if (gameListDialog) {
       SendDlgItemMessage(hDlg, OPT_GameListText, LB_RESETCONTENT, 0, 0);
     }
+
     /* Initialize the dialog items */
     hwndText = GetDlgItem(hDlg, OPT_TagsText);
-    lg = (ListGame *) gameList.head;
-    for (nItem = 0; nItem < ((ListGame *) gameList.tailPred)->number; nItem++){
-      char *st = GameListLine(lg->number, &lg->gameInfo);
-      SendDlgItemMessage(hDlg, OPT_GameListText, LB_ADDSTRING, 0, (LPARAM) st);
-      free(st);
-      lg = (ListGame *) lg->node.succ;
-    }
-    SendDlgItemMessage(hDlg, OPT_GameListText, LB_SETCURSEL, 0, 0);
+
+    count = GameListToListBox( hDlg, gameListDialog ? TRUE : FALSE, NULL, &stats );
+
+    SendDlgItemMessage( hDlg, IDC_GameListFilter, WM_SETTEXT, 0, (LPARAM) "" );
+    SendDlgItemMessage( hDlg, IDC_GameListFilter, EM_SETLIMITTEXT, MAX_FILTER_LENGTH, 0 );
+
+    filterHasFocus = FALSE;
+
     /* Size and position the dialog */
     if (!gameListDialog) {
       gameListDialog = hDlg;
@@ -104,6 +260,8 @@ GameListDialog(HWND hDlg, UINT message,	WPARAM wParam, LPARAM lParam)
 	sizeX = newSizeX;
 	sizeY = newSizeY;
       }
+
+      GameListUpdateTitle( hDlg, szDlgTitle, count, ((ListGame *) gameList.tailPred)->number, &stats );
     }
     return FALSE;
     
@@ -116,6 +274,18 @@ GameListDialog(HWND hDlg, UINT message,	WPARAM wParam, LPARAM lParam)
     sizeY = newSizeY;
     break;
 
+  case WM_ENTERSIZEMOVE:
+    return OnEnterSizeMove( &sd, hDlg, wParam, lParam );
+
+  case WM_SIZING:
+    return OnSizing( &sd, hDlg, wParam, lParam );
+
+  case WM_MOVING:
+    return OnMoving( &sd, hDlg, wParam, lParam );
+
+  case WM_EXITSIZEMOVE:
+    return OnExitSizeMove( &sd, hDlg, wParam, lParam );
+  
   case WM_GETMINMAXINFO:
     /* Prevent resizing window too small */
     mmi = (MINMAXINFO *) lParam;
@@ -124,6 +294,27 @@ GameListDialog(HWND hDlg, UINT message,	WPARAM wParam, LPARAM lParam)
     break;
 
   case WM_COMMAND:
+      /* 
+        [AS]
+        If <Enter> is pressed while editing the filter, it's better to apply
+        the filter rather than selecting the current game.
+      */
+      if( LOWORD(wParam) == IDC_GameListFilter ) {
+          switch( HIWORD(wParam) ) {
+          case EN_SETFOCUS:
+              filterHasFocus = TRUE;
+              break;
+          case EN_KILLFOCUS:
+              filterHasFocus = FALSE;
+              break;
+          }
+      }
+
+      if( filterHasFocus && (LOWORD(wParam) == IDOK) ) {
+          wParam = IDC_GameListDoFilter;
+      }
+      /* [AS] End command replacement */
+
     switch (LOWORD(wParam)) {
     case IDOK:
     case OPT_GameListLoad:
@@ -139,7 +330,8 @@ GameListDialog(HWND hDlg, UINT message,	WPARAM wParam, LPARAM lParam)
       nItem = SendDlgItemMessage(hDlg, OPT_GameListText, LB_GETCURSEL, 0, 0);
       nItem++;
       if (nItem >= ((ListGame *) gameList.tailPred)->number) {
-	DisplayError("Can't go forward any further", 0);
+        /* [AS] Removed error message */
+	/* DisplayError("Can't go forward any further", 0); */
 	return TRUE;
       }
       SendDlgItemMessage(hDlg, OPT_GameListText, LB_SETCURSEL, nItem, 0);
@@ -149,11 +341,27 @@ GameListDialog(HWND hDlg, UINT message,	WPARAM wParam, LPARAM lParam)
       nItem = SendDlgItemMessage(hDlg, OPT_GameListText, LB_GETCURSEL, 0, 0);
       nItem--;
       if (nItem < 0) {
-	DisplayError("Can't back up any further", 0);
+        /* [AS] Removed error message, added return */
+	/* DisplayError("Can't back up any further", 0); */
+        return TRUE;
       }
       SendDlgItemMessage(hDlg, OPT_GameListText, LB_SETCURSEL, nItem, 0);
       break; /* load the game*/
-      
+
+    /* [AS] */
+    case IDC_GameListDoFilter:
+        {
+            char filter[MAX_FILTER_LENGTH+1];
+            
+            if( GetDlgItemText( hDlg, IDC_GameListFilter, filter, sizeof(filter) ) >= 0 ) {
+                filter[ sizeof(filter)-1 ] = '\0';
+                count = GameListToListBox( hDlg, TRUE, filter, &stats );
+                GameListUpdateTitle( hDlg, szDlgTitle, count, ((ListGame *) gameList.tailPred)->number, &stats );
+            }
+        }
+        return FALSE;
+        break;
+
     case IDCANCEL:
     case OPT_GameListClose:
       GameListPopDown();
@@ -169,16 +377,47 @@ GameListDialog(HWND hDlg, UINT message,	WPARAM wParam, LPARAM lParam)
 	return FALSE;
       }
       break;
-      
+
     default:
       return FALSE;
     }
+
     /* Load the game */
-    if (cmailMsgLoaded) {
-      CmailLoadGame(gameFile, nItem + 1, gameFileName, TRUE);
-    } else {
-      LoadGame(gameFile, nItem + 1, gameFileName, TRUE);
+    {
+        /* [AS] Get index from the item itself, because filtering makes original order unuseable. */
+        int index = SendDlgItemMessage(hDlg, OPT_GameListText, LB_GETCURSEL, 0, 0);
+        char * text;
+        LRESULT res;
+
+        if( index < 0 ) {
+            return TRUE;
+        }
+
+        res = SendDlgItemMessage( hDlg, OPT_GameListText, LB_GETTEXTLEN, index, 0 );
+
+        if( res == LB_ERR ) {
+            return TRUE;
+        }
+
+        text = (char *) malloc( res+1 );
+
+        res = SendDlgItemMessage( hDlg, OPT_GameListText, LB_GETTEXT, index, (LPARAM)text );
+
+        index = atoi( text );
+
+        nItem = index - 1;
+
+        free( text );
+        /* [AS] End: nItem has been "patched" now! */
+
+        if (cmailMsgLoaded) {
+            CmailLoadGame(gameFile, nItem + 1, gameFileName, TRUE);
+        }
+        else {
+            LoadGame(gameFile, nItem + 1, gameFileName, TRUE);
+        }
     }
+
     return TRUE;
 
   default:
@@ -247,3 +486,56 @@ VOID ShowGameListProc()
     }
   }
 }
+
+HGLOBAL ExportGameListAsText()
+{
+    HGLOBAL result = NULL;
+    LPVOID lpMem = NULL;
+    ListGame * lg = (ListGame *) gameList.head;
+    int nItem;
+    DWORD dwLen = 0;
+
+    if( ! gameFileName || ((ListGame *) gameList.tailPred)->number <= 0 ) {
+        DisplayError("Game list not loaded or empty", 0);
+        return NULL;
+    }
+
+    /* Get list size */
+    for (nItem = 0; nItem < ((ListGame *) gameList.tailPred)->number; nItem++){
+        char * st = GameListLineFull(lg->number, &lg->gameInfo);
+
+        dwLen += strlen(st) + 2; /* Add extra characters for "\r\n" */
+
+        free(st);
+        lg = (ListGame *) lg->node.succ;
+    }
+
+    /* Allocate memory for the list */
+    result = GlobalAlloc(GHND, dwLen+1 );
+
+    if( result != NULL ) {
+        lpMem = GlobalLock(result);
+    }
+
+    /* Copy the list into the global memory block */
+    if( lpMem != NULL ) {
+        char * dst = (char *) lpMem;
+        size_t len;
+
+        lg = (ListGame *) gameList.head;
+
+        for (nItem = 0; nItem < ((ListGame *) gameList.tailPred)->number; nItem++){
+            char * st = GameListLineFull(lg->number, &lg->gameInfo);
+
+            len = sprintf( dst, "%s\r\n", st );
+            dst += len;
+
+            free(st);
+            lg = (ListGame *) lg->node.succ;
+        }
+
+        GlobalUnlock( result );
+    }
+
+    return result;
+}
diff --git a/winboard/wgamelist.h b/winboard/wgamelist.h
index e4895bf..6b3926a 100644
--- a/winboard/wgamelist.h
+++ b/winboard/wgamelist.h
@@ -2,24 +2,25 @@
  * wgamelist.h -- Game list window for WinBoard
  * $Id: wgamelist.h,v 2.1 2003/10/27 19:21:02 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 VOID ShowGameListProc(void);
 extern HWND gameListDialog;
diff --git a/winboard/whistory.c b/winboard/whistory.c
new file mode 100644
index 0000000..497fa17
--- /dev/null
+++ b/winboard/whistory.c
@@ -0,0 +1,474 @@
+/*
+ * Move history for WinBoard
+ *
+ * Author: Alessandro Scotti (Dec 2005)
+ *
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/. 
+ *
+ * ------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "config.h"
+
+#include <windows.h> /* required for all Windows applications */
+#include <richedit.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <commdlg.h>
+#include <dlgs.h>
+
+#include "common.h"
+#include "winboard.h"
+#include "frontend.h"
+#include "backend.h"
+
+#include "wsnap.h"
+
+VOID MoveHistorySet( char movelist[][2*MOVE_LEN], int first, int last, int current, ChessProgramStats_Move * pvInfo );
+VOID MoveHistoryPopUp();
+VOID MoveHistoryPopDown();
+BOOL MoveHistoryIsUp();
+
+/* Imports from backend.c */
+char * SavePart(char *str);
+
+/* Imports from winboard.c */
+extern HWND moveHistoryDialog;
+extern BOOLEAN moveHistoryDialogUp;
+
+extern HINSTANCE hInst;
+extern HWND hwndMain;
+
+extern WindowPlacement wpMoveHistory;
+
+extern BoardSize boardSize;
+
+/* Module globals */
+typedef char MoveHistoryString[ MOVE_LEN*2 ];
+
+static int lastFirst = 0;
+static int lastLast = 0;
+static int lastCurrent = -1;
+
+static char lastLastMove[ MOVE_LEN ];
+
+static MoveHistoryString * currMovelist;
+static ChessProgramStats_Move * currPvInfo;
+static int currFirst = 0;
+static int currLast = 0;
+static int currCurrent = -1;
+
+typedef struct {
+    int memoOffset;
+    int memoLength;
+} HistoryMove;
+
+static HistoryMove histMoves[ MAX_MOVES ];
+
+#define WM_REFRESH_HISTORY  (WM_USER+4657)
+
+#define DEFAULT_COLOR       0xFFFFFFFF
+
+#define H_MARGIN            2
+#define V_MARGIN            2
+
+/* Note: in the following code a "Memo" is a Rich Edit control (it's Delphi lingo) */
+
+static VOID HighlightMove( int index, BOOL highlight )
+{
+    if( index >= 0 && index < MAX_MOVES ) {
+        CHARFORMAT cf;
+        HWND hMemo = GetDlgItem( moveHistoryDialog, IDC_MoveHistory );
+
+        SendMessage( hMemo, 
+            EM_SETSEL, 
+            histMoves[index].memoOffset, 
+            histMoves[index].memoOffset + histMoves[index].memoLength );
+
+
+        /* Set style */
+        ZeroMemory( &cf, sizeof(cf) );
+
+        cf.cbSize = sizeof(cf);
+        cf.dwMask = CFM_BOLD | CFM_COLOR;
+
+        if( highlight ) {
+            cf.dwEffects |= CFE_BOLD;
+            cf.crTextColor = RGB( 0x00, 0x00, 0xFF );
+        }
+        else {
+            cf.dwEffects |= CFE_AUTOCOLOR;
+        }
+
+        SendMessage( hMemo, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf );
+    }
+}
+
+static BOOL OnlyCurrentPositionChanged()
+{
+    BOOL result = FALSE;
+
+    if( lastFirst >= 0 &&
+        lastLast >= lastFirst &&
+        lastCurrent >= lastFirst && 
+        currFirst == lastFirst &&
+        currLast == lastLast &&
+        currCurrent >= 0 &&
+        TRUE )
+    {
+        result = TRUE;
+
+        /* Special case: last move changed */
+        if( currCurrent == currLast-1 ) {
+            if( strcmp( currMovelist[currCurrent], lastLastMove ) != 0 ) {
+                result = FALSE;
+            }
+        }
+    }
+
+    return result;
+}
+
+static BOOL OneMoveAppended()
+{
+    BOOL result = FALSE;
+
+    if( lastCurrent >= 0 && lastCurrent >= lastFirst && lastLast >= lastFirst &&
+        currCurrent >= 0 && currCurrent >= currFirst && currLast >= currFirst &&
+        lastFirst == currFirst &&
+        lastLast == (currLast-1) &&
+        lastCurrent == (currCurrent-1) &&
+        currCurrent == (currLast-1) &&
+        TRUE )
+    {
+        result = TRUE;
+    }
+
+    return result;
+}
+
+static VOID ClearMemo()
+{
+    SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, WM_SETTEXT, 0, (LPARAM) "" );
+}
+
+static int AppendToMemo( char * text, DWORD flags, DWORD color )
+{
+    CHARFORMAT cf;
+
+    HWND hMemo = GetDlgItem( moveHistoryDialog, IDC_MoveHistory );
+
+    /* Select end of text */
+    int cbTextLen = (int) SendMessage( hMemo, WM_GETTEXTLENGTH, 0, 0 );
+
+    SendMessage( hMemo, EM_SETSEL, cbTextLen, cbTextLen );
+
+    /* Set style */
+    ZeroMemory( &cf, sizeof(cf) );
+
+    cf.cbSize = sizeof(cf);
+    cf.dwMask = CFM_BOLD | CFM_ITALIC | CFM_COLOR | CFM_UNDERLINE;
+    cf.dwEffects = flags;
+
+    if( color != DEFAULT_COLOR ) {
+        cf.crTextColor = color;
+    }
+    else {
+        cf.dwEffects |= CFE_AUTOCOLOR;
+    }
+
+    SendMessage( hMemo, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf );
+
+    /* Append text */
+    SendMessage( hMemo, EM_REPLACESEL, (WPARAM) FALSE, (LPARAM) text );
+
+    /* Return offset of appended text */
+    return cbTextLen;
+}
+
+static VOID AppendMoveToMemo( int index )
+{
+    char buf[64];
+    DWORD flags = 0;
+    DWORD color = DEFAULT_COLOR;
+
+    if( index < 0 || index >= MAX_MOVES ) {
+        return;
+    }
+
+    buf[0] = '\0';
+
+    /* Move number */
+    if( (index % 2) == 0 ) {
+        sprintf( buf, "%d.%s ", (index / 2)+1, index & 1 ? ".." : "" );
+        AppendToMemo( buf, CFE_BOLD, DEFAULT_COLOR );
+    }
+
+    /* Move text */
+    strcpy( buf, SavePart( currMovelist[index] ) );
+    strcat( buf, " " );
+
+    histMoves[index].memoOffset = AppendToMemo( buf, flags, color );
+    histMoves[index].memoLength = strlen(buf)-1;
+
+    /* PV info (if any) */
+    if( appData.showEvalInMoveHistory && currPvInfo[index].depth > 0 ) {
+        sprintf( buf, "{%s%.2f/%d} ", 
+            currPvInfo[index].score >= 0 ? "+" : "",
+            currPvInfo[index].score / 100.0,
+            currPvInfo[index].depth );
+
+        AppendToMemo( buf, flags, 
+            color == DEFAULT_COLOR ? GetSysColor(COLOR_GRAYTEXT) : color );
+    }
+}
+
+static void RefreshMemoContent()
+{
+    int i;
+
+    ClearMemo();
+
+    for( i=currFirst; i<currLast; i++ ) {
+        AppendMoveToMemo( i );
+    }
+}
+
+static void MemoContentUpdated()
+{
+    int caretPos;
+
+    HighlightMove( lastCurrent, FALSE );
+    HighlightMove( currCurrent, TRUE );
+
+    lastFirst = currFirst;
+    lastLast = currLast;
+    lastCurrent = currCurrent;
+    lastLastMove[0] = '\0';
+
+    if( lastLast > 0 ) {
+        strcpy( lastLastMove, SavePart( currMovelist[lastLast-1] ) );
+    }
+
+    /* Deselect any text, move caret to end of memo */
+    if( currCurrent >= 0 ) {
+        caretPos = histMoves[currCurrent].memoOffset + histMoves[currCurrent].memoLength;
+    }
+    else {
+        caretPos = (int) SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, WM_GETTEXTLENGTH, 0, 0 );
+    }
+
+    SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, EM_SETSEL, caretPos, caretPos );
+
+    SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, EM_SCROLLCARET, 0, 0 );
+}
+
+int FindMoveByCharIndex( int char_index )
+{
+    int index;
+
+    for( index=currFirst; index<currLast; index++ ) {
+        if( char_index >= histMoves[index].memoOffset &&
+            char_index <  (histMoves[index].memoOffset + histMoves[index].memoLength) )
+        {
+            return index;
+        }
+    }
+
+    return -1;
+}
+
+LRESULT CALLBACK HistoryDialogProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
+{
+    static SnapData sd;
+
+    switch (message) {
+    case WM_INITDIALOG:
+        if( moveHistoryDialog == NULL ) {
+            moveHistoryDialog = hDlg;
+
+            /* Enable word wrapping and notifications */
+            SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, EM_SETTARGETDEVICE, 0, 0 );
+
+            SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS );
+
+            /* Set font */
+	    SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, WM_SETFONT, (WPARAM)font[boardSize][MOVEHISTORY_FONT]->hf, MAKELPARAM(TRUE, 0 ));
+
+            /* Restore window placement */
+            RestoreWindowPlacement( hDlg, &wpMoveHistory );
+        }
+
+        /* Update memo */
+        RefreshMemoContent();
+
+        MemoContentUpdated();
+
+        return FALSE;
+
+    case WM_COMMAND:
+        switch (LOWORD(wParam)) {
+        case IDOK:
+          EndDialog(hDlg, TRUE);
+          return TRUE;
+
+        case IDCANCEL:
+          EndDialog(hDlg, FALSE);
+          return TRUE;
+
+        default:
+          break;
+        }
+
+        break;
+
+    case WM_NOTIFY:
+        if( wParam == IDC_MoveHistory ) {
+            MSGFILTER * lpMF = (MSGFILTER *) lParam;
+
+            if( lpMF->msg == WM_LBUTTONDBLCLK && (lpMF->wParam & (MK_CONTROL | MK_SHIFT)) == 0 ) {
+                POINTL pt;
+                LRESULT index;
+
+                pt.x = LOWORD( lpMF->lParam );
+                pt.y = HIWORD( lpMF->lParam );
+
+                index = SendDlgItemMessage( hDlg, IDC_MoveHistory, EM_CHARFROMPOS, 0, (LPARAM) &pt );
+
+                index = FindMoveByCharIndex( index );
+
+                if( index >= 0 ) {
+                    ToNrEvent( index + 1 );
+                }
+
+                /* Zap the message for good: apparently, returning non-zero is not enough */
+                lpMF->msg = WM_USER;
+
+                return TRUE;
+            }
+        }
+        break;
+
+    case WM_REFRESH_HISTORY:
+        /* Update the GUI */
+        if( OnlyCurrentPositionChanged() ) {
+            /* Only "cursor" changed, no need to update memo content */
+        }
+        else if( OneMoveAppended() ) {
+            AppendMoveToMemo( currCurrent );
+        }
+        else {
+            RefreshMemoContent();
+        }
+
+        MemoContentUpdated();
+
+        break;
+
+    case WM_SIZE:
+        SetWindowPos( GetDlgItem( moveHistoryDialog, IDC_MoveHistory ),
+            HWND_TOP,
+            H_MARGIN, V_MARGIN,
+            LOWORD(lParam) - 2*H_MARGIN,
+            HIWORD(lParam) - 2*V_MARGIN,
+            SWP_NOZORDER );
+        break;
+
+    case WM_GETMINMAXINFO:
+        {
+            MINMAXINFO * mmi = (MINMAXINFO *) lParam;
+        
+            mmi->ptMinTrackSize.x = 100;
+            mmi->ptMinTrackSize.y = 100;
+        }
+        break;
+
+    case WM_CLOSE:
+        MoveHistoryPopDown();
+        break;
+
+    case WM_ENTERSIZEMOVE:
+        return OnEnterSizeMove( &sd, hDlg, wParam, lParam );
+
+    case WM_SIZING:
+        return OnSizing( &sd, hDlg, wParam, lParam );
+
+    case WM_MOVING:
+        return OnMoving( &sd, hDlg, wParam, lParam );
+
+    case WM_EXITSIZEMOVE:
+        return OnExitSizeMove( &sd, hDlg, wParam, lParam );
+    }
+
+    return FALSE;
+}
+
+VOID MoveHistoryPopUp()
+{
+  FARPROC lpProc;
+  
+  CheckMenuItem(GetMenu(hwndMain), IDM_ShowMoveHistory, MF_CHECKED);
+
+  if( moveHistoryDialog ) {
+    SendMessage( moveHistoryDialog, WM_INITDIALOG, 0, 0 );
+
+    if( ! moveHistoryDialogUp ) {
+        ShowWindow(moveHistoryDialog, SW_SHOW);
+    }
+  }
+  else {
+    lpProc = MakeProcInstance( (FARPROC) HistoryDialogProc, hInst );
+
+    /* Note to self: dialog must have the WS_VISIBLE style set, otherwise it's not shown! */
+    CreateDialog( hInst, MAKEINTRESOURCE(DLG_MoveHistory), hwndMain, (DLGPROC)lpProc );
+
+    FreeProcInstance(lpProc);
+  }
+
+  moveHistoryDialogUp = TRUE;
+}
+
+VOID MoveHistoryPopDown()
+{
+  CheckMenuItem(GetMenu(hwndMain), IDM_ShowMoveHistory, MF_UNCHECKED);
+
+  if( moveHistoryDialog ) {
+      ShowWindow(moveHistoryDialog, SW_HIDE);
+  }
+
+  moveHistoryDialogUp = FALSE;
+}
+
+VOID MoveHistorySet( char movelist[][2*MOVE_LEN], int first, int last, int current, ChessProgramStats_Move * pvInfo )
+{
+    /* [AS] Danger! For now we rely on the movelist parameter being a static variable! */
+
+    currMovelist = movelist;
+    currFirst = first;
+    currLast = last;
+    currCurrent = current;
+    currPvInfo = pvInfo;
+
+    if( moveHistoryDialog ) {
+        SendMessage( moveHistoryDialog, WM_REFRESH_HISTORY, 0, 0 );
+    }
+}
+
+BOOL MoveHistoryIsUp()
+{
+    return moveHistoryDialogUp;
+}
diff --git a/winboard/winboard.c b/winboard/winboard.c
index 85a8cf6..fb317b7 100644
--- a/winboard/winboard.c
+++ b/winboard/winboard.c
@@ -1,9 +1,11 @@
-/* 
+/*
  * WinBoard.c -- Windows NT front end to XBoard
  * $Id: winboard.c,v 2.3 2003/11/25 05:25:20 mann Exp $
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-2001 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * XBoard borrows its colors and the bitmaps.xchess bitmap set from XChess,
  * which was written and is copyrighted by Wayne Christopher.
@@ -30,33 +32,36 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include "config.h"
 
 #include <windows.h>
 #include <winuser.h>
 #include <winsock.h>
+#include <commctrl.h>
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <time.h>
 #include <malloc.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -65,6 +70,7 @@
 #include <dlgs.h>
 #include <richedit.h>
 #include <mmsystem.h>
+#include <ctype.h>
 
 #if __GNUC__
 #include <errno.h>
@@ -83,6 +89,22 @@
 #include "wsockerr.h"
 #include "defaults.h"
 
+#include "wsnap.h"
+
+//void InitEngineUCI( const char * iniDir, ChessProgramState * cps );
+
+  int myrandom(void);
+  void mysrandom(unsigned int seed);
+
+extern int whiteFlag, blackFlag;
+Boolean flipClock = FALSE;
+
+void DisplayHoldingsCount(HDC hdc, int x, int y, int align, int copyNumber);
+VOID NewVariantPopup(HWND hwnd);
+int FinishMove P((ChessMove moveType, int fromX, int fromY, int toX, int toY,
+		   /*char*/int promoChar));
+void AnimateAtomicCapture(int toX, int toY, int nFrames);
+
 typedef struct {
   ChessSquare piece;  
   POINT pos;      /* window coordinates of current pos */
@@ -109,6 +131,12 @@ typedef struct {
 static HighlightInfo highlightInfo        = { {{-1, -1}, {-1, -1}} };
 static HighlightInfo premoveHighlightInfo = { {{-1, -1}, {-1, -1}} };
 
+typedef struct { // [HGM] atomic
+  int x, y, radius;
+} ExplodeInfo;
+
+static ExplodeInfo explodeInfo = {0, 0, 0};
+
 /* Window class names */
 char szAppName[] = "WinBoard";
 char szConsoleName[] = "WBConsole";
@@ -125,9 +153,10 @@ char installDir[MSG_SIZ];
 BoardSize boardSize;
 BOOLEAN chessProgram;
 static int boardX, boardY, consoleX, consoleY, consoleW, consoleH;
-static int squareSize, lineGap;
+static int squareSize, lineGap, minorSize;
 static int winWidth, winHeight;
-static RECT messageRect, whiteRect, blackRect;
+static RECT messageRect, whiteRect, blackRect, leftLogoRect, rightLogoRect; // [HGM] logo
+static int logoHeight = 0;
 static char messageText[MESSAGE_TEXT_MAX];
 static int clockTimerEvent = 0;
 static int loadGameTimerEvent = 0;
@@ -140,7 +169,7 @@ char *icsNames;
 char *firstChessProgramNames;
 char *secondChessProgramNames;
 
-#define ARG_MAX 20000
+#define ARG_MAX 128*1024 /* [AS] For Roger Brown's very long list! */
 
 #define PALETTESIZE 256
 
@@ -156,9 +185,11 @@ ColorClass currentColorClass;
 
 HWND hCommPort = NULL;    /* currently open comm port */
 static HWND hwndPause;    /* pause button */
-static HBITMAP pieceBitmap[3][(int) WhiteKing + 1];
+static HBITMAP pieceBitmap[3][(int) BlackPawn]; /* [HGM] nr of bitmaps referred to bP in stead of wK */
 static HBRUSH lightSquareBrush, darkSquareBrush,
-  whitePieceBrush, blackPieceBrush, iconBkgndBrush, outlineBrush;
+  blackSquareBrush, /* [HGM] for band between board and holdings */
+  explodeBrush,     /* [HGM] atomic */
+  whitePieceBrush, blackPieceBrush, iconBkgndBrush /*, outlineBrush*/;
 static POINT gridEndpoints[(BOARD_SIZE + 1) * 4];
 static DWORD gridVertexCounts[(BOARD_SIZE + 1) * 2];
 static HPEN gridPen = NULL;
@@ -171,6 +202,18 @@ static int doingSizing = FALSE;
 static int lastSizing = 0;
 static int prevStderrPort;
 
+/* [AS] Support for background textures */
+#define BACK_TEXTURE_MODE_DISABLED      0
+#define BACK_TEXTURE_MODE_PLAIN         1
+#define BACK_TEXTURE_MODE_FULL_RANDOM   2
+
+static HBITMAP liteBackTexture = NULL;
+static HBITMAP darkBackTexture = NULL;
+static int liteBackTextureMode = BACK_TEXTURE_MODE_PLAIN;
+static int darkBackTextureMode = BACK_TEXTURE_MODE_PLAIN;
+static int backTextureSquareSize = 0;
+static struct { int x; int y; int mode; } backTextureSquareInfo[BOARD_SIZE][BOARD_SIZE];
+
 #if __GNUC__ && !defined(_winmajor)
 #define oldDialog 0 /* cygwin doesn't define _winmajor; mingw does */
 #else
@@ -216,63 +259,27 @@ SizeInfo sizeInfo[] =
   { NULL, 0, 0, 0, 0, 0, 0 }
 };
 
-#define MF(x) {x, {0, }, {0, }, 0}
+#define MF(x) {x, {{0,}, 0. }, {0, }, 0}
 MyFont fontRec[NUM_SIZES][NUM_FONTS] =
 {
-  { MF(CLOCK_FONT_TINY), MF(MESSAGE_FONT_TINY), 
-    MF(COORD_FONT_TINY), MF(CONSOLE_FONT_TINY),
-    MF(COMMENT_FONT_TINY), MF(EDITTAGS_FONT_TINY) },
-  { MF(CLOCK_FONT_TEENY), MF(MESSAGE_FONT_TEENY), 
-    MF(COORD_FONT_TEENY), MF(CONSOLE_FONT_TEENY),
-    MF(COMMENT_FONT_TEENY), MF(EDITTAGS_FONT_TEENY) },
-  { MF(CLOCK_FONT_DINKY), MF(MESSAGE_FONT_DINKY),
-    MF(COORD_FONT_DINKY), MF(CONSOLE_FONT_DINKY),
-    MF(COMMENT_FONT_DINKY), MF(EDITTAGS_FONT_DINKY) },
-  { MF(CLOCK_FONT_PETITE), MF(MESSAGE_FONT_PETITE),
-    MF(COORD_FONT_PETITE), MF(CONSOLE_FONT_PETITE),
-    MF(COMMENT_FONT_PETITE), MF(EDITTAGS_FONT_PETITE) },
-  { MF(CLOCK_FONT_SLIM), MF(MESSAGE_FONT_SLIM),
-    MF(COORD_FONT_SLIM), MF(CONSOLE_FONT_SLIM),
-    MF(COMMENT_FONT_SLIM), MF(EDITTAGS_FONT_SLIM) },
-  { MF(CLOCK_FONT_SMALL), MF(MESSAGE_FONT_SMALL),
-    MF(COORD_FONT_SMALL), MF(CONSOLE_FONT_SMALL),
-    MF(COMMENT_FONT_SMALL), MF(EDITTAGS_FONT_SMALL) },
-  { MF(CLOCK_FONT_MEDIOCRE), MF(MESSAGE_FONT_MEDIOCRE),
-    MF(COORD_FONT_MEDIOCRE), MF(CONSOLE_FONT_MEDIOCRE),
-    MF(COMMENT_FONT_MEDIOCRE), MF(EDITTAGS_FONT_MEDIOCRE) },
-  { MF(CLOCK_FONT_MIDDLING), MF(MESSAGE_FONT_MIDDLING),
-    MF(COORD_FONT_MIDDLING), MF(CONSOLE_FONT_MIDDLING),
-    MF(COMMENT_FONT_MIDDLING), MF(EDITTAGS_FONT_MIDDLING) },
-  { MF(CLOCK_FONT_AVERAGE), MF(MESSAGE_FONT_AVERAGE),
-    MF(COORD_FONT_AVERAGE), MF(CONSOLE_FONT_AVERAGE),
-    MF(COMMENT_FONT_AVERAGE), MF(EDITTAGS_FONT_AVERAGE) },
-  { MF(CLOCK_FONT_MODERATE), MF(MESSAGE_FONT_MODERATE),
-    MF(COORD_FONT_MODERATE), MF(CONSOLE_FONT_MODERATE),
-    MF(COMMENT_FONT_MODERATE), MF(EDITTAGS_FONT_MODERATE) },
-  { MF(CLOCK_FONT_MEDIUM), MF(MESSAGE_FONT_MEDIUM),
-    MF(COORD_FONT_MEDIUM), MF(CONSOLE_FONT_MEDIUM),
-    MF(COMMENT_FONT_MEDIUM), MF(EDITTAGS_FONT_MEDIUM) },
-  { MF(CLOCK_FONT_BULKY), MF(MESSAGE_FONT_BULKY),
-    MF(COORD_FONT_BULKY), MF(CONSOLE_FONT_BULKY),
-    MF(COMMENT_FONT_BULKY), MF(EDITTAGS_FONT_BULKY) },
-  { MF(CLOCK_FONT_LARGE), MF(MESSAGE_FONT_LARGE),
-    MF(COORD_FONT_LARGE), MF(CONSOLE_FONT_LARGE),
-    MF(COMMENT_FONT_LARGE), MF(EDITTAGS_FONT_LARGE) },
-  { MF(CLOCK_FONT_BIG), MF(MESSAGE_FONT_BIG),
-    MF(COORD_FONT_BIG), MF(CONSOLE_FONT_BIG),
-    MF(COMMENT_FONT_BIG), MF(EDITTAGS_FONT_BIG) },
-  { MF(CLOCK_FONT_HUGE), MF(MESSAGE_FONT_HUGE),
-    MF(COORD_FONT_HUGE), MF(CONSOLE_FONT_HUGE),
-    MF(COMMENT_FONT_HUGE), MF(EDITTAGS_FONT_HUGE) },
-  { MF(CLOCK_FONT_GIANT), MF(MESSAGE_FONT_GIANT),
-    MF(COORD_FONT_GIANT), MF(CONSOLE_FONT_GIANT),
-    MF(COMMENT_FONT_GIANT), MF(EDITTAGS_FONT_GIANT) },
-  { MF(CLOCK_FONT_COLOSSAL), MF(MESSAGE_FONT_COLOSSAL),
-    MF(COORD_FONT_COLOSSAL), MF(CONSOLE_FONT_COLOSSAL),
-    MF(COMMENT_FONT_COLOSSAL), MF(EDITTAGS_FONT_COLOSSAL) },
-  { MF(CLOCK_FONT_TITANIC), MF(MESSAGE_FONT_TITANIC),
-    MF(COORD_FONT_TITANIC), MF(CONSOLE_FONT_TITANIC),
-    MF(COMMENT_FONT_TITANIC), MF(EDITTAGS_FONT_TITANIC) },
+  { MF(CLOCK_FONT_TINY), MF(MESSAGE_FONT_TINY), MF(COORD_FONT_TINY), MF(CONSOLE_FONT_TINY), MF(COMMENT_FONT_TINY), MF(EDITTAGS_FONT_TINY), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_TEENY), MF(MESSAGE_FONT_TEENY), MF(COORD_FONT_TEENY), MF(CONSOLE_FONT_TEENY), MF(COMMENT_FONT_TEENY), MF(EDITTAGS_FONT_TEENY), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_DINKY), MF(MESSAGE_FONT_DINKY), MF(COORD_FONT_DINKY), MF(CONSOLE_FONT_DINKY), MF(COMMENT_FONT_DINKY), MF(EDITTAGS_FONT_DINKY), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_PETITE), MF(MESSAGE_FONT_PETITE), MF(COORD_FONT_PETITE), MF(CONSOLE_FONT_PETITE), MF(COMMENT_FONT_PETITE), MF(EDITTAGS_FONT_PETITE), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_SLIM), MF(MESSAGE_FONT_SLIM), MF(COORD_FONT_SLIM), MF(CONSOLE_FONT_SLIM), MF(COMMENT_FONT_SLIM), MF(EDITTAGS_FONT_SLIM), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_SMALL), MF(MESSAGE_FONT_SMALL), MF(COORD_FONT_SMALL), MF(CONSOLE_FONT_SMALL), MF(COMMENT_FONT_SMALL), MF(EDITTAGS_FONT_SMALL), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_MEDIOCRE), MF(MESSAGE_FONT_MEDIOCRE), MF(COORD_FONT_MEDIOCRE), MF(CONSOLE_FONT_MEDIOCRE), MF(COMMENT_FONT_MEDIOCRE), MF(EDITTAGS_FONT_MEDIOCRE), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_MIDDLING), MF(MESSAGE_FONT_MIDDLING), MF(COORD_FONT_MIDDLING), MF(CONSOLE_FONT_MIDDLING), MF(COMMENT_FONT_MIDDLING), MF(EDITTAGS_FONT_MIDDLING), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_AVERAGE), MF(MESSAGE_FONT_AVERAGE), MF(COORD_FONT_AVERAGE), MF(CONSOLE_FONT_AVERAGE), MF(COMMENT_FONT_AVERAGE), MF(EDITTAGS_FONT_AVERAGE), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_MODERATE), MF(MESSAGE_FONT_MODERATE), MF(COORD_FONT_MODERATE), MF(CONSOLE_FONT_MODERATE), MF(COMMENT_FONT_MODERATE), MF(EDITTAGS_FONT_MODERATE), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_MEDIUM), MF(MESSAGE_FONT_MEDIUM), MF(COORD_FONT_MEDIUM), MF(CONSOLE_FONT_MEDIUM), MF(COMMENT_FONT_MEDIUM), MF(EDITTAGS_FONT_MEDIUM), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_BULKY), MF(MESSAGE_FONT_BULKY), MF(COORD_FONT_BULKY), MF(CONSOLE_FONT_BULKY), MF(COMMENT_FONT_BULKY), MF(EDITTAGS_FONT_BULKY), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_LARGE), MF(MESSAGE_FONT_LARGE), MF(COORD_FONT_LARGE), MF(CONSOLE_FONT_LARGE), MF(COMMENT_FONT_LARGE), MF(EDITTAGS_FONT_LARGE), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_BIG), MF(MESSAGE_FONT_BIG), MF(COORD_FONT_BIG), MF(CONSOLE_FONT_BIG), MF(COMMENT_FONT_BIG), MF(EDITTAGS_FONT_BIG), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_HUGE), MF(MESSAGE_FONT_HUGE), MF(COORD_FONT_HUGE), MF(CONSOLE_FONT_HUGE), MF(COMMENT_FONT_HUGE), MF(EDITTAGS_FONT_HUGE), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_GIANT), MF(MESSAGE_FONT_GIANT), MF(COORD_FONT_GIANT), MF(CONSOLE_FONT_GIANT), MF(COMMENT_FONT_GIANT), MF(EDITTAGS_FONT_GIANT), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_COLOSSAL), MF(MESSAGE_FONT_COLOSSAL), MF(COORD_FONT_COLOSSAL), MF(CONSOLE_FONT_COLOSSAL), MF(COMMENT_FONT_COLOSSAL), MF(EDITTAGS_FONT_COLOSSAL), MF(MOVEHISTORY_FONT_ALL) },
+  { MF(CLOCK_FONT_TITANIC), MF(MESSAGE_FONT_TITANIC), MF(COORD_FONT_TITANIC), MF(CONSOLE_FONT_TITANIC), MF(COMMENT_FONT_TITANIC), MF(EDITTAGS_FONT_TITANIC), MF(MOVEHISTORY_FONT_ALL) },
 };
 
 MyFont *font[NUM_SIZES][NUM_FONTS];
@@ -398,8 +405,44 @@ LRESULT CALLBACK
 VOID APIENTRY MenuPopup(HWND hwnd, POINT pt, HMENU hmenu, UINT def);
 void ParseIcsTextMenu(char *icsTextMenuString);
 VOID PopUpMoveDialog(char firstchar);
+VOID PopUpNameDialog(char firstchar);
 VOID UpdateSampleText(HWND hDlg, int id, MyColorizeAttribs *mca);
 
+/* [AS] */
+int NewGameFRC();
+int GameListOptions();
+
+HWND moveHistoryDialog = NULL;
+BOOLEAN moveHistoryDialogUp = FALSE;
+
+WindowPlacement wpMoveHistory;
+
+HWND evalGraphDialog = NULL;
+BOOLEAN evalGraphDialogUp = FALSE;
+
+WindowPlacement wpEvalGraph;
+
+HWND engineOutputDialog = NULL;
+BOOLEAN engineOutputDialogUp = FALSE;
+
+WindowPlacement wpEngineOutput;
+
+VOID MoveHistoryPopUp();
+VOID MoveHistoryPopDown();
+VOID MoveHistorySet( char movelist[][2*MOVE_LEN], int first, int last, int current, ChessProgramStats_Move * pvInfo );
+BOOL MoveHistoryIsUp();
+
+VOID EvalGraphSet( int first, int last, int current, ChessProgramStats_Move * pvInfo );
+VOID EvalGraphPopUp();
+VOID EvalGraphPopDown();
+BOOL EvalGraphIsUp();
+
+VOID EngineOutputPopUp();
+VOID EngineOutputPopDown();
+BOOL EngineOutputIsUp();
+VOID EngineOutputUpdate( FrontEndProgramStats * stats );
+
+VOID GothicPopUp(char *title, VariantClass variant);
 /*
  * Setting "frozen" should disable all user input other than deleting
  * the window.  We do this while engines are initializing themselves.
@@ -446,7 +489,8 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 	LPSTR lpCmdLine, int nCmdShow)
 {
   MSG msg;
-  HANDLE hAccelMain, hAccelNoAlt;
+  HANDLE hAccelMain, hAccelNoAlt, hAccelNoICS;
+//  INITCOMMONCONTROLSEX ex;
 
   debugFP = stderr;
 
@@ -460,8 +504,12 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
     return (FALSE);
   }
 
+//  InitCommonControlsEx(&ex);
+  InitCommonControls();
+
   hAccelMain = LoadAccelerators (hInstance, szAppName);
   hAccelNoAlt = LoadAccelerators (hInstance, "NO_ALT");
+  hAccelNoICS = LoadAccelerators( hInstance, "NO_ICS"); /* [AS] No Ctrl-V on ICS!!! */
 
   /* Acquire and dispatch messages until a WM_QUIT message is received. */
 
@@ -471,10 +519,14 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 		    0))   /* highest message to examine */
     {
       if (!(commentDialog && IsDialogMessage(commentDialog, &msg)) &&
+          !(moveHistoryDialog && IsDialogMessage(moveHistoryDialog, &msg)) &&
+          !(evalGraphDialog && IsDialogMessage(evalGraphDialog, &msg)) &&
+          !(engineOutputDialog && IsDialogMessage(engineOutputDialog, &msg)) &&
 	  !(editTagsDialog && IsDialogMessage(editTagsDialog, &msg)) &&
 	  !(gameListDialog && IsDialogMessage(gameListDialog, &msg)) &&
 	  !(errorDialog && IsDialogMessage(errorDialog, &msg)) &&
 	  !(!frozen && TranslateAccelerator(hwndMain, hAccelMain, &msg)) &&
+          !(!hwndConsole && TranslateAccelerator(hwndMain, hAccelNoICS, &msg)) &&
 	  !(!hwndConsole && TranslateAccelerator(hwndMain, hAccelNoAlt, &msg))) {
 	TranslateMessage(&msg);	/* Translates virtual key codes */
 	DispatchMessage(&msg);	/* Dispatches message to window */
@@ -535,9 +587,14 @@ int screenHeight, screenWidth;
 void
 EnsureOnScreen(int *x, int *y)
 {
+//  int gap = GetSystemMetrics(SM_CYFRAME) + GetSystemMetrics(SM_CYCAPTION);
   /* Be sure window at (x,y) is not off screen (or even mostly off screen) */
   if (*x > screenWidth - 32) *x = 0;
   if (*y > screenHeight - 32) *y = 0;
+  if (*x < 0) *x = 0;
+  if (*y < 0) *y = 0;
+//  if (*x < 10) *x = 10;
+//  if (*y < gap) *y = gap;
 }
 
 BOOL
@@ -555,14 +612,18 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
   } else {
     GetCurrentDirectory(MSG_SIZ, installDir);
   }
+  gameInfo.boardWidth = gameInfo.boardHeight = 8; // [HGM] won't have open window otherwise
   InitAppData(lpCmdLine);      /* Get run-time parameters */
   if (appData.debugMode) {
-    debugFP = fopen("winboard.debug", "w");
+    debugFP = fopen(appData.nameOfDebugFile, "w");
     setbuf(debugFP, NULL);
   }
 
   InitBackEnd1();
 
+//  InitEngineUCI( installDir, &first ); // [HGM] incorporated in InitBackEnd1()
+//  InitEngineUCI( installDir, &second );
+
   /* Create a main window for this application instance. */
   hwnd = CreateWindow(szAppName, szTitle,
 		      (WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX),
@@ -575,6 +636,35 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
     return (FALSE);
   }
 
+  /* [HGM] logo: Load logos if specified (must be done before InitDrawingSizes) */
+  if( appData.firstLogo && appData.firstLogo[0] != NULLCHAR) {
+      first.programLogo = LoadImage( 0, appData.firstLogo, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
+
+      if (first.programLogo == NULL && appData.debugMode) {
+          fprintf( debugFP, "Unable to load logo bitmap '%s'\n", appData.firstLogo );
+      }
+  } else if(appData.autoLogo) {
+      if(appData.firstDirectory && appData.firstDirectory[0]) {
+	char buf[MSG_SIZ];
+	sprintf(buf, "%s/logo.bmp", appData.firstDirectory);
+	first.programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );	
+      }
+  }
+
+  if( appData.secondLogo && appData.secondLogo[0] != NULLCHAR) {
+      second.programLogo = LoadImage( 0, appData.secondLogo, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
+
+      if (second.programLogo == NULL && appData.debugMode) {
+          fprintf( debugFP, "Unable to load logo bitmap '%s'\n", appData.secondLogo );
+      }
+  } else if(appData.autoLogo) {
+      if(appData.secondDirectory && appData.secondDirectory[0]) {
+	char buf[MSG_SIZ];
+	sprintf(buf, "%s\\logo.bmp", appData.secondDirectory);
+	second.programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );	
+      }
+  }
+
   iconWhite = LoadIcon(hInstance, "icon_white");
   iconBlack = LoadIcon(hInstance, "icon_black");
   iconCurrent = iconWhite;
@@ -586,17 +676,51 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
        size that fits on this screen as the default. */
     InitDrawingSizes((BoardSize)ibs, 0);
     if (boardSize == (BoardSize)-1 &&
-	winHeight <= screenHeight && winWidth <= screenWidth) {
+        winHeight <= screenHeight
+           - GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYCAPTION) - 10
+        && winWidth <= screenWidth) {
       boardSize = (BoardSize)ibs;
     }
   }
+
   InitDrawingSizes(boardSize, 0);
   InitMenuChecks();
   buttonCount = GetSystemMetrics(SM_CMOUSEBUTTONS);
 
-  /* Make a console window if needed */
-  if (appData.icsActive) {
-    ConsoleCreate();
+  /* [AS] Load textures if specified */
+  ZeroMemory( &backTextureSquareInfo, sizeof(backTextureSquareInfo) );
+  
+  if( appData.liteBackTextureFile && appData.liteBackTextureFile[0] != NULLCHAR && appData.liteBackTextureFile[0] != '*' ) {
+      liteBackTexture = LoadImage( 0, appData.liteBackTextureFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
+      liteBackTextureMode = appData.liteBackTextureMode;
+
+      if (liteBackTexture == NULL && appData.debugMode) {
+          fprintf( debugFP, "Unable to load lite texture bitmap '%s'\n", appData.liteBackTextureFile );
+      }
+  }
+  
+  if( appData.darkBackTextureFile && appData.darkBackTextureFile[0] != NULLCHAR && appData.darkBackTextureFile[0] != '*' ) {
+      darkBackTexture = LoadImage( 0, appData.darkBackTextureFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
+      darkBackTextureMode = appData.darkBackTextureMode;
+
+      if (darkBackTexture == NULL && appData.debugMode) {
+          fprintf( debugFP, "Unable to load dark texture bitmap '%s'\n", appData.darkBackTextureFile );
+      }
+  }
+
+  mysrandom( (unsigned) time(NULL) );
+
+  /* [AS] Restore layout */
+  if( wpMoveHistory.visible ) {
+      MoveHistoryPopUp();
+  }
+
+  if( wpEvalGraph.visible ) {
+      EvalGraphPopUp();
+  }
+
+  if( wpEngineOutput.visible ) {
+      EngineOutputPopUp();
   }
 
   InitBackEnd2();
@@ -614,7 +738,14 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
   SetWindowPlacement(hwndMain, &wp);
 
   SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,
-	       0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
+               0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
+
+#if 0
+  /* [AS] Disable the FRC stuff if not playing the proper variant */
+  if( gameInfo.variant != VariantFischeRandom ) {
+      EnableMenuItem( GetMenu(hwndMain), IDM_NewGameFRC, MF_GRAYED );
+  }
+#endif
   if (hwndConsole) {
 #if AOT_CONSOLE
     SetWindowPos(hwndConsole, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,
@@ -808,6 +939,7 @@ ArgDescriptor argDescriptors[] = {
   { "tagsFont", ArgFont, (LPVOID) EDITTAGS_FONT, TRUE },
   { "commentFont", ArgFont, (LPVOID) COMMENT_FONT, TRUE },
   { "icsFont", ArgFont, (LPVOID) CONSOLE_FONT, TRUE },
+  { "moveHistoryFont", ArgFont, (LPVOID) MOVEHISTORY_FONT, TRUE }, /* [AS] */
   { "boardSize", ArgBoardSize, (LPVOID) &boardSize,
     TRUE }, /* must come after all fonts */
   { "size", ArgBoardSize, (LPVOID) &boardSize, FALSE },
@@ -1005,14 +1137,116 @@ ArgDescriptor argDescriptors[] = {
   { "initialMode", ArgString, (LPVOID) &appData.initialMode, FALSE },
   { "mode", ArgString, (LPVOID) &appData.initialMode, FALSE },
   { "variant", ArgString, (LPVOID) &appData.variant, FALSE },
-  { "firstProtocolVersion", ArgInt, (LPVOID) &appData.firstProtocolVersion,
-    FALSE },
-  { "secondProtocolVersion", ArgInt, (LPVOID) &appData.secondProtocolVersion,
-    FALSE },
+  { "firstProtocolVersion", ArgInt, (LPVOID) &appData.firstProtocolVersion, FALSE },
+  { "secondProtocolVersion", ArgInt, (LPVOID) &appData.secondProtocolVersion,FALSE },
   { "showButtonBar", ArgBoolean, (LPVOID) &appData.showButtonBar, TRUE },
   { "buttons", ArgTrue, (LPVOID) &appData.showButtonBar, FALSE },
   { "xbuttons", ArgFalse, (LPVOID) &appData.showButtonBar, FALSE },
   { "-buttons", ArgFalse, (LPVOID) &appData.showButtonBar, FALSE },
+  /* [AS] New features */
+  { "firstScoreAbs", ArgBoolean, (LPVOID) &appData.firstScoreIsAbsolute, FALSE },
+  { "secondScoreAbs", ArgBoolean, (LPVOID) &appData.secondScoreIsAbsolute, FALSE },
+  { "pgnExtendedInfo", ArgBoolean, (LPVOID) &appData.saveExtendedInfoInPGN, TRUE },
+  { "hideThinkingFromHuman", ArgBoolean, (LPVOID) &appData.hideThinkingFromHuman, TRUE },
+  { "liteBackTextureFile", ArgString, (LPVOID) &appData.liteBackTextureFile, TRUE },
+  { "darkBackTextureFile", ArgString, (LPVOID) &appData.darkBackTextureFile, TRUE },
+  { "liteBackTextureMode", ArgInt, (LPVOID) &appData.liteBackTextureMode, TRUE },
+  { "darkBackTextureMode", ArgInt, (LPVOID) &appData.darkBackTextureMode, TRUE },
+  { "renderPiecesWithFont", ArgString, (LPVOID) &appData.renderPiecesWithFont, TRUE },
+  { "fontPieceToCharTable", ArgString, (LPVOID) &appData.fontToPieceTable, TRUE },
+  { "fontPieceBackColorWhite", ArgColor, (LPVOID) &appData.fontBackColorWhite, TRUE },
+  { "fontPieceForeColorWhite", ArgColor, (LPVOID) &appData.fontForeColorWhite, TRUE },
+  { "fontPieceBackColorBlack", ArgColor, (LPVOID) &appData.fontBackColorBlack, TRUE },
+  { "fontPieceForeColorBlack", ArgColor, (LPVOID) &appData.fontForeColorBlack, TRUE },
+  { "fontPieceSize", ArgInt, (LPVOID) &appData.fontPieceSize, TRUE },
+  { "overrideLineGap", ArgInt, (LPVOID) &appData.overrideLineGap, TRUE },
+  { "adjudicateLossThreshold", ArgInt, (LPVOID) &appData.adjudicateLossThreshold, TRUE },
+  { "delayBeforeQuit", ArgInt, (LPVOID) &appData.delayBeforeQuit, TRUE },
+  { "delayAfterQuit", ArgInt, (LPVOID) &appData.delayAfterQuit, TRUE },
+  { "nameOfDebugFile", ArgFilename, (LPVOID) &appData.nameOfDebugFile, FALSE },
+  { "debugfile", ArgFilename, (LPVOID) &appData.nameOfDebugFile, FALSE },
+  { "pgnEventHeader", ArgString, (LPVOID) &appData.pgnEventHeader, TRUE },
+  { "defaultFrcPosition", ArgInt, (LPVOID) &appData.defaultFrcPosition, TRUE },
+  { "gameListTags", ArgString, (LPVOID) &appData.gameListTags, TRUE },
+  { "saveOutOfBookInfo", ArgBoolean, (LPVOID) &appData.saveOutOfBookInfo, TRUE },
+  { "showEvalInMoveHistory", ArgBoolean, (LPVOID) &appData.showEvalInMoveHistory, TRUE },
+  { "evalHistColorWhite", ArgColor, (LPVOID) &appData.evalHistColorWhite, TRUE },
+  { "evalHistColorBlack", ArgColor, (LPVOID) &appData.evalHistColorBlack, TRUE },
+  { "highlightMoveWithArrow", ArgBoolean, (LPVOID) &appData.highlightMoveWithArrow, TRUE },
+  { "highlightArrowColor", ArgColor, (LPVOID) &appData.highlightArrowColor, TRUE },
+  { "stickyWindows", ArgBoolean, (LPVOID) &appData.useStickyWindows, TRUE },
+  { "adjudicateDrawMoves", ArgInt, (LPVOID) &appData.adjudicateDrawMoves, TRUE },
+  { "autoDisplayComment", ArgBoolean, (LPVOID) &appData.autoDisplayComment, TRUE },
+  { "autoDisplayTags", ArgBoolean, (LPVOID) &appData.autoDisplayTags, TRUE },
+  { "firstIsUCI", ArgBoolean, (LPVOID) &appData.firstIsUCI, FALSE },
+  { "fUCI", ArgTrue, (LPVOID) &appData.firstIsUCI, FALSE },
+  { "secondIsUCI", ArgBoolean, (LPVOID) &appData.secondIsUCI, FALSE },
+  { "sUCI", ArgTrue, (LPVOID) &appData.secondIsUCI, FALSE },
+  { "firstHasOwnBookUCI", ArgBoolean, (LPVOID) &appData.firstHasOwnBookUCI, FALSE },
+  { "fNoOwnBookUCI", ArgFalse, (LPVOID) &appData.firstHasOwnBookUCI, FALSE },
+  { "firstXBook", ArgFalse, (LPVOID) &appData.firstHasOwnBookUCI, FALSE },
+  { "secondHasOwnBookUCI", ArgBoolean, (LPVOID) &appData.secondHasOwnBookUCI, FALSE },
+  { "sNoOwnBookUCI", ArgFalse, (LPVOID) &appData.secondHasOwnBookUCI, FALSE },
+  { "secondXBook", ArgFalse, (LPVOID) &appData.secondHasOwnBookUCI, FALSE },
+  { "polyglotDir", ArgFilename, (LPVOID) &appData.polyglotDir, TRUE },
+  { "usePolyglotBook", ArgBoolean, (LPVOID) &appData.usePolyglotBook, TRUE },
+  { "polyglotBook", ArgFilename, (LPVOID) &appData.polyglotBook, TRUE },
+  { "defaultHashSize", ArgInt, (LPVOID) &appData.defaultHashSize, TRUE }, 
+  { "defaultCacheSizeEGTB", ArgInt, (LPVOID) &appData.defaultCacheSizeEGTB, TRUE },
+  { "defaultPathEGTB", ArgFilename, (LPVOID) &appData.defaultPathEGTB, TRUE },
+
+  /* [AS] Layout stuff */
+  { "moveHistoryUp", ArgBoolean, (LPVOID) &wpMoveHistory.visible, TRUE },
+  { "moveHistoryX", ArgInt, (LPVOID) &wpMoveHistory.x, TRUE },
+  { "moveHistoryY", ArgInt, (LPVOID) &wpMoveHistory.y, TRUE },
+  { "moveHistoryW", ArgInt, (LPVOID) &wpMoveHistory.width, TRUE },
+  { "moveHistoryH", ArgInt, (LPVOID) &wpMoveHistory.height, TRUE },
+
+  { "evalGraphUp", ArgBoolean, (LPVOID) &wpEvalGraph.visible, TRUE },
+  { "evalGraphX", ArgInt, (LPVOID) &wpEvalGraph.x, TRUE },
+  { "evalGraphY", ArgInt, (LPVOID) &wpEvalGraph.y, TRUE },
+  { "evalGraphW", ArgInt, (LPVOID) &wpEvalGraph.width, TRUE },
+  { "evalGraphH", ArgInt, (LPVOID) &wpEvalGraph.height, TRUE },
+
+  { "engineOutputUp", ArgBoolean, (LPVOID) &wpEngineOutput.visible, TRUE },
+  { "engineOutputX", ArgInt, (LPVOID) &wpEngineOutput.x, TRUE },
+  { "engineOutputY", ArgInt, (LPVOID) &wpEngineOutput.y, TRUE },
+  { "engineOutputW", ArgInt, (LPVOID) &wpEngineOutput.width, TRUE },
+  { "engineOutputH", ArgInt, (LPVOID) &wpEngineOutput.height, TRUE },
+
+  /* [HGM] board-size, adjudication and misc. options */
+  { "boardWidth", ArgInt, (LPVOID) &appData.NrFiles, TRUE },
+  { "boardHeight", ArgInt, (LPVOID) &appData.NrRanks, TRUE },
+  { "holdingsSize", ArgInt, (LPVOID) &appData.holdingsSize, TRUE },
+  { "matchPause", ArgInt, (LPVOID) &appData.matchPause, TRUE },
+  { "pieceToCharTable", ArgString, (LPVOID) &appData.pieceToCharTable, FALSE },
+  { "flipBlack", ArgBoolean, (LPVOID) &appData.upsideDown, TRUE },
+  { "allWhite", ArgBoolean, (LPVOID) &appData.allWhite, TRUE },
+  { "alphaRank", ArgBoolean, (LPVOID) &appData.alphaRank, FALSE },
+  { "firstAlphaRank", ArgBoolean, (LPVOID) &first.alphaRank, FALSE },
+  { "secondAlphaRank", ArgBoolean, (LPVOID) &second.alphaRank, FALSE },
+  { "testClaims", ArgBoolean, (LPVOID) &appData.testClaims, TRUE },
+  { "checkMates", ArgBoolean, (LPVOID) &appData.checkMates, TRUE },
+  { "materialDraws", ArgBoolean, (LPVOID) &appData.materialDraws, TRUE },
+  { "trivialDraws", ArgBoolean, (LPVOID) &appData.trivialDraws, TRUE },
+  { "ruleMoves", ArgInt, (LPVOID) &appData.ruleMoves, TRUE },
+  { "repeatsToDraw", ArgInt, (LPVOID) &appData.drawRepeats, TRUE },
+  { "autoKibitz", ArgTrue, (LPVOID) &appData.autoKibitz, FALSE },
+  { "engineDebugOutput", ArgInt, (LPVOID) &appData.engineComments, FALSE },
+  { "userName", ArgString, (LPVOID) &appData.userName, FALSE },
+  { "rewindIndex", ArgInt, (LPVOID) &appData.rewindIndex, FALSE },
+  { "sameColorGames", ArgInt, (LPVOID) &appData.sameColorGames, FALSE },
+  { "smpCores", ArgInt, (LPVOID) &appData.smpCores, TRUE },
+  { "egtFormats", ArgString, (LPVOID) &appData.egtFormats, TRUE },
+  { "niceEngines", ArgInt, (LPVOID) &appData.niceEngines, TRUE },
+  { "firstLogo", ArgFilename, (LPVOID) &appData.firstLogo, FALSE },
+  { "secondLogo", ArgFilename, (LPVOID) &appData.secondLogo, FALSE },
+  { "autoLogo", ArgBoolean, (LPVOID) &appData.autoLogo, TRUE },
+  { "firstOptions", ArgString, (LPVOID) &appData.firstOptions, FALSE },
+  { "secondOptions", ArgString, (LPVOID) &appData.secondOptions, FALSE },
+  { "firstNeedsNoncompliantFEN", ArgString, (LPVOID) &appData.fenOverride1, FALSE },
+  { "secondNeedsNoncompliantFEN", ArgString, (LPVOID) &appData.fenOverride2, FALSE },
+
 #ifdef ZIPPY
   { "zippyTalk", ArgBoolean, (LPVOID) &appData.zippyTalk, FALSE },
   { "zt", ArgTrue, (LPVOID) &appData.zippyTalk, FALSE },
@@ -1055,6 +1289,18 @@ ArgDescriptor argDescriptors[] = {
   /* Kludge to allow winboard.ini files from buggy 4.0.4 to be read: */
   { "zippyReplyTimeout", ArgInt, (LPVOID)&junk, FALSE },
 #endif
+  /* [HGM] options for broadcasting and time odds */
+  { "serverMoves", ArgString, (LPVOID) &appData.serverMovesName, FALSE },
+  { "suppressLoadMoves", ArgBoolean, (LPVOID) &appData.suppressLoadMoves, FALSE },
+  { "serverPause", ArgInt, (LPVOID) &appData.serverPause, FALSE },
+  { "firstTimeOdds", ArgInt, (LPVOID) &appData.firstTimeOdds, FALSE },
+  { "secondTimeOdds", ArgInt, (LPVOID) &appData.secondTimeOdds, FALSE },
+  { "timeOddsMode", ArgInt, (LPVOID) &appData.timeOddsMode, TRUE },
+  { "firstAccumulateTC", ArgInt, (LPVOID) &appData.firstAccumulateTC, FALSE },
+  { "secondAccumulateTC", ArgInt, (LPVOID) &appData.secondAccumulateTC, FALSE },
+  { "firstNPS", ArgInt, (LPVOID) &appData.firstNPS, FALSE },
+  { "secondNPS", ArgInt, (LPVOID) &appData.secondNPS, FALSE },
+  { "noGUI", ArgTrue, (LPVOID) &appData.noGUI, FALSE },
   { NULL, ArgNone, NULL, FALSE }
 };
 
@@ -1179,6 +1425,7 @@ FileGet(void *getClosure)
   FILE* f = (FILE*) getClosure;
 
   c = getc(f);
+  if (c == '\r') c = getc(f); // work around DOS format files by bypassing the '\r' completely
   if (c == EOF)
     return NULLCHAR;
   else
@@ -1192,8 +1439,14 @@ ParseSettingsFile(char *name, char fullname[MSG_SIZ])
 {
   char *dummy;
   FILE *f;
+  int ok; char buf[MSG_SIZ];
 
-  if (SearchPath(installDir, name, NULL, MSG_SIZ, fullname, &dummy)) {
+  ok = SearchPath(installDir, name, NULL, MSG_SIZ, fullname, &dummy);
+  if(!ok && strchr(name, '.') == NULL) { // [HGM] append default file-name extension '.ini' when needed
+    sprintf(buf, "%s.ini", name);
+    ok = SearchPath(installDir, buf, NULL, MSG_SIZ, fullname, &dummy);
+  }
+  if (ok) {
     f = fopen(fullname, "r");
     if (f != NULL) {
       ParseArgs(FileGet, f);
@@ -1444,6 +1697,8 @@ ParseArgs(GetFunc get, void *cl)
     case ArgNone:
       ExitArgError("Unrecognized argument", argValue);
       break;
+    case ArgTrue:
+    case ArgFalse: ;
     }
   }
 }
@@ -1616,6 +1871,8 @@ InitAppData(LPSTR lpCmdLine)
   appData.reuseFirst = TRUE;
   appData.reuseSecond = TRUE;
   appData.blindfold = FALSE;
+  appData.icsEngineAnalyze = FALSE;
+  memset(&dcb, 0, sizeof(DCB)); // required by VS 2002 +
   dcb.DCBlength = sizeof(DCB);
   dcb.BaudRate = 9600;
   dcb.fBinary = TRUE;
@@ -1630,7 +1887,6 @@ InitAppData(LPSTR lpCmdLine)
   dcb.fNull = FALSE;
   dcb.fRtsControl = RTS_CONTROL_ENABLE;
   dcb.fAbortOnError = FALSE;
-  dcb.wReserved = 0;
   dcb.ByteSize = 7;
   dcb.Parity = SPACEPARITY;
   dcb.StopBits = ONESTOPBIT;
@@ -1667,6 +1923,85 @@ InitAppData(LPSTR lpCmdLine)
   appData.firstProtocolVersion = PROTOVER;
   appData.secondProtocolVersion = PROTOVER;
   appData.showButtonBar = TRUE;
+
+   /* [AS] New properties (see comments in header file) */
+  appData.firstScoreIsAbsolute = FALSE;
+  appData.secondScoreIsAbsolute = FALSE;
+  appData.saveExtendedInfoInPGN = FALSE;
+  appData.hideThinkingFromHuman = FALSE;
+  appData.liteBackTextureFile = "";
+  appData.liteBackTextureMode = BACK_TEXTURE_MODE_PLAIN;
+  appData.darkBackTextureFile = "";
+  appData.darkBackTextureMode = BACK_TEXTURE_MODE_PLAIN;
+  appData.renderPiecesWithFont = "";
+  appData.fontToPieceTable = "";
+  appData.fontBackColorWhite = 0;
+  appData.fontForeColorWhite = 0;
+  appData.fontBackColorBlack = 0;
+  appData.fontForeColorBlack = 0;
+  appData.fontPieceSize = 80;
+  appData.overrideLineGap = 1;
+  appData.adjudicateLossThreshold = 0;
+  appData.delayBeforeQuit = 0;
+  appData.delayAfterQuit = 0;
+  appData.nameOfDebugFile = "winboard.debug";
+  appData.pgnEventHeader = "Computer Chess Game";
+  appData.defaultFrcPosition = -1;
+  appData.gameListTags = GLT_DEFAULT_TAGS;
+  appData.saveOutOfBookInfo = TRUE;
+  appData.showEvalInMoveHistory = TRUE;
+  appData.evalHistColorWhite = ParseColorName( "#FFFFB0" );
+  appData.evalHistColorBlack = ParseColorName( "#AD5D3D" );
+  appData.highlightMoveWithArrow = FALSE;
+  appData.highlightArrowColor = ParseColorName( "#FFFF80" );
+  appData.useStickyWindows = TRUE;
+  appData.adjudicateDrawMoves = 0;
+  appData.autoDisplayComment = TRUE;
+  appData.autoDisplayTags = TRUE;
+  appData.firstIsUCI = FALSE;
+  appData.secondIsUCI = FALSE;
+  appData.firstHasOwnBookUCI = TRUE;
+  appData.secondHasOwnBookUCI = TRUE;
+  appData.polyglotDir = "";
+  appData.usePolyglotBook = FALSE;
+  appData.polyglotBook = "";
+  appData.defaultHashSize = 64;
+  appData.defaultCacheSizeEGTB = 4;
+  appData.defaultPathEGTB = "c:\\egtb";
+  appData.firstOptions = "";
+  appData.secondOptions = "";
+
+  InitWindowPlacement( &wpMoveHistory );
+  InitWindowPlacement( &wpEvalGraph );
+  InitWindowPlacement( &wpEngineOutput );
+
+  /* [HGM] User-selectable board size, adjudication control, miscellaneous */
+  appData.NrFiles      = -1;
+  appData.NrRanks      = -1;
+  appData.holdingsSize = -1;
+  appData.testClaims   = FALSE;
+  appData.checkMates   = FALSE;
+  appData.materialDraws= FALSE;
+  appData.trivialDraws = FALSE;
+  appData.ruleMoves    = 51;
+  appData.drawRepeats  = 6;
+  appData.matchPause   = 10000;
+  appData.alphaRank    = FALSE;
+  appData.allWhite     = FALSE;
+  appData.upsideDown   = FALSE;
+  appData.serverPause  = 15;
+  appData.serverMovesName   = NULL;
+  appData.suppressLoadMoves = FALSE;
+  appData.firstTimeOdds  = 1;
+  appData.secondTimeOdds = 1;
+  appData.firstAccumulateTC  = 1; // combine previous and current sessions
+  appData.secondAccumulateTC = 1;
+  appData.firstNPS  = -1; // [HGM] nps: use wall-clock time
+  appData.secondNPS = -1;
+  appData.engineComments = 1;
+  appData.smpCores = 1; // [HGM] SMP: max nr of cores
+  appData.egtFormats = "";
+
 #ifdef ZIPPY
   appData.zippyTalk = ZIPPY_TALK;
   appData.zippyPlay = ZIPPY_PLAY;
@@ -1705,6 +2040,40 @@ InitAppData(LPSTR lpCmdLine)
   /* Parse command line */
   ParseArgs(StringGet, &lpCmdLine);
 
+  /* [HGM] make sure board size is acceptable */
+  if(appData.NrFiles > BOARD_SIZE ||
+     appData.NrRanks > BOARD_SIZE   )
+      DisplayFatalError("Recompile with BOARD_SIZE > 12, to support this size", 0, 2);
+
+  /* [HGM] After parsing the options from the .ini file, and overruling them
+   * with options from the command line, we now make an even higher priority
+   * overrule by WB options attached to the engine command line. This so that
+   * tournament managers can use WB options (such as /timeOdds) that follow
+   * the engines.
+   */
+  if(appData.firstChessProgram != NULL) {
+      char *p = StrStr(appData.firstChessProgram, "WBopt");
+      static char *f = "first";
+      char buf[MSG_SIZ], *q = buf;
+      if(p != NULL) { // engine command line contains WinBoard options
+          sprintf(buf, p+6, f, f, f, f, f, f, f, f, f, f); // replace %s in them by "first"
+          ParseArgs(StringGet, &q);
+          p[-1] = 0; // cut them offengine command line
+      }
+  }
+  // now do same for second chess program
+  if(appData.secondChessProgram != NULL) {
+      char *p = StrStr(appData.secondChessProgram, "WBopt");
+      static char *s = "second";
+      char buf[MSG_SIZ], *q = buf;
+      if(p != NULL) { // engine command line contains WinBoard options
+          sprintf(buf, p+6, s, s, s, s, s, s, s, s, s, s); // replace %s in them by "first"
+          ParseArgs(StringGet, &q);
+          p[-1] = 0; // cut them offengine command line
+      }
+  }
+
+
   /* Propagate options that affect others */
   if (appData.matchMode || appData.matchGames) chessProgram = TRUE;
   if (appData.icsActive || appData.noChessProgram) {
@@ -1855,6 +2224,39 @@ SaveSettings(char* name)
     gameListH = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;
   }
 
+  /* [AS] Move history */
+  wpMoveHistory.visible = MoveHistoryIsUp();
+  
+  if( moveHistoryDialog ) {
+    GetWindowPlacement(moveHistoryDialog, &wp);
+    wpMoveHistory.x = wp.rcNormalPosition.left;
+    wpMoveHistory.y = wp.rcNormalPosition.top;
+    wpMoveHistory.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;
+    wpMoveHistory.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;
+  }
+
+  /* [AS] Eval graph */
+  wpEvalGraph.visible = EvalGraphIsUp();
+
+  if( evalGraphDialog ) {
+    GetWindowPlacement(evalGraphDialog, &wp);
+    wpEvalGraph.x = wp.rcNormalPosition.left;
+    wpEvalGraph.y = wp.rcNormalPosition.top;
+    wpEvalGraph.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;
+    wpEvalGraph.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;
+  }
+
+  /* [AS] Engine output */
+  wpEngineOutput.visible = EngineOutputIsUp();
+
+  if( engineOutputDialog ) {
+    GetWindowPlacement(engineOutputDialog, &wp);
+    wpEngineOutput.x = wp.rcNormalPosition.left;
+    wpEngineOutput.y = wp.rcNormalPosition.top;
+    wpEngineOutput.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;
+    wpEngineOutput.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;
+  }
+
   for (ad = argDescriptors; ad->argName != NULL; ad++) {
     if (!ad->save) continue;
     switch (ad->argType) {
@@ -1903,14 +2305,14 @@ SaveSettings(char* name)
     case ArgColor:
       {
 	COLORREF color = *(COLORREF *)ad->argLoc;
-	fprintf(f, "/%s=#%02x%02x%02x\n", ad->argName, 
+	fprintf(f, "/%s=#%02lx%02lx%02lx\n", ad->argName, 
 	  color&0xff, (color>>8)&0xff, (color>>16)&0xff);
       }
       break;
     case ArgAttribs:
       {
 	MyTextAttribs* ta = &textAttribs[(ColorClass)ad->argLoc];
-	fprintf(f, "/%s=\"%s%s%s%s%s#%02x%02x%02x\"\n", ad->argName,
+	fprintf(f, "/%s=\"%s%s%s%s%s#%02lx%02lx%02lx\"\n", ad->argName,
           (ta->effects & CFE_BOLD) ? "b" : "",
           (ta->effects & CFE_ITALIC) ? "i" : "",
           (ta->effects & CFE_UNDERLINE) ? "u" : "",
@@ -1948,6 +2350,8 @@ SaveSettings(char* name)
       break;
     case ArgCommSettings:
       PrintCommSettings(f, ad->argName, (DCB *)ad->argLoc);
+    case ArgNone:
+    case ArgSettingsFilename: ;
     }
   }
   fclose(f);
@@ -1961,6 +2365,591 @@ SaveSettings(char* name)
  *
 \*---------------------------------------------------------------------------*/
 
+/* [AS] Draw square using background texture */
+static void DrawTile( int dx, int dy, int dw, int dh, HDC dst, HDC src, int mode, int sx, int sy )
+{
+    XFORM   x;
+
+    if( mode == 0 ) {
+        return; /* Should never happen! */
+    }
+
+    SetGraphicsMode( dst, GM_ADVANCED );
+
+    switch( mode ) {
+    case 1:
+        /* Identity */
+        break;
+    case 2:
+        /* X reflection */
+        x.eM11 = -1.0;
+        x.eM12 = 0;
+        x.eM21 = 0;
+        x.eM22 = 1.0;
+        x.eDx = (FLOAT) dw + dx - 1;
+        x.eDy = 0;
+        dx = 0;
+        SetWorldTransform( dst, &x );
+        break;
+    case 3:
+        /* Y reflection */
+        x.eM11 = 1.0;
+        x.eM12 = 0;
+        x.eM21 = 0;
+        x.eM22 = -1.0;
+        x.eDx = 0;
+        x.eDy = (FLOAT) dh + dy - 1;
+        dy = 0;
+        SetWorldTransform( dst, &x );
+        break;
+    case 4:
+        /* X/Y flip */
+        x.eM11 = 0;
+        x.eM12 = 1.0;
+        x.eM21 = 1.0;
+        x.eM22 = 0;
+        x.eDx = (FLOAT) dx;
+        x.eDy = (FLOAT) dy;
+        dx = 0;
+        dy = 0;
+        SetWorldTransform( dst, &x );
+        break;
+    }
+
+    BitBlt( dst, dx, dy, dw, dh, src, sx, sy, SRCCOPY );
+
+    x.eM11 = 1.0;
+    x.eM12 = 0;
+    x.eM21 = 0;
+    x.eM22 = 1.0;
+    x.eDx = 0;
+    x.eDy = 0;
+    SetWorldTransform( dst, &x );
+
+    ModifyWorldTransform( dst, 0, MWT_IDENTITY );
+}
+
+/* [AS] [HGM] Make room for more piece types, so all pieces can be different */
+enum {
+    PM_WP = (int) WhitePawn, 
+    PM_WN = (int) WhiteKnight, 
+    PM_WB = (int) WhiteBishop, 
+    PM_WR = (int) WhiteRook, 
+    PM_WQ = (int) WhiteQueen, 
+    PM_WF = (int) WhiteFerz, 
+    PM_WW = (int) WhiteWazir, 
+    PM_WE = (int) WhiteAlfil, 
+    PM_WM = (int) WhiteMan, 
+    PM_WO = (int) WhiteCannon, 
+    PM_WU = (int) WhiteUnicorn, 
+    PM_WH = (int) WhiteNightrider, 
+    PM_WA = (int) WhiteAngel, 
+    PM_WC = (int) WhiteMarshall, 
+    PM_WAB = (int) WhiteCardinal, 
+    PM_WD = (int) WhiteDragon, 
+    PM_WL = (int) WhiteLance, 
+    PM_WS = (int) WhiteCobra, 
+    PM_WV = (int) WhiteFalcon, 
+    PM_WSG = (int) WhiteSilver, 
+    PM_WG = (int) WhiteGrasshopper, 
+    PM_WK = (int) WhiteKing,
+    PM_BP = (int) BlackPawn, 
+    PM_BN = (int) BlackKnight, 
+    PM_BB = (int) BlackBishop, 
+    PM_BR = (int) BlackRook, 
+    PM_BQ = (int) BlackQueen, 
+    PM_BF = (int) BlackFerz, 
+    PM_BW = (int) BlackWazir, 
+    PM_BE = (int) BlackAlfil, 
+    PM_BM = (int) BlackMan,
+    PM_BO = (int) BlackCannon, 
+    PM_BU = (int) BlackUnicorn, 
+    PM_BH = (int) BlackNightrider, 
+    PM_BA = (int) BlackAngel, 
+    PM_BC = (int) BlackMarshall, 
+    PM_BG = (int) BlackGrasshopper, 
+    PM_BAB = (int) BlackCardinal,
+    PM_BD = (int) BlackDragon,
+    PM_BL = (int) BlackLance,
+    PM_BS = (int) BlackCobra,
+    PM_BV = (int) BlackFalcon,
+    PM_BSG = (int) BlackSilver,
+    PM_BK = (int) BlackKing
+};
+
+static HFONT hPieceFont = NULL;
+static HBITMAP hPieceMask[(int) EmptySquare];
+static HBITMAP hPieceFace[(int) EmptySquare];
+static int fontBitmapSquareSize = 0;
+static char pieceToFontChar[(int) EmptySquare] =
+                              { 'p', 'n', 'b', 'r', 'q', 
+                      'n', 'b', 'p', 'n', 'b', 'r', 'b', 'r', 'q', 'k',
+                      'k', 'o', 'm', 'v', 't', 'w', 
+                      'v', 't', 'o', 'm', 'v', 't', 'v', 't', 'w', 'l',
+                                                              'l' };
+
+extern BOOL SetCharTable( char *table, const char * map );
+/* [HGM] moved to backend.c */
+
+static void SetPieceBackground( HDC hdc, COLORREF color, int mode )
+{
+    HBRUSH hbrush;
+    BYTE r1 = GetRValue( color );
+    BYTE g1 = GetGValue( color );
+    BYTE b1 = GetBValue( color );
+    BYTE r2 = r1 / 2;
+    BYTE g2 = g1 / 2;
+    BYTE b2 = b1 / 2;
+    RECT rc;
+
+    /* Create a uniform background first */
+    hbrush = CreateSolidBrush( color );
+    SetRect( &rc, 0, 0, squareSize, squareSize );
+    FillRect( hdc, &rc, hbrush );
+    DeleteObject( hbrush );
+    
+    if( mode == 1 ) {
+        /* Vertical gradient, good for pawn, knight and rook, less for queen and king */
+        int steps = squareSize / 2;
+        int i;
+
+        for( i=0; i<steps; i++ ) {
+            BYTE r = r1 - (r1-r2) * i / steps;
+            BYTE g = g1 - (g1-g2) * i / steps;
+            BYTE b = b1 - (b1-b2) * i / steps;
+
+            hbrush = CreateSolidBrush( RGB(r,g,b) );
+            SetRect( &rc, i + squareSize - steps, 0, i + squareSize - steps + 1, squareSize );
+            FillRect( hdc, &rc, hbrush );
+            DeleteObject(hbrush);
+        }
+    }
+    else if( mode == 2 ) {
+        /* Diagonal gradient, good more or less for every piece */
+        POINT triangle[3];
+        HPEN hpen = SelectObject( hdc, GetStockObject(NULL_PEN) );
+        HBRUSH hbrush_old;
+        int steps = squareSize;
+        int i;
+
+        triangle[0].x = squareSize - steps;
+        triangle[0].y = squareSize;
+        triangle[1].x = squareSize;
+        triangle[1].y = squareSize;
+        triangle[2].x = squareSize;
+        triangle[2].y = squareSize - steps;
+
+        for( i=0; i<steps; i++ ) {
+            BYTE r = r1 - (r1-r2) * i / steps;
+            BYTE g = g1 - (g1-g2) * i / steps;
+            BYTE b = b1 - (b1-b2) * i / steps;
+
+            hbrush = CreateSolidBrush( RGB(r,g,b) );
+            hbrush_old = SelectObject( hdc, hbrush );
+            Polygon( hdc, triangle, 3 );
+            SelectObject( hdc, hbrush_old );
+            DeleteObject(hbrush);
+            triangle[0].x++;
+            triangle[2].y++;
+        }
+
+        SelectObject( hdc, hpen );
+    }
+}
+
+/*
+    [AS] The method I use to create the bitmaps it a bit tricky, but it
+    seems to work ok. The main problem here is to find the "inside" of a chess
+    piece: follow the steps as explained below.
+*/
+static void CreatePieceMaskFromFont( HDC hdc_window, HDC hdc, int index )
+{
+    HBITMAP hbm;
+    HBITMAP hbm_old;
+    COLORREF chroma = RGB(0xFF,0x00,0xFF);
+    RECT rc;
+    SIZE sz;
+    POINT pt;
+    int backColor = whitePieceColor; 
+    int foreColor = blackPieceColor;
+    
+    if( index < (int)BlackPawn && appData.fontBackColorWhite != appData.fontForeColorWhite ) {
+        backColor = appData.fontBackColorWhite;
+        foreColor = appData.fontForeColorWhite;
+    }
+    else if( index >= (int)BlackPawn && appData.fontBackColorBlack != appData.fontForeColorBlack ) {
+        backColor = appData.fontBackColorBlack;
+        foreColor = appData.fontForeColorBlack;
+    }
+
+    /* Mask */
+    hbm = CreateCompatibleBitmap( hdc_window, squareSize, squareSize );
+
+    hbm_old = SelectObject( hdc, hbm );
+
+    rc.left = 0;
+    rc.top = 0;
+    rc.right = squareSize;
+    rc.bottom = squareSize;
+
+    /* Step 1: background is now black */
+    FillRect( hdc, &rc, GetStockObject(BLACK_BRUSH) );
+
+    GetTextExtentPoint32( hdc, &pieceToFontChar[index], 1, &sz );
+
+    pt.x = (squareSize - sz.cx) / 2;
+    pt.y = (squareSize - sz.cy) / 2;
+
+    SetBkMode( hdc, TRANSPARENT );
+    SetTextColor( hdc, chroma );
+    /* Step 2: the piece has been drawn in purple, there are now black and purple in this bitmap */
+    TextOut( hdc, pt.x, pt.y, &pieceToFontChar[appData.allWhite && index >= (int)BlackPawn ? index - (int)BlackPawn : index], 1 );
+
+    SelectObject( hdc, GetStockObject(WHITE_BRUSH) );
+    /* Step 3: the area outside the piece is filled with white */
+//    FloodFill( hdc, 0, 0, chroma );
+    ExtFloodFill( hdc, 0, 0, 0, FLOODFILLSURFACE );
+    ExtFloodFill( hdc, 0, squareSize-1, 0, FLOODFILLSURFACE ); // [HGM] fill from all 4 corners, for if piece too big
+    ExtFloodFill( hdc, squareSize-1, 0, 0, FLOODFILLSURFACE );
+    ExtFloodFill( hdc, squareSize-1, squareSize-1, 0, FLOODFILLSURFACE );
+    SelectObject( hdc, GetStockObject(BLACK_BRUSH) );
+    /* 
+        Step 4: this is the tricky part, the area inside the piece is filled with black,
+        but if the start point is not inside the piece we're lost!
+        There should be a better way to do this... if we could create a region or path
+        from the fill operation we would be fine for example.
+    */
+//    FloodFill( hdc, squareSize / 2, squareSize / 2, RGB(0xFF,0xFF,0xFF) );
+    ExtFloodFill( hdc, squareSize / 2, squareSize / 2, RGB(0xFF,0xFF,0xFF), FLOODFILLBORDER );
+
+    {   /* [HGM] shave off edges of mask, in an attempt to correct for the fact that FloodFill does not work correctly under Win XP */
+        HDC dc2 = CreateCompatibleDC( hdc_window );
+        HBITMAP bm2 = CreateCompatibleBitmap( hdc_window, squareSize, squareSize );
+
+        SelectObject( dc2, bm2 );
+        BitBlt( dc2, 0, 0, squareSize, squareSize, hdc, 0, 0, SRCCOPY ); // make copy
+        BitBlt( hdc, 0, 1, squareSize-2, squareSize-2, dc2, 1, 1, SRCPAINT );
+        BitBlt( hdc, 2, 1, squareSize-2, squareSize-2, dc2, 1, 1, SRCPAINT );
+        BitBlt( hdc, 1, 0, squareSize-2, squareSize-2, dc2, 1, 1, SRCPAINT );
+        BitBlt( hdc, 1, 2, squareSize-2, squareSize-2, dc2, 1, 1, SRCPAINT );
+
+        DeleteDC( dc2 );
+        DeleteObject( bm2 );
+    }
+
+    SetTextColor( hdc, 0 );
+    /* 
+        Step 5: some fonts have "disconnected" areas that are skipped by the fill:
+        draw the piece again in black for safety.
+    */
+    TextOut( hdc, pt.x, pt.y, &pieceToFontChar[appData.allWhite && index >= (int)BlackPawn ? index - (int)BlackPawn : index], 1 );
+
+    SelectObject( hdc, hbm_old );
+
+    if( hPieceMask[index] != NULL ) {
+        DeleteObject( hPieceMask[index] );
+    }
+
+    hPieceMask[index] = hbm;
+
+    /* Face */
+    hbm = CreateCompatibleBitmap( hdc_window, squareSize, squareSize );
+
+    SelectObject( hdc, hbm );
+
+    {
+        HDC dc1 = CreateCompatibleDC( hdc_window );
+        HDC dc2 = CreateCompatibleDC( hdc_window );
+        HBITMAP bm2 = CreateCompatibleBitmap( hdc_window, squareSize, squareSize );
+
+        SelectObject( dc1, hPieceMask[index] );
+        SelectObject( dc2, bm2 );
+        FillRect( dc2, &rc, GetStockObject(WHITE_BRUSH) );
+        BitBlt( dc2, 0, 0, squareSize, squareSize, dc1, 0, 0, SRCINVERT );
+        
+        /* 
+            Now dc2 contains the inverse of the piece mask, i.e. a mask that preserves
+            the piece background and deletes (makes transparent) the rest.
+            Thanks to that mask, we are free to paint the background with the greates
+            freedom, as we'll be able to mask off the unwanted parts when finished.
+            We use this, to make gradients and give the pieces a "roundish" look.
+        */
+        SetPieceBackground( hdc, backColor, 2 );
+        BitBlt( hdc, 0, 0, squareSize, squareSize, dc2, 0, 0, SRCAND );
+
+        DeleteDC( dc2 );
+        DeleteDC( dc1 );
+        DeleteObject( bm2 );
+    }
+
+    SetTextColor( hdc, foreColor );
+    TextOut( hdc, pt.x, pt.y, &pieceToFontChar[appData.allWhite && index >= (int)BlackPawn ? index - (int)BlackPawn : index], 1 );
+
+    SelectObject( hdc, hbm_old );
+
+    if( hPieceFace[index] != NULL ) {
+        DeleteObject( hPieceFace[index] );
+    }
+
+    hPieceFace[index] = hbm;
+}
+
+static int TranslatePieceToFontPiece( int piece )
+{
+    switch( piece ) {
+    case BlackPawn:
+        return PM_BP;
+    case BlackKnight:
+        return PM_BN;
+    case BlackBishop:
+        return PM_BB;
+    case BlackRook:
+        return PM_BR;
+    case BlackQueen:
+        return PM_BQ;
+    case BlackKing:
+        return PM_BK;
+    case WhitePawn:
+        return PM_WP;
+    case WhiteKnight:
+        return PM_WN;
+    case WhiteBishop:
+        return PM_WB;
+    case WhiteRook:
+        return PM_WR;
+    case WhiteQueen:
+        return PM_WQ;
+    case WhiteKing:
+        return PM_WK;
+
+    case BlackAngel:
+        return PM_BA;
+    case BlackMarshall:
+        return PM_BC;
+    case BlackFerz:
+        return PM_BF;
+    case BlackNightrider:
+        return PM_BH;
+    case BlackAlfil:
+        return PM_BE;
+    case BlackWazir:
+        return PM_BW;
+    case BlackUnicorn:
+        return PM_BU;
+    case BlackCannon:
+        return PM_BO;
+    case BlackGrasshopper:
+        return PM_BG;
+    case BlackMan:
+        return PM_BM;
+    case BlackSilver:
+        return PM_BSG;
+    case BlackLance:
+        return PM_BL;
+    case BlackFalcon:
+        return PM_BV;
+    case BlackCobra:
+        return PM_BS;
+    case BlackCardinal:
+        return PM_BAB;
+    case BlackDragon:
+        return PM_BD;
+
+    case WhiteAngel:
+        return PM_WA;
+    case WhiteMarshall:
+        return PM_WC;
+    case WhiteFerz:
+        return PM_WF;
+    case WhiteNightrider:
+        return PM_WH;
+    case WhiteAlfil:
+        return PM_WE;
+    case WhiteWazir:
+        return PM_WW;
+    case WhiteUnicorn:
+        return PM_WU;
+    case WhiteCannon:
+        return PM_WO;
+    case WhiteGrasshopper:
+        return PM_WG;
+    case WhiteMan:
+        return PM_WM;
+    case WhiteSilver:
+        return PM_WSG;
+    case WhiteLance:
+        return PM_WL;
+    case WhiteFalcon:
+        return PM_WV;
+    case WhiteCobra:
+        return PM_WS;
+    case WhiteCardinal:
+        return PM_WAB;
+    case WhiteDragon:
+        return PM_WD;
+    }
+
+    return 0;
+}
+
+void CreatePiecesFromFont()
+{
+    LOGFONT lf;
+    HDC hdc_window = NULL;
+    HDC hdc = NULL;
+    HFONT hfont_old;
+    int fontHeight;
+    int i;
+
+    if( fontBitmapSquareSize < 0 ) {
+        /* Something went seriously wrong in the past: do not try to recreate fonts! */
+        return;
+    }
+
+    if( appData.renderPiecesWithFont == NULL || appData.renderPiecesWithFont[0] == NULLCHAR || appData.renderPiecesWithFont[0] == '*' ) {
+        fontBitmapSquareSize = -1;
+        return;
+    }
+
+    if( fontBitmapSquareSize != squareSize ) {
+        hdc_window = GetDC( hwndMain );
+        hdc = CreateCompatibleDC( hdc_window );
+
+        if( hPieceFont != NULL ) {
+            DeleteObject( hPieceFont );
+        }
+        else {
+            for( i=0; i<=(int)BlackKing; i++ ) {
+                hPieceMask[i] = NULL;
+                hPieceFace[i] = NULL;
+            }
+        }
+
+        fontHeight = 75;
+
+        if( appData.fontPieceSize >= 50 && appData.fontPieceSize <= 150 ) {
+            fontHeight = appData.fontPieceSize;
+        }
+
+        fontHeight = (fontHeight * squareSize) / 100;
+
+        lf.lfHeight = -MulDiv( fontHeight, GetDeviceCaps(hdc, LOGPIXELSY), 72 );
+        lf.lfWidth = 0;
+        lf.lfEscapement = 0;
+        lf.lfOrientation = 0;
+        lf.lfWeight = FW_NORMAL;
+        lf.lfItalic = 0;
+        lf.lfUnderline = 0;
+        lf.lfStrikeOut = 0;
+        lf.lfCharSet = DEFAULT_CHARSET;
+        lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
+        lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+        lf.lfQuality = PROOF_QUALITY;
+        lf.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
+        strncpy( lf.lfFaceName, appData.renderPiecesWithFont, sizeof(lf.lfFaceName) );
+        lf.lfFaceName[ sizeof(lf.lfFaceName) - 1 ] = '\0';
+
+        hPieceFont = CreateFontIndirect( &lf );
+
+        if( hPieceFont == NULL ) {
+            fontBitmapSquareSize = -2;
+        }
+        else {
+            /* Setup font-to-piece character table */
+            if( ! SetCharTable(pieceToFontChar, appData.fontToPieceTable) ) {
+                /* No (or wrong) global settings, try to detect the font */
+                if( strstr(lf.lfFaceName,"Alpha") != NULL ) {
+                    /* Alpha */
+                    SetCharTable(pieceToFontChar, "phbrqkojntwl");
+                }
+                else if( strstr(lf.lfFaceName,"DiagramTT") != NULL ) {
+                    /* DiagramTT* family */
+                    SetCharTable(pieceToFontChar, "PNLRQKpnlrqk");
+                }
+                else if( strstr(lf.lfFaceName,"WinboardF") != NULL ) {
+                    /* Fairy symbols */
+                     SetCharTable(pieceToFontChar, "PNBRQFEACWMOHIJGDVSLUKpnbrqfeacwmohijgdvsluk");
+                }
+                else if( strstr(lf.lfFaceName,"GC2004D") != NULL ) {
+                    /* Good Companion (Some characters get warped as literal :-( */
+                    char s[] = "1cmWG0ñueOS¯®oYI23wgQU";
+                    s[0]=0xB9; s[1]=0xA9; s[6]=0xB1; s[11]=0xBB; s[12]=0xAB; s[17]=0xB3;
+                    SetCharTable(pieceToFontChar, s);
+                }
+                else {
+                    /* Cases, Condal, Leipzig, Lucena, Marroquin, Merida, Usual */
+                    SetCharTable(pieceToFontChar, "pnbrqkomvtwl");
+                }
+            }
+
+            /* Create bitmaps */
+            hfont_old = SelectObject( hdc, hPieceFont );
+#if 0
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WP );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WN );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WB );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WR );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WQ );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WK );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BP );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BN );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BB );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BR );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BQ );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BK );
+
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WA );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WC );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WF );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WH );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WE );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WW );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WU );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WO );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WG );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WM );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WSG );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WV );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WAB );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WD );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WL );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_WS );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BA );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BC );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BF );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BH );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BE );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BW );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BU );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BO );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BG );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BM );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BSG );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BV );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BAB );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BD );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BL );
+            CreatePieceMaskFromFont( hdc_window, hdc, PM_BS );
+#else
+	    for(i=(int)WhitePawn; i<(int)EmptySquare; i++) /* [HGM] made a loop for this */
+		if(PieceToChar((ChessSquare)i) != '.')     /* skip unused pieces         */
+		    CreatePieceMaskFromFont( hdc_window, hdc, i );
+#endif
+            SelectObject( hdc, hfont_old );
+
+            fontBitmapSquareSize = squareSize;
+        }
+    }
+
+    if( hdc != NULL ) {
+        DeleteDC( hdc );
+    }
+
+    if( hdc_window != NULL ) {
+        ReleaseDC( hwndMain, hdc_window );
+    }
+}
+
 HBITMAP
 DoLoadBitmap(HINSTANCE hinst, char *piece, int squareSize, char *suffix)
 {
@@ -2028,18 +3017,30 @@ InitDrawingColors()
   hPal = CreatePalette((LPLOGPALETTE) pLogPal);
 
   lightSquareBrush = CreateSolidBrush(lightSquareColor);
+  blackSquareBrush = CreateSolidBrush(blackPieceColor);
   darkSquareBrush = CreateSolidBrush(darkSquareColor);
   whitePieceBrush = CreateSolidBrush(whitePieceColor);
   blackPieceBrush = CreateSolidBrush(blackPieceColor);
   iconBkgndBrush = CreateSolidBrush(GetSysColor(COLOR_BACKGROUND));
+  explodeBrush = CreateSolidBrush(highlightSquareColor); // [HGM] atomic
+  /* [AS] Force rendering of the font-based pieces */
+  if( fontBitmapSquareSize > 0 ) {
+    fontBitmapSquareSize = 0;
+  }
 }
 
 
 int
-BoardWidth(int boardSize)
-{
-  return (BOARD_SIZE + 1) * sizeInfo[boardSize].lineGap +
- 	  BOARD_SIZE * sizeInfo[boardSize].squareSize;
+BoardWidth(int boardSize, int n)
+{ /* [HGM] argument n added to allow different width and height */
+  int lineGap = sizeInfo[boardSize].lineGap;
+
+  if( appData.overrideLineGap >= 0 && appData.overrideLineGap <= 5 ) {
+      lineGap = appData.overrideLineGap;
+  }
+
+  return (n + 1) * lineGap +
+          n * sizeInfo[boardSize].squareSize;
 }
 
 /* Respond to board resize by dragging edge */
@@ -2051,9 +3052,10 @@ ResizeBoard(int newSizeX, int newSizeY, int flags)
   if (IsIconic(hwndMain)) return;
   if (recurse > 0) return;
   recurse++;
-  while (newSize > 0 &&
-	 (newSizeX < sizeInfo[newSize].cliWidth ||
-	  newSizeY < sizeInfo[newSize].cliHeight)) {
+  while (newSize > 0) {
+	InitDrawingSizes(newSize+1000, 0); // [HGM] kludge to update sizeInfo without visible effects
+	if(newSizeX >= sizeInfo[newSize].cliWidth &&
+	   newSizeY >= sizeInfo[newSize].cliHeight) break;
     newSize--;
   } 
   boardSize = newSize;
@@ -2066,7 +3068,7 @@ ResizeBoard(int newSizeX, int newSizeY, int flags)
 VOID
 InitDrawingSizes(BoardSize boardSize, int flags)
 {
-  int i, boardWidth;
+  int i, boardWidth, boardHeight; /* [HGM] height treated separately */
   ChessSquare piece;
   static int oldBoardSize = -1, oldTinyLayout = 0;
   HDC hdc;
@@ -2079,10 +3081,21 @@ InitDrawingSizes(BoardSize boardSize, int flags)
   int offby;
   LOGBRUSH logbrush;
 
+  int suppressVisibleEffects = 0; // [HGM] kludge to request updating sizeInfo only
+  if((int)boardSize >= 1000 ) { boardSize -= 1000; suppressVisibleEffects = 1; }
+
+  /* [HGM] call with -2 uses old size (for if nr of files, ranks changes) */
+  if(boardSize == (BoardSize)(-2) ) boardSize = oldBoardSize;
+
   tinyLayout = sizeInfo[boardSize].tinyLayout;
   smallLayout = sizeInfo[boardSize].smallLayout;
   squareSize = sizeInfo[boardSize].squareSize;
   lineGap = sizeInfo[boardSize].lineGap;
+  minorSize = 0; /* [HGM] Kludge to see if demagnified pieces need to be shifted  */
+
+  if( appData.overrideLineGap >= 0 && appData.overrideLineGap <= 5 ) {
+      lineGap = appData.overrideLineGap;
+  }
 
   if (tinyLayout != oldTinyLayout) {
     long style = GetWindowLong(hwndMain, GWL_STYLE);
@@ -2103,7 +3116,8 @@ InitDrawingSizes(BoardSize boardSize, int flags)
     DrawMenuBar(hwndMain);
   }
 
-  boardWidth = BoardWidth(boardSize);
+  boardWidth  = BoardWidth(boardSize, BOARD_WIDTH);
+  boardHeight = BoardWidth(boardSize, BOARD_HEIGHT);
 
   /* Get text area sizes */
   hdc = GetDC(hwndMain);
@@ -2121,33 +3135,59 @@ InitDrawingSizes(BoardSize boardSize, int flags)
   ReleaseDC(hwndMain, hdc);
 
   /* Compute where everything goes */
-  whiteRect.left = OUTER_MARGIN;
-  whiteRect.right = whiteRect.left + boardWidth/2 - INNER_MARGIN/2;
-  whiteRect.top = OUTER_MARGIN;
-  whiteRect.bottom = whiteRect.top + clockSize.cy;
+  if(first.programLogo || second.programLogo) {
+        /* [HGM] logo: if either logo is on, reserve space for it */
+	logoHeight =  2*clockSize.cy;
+	leftLogoRect.left   = OUTER_MARGIN;
+	leftLogoRect.right  = leftLogoRect.left + 4*clockSize.cy;
+	leftLogoRect.top    = OUTER_MARGIN;
+	leftLogoRect.bottom = OUTER_MARGIN + logoHeight;
+
+	rightLogoRect.right  = OUTER_MARGIN + boardWidth;
+	rightLogoRect.left   = rightLogoRect.right - 4*clockSize.cy;
+	rightLogoRect.top    = OUTER_MARGIN;
+	rightLogoRect.bottom = OUTER_MARGIN + logoHeight;
+
+
+    blackRect.left = leftLogoRect.right;
+    blackRect.right = rightLogoRect.left;
+    blackRect.top = OUTER_MARGIN;
+    blackRect.bottom = blackRect.top + clockSize.cy;
+
+    whiteRect.left = blackRect.left ;
+    whiteRect.right = blackRect.right;
+    whiteRect.top = blackRect.bottom;
+    whiteRect.bottom = leftLogoRect.bottom;
+  } else {
+    whiteRect.left = OUTER_MARGIN;
+    whiteRect.right = whiteRect.left + boardWidth/2 - INNER_MARGIN/2;
+    whiteRect.top = OUTER_MARGIN + logoHeight;
+    whiteRect.bottom = whiteRect.top + clockSize.cy;
 
-  blackRect.left = whiteRect.right + INNER_MARGIN;
-  blackRect.right = blackRect.left + boardWidth/2 - 1;
-  blackRect.top = whiteRect.top;
-  blackRect.bottom = whiteRect.bottom;
+    blackRect.left = whiteRect.right + INNER_MARGIN;
+    blackRect.right = blackRect.left + boardWidth/2 - 1;
+    blackRect.top = whiteRect.top;
+    blackRect.bottom = whiteRect.bottom;
+  }
 
-  messageRect.left = whiteRect.left + MESSAGE_LINE_LEFTMARGIN;
+  messageRect.left = OUTER_MARGIN + MESSAGE_LINE_LEFTMARGIN;
   if (appData.showButtonBar) {
-    messageRect.right = blackRect.right
+    messageRect.right = OUTER_MARGIN + boardWidth         // [HGM] logo: expressed independent of clock placement
       - N_BUTTONS*BUTTON_WIDTH - MESSAGE_LINE_LEFTMARGIN;
   } else {
-    messageRect.right = blackRect.right;
+    messageRect.right = OUTER_MARGIN + boardWidth;
   }
   messageRect.top = whiteRect.bottom + INNER_MARGIN;
   messageRect.bottom = messageRect.top + messageSize.cy;
 
-  boardRect.left = whiteRect.left;
+  boardRect.left = OUTER_MARGIN;
   boardRect.right = boardRect.left + boardWidth;
   boardRect.top = messageRect.bottom + INNER_MARGIN;
-  boardRect.bottom = boardRect.top + boardWidth;
+  boardRect.bottom = boardRect.top + boardHeight;
 
   sizeInfo[boardSize].cliWidth = boardRect.right + OUTER_MARGIN;
   sizeInfo[boardSize].cliHeight = boardRect.bottom + OUTER_MARGIN;
+  if(suppressVisibleEffects) return; // [HGM] when called for filling sizeInfo only
   winWidth = 2 * GetSystemMetrics(SM_CXFRAME) + boardRect.right + OUTER_MARGIN;
   winHeight = 2 * GetSystemMetrics(SM_CYFRAME) + GetSystemMetrics(SM_CYMENU) +
     GetSystemMetrics(SM_CYCAPTION) + boardRect.bottom + OUTER_MARGIN;
@@ -2232,55 +3272,242 @@ InitDrawingSizes(BoardSize boardSize, int flags)
       ExtCreatePen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_FLAT|PS_JOIN_MITER,
                    lineGap, &logbrush, 0, NULL);
 
-    for (i = 0; i < BOARD_SIZE + 1; i++) {
+    /* [HGM] Loop had to be split in part for vert. and hor. lines */
+    for (i = 0; i < BOARD_HEIGHT + 1; i++) {
       gridEndpoints[i*2].x = boardRect.left + lineGap / 2;
-      gridEndpoints[i*2 + BOARD_SIZE*2 + 2].y = boardRect.top + lineGap / 2;
       gridEndpoints[i*2].y = gridEndpoints[i*2 + 1].y =
 	boardRect.top + lineGap / 2 + (i * (squareSize + lineGap));
       gridEndpoints[i*2 + 1].x = boardRect.left + lineGap / 2 +
-	BOARD_SIZE * (squareSize + lineGap);
-      gridEndpoints[i*2 + BOARD_SIZE*2 + 2].x =
-	gridEndpoints[i*2 + 1 + BOARD_SIZE*2 + 2].x = boardRect.left +
+        BOARD_WIDTH * (squareSize + lineGap);
+      gridVertexCounts[i*2] = gridVertexCounts[i*2 + 1] = 2;
+    }
+    for (i = 0; i < BOARD_WIDTH + 1; i++) {
+      gridEndpoints[i*2 + BOARD_HEIGHT*2 + 2].y = boardRect.top + lineGap / 2;
+      gridEndpoints[i*2 + BOARD_HEIGHT*2 + 2].x =
+        gridEndpoints[i*2 + 1 + BOARD_HEIGHT*2 + 2].x = boardRect.left +
 	lineGap / 2 + (i * (squareSize + lineGap));
-      gridEndpoints[i*2 + 1 + BOARD_SIZE*2 + 2].y =
-	boardRect.top + BOARD_SIZE * (squareSize + lineGap);
+      gridEndpoints[i*2 + 1 + BOARD_HEIGHT*2 + 2].y =
+        boardRect.top + BOARD_HEIGHT * (squareSize + lineGap);
       gridVertexCounts[i*2] = gridVertexCounts[i*2 + 1] = 2;
     }
   }
 
-  if (boardSize == oldBoardSize) return;
+  /* [HGM] Licensing requirement */
+#ifdef GOTHIC
+  if(gameInfo.variant == VariantGothic) GothicPopUp( GOTHIC, VariantGothic); else
+#endif
+#ifdef FALCON
+  if(gameInfo.variant == VariantFalcon) GothicPopUp( FALCON, VariantFalcon); else
+#endif
+  GothicPopUp( "", VariantNormal);
+
+
+/*  if (boardSize == oldBoardSize) return; [HGM] variant might have changed */
   oldBoardSize = boardSize;
   oldTinyLayout = tinyLayout;
 
   /* Load piece bitmaps for this board size */
   for (i=0; i<=2; i++) {
     for (piece = WhitePawn;
-	 (int) piece <= (int) WhiteKing;
+         (int) piece < (int) BlackPawn;
 	 piece = (ChessSquare) ((int) piece + 1)) {
       if (pieceBitmap[i][piece] != NULL)
 	DeleteObject(pieceBitmap[i][piece]);
     }
   }
 
+  fontBitmapSquareSize = 0; /* [HGM] render: make sure pieces will be recreated, as we might need others now */
+  // Orthodox Chess pieces
   pieceBitmap[0][WhitePawn] = DoLoadBitmap(hInst, "p", squareSize, "s");
   pieceBitmap[0][WhiteKnight] = DoLoadBitmap(hInst, "n", squareSize, "s");
   pieceBitmap[0][WhiteBishop] = DoLoadBitmap(hInst, "b", squareSize, "s");
   pieceBitmap[0][WhiteRook] = DoLoadBitmap(hInst, "r", squareSize, "s");
-  pieceBitmap[0][WhiteQueen] = DoLoadBitmap(hInst, "q", squareSize, "s");
   pieceBitmap[0][WhiteKing] = DoLoadBitmap(hInst, "k", squareSize, "s");
   pieceBitmap[1][WhitePawn] = DoLoadBitmap(hInst, "p", squareSize, "o");
   pieceBitmap[1][WhiteKnight] = DoLoadBitmap(hInst, "n", squareSize, "o");
   pieceBitmap[1][WhiteBishop] = DoLoadBitmap(hInst, "b", squareSize, "o");
   pieceBitmap[1][WhiteRook] = DoLoadBitmap(hInst, "r", squareSize, "o");
-  pieceBitmap[1][WhiteQueen] = DoLoadBitmap(hInst, "q", squareSize, "o");
   pieceBitmap[1][WhiteKing] = DoLoadBitmap(hInst, "k", squareSize, "o");
   pieceBitmap[2][WhitePawn] = DoLoadBitmap(hInst, "p", squareSize, "w");
   pieceBitmap[2][WhiteKnight] = DoLoadBitmap(hInst, "n", squareSize, "w");
   pieceBitmap[2][WhiteBishop] = DoLoadBitmap(hInst, "b", squareSize, "w");
   pieceBitmap[2][WhiteRook] = DoLoadBitmap(hInst, "r", squareSize, "w");
-  pieceBitmap[2][WhiteQueen] = DoLoadBitmap(hInst, "q", squareSize, "w");
   pieceBitmap[2][WhiteKing] = DoLoadBitmap(hInst, "k", squareSize, "w");
-
+  if( !strcmp(appData.variant, "shogi") && (squareSize==72 || squareSize==49)) {
+    // in Shogi, Hijack the unused Queen for Lance
+    pieceBitmap[0][WhiteQueen] = DoLoadBitmap(hInst, "l", squareSize, "s");
+    pieceBitmap[1][WhiteQueen] = DoLoadBitmap(hInst, "l", squareSize, "o");
+    pieceBitmap[2][WhiteQueen] = DoLoadBitmap(hInst, "l", squareSize, "w");
+  } else {
+    pieceBitmap[0][WhiteQueen] = DoLoadBitmap(hInst, "q", squareSize, "s");
+    pieceBitmap[1][WhiteQueen] = DoLoadBitmap(hInst, "q", squareSize, "o");
+    pieceBitmap[2][WhiteQueen] = DoLoadBitmap(hInst, "q", squareSize, "w");
+  }
+
+  if(squareSize <= 72 && squareSize >= 33) { 
+    /* A & C are available in most sizes now */
+    if(squareSize != 49 && squareSize != 72 && squareSize != 33) { // Vortex-like
+      pieceBitmap[0][WhiteAngel] = DoLoadBitmap(hInst, "a", squareSize, "s");
+      pieceBitmap[1][WhiteAngel] = DoLoadBitmap(hInst, "a", squareSize, "o");
+      pieceBitmap[2][WhiteAngel] = DoLoadBitmap(hInst, "a", squareSize, "w");
+      pieceBitmap[0][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "s");
+      pieceBitmap[1][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "o");
+      pieceBitmap[2][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "w");
+      pieceBitmap[0][WhiteCobra] = DoLoadBitmap(hInst, "cv", squareSize, "s");
+      pieceBitmap[1][WhiteCobra] = DoLoadBitmap(hInst, "cv", squareSize, "o");
+      pieceBitmap[2][WhiteCobra] = DoLoadBitmap(hInst, "cv", squareSize, "w");
+      pieceBitmap[0][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "s");
+      pieceBitmap[1][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "o");
+      pieceBitmap[2][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "w");
+    } else { // Smirf-like
+      pieceBitmap[0][WhiteAngel] = DoLoadBitmap(hInst, "aa", squareSize, "s");
+      pieceBitmap[1][WhiteAngel] = DoLoadBitmap(hInst, "aa", squareSize, "o");
+      pieceBitmap[2][WhiteAngel] = DoLoadBitmap(hInst, "aa", squareSize, "w");
+    }
+    if(gameInfo.variant == VariantGothic) { // Vortex-like
+      pieceBitmap[0][WhiteMarshall] = DoLoadBitmap(hInst, "cv", squareSize, "s");
+      pieceBitmap[1][WhiteMarshall] = DoLoadBitmap(hInst, "cv", squareSize, "o");
+      pieceBitmap[2][WhiteMarshall] = DoLoadBitmap(hInst, "cv", squareSize, "w");
+    } else { // WinBoard standard
+      pieceBitmap[0][WhiteMarshall] = DoLoadBitmap(hInst, "c", squareSize, "s");
+      pieceBitmap[1][WhiteMarshall] = DoLoadBitmap(hInst, "c", squareSize, "o");
+      pieceBitmap[2][WhiteMarshall] = DoLoadBitmap(hInst, "c", squareSize, "w");
+    }
+  }
+
+
+  if(squareSize==72 || squareSize==49 || squareSize==33) { /* experiment with some home-made bitmaps */
+    pieceBitmap[0][WhiteFerz] = DoLoadBitmap(hInst, "f", squareSize, "s");
+    pieceBitmap[1][WhiteFerz] = DoLoadBitmap(hInst, "f", squareSize, "o");
+    pieceBitmap[2][WhiteFerz] = DoLoadBitmap(hInst, "f", squareSize, "w");
+    pieceBitmap[0][WhiteWazir] = DoLoadBitmap(hInst, "w", squareSize, "s");
+    pieceBitmap[1][WhiteWazir] = DoLoadBitmap(hInst, "w", squareSize, "o");
+    pieceBitmap[2][WhiteWazir] = DoLoadBitmap(hInst, "w", squareSize, "w");
+    pieceBitmap[0][WhiteAlfil] = DoLoadBitmap(hInst, "e", squareSize, "s");
+    pieceBitmap[1][WhiteAlfil] = DoLoadBitmap(hInst, "e", squareSize, "o");
+    pieceBitmap[2][WhiteAlfil] = DoLoadBitmap(hInst, "e", squareSize, "w");
+    pieceBitmap[0][WhiteMan] = DoLoadBitmap(hInst, "m", squareSize, "s");
+    pieceBitmap[1][WhiteMan] = DoLoadBitmap(hInst, "m", squareSize, "o");
+    pieceBitmap[2][WhiteMan] = DoLoadBitmap(hInst, "m", squareSize, "w");
+    pieceBitmap[0][WhiteCardinal] = DoLoadBitmap(hInst, "a", squareSize, "s");
+    pieceBitmap[1][WhiteCardinal] = DoLoadBitmap(hInst, "a", squareSize, "o");
+    pieceBitmap[2][WhiteCardinal] = DoLoadBitmap(hInst, "a", squareSize, "w");
+    pieceBitmap[0][WhiteDragon] = DoLoadBitmap(hInst, "dk", squareSize, "s");
+    pieceBitmap[1][WhiteDragon] = DoLoadBitmap(hInst, "dk", squareSize, "o");
+    pieceBitmap[2][WhiteDragon] = DoLoadBitmap(hInst, "dk", squareSize, "w");
+    pieceBitmap[0][WhiteFalcon] = DoLoadBitmap(hInst, "v", squareSize, "s");
+    pieceBitmap[1][WhiteFalcon] = DoLoadBitmap(hInst, "v", squareSize, "o");
+    pieceBitmap[2][WhiteFalcon] = DoLoadBitmap(hInst, "v", squareSize, "w");
+    pieceBitmap[0][WhiteCobra] = DoLoadBitmap(hInst, "s", squareSize, "s");
+    pieceBitmap[1][WhiteCobra] = DoLoadBitmap(hInst, "s", squareSize, "o");
+    pieceBitmap[2][WhiteCobra] = DoLoadBitmap(hInst, "s", squareSize, "w");
+    pieceBitmap[0][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "s");
+    pieceBitmap[1][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "o");
+    pieceBitmap[2][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "w");
+    pieceBitmap[0][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "s");
+    pieceBitmap[1][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "o");
+    pieceBitmap[2][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "w");
+
+    if(gameInfo.variant == VariantShogi) { /* promoted Gold represemtations */
+      pieceBitmap[0][WhiteCannon] = DoLoadBitmap(hInst, "wp", squareSize, "s");
+      pieceBitmap[1][WhiteCannon] = DoLoadBitmap(hInst, "wp", squareSize, "o");
+      pieceBitmap[2][WhiteCannon] = DoLoadBitmap(hInst, "w", squareSize, "w");
+      pieceBitmap[0][WhiteNightrider] = DoLoadBitmap(hInst, "wn", squareSize, "s");
+      pieceBitmap[1][WhiteNightrider] = DoLoadBitmap(hInst, "wn", squareSize, "o");
+      pieceBitmap[2][WhiteNightrider] = DoLoadBitmap(hInst, "w", squareSize, "w");
+      pieceBitmap[0][WhiteSilver] = DoLoadBitmap(hInst, "ws", squareSize, "s");
+      pieceBitmap[1][WhiteSilver] = DoLoadBitmap(hInst, "ws", squareSize, "o");
+      pieceBitmap[2][WhiteSilver] = DoLoadBitmap(hInst, "w", squareSize, "w");
+      pieceBitmap[0][WhiteGrasshopper] = DoLoadBitmap(hInst, "wl", squareSize, "s");
+      pieceBitmap[1][WhiteGrasshopper] = DoLoadBitmap(hInst, "wl", squareSize, "o");
+      pieceBitmap[2][WhiteGrasshopper] = DoLoadBitmap(hInst, "w", squareSize, "w");
+    } else {
+      pieceBitmap[0][WhiteCannon] = DoLoadBitmap(hInst, "o", squareSize, "s");
+      pieceBitmap[1][WhiteCannon] = DoLoadBitmap(hInst, "o", squareSize, "o");
+      pieceBitmap[2][WhiteCannon] = DoLoadBitmap(hInst, "o", squareSize, "w");
+      pieceBitmap[0][WhiteNightrider] = DoLoadBitmap(hInst, "h", squareSize, "s");
+      pieceBitmap[1][WhiteNightrider] = DoLoadBitmap(hInst, "h", squareSize, "o");
+      pieceBitmap[2][WhiteNightrider] = DoLoadBitmap(hInst, "h", squareSize, "w");
+      pieceBitmap[0][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "s");
+      pieceBitmap[1][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "o");
+      pieceBitmap[2][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "w");
+      pieceBitmap[0][WhiteGrasshopper] = DoLoadBitmap(hInst, "g", squareSize, "s");
+      pieceBitmap[1][WhiteGrasshopper] = DoLoadBitmap(hInst, "g", squareSize, "o");
+      pieceBitmap[2][WhiteGrasshopper] = DoLoadBitmap(hInst, "g", squareSize, "w");
+    }
+
+  } else { /* other size, no special bitmaps available. Use smaller symbols */
+    if((int)boardSize < 2) minorSize = sizeInfo[0].squareSize;
+    else  minorSize = sizeInfo[(int)boardSize - 2].squareSize;
+    pieceBitmap[0][WhiteNightrider] = DoLoadBitmap(hInst, "n", minorSize, "s");
+    pieceBitmap[1][WhiteNightrider] = DoLoadBitmap(hInst, "n", minorSize, "o");
+    pieceBitmap[2][WhiteNightrider] = DoLoadBitmap(hInst, "n", minorSize, "w");
+    pieceBitmap[0][WhiteCardinal]   = DoLoadBitmap(hInst, "b", minorSize, "s");
+    pieceBitmap[1][WhiteCardinal]   = DoLoadBitmap(hInst, "b", minorSize, "o");
+    pieceBitmap[2][WhiteCardinal]   = DoLoadBitmap(hInst, "b", minorSize, "w");
+    pieceBitmap[0][WhiteDragon]   = DoLoadBitmap(hInst, "r", minorSize, "s");
+    pieceBitmap[1][WhiteDragon]   = DoLoadBitmap(hInst, "r", minorSize, "o");
+    pieceBitmap[2][WhiteDragon]   = DoLoadBitmap(hInst, "r", minorSize, "w");
+    pieceBitmap[0][WhiteGrasshopper] = DoLoadBitmap(hInst, "q", minorSize, "s");
+    pieceBitmap[1][WhiteGrasshopper] = DoLoadBitmap(hInst, "q", minorSize, "o");
+    pieceBitmap[2][WhiteGrasshopper] = DoLoadBitmap(hInst, "q", minorSize, "w");
+  }
+
+
+  if(gameInfo.variant == VariantShogi && squareSize == 58)
+  /* special Shogi support in this size */
+  { for (i=0; i<=2; i++) { /* replace all bitmaps */
+      for (piece = WhitePawn;
+           (int) piece < (int) BlackPawn;
+           piece = (ChessSquare) ((int) piece + 1)) {
+        if (pieceBitmap[i][piece] != NULL)
+          DeleteObject(pieceBitmap[i][piece]);
+      }
+    }
+  pieceBitmap[0][WhitePawn] = DoLoadBitmap(hInst, "sp", squareSize, "o");
+  pieceBitmap[0][WhiteKnight] = DoLoadBitmap(hInst, "sn", squareSize, "o");
+  pieceBitmap[0][WhiteBishop] = DoLoadBitmap(hInst, "sb", squareSize, "o");
+  pieceBitmap[0][WhiteRook] = DoLoadBitmap(hInst, "sr", squareSize, "o");
+  pieceBitmap[0][WhiteQueen] = DoLoadBitmap(hInst, "sl", squareSize, "o");
+  pieceBitmap[0][WhiteKing] = DoLoadBitmap(hInst, "sk", squareSize, "o");
+  pieceBitmap[0][WhiteFerz] = DoLoadBitmap(hInst, "sf", squareSize, "o");
+  pieceBitmap[0][WhiteWazir] = DoLoadBitmap(hInst, "sw", squareSize, "o");
+  pieceBitmap[0][WhiteCannon] = DoLoadBitmap(hInst, "su", squareSize, "o");
+  pieceBitmap[0][WhiteNightrider] = DoLoadBitmap(hInst, "sh", squareSize, "o");
+  pieceBitmap[0][WhiteCardinal] = DoLoadBitmap(hInst, "sa", squareSize, "o");
+  pieceBitmap[0][WhiteDragon] = DoLoadBitmap(hInst, "sc", squareSize, "o");
+  pieceBitmap[0][WhiteGrasshopper] = DoLoadBitmap(hInst, "sg", squareSize, "o");
+  pieceBitmap[0][WhiteSilver] = DoLoadBitmap(hInst, "ss", squareSize, "o");
+  pieceBitmap[1][WhitePawn] = DoLoadBitmap(hInst, "sp", squareSize, "o");
+  pieceBitmap[1][WhiteKnight] = DoLoadBitmap(hInst, "sn", squareSize, "o");
+  pieceBitmap[1][WhiteBishop] = DoLoadBitmap(hInst, "sb", squareSize, "o");
+  pieceBitmap[1][WhiteRook] = DoLoadBitmap(hInst, "sr", squareSize, "o");
+  pieceBitmap[1][WhiteQueen] = DoLoadBitmap(hInst, "sl", squareSize, "o");
+  pieceBitmap[1][WhiteKing] = DoLoadBitmap(hInst, "sk", squareSize, "o");
+  pieceBitmap[1][WhiteFerz] = DoLoadBitmap(hInst, "sf", squareSize, "o");
+  pieceBitmap[1][WhiteWazir] = DoLoadBitmap(hInst, "sw", squareSize, "o");
+  pieceBitmap[1][WhiteCannon] = DoLoadBitmap(hInst, "su", squareSize, "o");
+  pieceBitmap[1][WhiteNightrider] = DoLoadBitmap(hInst, "sh", squareSize, "o");
+  pieceBitmap[1][WhiteCardinal] = DoLoadBitmap(hInst, "sa", squareSize, "o");
+  pieceBitmap[1][WhiteDragon] = DoLoadBitmap(hInst, "sc", squareSize, "o");
+  pieceBitmap[1][WhiteGrasshopper] = DoLoadBitmap(hInst, "sg", squareSize, "o");
+  pieceBitmap[1][WhiteSilver] = DoLoadBitmap(hInst, "ss", squareSize, "o");
+  pieceBitmap[2][WhitePawn] = DoLoadBitmap(hInst, "sp", squareSize, "w");
+  pieceBitmap[2][WhiteKnight] = DoLoadBitmap(hInst, "sn", squareSize, "w");
+  pieceBitmap[2][WhiteBishop] = DoLoadBitmap(hInst, "sr", squareSize, "w");
+  pieceBitmap[2][WhiteRook] = DoLoadBitmap(hInst, "sr", squareSize, "w");
+  pieceBitmap[2][WhiteQueen] = DoLoadBitmap(hInst, "sl", squareSize, "w");
+  pieceBitmap[2][WhiteKing] = DoLoadBitmap(hInst, "sk", squareSize, "w");
+  pieceBitmap[2][WhiteFerz] = DoLoadBitmap(hInst, "sw", squareSize, "w");
+  pieceBitmap[2][WhiteWazir] = DoLoadBitmap(hInst, "sw", squareSize, "w");
+  pieceBitmap[2][WhiteCannon] = DoLoadBitmap(hInst, "sp", squareSize, "w");
+  pieceBitmap[2][WhiteNightrider] = DoLoadBitmap(hInst, "sn", squareSize, "w");
+  pieceBitmap[2][WhiteCardinal] = DoLoadBitmap(hInst, "sr", squareSize, "w");
+  pieceBitmap[2][WhiteDragon] = DoLoadBitmap(hInst, "sr", squareSize, "w");
+  pieceBitmap[2][WhiteGrasshopper] = DoLoadBitmap(hInst, "sl", squareSize, "w");
+  pieceBitmap[2][WhiteSilver] = DoLoadBitmap(hInst, "sw", squareSize, "w");
+  minorSize = 0;
+  }
 }
 
 HBITMAP
@@ -2305,19 +3532,19 @@ VOID
 SquareToPos(int row, int column, int * x, int * y)
 {
   if (flipView) {
-    *x = boardRect.left + lineGap + ((BOARD_SIZE-1)-column) * (squareSize + lineGap);
+    *x = boardRect.left + lineGap + ((BOARD_WIDTH-1)-column) * (squareSize + lineGap);
     *y = boardRect.top + lineGap + row * (squareSize + lineGap);
   } else {
     *x = boardRect.left + lineGap + column * (squareSize + lineGap);
-    *y = boardRect.top + lineGap + ((BOARD_SIZE-1)-row) * (squareSize + lineGap);
+    *y = boardRect.top + lineGap + ((BOARD_HEIGHT-1)-row) * (squareSize + lineGap);
   }
 }
 
 VOID
 DrawCoordsOnDC(HDC hdc)
 {
-  static char files[16] = {'1','2','3','4','5','6','7','8','8','7','6','5','4','3','2','1'};
-  static char ranks[16] = {'h','g','f','e','d','c','b','a','a','b','c','d','e','f','g','h'};
+  static char files[24] = {'0', '1','2','3','4','5','6','7','8','9','0','1','1','0','9','8','7','6','5','4','3','2','1','0'};
+  static char ranks[24] = {'l', 'k','j','i','h','g','f','e','d','c','b','a','a','b','c','d','e','f','g','h','i','j','k','l'};
   char str[2] = { NULLCHAR, NULLCHAR };
   int oldMode, oldAlign, x, y, start, i;
   HFONT oldFont;
@@ -2326,7 +3553,7 @@ DrawCoordsOnDC(HDC hdc)
   if (!appData.showCoords)
     return;
 
-  start = flipView ? 0 : 8;
+  start = flipView ? 1-(ONE!='1') : 23+(ONE!='1')-BOARD_HEIGHT;
 
   oldBrush = SelectObject(hdc, GetStockObject(BLACK_BRUSH));
   oldMode = SetBkMode(hdc, (appData.monoMode ? OPAQUE : TRANSPARENT));
@@ -2334,17 +3561,19 @@ DrawCoordsOnDC(HDC hdc)
   oldFont = SelectObject(hdc, font[boardSize][COORD_FONT]->hf);
 
   y = boardRect.top + lineGap;
-  x = boardRect.left + lineGap;
+  x = boardRect.left + lineGap + gameInfo.holdingsWidth*(squareSize + lineGap);
 
   SetTextAlign(hdc, TA_LEFT|TA_TOP);
-  for (i = 0; i < 8; i++) {
+  for (i = 0; i < BOARD_HEIGHT; i++) {
     str[0] = files[start + i];
     ExtTextOut(hdc, x + 2, y + 1, 0, NULL, str, 1, NULL);
     y += squareSize + lineGap;
   }
 
+  start = flipView ? 12-(BOARD_RGHT-BOARD_LEFT) : 12;
+
   SetTextAlign(hdc, TA_RIGHT|TA_BOTTOM);
-  for (i = 0; i < 8; i++) {
+  for (i = 0; i < BOARD_RGHT - BOARD_LEFT; i++) {
     str[0] = ranks[start + i];
     ExtTextOut(hdc, x + squareSize - 2, y - 1, 0, NULL, str, 1, NULL);
     x += squareSize + lineGap;
@@ -2363,7 +3592,7 @@ DrawGridOnDC(HDC hdc)
  
   if (lineGap != 0) {
     oldPen = SelectObject(hdc, gridPen);
-    PolyPolyline(hdc, gridEndpoints, gridVertexCounts, BOARD_SIZE*2 + 2);
+    PolyPolyline(hdc, gridEndpoints, gridVertexCounts, BOARD_WIDTH+BOARD_HEIGHT + 2);
     SelectObject(hdc, oldPen);
   }
 }
@@ -2379,14 +3608,14 @@ DrawHighlightOnDC(HDC hdc, BOOLEAN on, int x, int y, int pen)
   if (lineGap == 0) return;
   if (flipView) {
     x1 = boardRect.left +
-      lineGap/2 + ((BOARD_SIZE-1)-x) * (squareSize + lineGap);
+      lineGap/2 + ((BOARD_WIDTH-1)-x) * (squareSize + lineGap);
     y1 = boardRect.top +
       lineGap/2 + y * (squareSize + lineGap);
   } else {
     x1 = boardRect.left +
       lineGap/2 + x * (squareSize + lineGap);
     y1 = boardRect.top +
-      lineGap/2 + ((BOARD_SIZE-1)-y) * (squareSize + lineGap);
+      lineGap/2 + ((BOARD_HEIGHT-1)-y) * (squareSize + lineGap);
   }
   hPen = pen ? premovePen : highlightPen;
   oldPen = SelectObject(hdc, on ? hPen : gridPen);
@@ -2427,30 +3656,79 @@ DrawPieceOnDC(HDC hdc, ChessSquare piece, int color, int sqcolor, int x, int y,
 {
   HBITMAP oldBitmap;
   HBRUSH oldBrush;
+  int tmpSize;
 
   if (appData.blindfold) return;
 
+  /* [AS] Use font-based pieces if needed */
+  if( fontBitmapSquareSize >= 0 && squareSize > 32 ) {
+    /* Create piece bitmaps, or do nothing if piece set is up to date */
+    CreatePiecesFromFont();
+
+    if( fontBitmapSquareSize == squareSize ) {
+        int index = TranslatePieceToFontPiece(piece);
+
+        SelectObject( tmphdc, hPieceMask[ index ] );
+
+        BitBlt( hdc,
+            x, y,
+            squareSize, squareSize,
+            tmphdc,
+            0, 0,
+            SRCAND );
+
+        SelectObject( tmphdc, hPieceFace[ index ] );
+
+        BitBlt( hdc,
+            x, y,
+            squareSize, squareSize,
+            tmphdc,
+            0, 0,
+            SRCPAINT );
+
+        return;
+    }
+  }
+
   if (appData.monoMode) {
     SelectObject(tmphdc, PieceBitmap(piece, 
       color == sqcolor ? OUTLINE_PIECE : SOLID_PIECE));
     BitBlt(hdc, x, y, squareSize, squareSize, tmphdc, 0, 0,
 	   sqcolor ? SRCCOPY : NOTSRCCOPY);
   } else {
-    if (color) {
+    tmpSize = squareSize;
+    if(minorSize &&
+        ((piece >= (int)WhiteNightrider && piece <= WhiteGrasshopper) ||
+         (piece >= (int)BlackNightrider && piece <= BlackGrasshopper))  ) {
+      /* [HGM] no bitmap available for promoted pieces in Crazyhouse        */
+      /* Bitmaps of smaller size are substituted, but we have to align them */
+      x += (squareSize - minorSize)>>1;
+      y += squareSize - minorSize - 2;
+      tmpSize = minorSize;
+    }
+    if (color || appData.allWhite ) {
       oldBitmap = SelectObject(tmphdc, PieceBitmap(piece, WHITE_PIECE));
-      oldBrush = SelectObject(hdc, whitePieceBrush);
-      BitBlt(hdc, x, y, squareSize, squareSize, tmphdc, 0, 0, 0x00B8074A);
+      if( color )
+              oldBrush = SelectObject(hdc, whitePieceBrush);
+      else    oldBrush = SelectObject(hdc, blackPieceBrush);
+      if(appData.upsideDown && color==flipView)
+        StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, 0x00B8074A);
+      else
+        BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);
 #if 0
       /* Use black piece color for outline of white pieces */
       /* Not sure this looks really good (though xboard does it).
 	 Maybe better to have another selectable color, default black */
       SelectObject(hdc, blackPieceBrush); /* could have own brush */
       SelectObject(tmphdc, PieceBitmap(piece, OUTLINE_PIECE));
-      BitBlt(hdc, x, y, squareSize, squareSize, tmphdc, 0, 0, 0x00B8074A);
+      BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);
 #else
       /* Use black for outline of white pieces */
       SelectObject(tmphdc, PieceBitmap(piece, OUTLINE_PIECE));
-      BitBlt(hdc, x, y, squareSize, squareSize, tmphdc, 0, 0, SRCAND);
+      if(appData.upsideDown && color==flipView)
+        StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, SRCAND);
+      else
+        BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, SRCAND);
 #endif
     } else {
 #if 0
@@ -2461,15 +3739,18 @@ DrawPieceOnDC(HDC hdc, ChessSquare piece, int color, int sqcolor, int x, int y,
 	 Maybe better to have another selectable color, default medium gray? */
       oldBitmap = SelectObject(tmphdc, PieceBitmap(piece, BLACK_PIECE));
       oldBrush = SelectObject(hdc, whitePieceBrush); /* could have own brush */
-      BitBlt(hdc, x, y, squareSize, squareSize, tmphdc, 0, 0, 0x00B8074A);
+      BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);
       SelectObject(tmphdc, PieceBitmap(piece, SOLID_PIECE));
       SelectObject(hdc, blackPieceBrush);
-      BitBlt(hdc, x, y, squareSize, squareSize, tmphdc, 0, 0, 0x00B8074A);
+      BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);
 #else
       /* Use square color for details of black pieces */
       oldBitmap = SelectObject(tmphdc, PieceBitmap(piece, SOLID_PIECE));
       oldBrush = SelectObject(hdc, blackPieceBrush);
-      BitBlt(hdc, x, y, squareSize, squareSize, tmphdc, 0, 0, 0x00B8074A);
+      if(appData.upsideDown && !flipView)
+        StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, 0x00B8074A);
+      else
+        BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);
 #endif
     }
     SelectObject(hdc, oldBrush);
@@ -2477,23 +3758,424 @@ DrawPieceOnDC(HDC hdc, ChessSquare piece, int color, int sqcolor, int x, int y,
   }
 }
 
+/* [AS] Compute a drawing mode for a square, based on specified settings (see DrawTile) */
+int GetBackTextureMode( int algo )
+{
+    int result = BACK_TEXTURE_MODE_DISABLED;
+
+    switch( algo ) 
+    {
+        case BACK_TEXTURE_MODE_PLAIN:
+            result = 1; /* Always use identity map */
+            break;
+        case BACK_TEXTURE_MODE_FULL_RANDOM:
+            result = 1 + (myrandom() % 3); /* Pick a transformation at random */
+            break;
+    }
+
+    return result;
+}
+
+/* 
+    [AS] Compute and save texture drawing info, otherwise we may not be able
+    to handle redraws cleanly (as random numbers would always be different).
+*/
+VOID RebuildTextureSquareInfo()
+{
+    BITMAP bi;
+    int lite_w = 0;
+    int lite_h = 0;
+    int dark_w = 0;
+    int dark_h = 0;
+    int row;
+    int col;
+
+    ZeroMemory( &backTextureSquareInfo, sizeof(backTextureSquareInfo) );
+
+    if( liteBackTexture != NULL ) {
+        if( GetObject( liteBackTexture, sizeof(bi), &bi ) > 0 ) {
+            lite_w = bi.bmWidth;
+            lite_h = bi.bmHeight;
+        }
+    }
+
+    if( darkBackTexture != NULL ) {
+        if( GetObject( darkBackTexture, sizeof(bi), &bi ) > 0 ) {
+            dark_w = bi.bmWidth;
+            dark_h = bi.bmHeight;
+        }
+    }
+
+    for( row=0; row<BOARD_HEIGHT; row++ ) {
+        for( col=0; col<BOARD_WIDTH; col++ ) {
+            if( (col + row) & 1 ) {
+                /* Lite square */
+                if( lite_w >= squareSize && lite_h >= squareSize ) {
+                    backTextureSquareInfo[row][col].x = col * (lite_w - squareSize) / (BOARD_WIDTH-1);  /* [HGM] divide by size-1 in stead of size! */
+                    backTextureSquareInfo[row][col].y = (BOARD_HEIGHT-1-row) * (lite_h - squareSize) / (BOARD_HEIGHT-1);
+                    backTextureSquareInfo[row][col].mode = GetBackTextureMode(liteBackTextureMode);
+                }
+            }
+            else {
+                /* Dark square */
+                if( dark_w >= squareSize && dark_h >= squareSize ) {
+                    backTextureSquareInfo[row][col].x = col * (dark_w - squareSize) / (BOARD_WIDTH-1);
+                    backTextureSquareInfo[row][col].y = (BOARD_HEIGHT-1-row) * (dark_h - squareSize) / (BOARD_HEIGHT-1);
+                    backTextureSquareInfo[row][col].mode = GetBackTextureMode(darkBackTextureMode);
+                }
+            }
+        }
+    }
+}
+
+/* [AS] Arrow highlighting support */
+
+static int A_WIDTH = 5; /* Width of arrow body */
+
+#define A_HEIGHT_FACTOR 6   /* Length of arrow "point", relative to body width */
+#define A_WIDTH_FACTOR  3   /* Width of arrow "point", relative to body width */
+
+static double Sqr( double x )
+{
+    return x*x;
+}
+
+static int Round( double x )
+{
+    return (int) (x + 0.5);
+}
+
+/* Draw an arrow between two points using current settings */
+VOID DrawArrowBetweenPoints( HDC hdc, int s_x, int s_y, int d_x, int d_y )
+{
+    POINT arrow[7];
+    double dx, dy, j, k, x, y;
+
+    if( d_x == s_x ) {
+        int h = (d_y > s_y) ? +A_WIDTH*A_HEIGHT_FACTOR : -A_WIDTH*A_HEIGHT_FACTOR;
+
+        arrow[0].x = s_x + A_WIDTH;
+        arrow[0].y = s_y;
+
+        arrow[1].x = s_x + A_WIDTH;
+        arrow[1].y = d_y - h;
+
+        arrow[2].x = s_x + A_WIDTH*A_WIDTH_FACTOR;
+        arrow[2].y = d_y - h;
+
+        arrow[3].x = d_x;
+        arrow[3].y = d_y;
+
+        arrow[4].x = s_x - A_WIDTH*A_WIDTH_FACTOR;
+        arrow[4].y = d_y - h;
+
+        arrow[5].x = s_x - A_WIDTH;
+        arrow[5].y = d_y - h;
+
+        arrow[6].x = s_x - A_WIDTH;
+        arrow[6].y = s_y;
+    }
+    else if( d_y == s_y ) {
+        int w = (d_x > s_x) ? +A_WIDTH*A_HEIGHT_FACTOR : -A_WIDTH*A_HEIGHT_FACTOR;
+
+        arrow[0].x = s_x;
+        arrow[0].y = s_y + A_WIDTH;
+
+        arrow[1].x = d_x - w;
+        arrow[1].y = s_y + A_WIDTH;
+
+        arrow[2].x = d_x - w;
+        arrow[2].y = s_y + A_WIDTH*A_WIDTH_FACTOR;
+
+        arrow[3].x = d_x;
+        arrow[3].y = d_y;
+
+        arrow[4].x = d_x - w;
+        arrow[4].y = s_y - A_WIDTH*A_WIDTH_FACTOR;
+
+        arrow[5].x = d_x - w;
+        arrow[5].y = s_y - A_WIDTH;
+
+        arrow[6].x = s_x;
+        arrow[6].y = s_y - A_WIDTH;
+    }
+    else {
+        /* [AS] Needed a lot of paper for this! :-) */
+        dy = (double) (d_y - s_y) / (double) (d_x - s_x);
+        dx = (double) (s_x - d_x) / (double) (s_y - d_y);
+  
+        j = sqrt( Sqr(A_WIDTH) / (1.0 + Sqr(dx)) );
+
+        k = sqrt( Sqr(A_WIDTH*A_HEIGHT_FACTOR) / (1.0 + Sqr(dy)) );
+
+        x = s_x;
+        y = s_y;
+
+        arrow[0].x = Round(x - j);
+        arrow[0].y = Round(y + j*dx);
+
+        arrow[1].x = Round(x + j);
+        arrow[1].y = Round(y - j*dx);
+
+        if( d_x > s_x ) {
+            x = (double) d_x - k;
+            y = (double) d_y - k*dy;
+        }
+        else {
+            x = (double) d_x + k;
+            y = (double) d_y + k*dy;
+        }
+
+        arrow[2].x = Round(x + j);
+        arrow[2].y = Round(y - j*dx);
+
+        arrow[3].x = Round(x + j*A_WIDTH_FACTOR);
+        arrow[3].y = Round(y - j*A_WIDTH_FACTOR*dx);
+
+        arrow[4].x = d_x;
+        arrow[4].y = d_y;
+
+        arrow[5].x = Round(x - j*A_WIDTH_FACTOR);
+        arrow[5].y = Round(y + j*A_WIDTH_FACTOR*dx);
+
+        arrow[6].x = Round(x - j);
+        arrow[6].y = Round(y + j*dx);
+    }
+
+    Polygon( hdc, arrow, 7 );
+}
+
+/* [AS] Draw an arrow between two squares */
+VOID DrawArrowBetweenSquares( HDC hdc, int s_col, int s_row, int d_col, int d_row )
+{
+    int s_x, s_y, d_x, d_y;
+    HPEN hpen;
+    HPEN holdpen;
+    HBRUSH hbrush;
+    HBRUSH holdbrush;
+    LOGBRUSH stLB;
+
+    if( s_col == d_col && s_row == d_row ) {
+        return;
+    }
+
+    /* Get source and destination points */
+    SquareToPos( s_row, s_col, &s_x, &s_y);
+    SquareToPos( d_row, d_col, &d_x, &d_y);
+
+    if( d_y > s_y ) {
+        d_y += squareSize / 4;
+    }
+    else if( d_y < s_y ) {
+        d_y += 3 * squareSize / 4;
+    }
+    else {
+        d_y += squareSize / 2;
+    }
+
+    if( d_x > s_x ) {
+        d_x += squareSize / 4;
+    }
+    else if( d_x < s_x ) {
+        d_x += 3 * squareSize / 4;
+    }
+    else {
+        d_x += squareSize / 2;
+    }
+
+    s_x += squareSize / 2;
+    s_y += squareSize / 2;
+
+    /* Adjust width */
+    A_WIDTH = squareSize / 14;
+
+    /* Draw */
+    stLB.lbStyle = BS_SOLID;
+    stLB.lbColor = appData.highlightArrowColor;
+    stLB.lbHatch = 0;
+
+    hpen = CreatePen( PS_SOLID, 2, RGB(0x00,0x00,0x00) );
+    holdpen = SelectObject( hdc, hpen );
+    hbrush = CreateBrushIndirect( &stLB );
+    holdbrush = SelectObject( hdc, hbrush );
+
+    DrawArrowBetweenPoints( hdc, s_x, s_y, d_x, d_y );
+
+    SelectObject( hdc, holdpen );
+    SelectObject( hdc, holdbrush );
+    DeleteObject( hpen );
+    DeleteObject( hbrush );
+}
+
+BOOL HasHighlightInfo()
+{
+    BOOL result = FALSE;
+
+    if( highlightInfo.sq[0].x >= 0 && highlightInfo.sq[0].y >= 0 &&
+        highlightInfo.sq[1].x >= 0 && highlightInfo.sq[1].y >= 0 )
+    {
+        result = TRUE;
+    }
+
+    return result;
+}
+
+BOOL IsDrawArrowEnabled()
+{
+    BOOL result = FALSE;
+
+    if( appData.highlightMoveWithArrow && squareSize >= 32 ) {
+        result = TRUE;
+    }
+
+    return result;
+}
+
+VOID DrawArrowHighlight( HDC hdc )
+{
+    if( IsDrawArrowEnabled() && HasHighlightInfo() ) {
+        DrawArrowBetweenSquares( hdc,
+            highlightInfo.sq[0].x, highlightInfo.sq[0].y,
+            highlightInfo.sq[1].x, highlightInfo.sq[1].y );
+    }
+}
+
+HRGN GetArrowHighlightClipRegion( HDC hdc )
+{
+    HRGN result = NULL;
+
+    if( HasHighlightInfo() ) {
+        int x1, y1, x2, y2;
+        int sx, sy, dx, dy;
+
+        SquareToPos(highlightInfo.sq[0].y, highlightInfo.sq[0].x, &x1, &y1 );
+        SquareToPos(highlightInfo.sq[1].y, highlightInfo.sq[1].x, &x2, &y2 );
+
+        sx = MIN( x1, x2 );
+        sy = MIN( y1, y2 );
+        dx = MAX( x1, x2 ) + squareSize;
+        dy = MAX( y1, y2 ) + squareSize;
+
+        result = CreateRectRgn( sx, sy, dx, dy );
+    }
+
+    return result;
+}
+
+/*
+    Warning: this function modifies the behavior of several other functions. 
+    
+    Basically, Winboard is optimized to avoid drawing the whole board if not strictly
+    needed. Unfortunately, the decision whether or not to perform a full or partial
+    repaint is scattered all over the place, which is not good for features such as
+    "arrow highlighting" that require a full repaint of the board.
+
+    So, I've tried to patch the code where I thought it made sense (e.g. after or during
+    user interaction, when speed is not so important) but especially to avoid errors
+    in the displayed graphics.
+
+    In such patched places, I always try refer to this function so there is a single
+    place to maintain knowledge.
+    
+    To restore the original behavior, just return FALSE unconditionally.
+*/
+BOOL IsFullRepaintPreferrable()
+{
+    BOOL result = FALSE;
+
+    if( (appData.highlightLastMove || appData.highlightDragging) && IsDrawArrowEnabled() ) {
+        /* Arrow may appear on the board */
+        result = TRUE;
+    }
+
+    return result;
+}
+
+/* 
+    This function is called by DrawPosition to know whether a full repaint must
+    be forced or not.
+
+    Only DrawPosition may directly call this function, which makes use of 
+    some state information. Other function should call DrawPosition specifying 
+    the repaint flag, and can use IsFullRepaintPreferrable if needed.
+*/
+BOOL DrawPositionNeedsFullRepaint()
+{
+    BOOL result = FALSE;
+
+    /* 
+        Probably a slightly better policy would be to trigger a full repaint
+        when animInfo.piece changes state (i.e. empty -> non-empty and viceversa),
+        but animation is fast enough that it's difficult to notice.
+    */
+    if( animInfo.piece == EmptySquare ) {
+        if( (appData.highlightLastMove || appData.highlightDragging) && IsDrawArrowEnabled() && HasHighlightInfo() ) {
+            result = TRUE;
+        }
+    }
+
+    return result;
+}
+
 VOID
 DrawBoardOnDC(HDC hdc, Board board, HDC tmphdc)
 {
   int row, column, x, y, square_color, piece_color;
   ChessSquare piece;
   HBRUSH oldBrush;
+  HDC texture_hdc = NULL;
+
+  /* [AS] Initialize background textures if needed */
+  if( liteBackTexture != NULL || darkBackTexture != NULL ) {
+      static int backTextureBoardSize; /* [HGM] boardsize: also new texture if board format changed */
+      if( backTextureSquareSize != squareSize 
+       || backTextureBoardSize != BOARD_WIDTH+BOARD_SIZE*BOARD_HEIGHT) {
+	  backTextureBoardSize = BOARD_WIDTH+BOARD_SIZE*BOARD_HEIGHT;
+          backTextureSquareSize = squareSize;
+          RebuildTextureSquareInfo();
+      }
+
+      texture_hdc = CreateCompatibleDC( hdc );
+  }
 
-  for (row = 0; row < BOARD_SIZE; row++) {
-    for (column = 0; column < BOARD_SIZE; column++) {
+  for (row = 0; row < BOARD_HEIGHT; row++) {
+    for (column = 0; column < BOARD_WIDTH; column++) {
   
       SquareToPos(row, column, &x, &y);
 
       piece = board[row][column];
 
       square_color = ((column + row) % 2) == 1;
+      if( gameInfo.variant == VariantXiangqi ) {
+          square_color = !InPalace(row, column);
+          if(BOARD_HEIGHT&1) { if(row==BOARD_HEIGHT/2) square_color ^= 1; }
+          else if(row < BOARD_HEIGHT/2) square_color ^= 1;
+      }
       piece_color = (int) piece < (int) BlackPawn;
 
+
+      /* [HGM] holdings file: light square or black */
+      if(column == BOARD_LEFT-2) {
+            if( row > BOARD_HEIGHT - gameInfo.holdingsSize - 1 )
+                square_color = 1;
+            else {
+                DisplayHoldingsCount(hdc, x, y, 0, 0); /* black out */
+                continue;
+            }
+      } else
+      if(column == BOARD_RGHT + 1 ) {
+            if( row < gameInfo.holdingsSize )
+                square_color = 1;
+            else {
+                DisplayHoldingsCount(hdc, x, y, 0, 0); 
+                continue;
+            }
+      }
+      if(column == BOARD_LEFT-1 ) /* left align */
+            DisplayHoldingsCount(hdc, x, y, flipView, (int) board[row][column]);
+      else if( column == BOARD_RGHT) /* right align */
+            DisplayHoldingsCount(hdc, x, y, !flipView, (int) board[row][column]);
+      else
       if (appData.monoMode) {
         if (piece == EmptySquare) {
           BitBlt(hdc, x, y, squareSize, squareSize, 0, 0, 0,
@@ -2501,9 +4183,31 @@ DrawBoardOnDC(HDC hdc, Board board, HDC tmphdc)
         } else {
           DrawPieceOnDC(hdc, piece, piece_color, square_color, x, y, tmphdc);
         }
-      } else {
-        oldBrush = SelectObject(hdc, square_color ?
-				lightSquareBrush : darkSquareBrush);
+      } 
+      else if( backTextureSquareInfo[row][column].mode > 0 ) {
+          /* [AS] Draw the square using a texture bitmap */
+          HBITMAP hbm = SelectObject( texture_hdc, square_color ? liteBackTexture : darkBackTexture );
+	  int r = row, c = column; // [HGM] do not flip board in flipView
+	  if(flipView) { r = BOARD_HEIGHT-1 - r; c = BOARD_WIDTH-1 - c; }
+
+          DrawTile( x, y, 
+              squareSize, squareSize, 
+              hdc, 
+              texture_hdc,
+              backTextureSquareInfo[r][c].mode,
+              backTextureSquareInfo[r][c].x,
+              backTextureSquareInfo[r][c].y );
+
+          SelectObject( texture_hdc, hbm );
+
+          if (piece != EmptySquare) {
+              DrawPieceOnDC(hdc, piece, piece_color, -1, x, y, tmphdc);
+          }
+      }
+      else {
+        HBRUSH brush = square_color ? lightSquareBrush : darkSquareBrush;
+
+        oldBrush = SelectObject(hdc, brush );
         BitBlt(hdc, x, y, squareSize, squareSize, 0, 0, 0, PATCOPY);
         SelectObject(hdc, oldBrush);
         if (piece != EmptySquare)
@@ -2511,11 +4215,50 @@ DrawBoardOnDC(HDC hdc, Board board, HDC tmphdc)
       }
     }
   }
+
+  if( texture_hdc != NULL ) {
+    DeleteDC( texture_hdc );
+  }
+}
+
+int saveDiagFlag = 0; FILE *diagFile; // [HGM] diag
+void fputDW(FILE *f, int x)
+{
+	fputc(x     & 255, f);
+	fputc(x>>8  & 255, f);
+	fputc(x>>16 & 255, f);
+	fputc(x>>24 & 255, f);
 }
 
 #define MAX_CLIPS 200   /* more than enough */
 
 VOID
+DrawLogoOnDC(HDC hdc, RECT logoRect, ChessProgramState *cps)
+{
+//  HBITMAP bufferBitmap;
+  BITMAP bi;
+//  RECT Rect;
+  HDC tmphdc;
+  HBITMAP hbm;
+  int w = 100, h = 50;
+
+  if(cps->programLogo == NULL) return;
+//  GetClientRect(hwndMain, &Rect);
+//  bufferBitmap = CreateCompatibleBitmap(hdc, Rect.right-Rect.left+1,
+//					Rect.bottom-Rect.top+1);
+  tmphdc = CreateCompatibleDC(hdc);
+  hbm = SelectObject(tmphdc, (HBITMAP) cps->programLogo);
+  if( GetObject( cps->programLogo, sizeof(bi), &bi ) > 0 ) {
+            w = bi.bmWidth;
+            h = bi.bmHeight;
+  }
+  StretchBlt(hdc, logoRect.left, logoRect.top, logoRect.right - logoRect.left, 
+                  logoRect.bottom - logoRect.top, tmphdc, 0, 0, w, h, SRCCOPY);
+  SelectObject(tmphdc, hbm);
+  DeleteDC(tmphdc);
+}
+
+VOID
 HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
 {
   static Board lastReq, lastDrawn;
@@ -2541,6 +4284,21 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
    */
   Boolean fullrepaint = repaint;
 
+  if( DrawPositionNeedsFullRepaint() ) {
+      fullrepaint = TRUE;
+  }
+
+#if 0
+  if( fullrepaint ) {
+      static int repaint_count = 0;
+      char buf[128];
+
+      repaint_count++;
+      sprintf( buf, "FULL repaint: %d\n", repaint_count );
+      OutputDebugString( buf );
+  }
+#endif
+
   if (board == NULL) {
     if (!lastReqValid) {
       return;
@@ -2583,15 +4341,15 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
                     dragInfo.pos.x, dragInfo.pos.y,
                     dragInfo.lastpos.x, dragInfo.lastpos.y);
   fprintf(debugFP, "prev:  ");
-  for (row = 0; row < 8; row++) {
-    for (column = 0; column < 8; column++) {
+  for (row = 0; row < BOARD_HEIGHT; row++) {
+    for (column = 0; column < BOARD_WIDTH; column++) {
       fprintf(debugFP, "%d ", lastDrawn[row][column]);
     }
   }
   fprintf(debugFP, "\n");
   fprintf(debugFP, "board: ");
-  for (row = 0; row < 8; row++) {
-    for (column = 0; column < 8; column++) {
+  for (row = 0; row < BOARD_HEIGHT; row++) {
+    for (column = 0; column < BOARD_WIDTH; column++) {
       fprintf(debugFP, "%d ", board[row][column]);
     }
   }
@@ -2603,13 +4361,29 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
   hdcmem = CreateCompatibleDC(hdc);
   tmphdc = CreateCompatibleDC(hdc);
 
+  /* If dragging is in progress, we temporarely remove the piece */
+  /* [HGM] or temporarily decrease count if stacked              */
+  /*       !! Moved to before board compare !!                   */
+  if (dragInfo.from.x >= 0 && dragInfo.pos.x >= 0) {
+    dragged_piece = board[dragInfo.from.y][dragInfo.from.x];
+    if(dragInfo.from.x == BOARD_LEFT-2 ) {
+            if(--board[dragInfo.from.y][dragInfo.from.x+1] == 0 )
+        board[dragInfo.from.y][dragInfo.from.x] = EmptySquare;
+    } else 
+    if(dragInfo.from.x == BOARD_RGHT+1) {
+            if(--board[dragInfo.from.y][dragInfo.from.x-1] == 0 )
+        board[dragInfo.from.y][dragInfo.from.x] = EmptySquare;
+    } else 
+        board[dragInfo.from.y][dragInfo.from.x] = EmptySquare;
+  }
+
   /* Figure out which squares need updating by comparing the 
    * newest board with the last drawn board and checking if
    * flipping has changed.
    */
   if (!fullrepaint && lastDrawnValid && lastDrawnFlipView == flipView) {
-    for (row = 0; row < 8; row++) {
-      for (column = 0; column < 8; column++) {
+    for (row = 0; row < BOARD_HEIGHT; row++) { /* [HGM] true size, not 8 */
+      for (column = 0; column < BOARD_WIDTH; column++) {
 	if (lastDrawn[row][column] != board[row][column]) {
 	  SquareToPos(row, column, &x, &y);
 	  clips[num_clips++] =
@@ -2696,12 +4470,6 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
     }
   }
 
-  /* If dragging is in progress, we temporarely remove the piece */
-  if (dragInfo.from.x >= 0 && dragInfo.pos.x >= 0) {
-    dragged_piece = board[dragInfo.from.y][dragInfo.from.x];
-    board[dragInfo.from.y][dragInfo.from.x] = EmptySquare;
-  }
-
   /* Are we animating a move?  
    * If so, 
    *   - remove the piece from the board (temporarely)
@@ -2721,7 +4489,7 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
 	 atomic, where the piece moves to an empty square and then
 	 explodes.  The old and new positions both had an empty square
 	 at the destination, but animation has drawn a piece there and
-	 we have to remember to erase it. */
+	 we have to remember to erase it. [HGM] moved until after setting lastDrawn */
       lastDrawn[animInfo.to.y][animInfo.to.x] = animInfo.piece;
     }
   }
@@ -2740,13 +4508,49 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
   }
 
   /* Do all the drawing to the memory DC */
-  DrawGridOnDC(hdcmem);
-  DrawHighlightsOnDC(hdcmem);
-  DrawBoardOnDC(hdcmem, board, tmphdc);
+  if(explodeInfo.radius) { // [HGM] atomic
+	HBRUSH oldBrush;
+	int x, y, r=(explodeInfo.radius * squareSize)/100;
+	SquareToPos(explodeInfo.y, explodeInfo.x, &x, &y);
+	x += squareSize/2;
+	y += squareSize/2;
+        if(!fullrepaint) {
+	  clips[num_clips] = CreateRectRgn(x-r, y-r, x+r, y+r);
+	  ExtSelectClipRgn(hdcmem, clips[num_clips++], RGN_OR);
+	}
+	DrawGridOnDC(hdcmem);
+	DrawHighlightsOnDC(hdcmem);
+	DrawBoardOnDC(hdcmem, board, tmphdc);
+	oldBrush = SelectObject(hdcmem, explodeBrush);
+	Ellipse(hdcmem, x-r, y-r, x+r, y+r);
+	SelectObject(hdcmem, oldBrush);
+  } else {
+    DrawGridOnDC(hdcmem);
+    DrawHighlightsOnDC(hdcmem);
+    DrawBoardOnDC(hdcmem, board, tmphdc);
+  }
+  if(logoHeight) {
+	DrawLogoOnDC(hdc, leftLogoRect, flipClock ? &second : &first);
+	DrawLogoOnDC(hdc, rightLogoRect, flipClock ? &first : &second);
+  }
+
+  if( appData.highlightMoveWithArrow ) {
+    DrawArrowHighlight(hdcmem);
+  }
+
   DrawCoordsOnDC(hdcmem);
 
-  /* Put the dragged piece back into place and draw it */
-  if (dragged_piece != EmptySquare) {
+  CopyBoard(lastDrawn, board); /* [HGM] Moved to here from end of routine, */
+                 /* to make sure lastDrawn contains what is actually drawn */
+
+  /* Put the dragged piece back into place and draw it (out of place!) */
+    if (dragged_piece != EmptySquare) {
+    /* [HGM] or restack */
+    if(dragInfo.from.x == BOARD_LEFT-2 )
+                 board[dragInfo.from.y][dragInfo.from.x+1]++;
+    else
+    if(dragInfo.from.x == BOARD_RGHT+1 )
+                 board[dragInfo.from.y][dragInfo.from.x-1]++;
     board[dragInfo.from.y][dragInfo.from.x] = dragged_piece;
     x = dragInfo.pos.x - squareSize / 2;
     y = dragInfo.pos.y - squareSize / 2;
@@ -2788,6 +4592,80 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
 	 boardRect.right - boardRect.left,
 	 boardRect.bottom - boardRect.top,
 	 tmphdc, boardRect.left, boardRect.top, SRCCOPY);
+  if(saveDiagFlag) { 
+    BITMAP b; int i, j=0, m, w, wb, fac=0; char pData[1000000]; 
+    BITMAPINFOHEADER bih; int color[16], nrColors=0;
+
+    GetObject(bufferBitmap, sizeof(b), &b);
+    if(b.bmWidthBytes*b.bmHeight <= 990000) {
+	bih.biSize = sizeof(BITMAPINFOHEADER);
+	bih.biWidth = b.bmWidth;
+	bih.biHeight = b.bmHeight;
+	bih.biPlanes = 1;
+	bih.biBitCount = b.bmBitsPixel;
+	bih.biCompression = 0;
+	bih.biSizeImage = b.bmWidthBytes*b.bmHeight;
+	bih.biXPelsPerMeter = 0;
+	bih.biYPelsPerMeter = 0;
+	bih.biClrUsed = 0;
+	bih.biClrImportant = 0;
+//	fprintf(diagFile, "t=%d\nw=%d\nh=%d\nB=%d\nP=%d\nX=%d\n", 
+//		b.bmType,  b.bmWidth,  b.bmHeight, b.bmWidthBytes,  b.bmPlanes,  b.bmBitsPixel);
+	GetDIBits(tmphdc,bufferBitmap,0,b.bmHeight,pData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
+//	fprintf(diagFile, "%8x\n", (int) pData);
+
+#if 1
+	wb = b.bmWidthBytes;
+	// count colors
+	for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN)>>2; i++) {
+		int k = ((int*) pData)[i];
+		for(j=0; j<nrColors; j++) if(color[j] == k) break;
+		if(j >= 16) break;
+		color[j] = k;
+		if(j >= nrColors) nrColors = j+1;
+	}
+	if(j<16) { // 16 colors is enough. Compress to 4 bits per pixel
+		INT p = 0;
+		for(i=0; i<b.bmHeight - boardRect.top + OUTER_MARGIN; i++) {
+		    for(w=0; w<(wb>>2); w+=2) {
+			int k = ((int*) pData)[(wb*i>>2) + w];
+			for(j=0; j<nrColors; j++) if(color[j] == k) break;
+			k = ((int*) pData)[(wb*i>>2) + w + 1];
+			for(m=0; m<nrColors; m++) if(color[m] == k) break;
+			pData[p++] = m | j<<4;
+		    }
+		    while(p&3) pData[p++] = 0;
+		}
+		fac = 3;
+		wb = ((wb+31)>>5)<<2;
+	}
+	// write BITMAPFILEHEADER
+	fprintf(diagFile, "BM");
+        fputDW(diagFile, wb*(b.bmHeight - boardRect.top + OUTER_MARGIN)+0x36 + (fac?64:0));
+        fputDW(diagFile, 0);
+        fputDW(diagFile, 0x36 + (fac?64:0));
+	// write BITMAPINFOHEADER
+        fputDW(diagFile, 40);
+        fputDW(diagFile, b.bmWidth);
+        fputDW(diagFile, b.bmHeight - boardRect.top + OUTER_MARGIN);
+	if(fac) fputDW(diagFile, 0x040001);   // planes and bits/pixel
+        else    fputDW(diagFile, 0x200001);   // planes and bits/pixel
+        fputDW(diagFile, 0);
+        fputDW(diagFile, 0);
+        fputDW(diagFile, 0);
+        fputDW(diagFile, 0);
+        fputDW(diagFile, 0);
+        fputDW(diagFile, 0);
+	// write color table
+	if(fac)
+	for(i=0; i<16; i++) fputDW(diagFile, color[i]);
+	// write bitmap data
+	for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN); i++) 
+		fputc(pData[i], diagFile);
+#endif
+     }
+  }
+
   SelectObject(tmphdc, oldBitmap);
 
   /* Massive cleanup */
@@ -2807,13 +4685,29 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
       CheckMenuItem(GetMenu(hwndMain),IDM_FlipView, MF_BYCOMMAND|MF_UNCHECKED);
   }
 
-  CopyBoard(lastDrawn, board);
+/*  CopyBoard(lastDrawn, board);*/
   lastDrawnHighlight = highlightInfo;
   lastDrawnPremove   = premoveHighlightInfo;
   lastDrawnFlipView = flipView;
   lastDrawnValid = 1;
 }
 
+/* [HGM] diag: Save the current board display to the given open file and close the file */
+int
+SaveDiagram(f)
+     FILE *f;
+{
+    saveDiagFlag = 1; diagFile = f;
+    HDCDrawPosition(NULL, TRUE, NULL);
+
+    saveDiagFlag = 0;
+
+//    if(f != NULL) fprintf(f, "Sorry, but this feature is still in preparation\n");
+    
+    fclose(f);
+    return TRUE;
+}
+
 
 /*---------------------------------------------------------------------------*\
 | CLIENT PAINT PROCEDURE
@@ -2827,7 +4721,7 @@ PaintProc(HWND hwnd)
   PAINTSTRUCT ps;
   HFONT       oldFont;
 
-  if(hdc = BeginPaint(hwnd, &ps)) {
+  if((hdc = BeginPaint(hwnd, &ps))) {
     if (IsIconic(hwnd)) {
       DrawIcon(hdc, 2, 2, iconCurrent);
     } else {
@@ -2920,8 +4814,11 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   POINT pt;
   static int recursive = 0;
   HMENU hmenu;
+//  BOOLEAN needsRedraw = FALSE;
   BOOLEAN saveAnimate;
-  static BOOLEAN sameAgain = FALSE;
+  BOOLEAN forceFullRepaint = IsFullRepaintPreferrable(); /* [AS] */
+  static BOOLEAN sameAgain = FALSE, promotionChoice = FALSE;
+  ChessMove moveType;
 
   if (recursive) {
     if (message == WM_MBUTTONUP) {
@@ -2940,92 +4837,146 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   x = EventToSquare(pt.x - boardRect.left);
   y = EventToSquare(pt.y - boardRect.top);
   if (!flipView && y >= 0) {
-    y = BOARD_SIZE - 1 - y;
+    y = BOARD_HEIGHT - 1 - y;
   }
   if (flipView && x >= 0) {
-    x = BOARD_SIZE - 1 - x;
+    x = BOARD_WIDTH - 1 - x;
   }
 
   switch (message) {
   case WM_LBUTTONDOWN:
+    if(promotionChoice) { // we are waiting for a click to indicate promotion piece
+	promotionChoice = FALSE; // only one chance: if click not OK it is interpreted as cancel
+	if(appData.debugMode) fprintf(debugFP, "promotion click, x=%d, y=%d\n", x, y);
+	if(gameInfo.holdingsWidth && 
+		(WhiteOnMove(currentMove) 
+			? x == BOARD_WIDTH-1 && y < gameInfo.holdingsSize && y > 0
+			: x == 0 && y >= BOARD_HEIGHT - gameInfo.holdingsSize && y < BOARD_HEIGHT-1) ) {
+	    // click in right holdings, for determining promotion piece
+	    ChessSquare p = boards[currentMove][y][x];
+	    if(appData.debugMode) fprintf(debugFP, "square contains %d\n", (int)p);
+	    if(p != EmptySquare) {
+		FinishMove(WhitePromotionQueen, fromX, fromY, toX, toY, ToLower(PieceToChar(p)));
+		fromX = fromY = -1;
+		break;
+	    }
+	}
+	DrawPosition(FALSE, boards[currentMove]);
+	break;
+    }
     ErrorPopDown();
     sameAgain = FALSE;
     if (y == -2) {
       /* Downclick vertically off board; check if on clock */
       if (PtInRect((LPRECT) &whiteRect, pt)) {
-	if (gameMode == EditPosition) {
+        if (gameMode == EditPosition) {
 	  SetWhiteToPlayEvent();
 	} else if (gameMode == IcsPlayingBlack ||
 		   gameMode == MachinePlaysWhite) {
 	  CallFlagEvent();
-	}
+        } else if (gameMode == EditGame) {
+          AdjustClock((logoHeight > 0 ? flipView: flipClock), -1);
+        }
       } else if (PtInRect((LPRECT) &blackRect, pt)) {
 	if (gameMode == EditPosition) {
 	  SetBlackToPlayEvent();
 	} else if (gameMode == IcsPlayingWhite ||
 		   gameMode == MachinePlaysBlack) {
 	  CallFlagEvent();
+        } else if (gameMode == EditGame) {
+          AdjustClock(!(logoHeight > 0 ? flipView: flipClock), -1);
 	}
       }
       if (!appData.highlightLastMove) {
         ClearHighlights();
-	DrawPosition(FALSE, NULL);
+	DrawPosition((int) (forceFullRepaint || FALSE), NULL);
       }
       fromX = fromY = -1;
       dragInfo.start.x = dragInfo.start.y = -1;
       dragInfo.from = dragInfo.start;
       break;
-    } else if (x < 0 || y < 0) {
+    } else if (x < 0 || y < 0
+      /* [HGM] block clicks between board and holdings */
+              || x == BOARD_LEFT-1 || x == BOARD_RGHT
+              || (x == BOARD_LEFT-2 && y < BOARD_HEIGHT-gameInfo.holdingsSize)
+              || (x == BOARD_RGHT+1 && y >= gameInfo.holdingsSize)
+	/* EditPosition, empty square, or different color piece;
+	   click-click move is possible */
+                               ) {
       break;
     } else if (fromX == x && fromY == y) {
       /* Downclick on same square again */
       ClearHighlights();
-      DrawPosition(FALSE, NULL);
+      DrawPosition(forceFullRepaint || FALSE, NULL);
       sameAgain = TRUE;  
-    } else if (fromX != -1) {
-      /* Downclick on different square */
-      ChessSquare pdown, pup;
-      pdown = boards[currentMove][fromY][fromX];
-      pup = boards[currentMove][y][x];
-      if (gameMode == EditPosition ||
-	  !((WhitePawn <= pdown && pdown <= WhiteKing &&
-	     WhitePawn <= pup && pup <= WhiteKing) ||
-	    (BlackPawn <= pdown && pdown <= BlackKing &&
-	     BlackPawn <= pup && pup <= BlackKing))) {
-	/* EditPosition, empty square, or different color piece;
-	   click-click move is possible */
+    } else if (fromX != -1 &&
+               x != BOARD_LEFT-2 && x != BOARD_RGHT+1 
+                                                                        ) {
+      /* Downclick on different square. */
+      /* [HGM] if on holdings file, should count as new first click ! */
+      { /* [HGM] <sameColor> now always do UserMoveTest(), and check colors there */
 	toX = x;
 	toY = y;
-	if (IsPromotion(fromX, fromY, toX, toY)) {
-	  if (appData.alwaysPromoteToQueen) {
-	    UserMoveEvent(fromX, fromY, toX, toY, 'q');
-	    if (!appData.highlightLastMove) {
-	      ClearHighlights();
-	      DrawPosition(FALSE, NULL);
-	    }
-	  } else {
-	    SetHighlights(fromX, fromY, toX, toY);
-	    DrawPosition(FALSE, NULL);
-	    PromotionPopup(hwnd);
-	  }
-	} else {	/* not a promotion */
-	  if (appData.animate || appData.highlightLastMove) {
-	    SetHighlights(fromX, fromY, toX, toY);
-	  } else {
-	    ClearHighlights();
-	  }
-	  UserMoveEvent(fromX, fromY, toX, toY, NULLCHAR);
-	  if (appData.animate && !appData.highlightLastMove) {
-	    ClearHighlights();
-	    DrawPosition(FALSE, NULL);
-	  }
-	}
-	if (gotPremove) SetPremoveHighlights(fromX, fromY, toX, toY);
-	fromX = fromY = -1;
-	break;
+        /* [HGM] <popupFix> UserMoveEvent requires two calls now,
+           to make sure move is legal before showing promotion popup */
+        moveType = UserMoveTest(fromX, fromY, toX, toY, NULLCHAR);
+	if(moveType == AmbiguousMove) { /* [HGM] Edit-Position move executed */
+		fromX = fromY = -1; 
+		ClearHighlights();
+		DrawPosition(FALSE, boards[currentMove]);
+		break; 
+	} else 
+        if(moveType != ImpossibleMove) {
+          /* [HGM] We use PromotionToKnight in Shogi to indicate frorced promotion */
+          if (moveType == WhitePromotionKnight || moveType == BlackPromotionKnight ||
+            ((moveType == WhitePromotionQueen || moveType == BlackPromotionQueen) &&
+              appData.alwaysPromoteToQueen)) {
+                  FinishMove(moveType, fromX, fromY, toX, toY, 'q');
+                  if (!appData.highlightLastMove) {
+                      ClearHighlights();
+                      DrawPosition(forceFullRepaint || FALSE, NULL);
+                  }
+          } else
+          if (moveType == WhitePromotionQueen || moveType == BlackPromotionQueen ) {
+                  SetHighlights(fromX, fromY, toX, toY);
+                  DrawPosition(forceFullRepaint || FALSE, NULL);
+                  /* [HGM] <popupFix> Popup calls FinishMove now.
+                     If promotion to Q is legal, all are legal! */
+		  if(gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat)
+		  { ChessSquare p = boards[currentMove][fromY][fromX], q = boards[currentMove][toY][toX];
+		    // kludge to temporarily execute move on display, wthout promotng yet
+		    promotionChoice = TRUE;
+		    boards[currentMove][fromY][fromX] = EmptySquare; // move Pawn to 8th rank
+		    boards[currentMove][toY][toX] = p;
+		    DrawPosition(FALSE, boards[currentMove]);
+		    boards[currentMove][fromY][fromX] = p; // take back, but display stays
+		    boards[currentMove][toY][toX] = q;
+		  } else
+                  PromotionPopup(hwnd);
+          } else {       /* not a promotion */
+             if (appData.animate || appData.highlightLastMove) {
+                 SetHighlights(fromX, fromY, toX, toY);
+             } else {
+                 ClearHighlights();
+             }
+             FinishMove(moveType, fromX, fromY, toX, toY, NULLCHAR);
+	     fromX = fromY = -1;
+             if (appData.animate && !appData.highlightLastMove) {
+                  ClearHighlights();
+                  DrawPosition(forceFullRepaint || FALSE, NULL);
+             }
+          }
+          break;
+        }
+        if (gotPremove) {
+            /* [HGM] it seemed that braces were missing here */
+            SetPremoveHighlights(fromX, fromY, toX, toY);
+            fromX = fromY = -1;
+            break;
+        }
       }
       ClearHighlights();
-      DrawPosition(FALSE, NULL);
+      DrawPosition(forceFullRepaint || FALSE, NULL);
     }
     /* First downclick, or restart on a square with same color piece */
     if (!frozen && OKToStartUserMove(x, y)) {
@@ -3040,6 +4991,7 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       fromX = fromY = -1;
       dragInfo.start.x = dragInfo.start.y = -1;
       dragInfo.from = dragInfo.start;
+      DrawPosition(forceFullRepaint || FALSE, NULL); /* [AS] */
     }
     break;
 
@@ -3058,26 +5010,54 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 	/* First square clicked: start click-click move */
 	SetHighlights(fromX, fromY, -1, -1);
       }
-      DrawPosition(FALSE, NULL);
+      DrawPosition(forceFullRepaint || FALSE, NULL);
     } else if (dragInfo.from.x < 0 || dragInfo.from.y < 0) {
       /* Errant click; ignore */
       break;
     } else {
-      /* Finish drag move */
+      /* Finish drag move. */
+    if (appData.debugMode) {
+        fprintf(debugFP, "release\n");
+    }
       dragInfo.from.x = dragInfo.from.y = -1;
       toX = x;
       toY = y;
       saveAnimate = appData.animate; /* sorry, Hawk :) */
       appData.animate = appData.animate && !appData.animateDragging;
-      if (IsPromotion(fromX, fromY, toX, toY)) {
-	if (appData.alwaysPromoteToQueen) {
-	  UserMoveEvent(fromX, fromY, toX, toY, 'q');
-	} else {
-	  DrawPosition(FALSE, NULL);
-	  PromotionPopup(hwnd);
-	}
-      } else {
-	UserMoveEvent(fromX, fromY, toX, toY, NULLCHAR);
+      moveType = UserMoveTest(fromX, fromY, toX, toY, NULLCHAR);
+      if(moveType == AmbiguousMove) { /* [HGM] Edit-Position move executed */
+		fromX = fromY = -1; 
+		ClearHighlights();
+		DrawPosition(FALSE, boards[currentMove]);
+		break; 
+      } else 
+      if(moveType != ImpossibleMove) {
+          /* [HGM] use move type to determine if move is promotion.
+             Knight is Shogi kludge for mandatory promotion, Queen means choice */
+          if (moveType == WhitePromotionKnight || moveType == BlackPromotionKnight ||
+            ((moveType == WhitePromotionQueen || moveType == BlackPromotionQueen) &&
+              appData.alwaysPromoteToQueen)) 
+               FinishMove(moveType, fromX, fromY, toX, toY, 'q');
+          else 
+          if (moveType == WhitePromotionQueen || moveType == BlackPromotionQueen ) {
+               DrawPosition(forceFullRepaint || FALSE, NULL);
+		  if(gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat)
+		  { ChessSquare p = boards[currentMove][fromY][fromX], q = boards[currentMove][toY][toX];
+		    // kludge to temporarily execute move on display, wthout promotng yet
+		    promotionChoice = TRUE;
+		    boards[currentMove][fromY][fromX] = EmptySquare; // move Pawn to 8th rank
+		    boards[currentMove][toY][toX] = p;
+		    DrawPosition(FALSE, boards[currentMove]);
+		    boards[currentMove][fromY][fromX] = p; // take back, but display stays
+		    boards[currentMove][toY][toX] = q;
+		    break;
+		  } else
+               PromotionPopup(hwnd); /* [HGM] Popup now calls FinishMove */
+          } else {
+	    if(saveAnimate /* ^$!%@#$!$ */  && gameInfo.variant == VariantAtomic 
+			&& boards[currentMove][toY][toX] != EmptySquare) AnimateAtomicCapture(toX, toY, 20);
+	    FinishMove(moveType, fromX, fromY, toX, toY, NULLCHAR);
+	  }
       }
       if (gotPremove) SetPremoveHighlights(fromX, fromY, toX, toY);
       appData.animate = saveAnimate;
@@ -3087,7 +5067,7 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       }
       if (appData.animate || appData.animateDragging ||
 	  appData.highlightDragging || gotPremove) {
-	DrawPosition(FALSE, NULL);
+	DrawPosition(forceFullRepaint || FALSE, NULL);
       }
     }
     dragInfo.start.x = dragInfo.start.y = -1; 
@@ -3097,18 +5077,42 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   case WM_MOUSEMOVE:
     if ((appData.animateDragging || appData.highlightDragging)
 	&& (wParam & MK_LBUTTON)
-	&& dragInfo.from.x >= 0) {
+	&& dragInfo.from.x >= 0) 
+    {
+      BOOL full_repaint = FALSE;
+
+      sameAgain = FALSE; /* [HGM] if we drag something around, do keep square selected */
       if (appData.animateDragging) {
 	dragInfo.pos = pt;
       }
       if (appData.highlightDragging) {
 	SetHighlights(fromX, fromY, x, y);
+        if( IsDrawArrowEnabled() && (x < 0 || x >= BOARD_WIDTH || y < 0 || y >= BOARD_HEIGHT) ) {
+            full_repaint = TRUE;
+        }
       }
-      DrawPosition(FALSE, NULL);
+      
+      DrawPosition( full_repaint, NULL);
+      
       dragInfo.lastpos = dragInfo.pos;
     }
     break;
 
+  case WM_MOUSEWHEEL: // [DM]
+    {  static int lastDir = 0; // [HGM] build in some hysteresis to avoid spurious events
+       /* Mouse Wheel is being rolled forward
+        * Play moves forward
+        */
+       if((short)HIWORD(wParam) > 0 && currentMove < forwardMostMove) 
+		{ if(lastDir == 1) ForwardEvent(); else lastDir = 1; } // [HGM] suppress first event in direction
+       /* Mouse Wheel is being rolled backward
+        * Play moves backward
+        */
+       if((short)HIWORD(wParam) < 0 && currentMove > backwardMostMove) 
+		{ if(lastDir == -1) BackwardEvent(); else lastDir = -1; }
+    }
+    break;
+
   case WM_MBUTTONDOWN:
   case WM_RBUTTONDOWN:
     ErrorPopDown();
@@ -3121,6 +5125,14 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     if (appData.highlightDragging) {
       ClearHighlights();
     }
+    if(y == -2) {
+      /* [HGM] right mouse button in clock area edit-game mode ups clock */
+      if (PtInRect((LPRECT) &whiteRect, pt)) {
+          if (gameMode == EditGame) AdjustClock((logoHeight > 0 ? flipView: flipClock), 1);
+      } else if (PtInRect((LPRECT) &blackRect, pt)) {
+          if (gameMode == EditGame) AdjustClock(!(logoHeight > 0 ? flipView: flipClock), 1);
+      }
+    }
     DrawPosition(TRUE, NULL);
 
     switch (gameMode) {
@@ -3149,7 +5161,10 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 	/* Just have one menu, on the right button.  Windows users don't
 	   think to try the middle one, and sometimes other software steals
 	   it, or it doesn't really exist. */
-	MenuPopup(hwnd, pt, LoadMenu(hInst, "PieceMenu"), -1);
+        if(gameInfo.variant != VariantShogi)
+            MenuPopup(hwnd, pt, LoadMenu(hInst, "PieceMenu"), -1);
+        else
+            MenuPopup(hwnd, pt, LoadMenu(hInst, "ShogiPieceMenu"), -1);
 #endif
       }
       break;
@@ -3248,7 +5263,36 @@ Promotion(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));
     ShowWindow(GetDlgItem(hDlg, PB_King), 
       (!appData.testLegality || gameInfo.variant == VariantSuicide ||
-       gameInfo.variant == VariantGiveaway) ?
+       gameInfo.variant == VariantGiveaway || gameInfo.variant == VariantSuper ) ?
+	       SW_SHOW : SW_HIDE);
+    /* [HGM] Only allow C & A promotions if these pieces are defined */
+    ShowWindow(GetDlgItem(hDlg, PB_Archbishop),
+       ((PieceToChar(WhiteAngel) >= 'A' &&
+         PieceToChar(WhiteAngel) != '~') ||
+        (PieceToChar(BlackAngel) >= 'A' &&
+         PieceToChar(BlackAngel) != '~')   ) ?
+	       SW_SHOW : SW_HIDE);
+    ShowWindow(GetDlgItem(hDlg, PB_Chancellor), 
+       ((PieceToChar(WhiteMarshall) >= 'A' &&
+         PieceToChar(WhiteMarshall) != '~') ||
+        (PieceToChar(BlackMarshall) >= 'A' &&
+         PieceToChar(BlackMarshall) != '~')   ) ?
+	       SW_SHOW : SW_HIDE);
+    /* [HGM] Hide B & R button in Shogi, use Q as promote, N as defer */
+    ShowWindow(GetDlgItem(hDlg, PB_Rook),
+       gameInfo.variant != VariantShogi ?
+	       SW_SHOW : SW_HIDE);
+    ShowWindow(GetDlgItem(hDlg, PB_Bishop), 
+       gameInfo.variant != VariantShogi ?
+	       SW_SHOW : SW_HIDE);
+    ShowWindow(GetDlgItem(hDlg, IDC_Yes), 
+       gameInfo.variant == VariantShogi ?
+	       SW_SHOW : SW_HIDE);
+    ShowWindow(GetDlgItem(hDlg, IDC_No), 
+       gameInfo.variant == VariantShogi ?
+	       SW_SHOW : SW_HIDE);
+    ShowWindow(GetDlgItem(hDlg, IDC_Centaur), 
+       gameInfo.variant == VariantSuper ?
 	       SW_SHOW : SW_HIDE);
     return TRUE;
 
@@ -3260,25 +5304,35 @@ Promotion(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       DrawPosition(FALSE, NULL);
       return TRUE;
     case PB_King:
-      promoChar = 'k';
+      promoChar = gameInfo.variant == VariantSuper ? PieceToChar(BlackSilver) : PieceToChar(BlackKing);
       break;
     case PB_Queen:
-      promoChar = 'q';
+      promoChar = gameInfo.variant == VariantShogi ? '+' : PieceToChar(BlackQueen);
       break;
     case PB_Rook:
-      promoChar = 'r';
+      promoChar = PieceToChar(BlackRook);
       break;
     case PB_Bishop:
-      promoChar = 'b';
+      promoChar = PieceToChar(BlackBishop);
+      break;
+    case PB_Chancellor:
+      promoChar = PieceToChar(BlackMarshall);
+      break;
+    case PB_Archbishop:
+      promoChar = PieceToChar(BlackAngel);
       break;
     case PB_Knight:
-      promoChar = 'n';
+      promoChar = gameInfo.variant == VariantShogi ? '=' : PieceToChar(BlackKnight);
       break;
     default:
       return FALSE;
     }
     EndDialog(hDlg, TRUE); /* Exit the dialog */
-    UserMoveEvent(fromX, fromY, toX, toY, promoChar);
+    /* [HGM] <popupFix> Call FinishMove rather than UserMoveEvent, as we
+       only show the popup when we are already sure the move is valid or
+       legal. We pass a faulty move type, but the kludge is that FinishMove
+       will figure out it is a promotion from the promoChar. */
+    FinishMove(NormalMove, fromX, fromY, toX, toY, promoChar);
     if (!appData.highlightLastMove) {
       ClearHighlights();
       DrawPosition(FALSE, NULL);
@@ -3304,7 +5358,8 @@ PromotionPopup(HWND hwnd)
 VOID
 ToggleShowThinking()
 {
-  ShowThinkingEvent(!appData.showThinking);
+  appData.showThinking = !appData.showThinking;
+  ShowThinkingEvent();
 }
 
 VOID
@@ -3313,7 +5368,7 @@ LoadGameDialog(HWND hwnd, char* title)
   UINT number = 0;
   FILE *f;
   char fileTitle[MSG_SIZ];
-  f = OpenFileDialog(hwnd, FALSE, "",
+  f = OpenFileDialog(hwnd, "rb", "",
  	             appData.oldSaveStyle ? "gam" : "pgn",
 		     GAME_FILT,
 		     title, &number, fileTitle, NULL);
@@ -3392,6 +5447,8 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   FILE *f;
   UINT number;
   char fileTitle[MSG_SIZ];
+  char buf[MSG_SIZ];
+  static SnapData sd;
 
   switch (message) {
 
@@ -3415,6 +5472,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   case WM_MBUTTONUP:
   case WM_RBUTTONUP:
   case WM_MOUSEMOVE:
+  case WM_MOUSEWHEEL:
     MouseEvent(hwnd, message, wParam, lParam);
     break;
 
@@ -3487,6 +5545,17 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       AnalysisPopDown();
       break;
 
+    case IDM_NewGameFRC:
+      if( NewGameFRC() == 0 ) {
+        ResetGameEvent();
+        AnalysisPopDown();
+      }
+      break;
+
+    case IDM_NewVariant:
+      NewVariantPopup(hwnd);
+      break;
+
     case IDM_LoadGame:
       LoadGameDialog(hwnd, "Load Game from File");
       break;
@@ -3508,7 +5577,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
         Reset(FALSE, TRUE);
       }
       number = 1;
-      f = OpenFileDialog(hwnd, FALSE, "",
+      f = OpenFileDialog(hwnd, "rb", "",
 			 appData.oldSaveStyle ? "pos" : "fen",
 			 POSITION_FILT,
 			 "Load Position from File", &number, fileTitle, NULL);
@@ -3531,7 +5600,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
     case IDM_SaveGame:
       defName = DefaultFileName(appData.oldSaveStyle ? "gam" : "pgn");
-      f = OpenFileDialog(hwnd, TRUE, defName,
+      f = OpenFileDialog(hwnd, "a", defName,
 			 appData.oldSaveStyle ? "gam" : "pgn",
 			 GAME_FILT,
 			 "Save Game to File", NULL, fileTitle, NULL);
@@ -3542,7 +5611,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
     case IDM_SavePosition:
       defName = DefaultFileName(appData.oldSaveStyle ? "pos" : "fen");
-      f = OpenFileDialog(hwnd, TRUE, defName,
+      f = OpenFileDialog(hwnd, "a", defName,
 			 appData.oldSaveStyle ? "pos" : "fen",
 			 POSITION_FILT,
 			 "Save Position to File", NULL, fileTitle, NULL);
@@ -3551,6 +5620,17 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       }
       break;
 
+    case IDM_SaveDiagram:
+      defName = "diagram";
+      f = OpenFileDialog(hwnd, "wb", defName,
+			 "bmp",
+			 DIAGRAM_FILT,
+			 "Save Diagram to File", NULL, fileTitle, NULL);
+      if (f != NULL) {
+	SaveDiagram(f);
+      }
+      break;
+
     case IDM_CopyGame:
       CopyGameToClipboard();
       break;
@@ -3559,6 +5639,63 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       PasteGameFromClipboard();
       break;
 
+    case IDM_CopyGameListToClipboard:
+      CopyGameListToClipboard();
+      break;
+
+    /* [AS] Autodetect FEN or PGN data */
+    case IDM_PasteAny:
+      PasteGameOrFENFromClipboard();
+      break;
+
+    /* [AS] Move history */
+    case IDM_ShowMoveHistory:
+        if( MoveHistoryIsUp() ) {
+            MoveHistoryPopDown();
+        }
+        else {
+            MoveHistoryPopUp();
+        }
+        break;
+
+    /* [AS] Eval graph */
+    case IDM_ShowEvalGraph:
+        if( EvalGraphIsUp() ) {
+            EvalGraphPopDown();
+        }
+        else {
+            EvalGraphPopUp();
+        }
+        break;
+
+    /* [AS] Engine output */
+    case IDM_ShowEngineOutput:
+        if( EngineOutputIsUp() ) {
+            EngineOutputPopDown();
+        }
+        else {
+            EngineOutputPopUp();
+        }
+        break;
+
+    /* [AS] User adjudication */
+    case IDM_UserAdjudication_White:
+        UserAdjudicationEvent( +1 );
+        break;
+
+    case IDM_UserAdjudication_Black:
+        UserAdjudicationEvent( -1 );
+        break;
+
+    case IDM_UserAdjudication_Draw:
+        UserAdjudicationEvent( 0 );
+        break;
+
+    /* [AS] Game list options dialog */
+    case IDM_GameListOptions:
+      GameListOptions();
+      break;
+
     case IDM_CopyPosition:
       CopyFENToClipboard();
       break;
@@ -3625,10 +5762,34 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
     case IDM_AnalysisMode:
       if (!first.analysisSupport) {
-        char buf[MSG_SIZ];
         sprintf(buf, "%s does not support analysis", first.tidy);
         DisplayError(buf, 0);
       } else {
+        /* [DM] icsEngineAnlyze [HGM] Why is this front-end??? */
+        if (appData.icsActive) {
+               if (gameMode != IcsObserving) {
+                       sprintf(buf, "You are not observing a game");
+                       DisplayError(buf, 0);
+                       /* secure check */
+                       if (appData.icsEngineAnalyze) {
+                               if (appData.debugMode) 
+                                       fprintf(debugFP, "Found unexpected active ICS engine analyze \n");
+                               ExitAnalyzeMode();
+                               ModeHighlight();
+                               break;
+                       }
+                       break;
+               } else {
+                       /* if enable, user want disable icsEngineAnalyze */
+                       if (appData.icsEngineAnalyze) {
+                               ExitAnalyzeMode();
+                               ModeHighlight();
+                               break;
+                       }
+                       appData.icsEngineAnalyze = TRUE;
+                       if (appData.debugMode) fprintf(debugFP, "ICS engine analyze starting...\n");
+               }
+        } 
 	if (!appData.showThinking) ToggleShowThinking();
 	AnalyzeModeEvent();
       }
@@ -3727,6 +5888,10 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       PopUpMoveDialog('\000');
       break;
 
+    case IDM_TypeInName:
+      PopUpNameDialog('\000');
+      break;
+
     case IDM_Backward:
       BackwardEvent();
       SetFocus(hwndMain);
@@ -3768,14 +5933,28 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       DrawPosition(FALSE, NULL);
       break;
 
+    case IDM_FlipClock:
+      flipClock = !flipClock;
+      DisplayBothClocks();
+      break;
+
     case IDM_GeneralOptions:
       GeneralOptionsPopup(hwnd);
+      DrawPosition(TRUE, NULL);
       break;
 
     case IDM_BoardOptions:
       BoardOptionsPopup(hwnd);
       break;
 
+    case IDM_EnginePlayOptions:
+      EnginePlayOptionsPopup(hwnd);
+      break;
+
+    case IDM_OptionsUCI:
+      UciOptionsPopup(hwnd);
+      break;
+
     case IDM_IcsOptions:
       IcsOptionsPopup(hwnd);
       break;
@@ -3833,7 +6012,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 	char dir[MSG_SIZ];
 	GetCurrentDirectory(MSG_SIZ, dir);
 	SetCurrentDirectory(installDir);
-	debugFP = fopen("WinBoard.debug", "w");
+	debugFP = fopen(appData.nameOfDebugFile, "w");
         SetCurrentDirectory(dir);
         setbuf(debugFP, NULL);
       } else {
@@ -3908,6 +6087,36 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       fromX = fromY = -1;
       break;
 
+    case EP_WhiteFerz:
+      EditPositionMenuEvent(WhiteFerz, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_WhiteWazir:
+      EditPositionMenuEvent(WhiteWazir, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_WhiteAlfil:
+      EditPositionMenuEvent(WhiteAlfil, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_WhiteCannon:
+      EditPositionMenuEvent(WhiteCannon, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_WhiteCardinal:
+      EditPositionMenuEvent(WhiteAngel, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_WhiteMarshall:
+      EditPositionMenuEvent(WhiteMarshall, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
     case EP_WhiteKing:
       EditPositionMenuEvent(WhiteKing, fromX, fromY);
       fromX = fromY = -1;
@@ -3938,6 +6147,36 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       fromX = fromY = -1;
       break;
 
+    case EP_BlackFerz:
+      EditPositionMenuEvent(BlackFerz, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_BlackWazir:
+      EditPositionMenuEvent(BlackWazir, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_BlackAlfil:
+      EditPositionMenuEvent(BlackAlfil, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_BlackCannon:
+      EditPositionMenuEvent(BlackCannon, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_BlackCardinal:
+      EditPositionMenuEvent(BlackAngel, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_BlackMarshall:
+      EditPositionMenuEvent(BlackMarshall, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
     case EP_BlackKing:
       EditPositionMenuEvent(BlackKing, fromX, fromY);
       fromX = fromY = -1;
@@ -3963,6 +6202,16 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       fromX = fromY = -1;
       break;
 
+    case EP_Promote:
+      EditPositionMenuEvent(PromotePiece, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
+    case EP_Demote:
+      EditPositionMenuEvent(DemotePiece, fromX, fromY);
+      fromX = fromY = -1;
+      break;
+
     case DP_Pawn:
       DropMenuEvent(WhitePawn, fromX, fromY);
       fromX = fromY = -1;
@@ -4006,8 +6255,8 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       AutoPlayGameLoop(); /* call into back end */
       break;
     case ANALYSIS_TIMER_ID:
-      if ((gameMode == AnalyzeMode || gameMode == AnalyzeFile) && 
-	  appData.periodicUpdates) {
+      if ((gameMode == AnalyzeMode || gameMode == AnalyzeFile
+                 || appData.icsEngineAnalyze) && appData.periodicUpdates) {
 	AnalysisPeriodicEvent(0);
       } else {
 	KillTimer(hwnd, analysisTimerEvent);
@@ -4026,20 +6275,54 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     InputEvent(hwnd, message, wParam, lParam);
     break;
 
+  /* [AS] Also move "attached" child windows */
+  case WM_WINDOWPOSCHANGING:
+
+    if( hwnd == hwndMain && appData.useStickyWindows ) {
+        LPWINDOWPOS lpwp = (LPWINDOWPOS) lParam;
+
+        if( ((lpwp->flags & SWP_NOMOVE) == 0) && ((lpwp->flags & SWP_NOSIZE) != 0) ) {
+            /* Window is moving */
+            RECT rcMain;
+
+//            GetWindowRect( hwnd, &rcMain ); //[HGM] sticky: in XP this returned new position, not old
+	    rcMain.left   = boardX;           //              replace by these 4 lines to reconstruct old rect
+	    rcMain.right  = boardX + winWidth;
+	    rcMain.top    = boardY;
+	    rcMain.bottom = boardY + winHeight;
+            
+            ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, moveHistoryDialog, &wpMoveHistory );
+            ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, evalGraphDialog, &wpEvalGraph );
+            ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, engineOutputDialog, &wpEngineOutput );
+	    boardX = lpwp->x;
+            boardY = lpwp->y;
+        }
+    }
+    break;
+
+  /* [AS] Snapping */
   case WM_ENTERSIZEMOVE:
+    if(appData.debugMode) { fprintf(debugFP, "size-move\n"); }
     if (hwnd == hwndMain) {
       doingSizing = TRUE;
       lastSizing = 0;
     }
+    return OnEnterSizeMove( &sd, hwnd, wParam, lParam );
     break;
 
   case WM_SIZING:
+    if(appData.debugMode) { fprintf(debugFP, "sizing\n"); }
     if (hwnd == hwndMain) {
       lastSizing = wParam;
     }
     break;
 
+  case WM_MOVING:
+    if(appData.debugMode) { fprintf(debugFP, "moving\n"); }
+      return OnMoving( &sd, hwnd, wParam, lParam );
+
   case WM_EXITSIZEMOVE:
+    if(appData.debugMode) { fprintf(debugFP, "exit size-move, size = %d\n", squareSize); }
     if (hwnd == hwndMain) {
       RECT client;
       doingSizing = FALSE;
@@ -4047,7 +6330,9 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       GetClientRect(hwnd, &client);
       ResizeBoard(client.right, client.bottom, lastSizing);
       lastSizing = 0;
+      if(appData.debugMode) { fprintf(debugFP, "square size = %d\n", squareSize); }
     }
+    return OnExitSizeMove( &sd, hwnd, wParam, lParam );
     break;
 
   case WM_DESTROY: /* message: window being destroyed */
@@ -4293,7 +6578,7 @@ OpenFileHook(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
 
 
 FILE *
-OpenFileDialog(HWND hwnd, BOOL write, char *defName, char *defExt,
+OpenFileDialog(HWND hwnd, char *write, char *defName, char *defExt, // [HGM] diag: type of 'write' now string
 	       char *nameFilt, char *dlgTitle, UINT *number,
 	       char fileTitle[MSG_SIZ], char fileName[MSG_SIZ])
 {
@@ -4325,7 +6610,7 @@ OpenFileDialog(HWND hwnd, BOOL write, char *defName, char *defExt,
   openFileName.lpstrInitialDir   = NULL;
   openFileName.lpstrTitle        = dlgTitle;
   openFileName.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY 
-    | (write ? 0 : OFN_FILEMUSTEXIST) 
+    | (write[0] != 'r' ? 0 : OFN_FILEMUSTEXIST) 
     | (number ? OFN_ENABLETEMPLATE | OFN_ENABLEHOOK: 0)
     | (oldDialog ? 0 : OFN_EXPLORER);
   openFileName.nFileOffset       = 0;
@@ -4336,10 +6621,10 @@ OpenFileDialog(HWND hwnd, BOOL write, char *defName, char *defExt,
     (LPOFNHOOKPROC) OldOpenFileHook : (LPOFNHOOKPROC) OpenFileHook;
   openFileName.lpTemplateName    = (LPSTR)(oldDialog ? 1536 : DLG_IndexNumber);
 
-  if (write ? GetSaveFileName(&openFileName) : 
-              GetOpenFileName(&openFileName)) {
+  if (write[0] != 'r' ? GetSaveFileName(&openFileName) : 
+                        GetOpenFileName(&openFileName)) {
     /* open the file */
-    f = fopen(openFileName.lpstrFile, write ? "a" : "rb");
+    f = fopen(openFileName.lpstrFile, write);
     if (f == NULL) {
       MessageBox(hwnd, "File open failed", NULL,
 		 MB_OK|MB_ICONEXCLAMATION);
@@ -4440,8 +6725,7 @@ ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX,
   EndDeferWindowPos(cl.hdwp);
 }
 
-/* Center one window over another */
-BOOL CenterWindow (HWND hwndChild, HWND hwndParent)
+BOOL CenterWindowEx(HWND hwndChild, HWND hwndParent, int mode)
 {
     RECT    rChild, rParent;
     int     wChild, hChild, wParent, hParent;
@@ -4473,7 +6757,13 @@ BOOL CenterWindow (HWND hwndChild, HWND hwndParent)
     }
 
     /* Calculate new Y position, then adjust for screen */
-    yNew = rParent.top  + ((hParent - hChild) /2);
+    if( mode == 0 ) {
+        yNew = rParent.top  + ((hParent - hChild) /2);
+    }
+    else {
+        yNew = rParent.top + GetSystemMetrics( SM_CYCAPTION ) * 2 / 3;
+    }
+
     if (yNew < 0) {
 	yNew = 0;
     } else if ((yNew+hChild) > hScreen) {
@@ -4485,6 +6775,12 @@ BOOL CenterWindow (HWND hwndChild, HWND hwndParent)
 			 xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
 }
 
+/* Center one window over another */
+BOOL CenterWindow (HWND hwndChild, HWND hwndParent)
+{
+    return CenterWindowEx( hwndChild, hwndParent, 0 );
+}
+
 /*---------------------------------------------------------------------------*\
  *
  * Startup Dialog functions
@@ -4537,7 +6833,7 @@ SetStartupDialogEnables(HWND hDlg)
 {
   EnableWindow(GetDlgItem(hDlg, OPT_ChessEngineName),
     IsDlgButtonChecked(hDlg, OPT_ChessEngine) ||
-    appData.zippyPlay && IsDlgButtonChecked(hDlg, OPT_ChessServer));
+    (appData.zippyPlay && IsDlgButtonChecked(hDlg, OPT_ChessServer)));
   EnableWindow(GetDlgItem(hDlg, OPT_SecondChessEngineName),
     IsDlgButtonChecked(hDlg, OPT_ChessEngine));
   EnableWindow(GetDlgItem(hDlg, OPT_ChessServerName),
@@ -4620,13 +6916,17 @@ StartupDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0);
       SendMessage(hwndCombo, WM_SETTEXT, (WPARAM) 0, (LPARAM) buf);
     }
-    if (chessProgram) {
-      CheckDlgButton(hDlg, OPT_ChessEngine, BST_CHECKED);
-    } else if (appData.icsActive) {
+
+    if (appData.icsActive) {
       CheckDlgButton(hDlg, OPT_ChessServer, BST_CHECKED);
-    } else if (appData.noChessProgram) {
+    }
+    else if (appData.noChessProgram) {
       CheckDlgButton(hDlg, OPT_View, BST_CHECKED);
     }
+    else {
+      CheckDlgButton(hDlg, OPT_ChessEngine, BST_CHECKED);
+    }
+
     SetStartupDialogEnables(hDlg);
     return TRUE;
 
@@ -4901,7 +7201,7 @@ TypeInMoveDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   case WM_INITDIALOG:
     move[0] = (char) lParam;
     move[1] = NULLCHAR;
-    CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));
+    CenterWindowEx(hDlg, GetWindow(hDlg, GW_OWNER), 1 );
     hInput = GetDlgItem(hDlg, OPT_Move);
     SetWindowText(hInput, move);
     SetFocus(hInput);
@@ -4958,6 +7258,59 @@ PopUpMoveDialog(char firstchar)
 
 /*---------------------------------------------------------------------------*\
  *
+ * Type-in name dialog functions
+ * 
+\*---------------------------------------------------------------------------*/
+
+LRESULT CALLBACK
+TypeInNameDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  char move[MSG_SIZ];
+  HWND hInput;
+
+  switch (message) {
+  case WM_INITDIALOG:
+    move[0] = (char) lParam;
+    move[1] = NULLCHAR;
+    CenterWindowEx(hDlg, GetWindow(hDlg, GW_OWNER), 1 );
+    hInput = GetDlgItem(hDlg, OPT_Name);
+    SetWindowText(hInput, move);
+    SetFocus(hInput);
+    SendMessage(hInput, EM_SETSEL, (WPARAM)9999, (LPARAM)9999);
+    return FALSE;
+
+  case WM_COMMAND:
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      GetDlgItemText(hDlg, OPT_Name, move, sizeof(move));
+      appData.userName = strdup(move);
+
+      EndDialog(hDlg, TRUE);
+      return TRUE;
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+    default:
+      break;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+VOID
+PopUpNameDialog(char firstchar)
+{
+    FARPROC lpProc;
+    
+      lpProc = MakeProcInstance((FARPROC)TypeInNameDialog, hInst);
+      DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_TypeInName),
+	hwndMain, (DLGPROC)lpProc, (LPARAM)firstchar);
+      FreeProcInstance(lpProc);
+}
+
+/*---------------------------------------------------------------------------*\
+ *
  *  Error dialogs
  * 
 \*---------------------------------------------------------------------------*/
@@ -5020,9 +7373,21 @@ ErrorDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   switch (message) {
   case WM_INITDIALOG:
     GetWindowRect(hDlg, &rChild);
+
+    /*
     SetWindowPos(hDlg, NULL, rChild.left,
       rChild.top + boardRect.top - (rChild.bottom - rChild.top), 
       0, 0, SWP_NOZORDER|SWP_NOSIZE);
+    */
+
+    /* 
+        [AS] It seems that the above code wants to move the dialog up in the "caption
+        area" of the main window, but it uses the dialog height as an hard-coded constant,
+        and it doesn't work when you resize the dialog.
+        For now, just give it a default position.
+    */
+    SetWindowPos(hDlg, NULL, boardRect.left+8, boardRect.top+8, 0, 0, SWP_NOZORDER|SWP_NOSIZE);
+
     errorDialog = hDlg;
     SetWindowText(hDlg, errorTitle);
     hwndText = GetDlgItem(hDlg, OPT_ErrorText);
@@ -5045,6 +7410,74 @@ ErrorDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   return FALSE;
 }
 
+#ifdef GOTHIC
+HWND gothicDialog = NULL;
+
+LRESULT CALLBACK
+GothicDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  HANDLE hwndText;
+  RECT rChild;
+  int height = GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYFRAME);
+
+  switch (message) {
+  case WM_INITDIALOG:
+    GetWindowRect(hDlg, &rChild);
+
+    SetWindowPos(hDlg, NULL, boardX, boardY-height, winWidth, height,
+                                                             SWP_NOZORDER);
+
+    /* 
+        [AS] It seems that the above code wants to move the dialog up in the "caption
+        area" of the main window, but it uses the dialog height as an hard-coded constant,
+        and it doesn't work when you resize the dialog.
+        For now, just give it a default position.
+    */
+    gothicDialog = hDlg;
+    SetWindowText(hDlg, errorTitle);
+    hwndText = GetDlgItem(hDlg, OPT_ErrorText);
+    SetDlgItemText(hDlg, OPT_ErrorText, errorMessage);
+    return FALSE;
+
+  case WM_COMMAND:
+    switch (LOWORD(wParam)) {
+    case IDOK:
+    case IDCANCEL:
+      if (errorDialog == hDlg) errorDialog = NULL;
+      DestroyWindow(hDlg);
+      return TRUE;
+
+    default:
+      break;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+VOID
+GothicPopUp(char *title, VariantClass variant)
+{
+  FARPROC lpProc;
+  static char *lastTitle;
+
+  strncpy(errorTitle, title, sizeof(errorTitle));
+  errorTitle[sizeof(errorTitle) - 1] = '\0';
+
+  if(lastTitle != title && gothicDialog != NULL) {
+    DestroyWindow(gothicDialog);
+    gothicDialog = NULL;
+  }
+  if(variant != VariantNormal && gothicDialog == NULL) {
+    title = lastTitle;
+    lpProc = MakeProcInstance((FARPROC)GothicDialog, hInst);
+    CreateDialog(hInst, MAKEINTRESOURCE(DLG_Error),
+		 hwndMain, (DLGPROC)lpProc);
+    FreeProcInstance(lpProc);
+  }
+}
+#endif
+
 /*---------------------------------------------------------------------------*\
  *
  *  Ics Interaction console functions
@@ -5106,7 +7539,7 @@ IcsTextMenuEntry icsTextMenuEntry[ICS_TEXT_MENU_SIZE];
 void
 ParseIcsTextMenu(char *icsTextMenuString)
 {
-  int flags = 0;
+//  int flags = 0;
   IcsTextMenuEntry *e = icsTextMenuEntry;
   char *p = icsTextMenuString;
   while (e->item != NULL && e < icsTextMenuEntry + ICS_TEXT_MENU_SIZE) {
@@ -5548,8 +7981,9 @@ ConsoleInputSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 LRESULT CALLBACK
 ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 {
-  static HWND hText, hInput, hFocus;
-  InputSource *is = consoleInputSource;
+  static SnapData sd;
+  static HWND hText, hInput /*, hFocus*/;
+//  InputSource *is = consoleInputSource;
   RECT rect;
   static int sizeX, sizeY;
   int newSizeX, newSizeY;
@@ -5587,6 +8021,26 @@ ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       wp.rcNormalPosition.bottom = consoleY + consoleH;
       SetWindowPlacement(hDlg, &wp);
     }
+#if 0 
+   // [HGM] Chessknight's change 2004-07-13
+   else { /* Determine Defaults */
+       WINDOWPLACEMENT wp;
+       consoleX = winWidth + 1;
+       consoleY = boardY;
+       consoleW = screenWidth -  winWidth;
+       consoleH = winHeight;
+       EnsureOnScreen(&consoleX, &consoleY);
+       wp.length = sizeof(WINDOWPLACEMENT);
+       wp.flags = 0;
+       wp.showCmd = SW_SHOW;
+       wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;
+       wp.rcNormalPosition.left = consoleX;
+       wp.rcNormalPosition.right = consoleX + consoleW;
+       wp.rcNormalPosition.top = consoleY;
+       wp.rcNormalPosition.bottom = consoleY + consoleH;
+       SetWindowPlacement(hDlg, &wp);
+    }
+#endif
     return FALSE;
 
   case WM_SETFOCUS:
@@ -5634,7 +8088,21 @@ ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     mmi->ptMinTrackSize.x = 100;
     mmi->ptMinTrackSize.y = 100;
     break;
+
+  /* [AS] Snapping */
+  case WM_ENTERSIZEMOVE:
+    return OnEnterSizeMove( &sd, hDlg, wParam, lParam );
+
+  case WM_SIZING:
+    return OnSizing( &sd, hDlg, wParam, lParam );
+
+  case WM_MOVING:
+    return OnMoving( &sd, hDlg, wParam, lParam );
+
+  case WM_EXITSIZEMOVE:
+    return OnExitSizeMove( &sd, hDlg, wParam, lParam );
   }
+
   return DefWindowProc(hDlg, message, wParam, lParam);
 }
 
@@ -5742,8 +8210,39 @@ ConsoleOutput(char* data, int length, int forceVisible)
 
 
 void
+DisplayHoldingsCount(HDC hdc, int x, int y, int rightAlign, int copyNumber)
+{
+  char buf[100];
+  char *str;
+  COLORREF oldFg, oldBg;
+  HFONT oldFont;
+  RECT rect;
+
+  if(copyNumber > 1) sprintf(buf, "%d", copyNumber); else buf[0] = 0;
+
+  oldFg = SetTextColor(hdc, RGB(255, 255, 255)); /* white */
+  oldBg = SetBkColor(hdc, RGB(0, 0, 0)); /* black */
+  oldFont = SelectObject(hdc, font[boardSize][CLOCK_FONT]->hf);
+
+  rect.left = x;
+  rect.right = x + squareSize;
+  rect.top  = y;
+  rect.bottom = y + squareSize;
+  str = buf;
+
+  ExtTextOut(hdc, x + MESSAGE_LINE_LEFTMARGIN
+                    + (rightAlign ? (squareSize*2)/3 : 0),
+             y, ETO_CLIPPED|ETO_OPAQUE,
+             &rect, str, strlen(str), NULL);
+
+  (void) SetTextColor(hdc, oldFg);
+  (void) SetBkColor(hdc, oldBg);
+  (void) SelectObject(hdc, oldFont);
+}
+
+void
 DisplayAClock(HDC hdc, int timeRemaining, int highlight,
-	      RECT *rect, char *color)
+              RECT *rect, char *color, char *flagFell)
 {
   char buf[100];
   char *str;
@@ -5752,9 +8251,9 @@ DisplayAClock(HDC hdc, int timeRemaining, int highlight,
 
   if (appData.clockMode) {
     if (tinyLayout)
-      sprintf(buf, "%c %s", color[0], TimeString(timeRemaining));
+      sprintf(buf, "%c %s %s", color[0], TimeString(timeRemaining), flagFell);
     else
-      sprintf(buf, "%s: %s", color, TimeString(timeRemaining));
+      sprintf(buf, "%s: %s %s", color, TimeString(timeRemaining), flagFell);
     str = buf;
   } else {
     str = color;
@@ -5785,6 +8284,15 @@ DoReadFile(HANDLE hFile, char *buf, int count, DWORD *outCount,
 {
   int ok, err;
 
+  /* [AS]  */
+  if( count <= 0 ) {
+    if (appData.debugMode) {
+      fprintf( debugFP, "DoReadFile: trying to read past end of buffer, overflow = %d\n", count );
+    }
+
+    return ERROR_INVALID_USER_BUFFER;
+  }
+
   ResetEvent(ovl->hEvent);
   ovl->Offset = ovl->OffsetHigh = 0;
   ok = ReadFile(hFile, buf, count, outCount, ovl);
@@ -5827,6 +8335,28 @@ DoWriteFile(HANDLE hFile, char *buf, int count, DWORD *outCount,
   return err;
 }
 
+/* [AS] If input is line by line and a line exceed the buffer size, force an error */
+void CheckForInputBufferFull( InputSource * is )
+{
+    if( is->lineByLine && (is->next - is->buf) >= INPUT_SOURCE_BUF_SIZE ) {
+        /* Look for end of line */
+        char * p = is->buf;
+        
+        while( p < is->next && *p != '\n' ) {
+            p++;
+        }
+
+        if( p >= is->next ) {
+            if (appData.debugMode) {
+                fprintf( debugFP, "Input line exceeded buffer size (source id=%lu)\n", is->id );
+            }
+
+            is->error = ERROR_BROKEN_PIPE; /* [AS] Just any non-successful code! */
+            is->count = (DWORD) -1;
+            is->next = is->buf;
+        }
+    }
+}
 
 DWORD
 InputThread(LPVOID arg)
@@ -5849,13 +8379,27 @@ InputThread(LPVOID arg)
 	is->count = 0;
       } else {
 	is->count = (DWORD) -1;
+        /* [AS] The (is->count <= 0) check below is not useful for unsigned values! */
+        break; 
       }
     }
+
+    CheckForInputBufferFull( is );
+
     SendMessage(hwndMain, WM_USER_Input, 0, (LPARAM) is);
+
+    if( is->count == ((DWORD) -1) ) break; /* [AS] */
+
     if (is->count <= 0) break;  /* Quit on EOF or error */
   }
+
   CloseHandle(ovl.hEvent);
   CloseHandle(is->hFile);
+
+  if (appData.debugMode) {
+    fprintf( debugFP, "Input thread terminated (id=%lu, error=%d, count=%ld)\n", is->id, is->error, is->count );
+  }
+
   return 0;
 }
 
@@ -5905,7 +8449,13 @@ NonOvlInputThread(LPVOID arg)
 	is->count = (DWORD) -1;
       }
     }
+
+    CheckForInputBufferFull( is );
+
     SendMessage(hwndMain, WM_USER_Input, 0, (LPARAM) is);
+
+    if( is->count == ((DWORD) -1) ) break; /* [AS] */
+
     if (is->count < 0) break;  /* Quit on error */
   }
   CloseHandle(is->hFile);
@@ -5932,6 +8482,9 @@ SocketInputThread(LPVOID arg)
       }
     }
     SendMessage(hwndMain, WM_USER_Input, 0, (LPARAM) is);
+
+    if( is->count == ((DWORD) -1) ) break; /* [AS] */
+
     if (is->count <= 0) break;  /* Quit on EOF or error */
   }
   return 0;
@@ -5953,12 +8506,14 @@ InputEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 	p = q;
       }
     }
+    
     /* Move any partial line to the start of the buffer */
     q = is->buf;
     while (p < is->next) {
       *q++ = *p++;
     }
     is->next = q;
+
     if (is->error != NO_ERROR || is->count == 0) {
       /* Notify backend of the error.  Note: If there was a partial
 	 line at the end, it is not flushed through. */
@@ -6011,7 +8566,7 @@ Enables icsEnables[] = {
   { IDM_MachineWhite, MF_BYCOMMAND|MF_GRAYED },
   { IDM_MachineBlack, MF_BYCOMMAND|MF_GRAYED },
   { IDM_TwoMachines, MF_BYCOMMAND|MF_GRAYED },
-  { IDM_AnalysisMode, MF_BYCOMMAND|MF_GRAYED },
+  { IDM_AnalysisMode, MF_BYCOMMAND|MF_ENABLED },
   { IDM_AnalyzeFile, MF_BYCOMMAND|MF_GRAYED },
   { IDM_TimeControl, MF_BYCOMMAND|MF_GRAYED },
   { IDM_MoveNow, MF_BYCOMMAND|MF_GRAYED },
@@ -6206,6 +8761,17 @@ ModeHighlight()
   }
 
   prevChecked = nowChecked;
+
+  /* [DM] icsEngineAnalyze - Do a sceure check too */
+  if (appData.icsActive) {
+       if (appData.icsEngineAnalyze) {
+               (void) CheckMenuItem(GetMenu(hwndMain), IDM_AnalysisMode,
+                       MF_BYCOMMAND|MF_CHECKED);
+       } else {
+               (void) CheckMenuItem(GetMenu(hwndMain), IDM_AnalysisMode,
+                       MF_BYCOMMAND|MF_UNCHECKED);
+       }
+  }
 }
 
 VOID
@@ -6218,6 +8784,9 @@ SetICSMode()
 #ifdef ZIPPY
   if (appData.zippyPlay) {
     SetMenuEnables(hmenu, zippyEnables);
+    if (!appData.noChessProgram)     /* [DM] icsEngineAnalyze */
+         (void) EnableMenuItem(GetMenu(hwndMain), IDM_AnalysisMode,
+          MF_BYCOMMAND|MF_ENABLED);
   }
 #endif
 }
@@ -6342,7 +8911,7 @@ DisplayMessage(char *str1, char *str2)
   }
   messageText[MESSAGE_TEXT_MAX - 1] = NULLCHAR;
 
-  if (IsIconic(hwndMain)) return;
+  if (hwndMain == NULL || IsIconic(hwndMain)) return;
   hdc = GetDC(hwndMain);
   oldFont = SelectObject(hdc, font[boardSize][MESSAGE_FONT]->hf);
   ExtTextOut(hdc, messageRect.left, messageRect.top, ETO_CLIPPED|ETO_OPAQUE,
@@ -6354,10 +8923,8 @@ DisplayMessage(char *str1, char *str2)
 VOID
 DisplayError(char *str, int error)
 {
-  FARPROC lpProc;
   char buf[MSG_SIZ*2], buf2[MSG_SIZ];
   int len;
-  char *p, *q;
 
   if (error == 0) {
     strcpy(buf, str);
@@ -6505,6 +9072,272 @@ AskQuestion(char* title, char *question, char *replyPrefix, ProcRef pr)
     FreeProcInstance(lpProc);
 }
 
+/* [AS] Pick FRC position */
+LRESULT CALLBACK NewGameFRC_Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+    static int * lpIndexFRC;
+    BOOL index_is_ok;
+    char buf[16];
+
+    switch( message )
+    {
+    case WM_INITDIALOG:
+        lpIndexFRC = (int *) lParam;
+
+        CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));
+
+        SendDlgItemMessage( hDlg, IDC_NFG_Edit, EM_SETLIMITTEXT, sizeof(buf)-1, 0 );
+        SetDlgItemInt( hDlg, IDC_NFG_Edit, *lpIndexFRC, TRUE );
+        SendDlgItemMessage( hDlg, IDC_NFG_Edit, EM_SETSEL, 0, -1 );
+        SetFocus(GetDlgItem(hDlg, IDC_NFG_Edit));
+
+        break;
+
+    case WM_COMMAND:
+        switch( LOWORD(wParam) ) {
+        case IDOK:
+            *lpIndexFRC = GetDlgItemInt(hDlg, IDC_NFG_Edit, &index_is_ok, TRUE );
+            EndDialog( hDlg, 0 );
+	    shuffleOpenings = TRUE; /* [HGM] shuffle: switch shuffling on for as long as we stay in current variant */
+            return TRUE;
+        case IDCANCEL:
+            EndDialog( hDlg, 1 );   
+            return TRUE;
+        case IDC_NFG_Edit:
+            if( HIWORD(wParam) == EN_CHANGE ) {
+                GetDlgItemInt(hDlg, IDC_NFG_Edit, &index_is_ok, TRUE );
+
+                EnableWindow( GetDlgItem(hDlg, IDOK), index_is_ok );
+            }
+            return TRUE;
+        case IDC_NFG_Random:
+            sprintf( buf, "%d", myrandom() ); /* [HGM] shuffle: no longer limit to 960 */
+            SetDlgItemText(hDlg, IDC_NFG_Edit, buf );
+            return TRUE;
+        }
+
+        break;
+    }
+
+    return FALSE;
+}
+
+int NewGameFRC()
+{
+    int result;
+    int index = appData.defaultFrcPosition;
+    FARPROC lpProc = MakeProcInstance( (FARPROC) NewGameFRC_Proc, hInst );
+
+    result = DialogBoxParam( hInst, MAKEINTRESOURCE(DLG_NewGameFRC), hwndMain, (DLGPROC)lpProc, (LPARAM)&index );
+
+    if( result == 0 ) {
+        appData.defaultFrcPosition = index;
+    }
+
+    return result;
+}
+
+/* [AS] Game list options */
+typedef struct {
+    char id;
+    char * name;
+} GLT_Item;
+
+static GLT_Item GLT_ItemInfo[] = {
+    { GLT_EVENT,      "Event" },
+    { GLT_SITE,       "Site" },
+    { GLT_DATE,       "Date" },
+    { GLT_ROUND,      "Round" },
+    { GLT_PLAYERS,    "Players" },
+    { GLT_RESULT,     "Result" },
+    { GLT_WHITE_ELO,  "White Rating" },
+    { GLT_BLACK_ELO,  "Black Rating" },
+    { GLT_TIME_CONTROL,"Time Control" },
+    { GLT_VARIANT,    "Variant" },
+    { GLT_OUT_OF_BOOK,PGN_OUT_OF_BOOK },
+    { 0, 0 }
+};
+
+const char * GLT_FindItem( char id )
+{
+    const char * result = 0;
+
+    GLT_Item * list = GLT_ItemInfo;
+
+    while( list->id != 0 ) {
+        if( list->id == id ) {
+            result = list->name;
+            break;
+        }
+
+        list++;
+    }
+
+    return result;
+}
+
+void GLT_AddToList( HWND hDlg, int iDlgItem, char id, int index )
+{
+    const char * name = GLT_FindItem( id );
+
+    if( name != 0 ) {
+        if( index >= 0 ) {
+            SendDlgItemMessage( hDlg, iDlgItem, LB_INSERTSTRING, index, (LPARAM) name );
+        }
+        else {
+            SendDlgItemMessage( hDlg, iDlgItem, LB_ADDSTRING, 0, (LPARAM) name );
+        }
+    }
+}
+
+void GLT_TagsToList( HWND hDlg, char * tags )
+{
+    char * pc = tags;
+
+    SendDlgItemMessage( hDlg, IDC_GameListTags, LB_RESETCONTENT, 0, 0 );
+
+    while( *pc ) {
+        GLT_AddToList( hDlg, IDC_GameListTags, *pc, -1 );
+        pc++;
+    }
+
+    SendDlgItemMessage( hDlg, IDC_GameListTags, LB_ADDSTRING, 0, (LPARAM) "\t --- Hidden tags ---" );
+
+    pc = GLT_ALL_TAGS;
+
+    while( *pc ) {
+        if( strchr( tags, *pc ) == 0 ) {
+            GLT_AddToList( hDlg, IDC_GameListTags, *pc, -1 );
+        }
+        pc++;
+    }
+
+    SendDlgItemMessage( hDlg, IDC_GameListTags, LB_SETCURSEL, 0, 0 );
+}
+
+char GLT_ListItemToTag( HWND hDlg, int index )
+{
+    char result = '\0';
+    char name[128];
+
+    GLT_Item * list = GLT_ItemInfo;
+
+    if( SendDlgItemMessage( hDlg, IDC_GameListTags, LB_GETTEXT, index, (LPARAM) name ) != LB_ERR ) {
+        while( list->id != 0 ) {
+            if( strcmp( list->name, name ) == 0 ) {
+                result = list->id;
+                break;
+            }
+
+            list++;
+        }
+    }
+
+    return result;
+}
+
+void GLT_MoveSelection( HWND hDlg, int delta )
+{
+    int idx1 = (int) SendDlgItemMessage( hDlg, IDC_GameListTags, LB_GETCURSEL, 0, 0 );
+    int idx2 = idx1 + delta;
+    int count = (int) SendDlgItemMessage( hDlg, IDC_GameListTags, LB_GETCOUNT, 0, 0 );
+
+    if( idx1 >=0 && idx1 < count && idx2 >= 0 && idx2 < count ) {
+        char buf[128];
+
+        SendDlgItemMessage( hDlg, IDC_GameListTags, LB_GETTEXT, idx1, (LPARAM) buf );
+        SendDlgItemMessage( hDlg, IDC_GameListTags, LB_DELETESTRING, idx1, 0 );
+        SendDlgItemMessage( hDlg, IDC_GameListTags, LB_INSERTSTRING, idx2, (LPARAM) buf );
+        SendDlgItemMessage( hDlg, IDC_GameListTags, LB_SETCURSEL, idx2, 0 );
+    }
+}
+
+LRESULT CALLBACK GameListOptions_Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+    static char glt[64];
+    static char * lpUserGLT;
+
+    switch( message )
+    {
+    case WM_INITDIALOG:
+        lpUserGLT = (char *) lParam;
+        
+        strcpy( glt, lpUserGLT );
+
+        CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));
+
+        /* Initialize list */
+        GLT_TagsToList( hDlg, glt );
+
+        SetFocus( GetDlgItem(hDlg, IDC_GameListTags) );
+
+        break;
+
+    case WM_COMMAND:
+        switch( LOWORD(wParam) ) {
+        case IDOK:
+            {
+                char * pc = lpUserGLT;
+                int idx = 0;
+//                int cnt = (int) SendDlgItemMessage( hDlg, IDC_GameListTags, LB_GETCOUNT, 0, 0 );
+                char id;
+
+                do {
+                    id = GLT_ListItemToTag( hDlg, idx );
+
+                    *pc++ = id;
+                    idx++;
+                } while( id != '\0' );
+            }
+            EndDialog( hDlg, 0 );
+            return TRUE;
+        case IDCANCEL:
+            EndDialog( hDlg, 1 );
+            return TRUE;
+
+        case IDC_GLT_Default:
+            strcpy( glt, GLT_DEFAULT_TAGS );
+            GLT_TagsToList( hDlg, glt );
+            return TRUE;
+
+        case IDC_GLT_Restore:
+            strcpy( glt, lpUserGLT );
+            GLT_TagsToList( hDlg, glt );
+            return TRUE;
+
+        case IDC_GLT_Up:
+            GLT_MoveSelection( hDlg, -1 );
+            return TRUE;
+
+        case IDC_GLT_Down:
+            GLT_MoveSelection( hDlg, +1 );
+            return TRUE;
+        }
+
+        break;
+    }
+
+    return FALSE;
+}
+
+int GameListOptions()
+{
+    char glt[64];
+    int result;
+    FARPROC lpProc = MakeProcInstance( (FARPROC) GameListOptions_Proc, hInst );
+
+    strcpy( glt, appData.gameListTags );
+
+    result = DialogBoxParam( hInst, MAKEINTRESOURCE(DLG_GameListOptions), hwndMain, (DLGPROC)lpProc, (LPARAM)glt );
+
+    if( result == 0 ) {
+        /* [AS] Memory leak here! */
+        appData.gameListTags = strdup( glt ); 
+    }
+
+    return result;
+}
+
 
 VOID
 DisplayIcsInteractionTitle(char *str)
@@ -6638,6 +9471,9 @@ UserName()
   static char buf[MSG_SIZ];
   DWORD bufsiz = MSG_SIZ;
 
+  if(appData.userName != NULL && appData.userName[0] != 0) { 
+	return appData.userName; /* [HGM] username: prefer name selected by user over his system login */
+  }
   if (!GetUserName(buf, &bufsiz)) {
     /*DisplayError("Error getting user name", GetLastError());*/
     strcpy(buf, "User");
@@ -6685,9 +9521,13 @@ void
 DisplayWhiteClock(long timeRemaining, int highlight)
 {
   HDC hdc;
+  char *flag = whiteFlag && gameMode == TwoMachinesPlay ? "(!)" : "";
+
+  if(appData.noGUI) return;
   hdc = GetDC(hwndMain);
   if (!IsIconic(hwndMain)) {
-    DisplayAClock(hdc, timeRemaining, highlight, &whiteRect, "White");
+    DisplayAClock(hdc, timeRemaining, highlight, 
+			(logoHeight > 0 ? flipView: flipClock) ? &blackRect : &whiteRect, "White", flag);
   }
   if (highlight && iconCurrent == iconBlack) {
     iconCurrent = iconWhite;
@@ -6705,9 +9545,13 @@ void
 DisplayBlackClock(long timeRemaining, int highlight)
 {
   HDC hdc;
+  char *flag = blackFlag && gameMode == TwoMachinesPlay ? "(!)" : "";
+
+  if(appData.noGUI) return;
   hdc = GetDC(hwndMain);
   if (!IsIconic(hwndMain)) {
-    DisplayAClock(hdc, timeRemaining, highlight, &blackRect, "Black");
+    DisplayAClock(hdc, timeRemaining, highlight, 
+			(logoHeight > 0 ? flipView: flipClock) ? &whiteRect : &blackRect, "Black", flag);
   }
   if (highlight && iconCurrent == iconWhite) {
     iconCurrent = iconBlack;
@@ -6752,7 +9596,7 @@ AutoSaveGame()
   char fileTitle[MSG_SIZ];
 
   defName = DefaultFileName(appData.oldSaveStyle ? "gam" : "pgn");
-  f = OpenFileDialog(hwndMain, TRUE, defName,
+  f = OpenFileDialog(hwndMain, "a", defName,
 		     appData.oldSaveStyle ? "gam" : "pgn",
 		     GAME_FILT, 
 		     "Save Game to File", NULL, fileTitle, NULL);
@@ -6798,6 +9642,23 @@ CancelDelayedEvent()
   }
 }
 
+DWORD GetWin32Priority(int nice)
+{ // [HGM] nice: translate Unix nice() value to indows priority class. (Code stolen from Polyglot 1.4w11)
+/*
+REALTIME_PRIORITY_CLASS     0x00000100
+HIGH_PRIORITY_CLASS         0x00000080
+ABOVE_NORMAL_PRIORITY_CLASS 0x00008000
+NORMAL_PRIORITY_CLASS       0x00000020
+BELOW_NORMAL_PRIORITY_CLASS 0x00004000
+IDLE_PRIORITY_CLASS         0x00000040
+*/
+        if (nice < -15) return 0x00000080;
+        if (nice < 0)   return 0x00008000;
+        if (nice == 0)  return 0x00000020;
+        if (nice < 15)  return 0x00004000;
+        return 0x00000040;
+}
+
 /* Start a child process running the given program.
    The process's standard output can be read from "from", and its
    standard input can be written to "to".
@@ -6913,6 +9774,11 @@ StartChildProcess(char *cmdLine, char *dir, ProcRef *pr)
     return err;
   }
 
+  if (appData.niceEngines){ // [HGM] nice: adjust engine proc priority
+    if(appData.debugMode) fprintf(debugFP, "nice engine proc to %d\n", appData.niceEngines);
+    SetPriorityClass(piProcInfo.hProcess, GetWin32Priority(appData.niceEngines));
+  }
+
   /* Close the handles we don't need in the parent */
   CloseHandle(piProcInfo.hThread);
   CloseHandle(hChildStdinRd);
@@ -6943,7 +9809,7 @@ StartChildProcess(char *cmdLine, char *dir, ProcRef *pr)
 void
 DestroyChildProcess(ProcRef pr, int/*boolean*/ signal)
 {
-  ChildProc *cp;
+  ChildProc *cp; int result;
 
   cp = (ChildProc *) pr;
   if (cp == NULL) return;
@@ -6958,6 +9824,28 @@ DestroyChildProcess(ProcRef pr, int/*boolean*/ signal)
        we could arrange for this even though neither WinBoard
        nor the chess program uses a console for stdio? */
     /*!!if (signal) GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, cp->pid);*/
+
+    /* [AS] Special termination modes for misbehaving programs... */
+    if( signal == 9 ) { 
+        result = TerminateProcess( cp->hProcess, 0 );
+
+        if ( appData.debugMode) {
+            fprintf( debugFP, "Terminating process %lu, result=%d\n", cp->pid, result );
+        }
+    }
+    else if( signal == 10 ) {
+        DWORD dw = WaitForSingleObject( cp->hProcess, 3*1000 ); // Wait 3 seconds at most
+
+        if( dw != WAIT_OBJECT_0 ) {
+            result = TerminateProcess( cp->hProcess, 0 );
+
+            if ( appData.debugMode) {
+                fprintf( debugFP, "Process %lu still alive after timeout, killing... result=%d\n", cp->pid, result );
+            }
+
+        }
+    }
+
     CloseHandle(cp->hProcess);
     break;
 
@@ -7344,7 +10232,7 @@ InputSourceRef
 AddInputSource(ProcRef pr, int lineByLine,
 	       InputCallback func, VOIDSTAR closure)
 {
-  InputSource *is, *is2;
+  InputSource *is, *is2 = NULL;
   ChildProc *cp = (ChildProc *) pr;
 
   is = (InputSource *) calloc(1, sizeof(InputSource));
@@ -7358,13 +10246,18 @@ AddInputSource(ProcRef pr, int lineByLine,
     consoleInputSource = is;
   } else {
     is->kind = cp->kind;
+    /* 
+        [AS] Try to avoid a race condition if the thread is given control too early:
+        we create all threads suspended so that the is->hThread variable can be
+        safely assigned, then let the threads start with ResumeThread.
+    */
     switch (cp->kind) {
     case CPReal:
       is->hFile = cp->hFrom;
       cp->hFrom = NULL; /* now owned by InputThread */
       is->hThread =
 	CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) NonOvlInputThread,
-		     (LPVOID) is, 0, &is->id);
+		     (LPVOID) is, CREATE_SUSPENDED, &is->id);
       break;
 
     case CPComm:
@@ -7372,14 +10265,14 @@ AddInputSource(ProcRef pr, int lineByLine,
       cp->hFrom = NULL; /* now owned by InputThread */
       is->hThread =
 	CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) InputThread,
-		     (LPVOID) is, 0, &is->id);
+		     (LPVOID) is, CREATE_SUSPENDED, &is->id);
       break;
 
     case CPSock:
       is->sock = cp->sock;
       is->hThread =
 	CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread,
-		     (LPVOID) is, 0, &is->id);
+		     (LPVOID) is, CREATE_SUSPENDED, &is->id);
       break;
 
     case CPRcmd:
@@ -7391,13 +10284,22 @@ AddInputSource(ProcRef pr, int lineByLine,
       is2->second = is2;
       is->hThread =
 	CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread,
-		     (LPVOID) is, 0, &is->id);
+		     (LPVOID) is, CREATE_SUSPENDED, &is->id);
       is2->hThread =
 	CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread,
-		     (LPVOID) is2, 0, &is2->id);
+		     (LPVOID) is2, CREATE_SUSPENDED, &is2->id);
       break;
     }
+
+    if( is->hThread != NULL ) {
+        ResumeThread( is->hThread );
+    }
+
+    if( is2 != NULL && is2->hThread != NULL ) {
+        ResumeThread( is2->hThread );
+    }
   }
+
   return (InputSourceRef) is;
 }
 
@@ -7561,6 +10463,11 @@ AnalysisDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   case WM_COMMAND: /* message: received a command */
     switch (LOWORD(wParam)) {
     case IDCANCEL:
+      if (appData.icsActive && appData.icsEngineAnalyze) { /* [DM] icsEngineAnalyze */
+          ExitAnalyzeMode();
+          ModeHighlight();
+          return TRUE;
+      }
       EditGameEvent();
       return TRUE;
     default:
@@ -7592,6 +10499,10 @@ AnalysisPopUp(char* title, char* str)
   FARPROC lpProc;
   char *p, *q;
 
+  /* [AS] */
+  EngineOutputPopUp();
+  return;
+
   if (str == NULL) str = "";
   p = (char *) malloc(2 * strlen(str) + 2);
   q = p;
@@ -7683,6 +10594,22 @@ static void Tween( POINT * start, POINT * mid, POINT * finish, int factor,
      POINT frames[], int * nFrames);
 
 
+void
+AnimateAtomicCapture(int toX, int toY, int nFrames)
+{	// [HGM] atomic: animate blast wave
+	int i;
+if(appData.debugMode) fprintf(debugFP, "exploding (%d,%d)\n", toX, toY);
+	explodeInfo.x = toX;
+	explodeInfo.y = toY;
+	for(i=0; i<nFrames; i++) {
+	    explodeInfo.radius = (i*180)/(nFrames-1);
+	    DrawPosition(FALSE, NULL);
+	    Sleep(appData.animSpeed);
+	}
+	explodeInfo.radius = 0;
+	DrawPosition(TRUE, NULL);
+}
+
 #define kFactor 4
 
 void
@@ -7743,6 +10670,8 @@ AnimateMove(board, fromX, fromY, toX, toY)
   animInfo.pos = finish;
   DrawPosition(FALSE, NULL);
   animInfo.piece = EmptySquare;
+  if(gameInfo.variant == VariantAtomic && board[toY][toX] != EmptySquare)
+    AnimateAtomicCapture(toX, toY, 2*nFrames);
 }
 
 /*      Convert board position to corner of screen rect and color       */
@@ -7752,11 +10681,11 @@ ScreenSquare(column, row, pt)
      int column; int row; POINT * pt;
 {
   if (flipView) {
-    pt->x = lineGap + ((BOARD_SIZE-1)-column) * (squareSize + lineGap);
+    pt->x = lineGap + ((BOARD_WIDTH-1)-column) * (squareSize + lineGap);
     pt->y = lineGap + row * (squareSize + lineGap);
   } else {
     pt->x = lineGap + column * (squareSize + lineGap);
-    pt->y = lineGap + ((BOARD_SIZE-1)-row) * (squareSize + lineGap);
+    pt->y = lineGap + ((BOARD_HEIGHT-1)-row) * (squareSize + lineGap);
   }
 }
 
@@ -7804,9 +10733,32 @@ Tween(start, mid, finish, factor, frames, nFrames)
 }
 
 void
-HistorySet(char movelist[][2*MOVE_LEN], int first, int last, int current)
+HistorySet( char movelist[][2*MOVE_LEN], int first, int last, int current )
 {
-  /* Currently not implemented in WinBoard */
+#if 0
+    char buf[256];
+
+    sprintf( buf, "HistorySet: first=%d, last=%d, current=%d (%s)\n",
+        first, last, current, current >= 0 ? movelist[current] : "n/a" );
+
+    OutputDebugString( buf );
+#endif
+
+    MoveHistorySet( movelist, first, last, current, pvInfoList );
+
+    EvalGraphSet( first, last, current, pvInfoList );
 }
 
+void SetProgramStats( FrontEndProgramStats * stats )
+{
+#if 0
+    char buf[1024];
+
+    sprintf( buf, "SetStats for %d: depth=%d, nodes=%lu, score=%5.2f, time=%5.2f, pv=%s\n",
+        stats->which, stats->depth, stats->nodes, stats->score / 100.0, stats->time / 100.0, stats->pv == 0 ? "n/a" : stats->pv );
 
+    OutputDebugString( buf );
+#endif
+
+    EngineOutputUpdate( stats );
+}
diff --git a/winboard/winboard.dsp b/winboard/winboard.dsp
index 0c28bf9..2b5ff01 100644
--- a/winboard/winboard.dsp
+++ b/winboard/winboard.dsp
@@ -1,10 +1,10 @@
 # Microsoft Developer Studio Project File - Name="winboard" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
 # ** DO NOT EDIT **
 
-# TARGTYPE "Win32 (x86) External Target" 0x0106
+# TARGTYPE "Win32 (x86) Application" 0x0101
 
-CFG=winboard - Win32 Release
+CFG=winboard - Win32 Debug
 !MESSAGE This is not a valid makefile. To build this project using NMAKE,
 !MESSAGE use the Export Makefile command and run
 !MESSAGE 
@@ -13,55 +13,73 @@ CFG=winboard - Win32 Release
 !MESSAGE You can specify a configuration when running NMAKE
 !MESSAGE by defining the macro CFG on the command line. For example:
 !MESSAGE 
-!MESSAGE NMAKE /f "winboard.mak" CFG="winboard - Win32 Release"
+!MESSAGE NMAKE /f "winboard.mak" CFG="winboard - Win32 Debug"
 !MESSAGE 
 !MESSAGE Possible choices for configuration are:
 !MESSAGE 
-!MESSAGE "winboard - Win32 Release" (based on "Win32 (x86) External Target")
-!MESSAGE "winboard - Win32 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE "winboard - Win32 Release" (based on "Win32 (x86) Application")
+!MESSAGE "winboard - Win32 Debug" (based on "Win32 (x86) Application")
 !MESSAGE 
 
 # Begin Project
+# PROP AllowPerConfigDependencies 0
 # PROP Scc_ProjName ""
 # PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
 
 !IF  "$(CFG)" == "winboard - Win32 Release"
 
+# PROP BASE Use_MFC 0
 # PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ".\Release"
-# PROP BASE Intermediate_Dir ".\Release"
-# PROP BASE Cmd_Line "NMAKE /f winboard.mak"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "winboard.exe"
-# PROP BASE Bsc_Name "winboard.bsc"
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
 # PROP BASE Target_Dir ""
+# PROP Use_MFC 0
 # PROP Use_Debug_Libraries 0
-# PROP Output_Dir ".\Release"
-# PROP Intermediate_Dir ".\Release"
-# PROP Cmd_Line "nmake /f msvc.mak"
-# PROP Rebuild_Opt "/a"
-# PROP Target_File "winboard.exe"
-# PROP Bsc_Name "winboard.bsc"
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Og /Os /Oy /Gf /I "." /I ".." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D _WIN32_IE=0x300 /D WINVER=0x400 /D _WIN32_WINDOWS=0x500 /YX /Zl /FD /Gs /GA /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /i ".." /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 wsock32.lib comctl32.lib winmm.lib shell32.lib oldnames.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib msvcrt.lib /nologo /subsystem:windows /pdb:none /machine:I386
 
 !ELSEIF  "$(CFG)" == "winboard - Win32 Debug"
 
+# PROP BASE Use_MFC 0
 # PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir ".\Debug"
-# PROP BASE Intermediate_Dir ".\Debug"
-# PROP BASE Cmd_Line "NMAKE /f winboard.mak"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "winboard.exe"
-# PROP BASE Bsc_Name "winboard.bsc"
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
 # PROP BASE Target_Dir ""
+# PROP Use_MFC 0
 # PROP Use_Debug_Libraries 1
-# PROP Output_Dir ".\Debug"
-# PROP Intermediate_Dir ".\Debug"
-# PROP Cmd_Line "nmake /f msvc.mak"
-# PROP Rebuild_Opt "/a"
-# PROP Target_File "winboard.exe"
-# PROP Bsc_Name "winboard.bsc"
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D _WIN32_IE=0x300 /D WINVER=0x400 /D _WIN32_WINDOWS=0x500 /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /i ".." /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 wsock32.lib comctl32.lib winmm.lib shell32.lib oldnames.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib msvcrtd.lib /nologo /subsystem:windows /map /debug /machine:I386 /pdbtype:sept
 
 !ENDIF 
 
@@ -69,35 +87,28 @@ CFG=winboard - Win32 Release
 
 # Name "winboard - Win32 Release"
 # Name "winboard - Win32 Debug"
-
-!IF  "$(CFG)" == "winboard - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "winboard - Win32 Debug"
-
-!ENDIF 
-
 # Begin Group "Source Files"
 
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
 # Begin Source File
 
-SOURCE=.\backend.c
+SOURCE=..\backend.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\common.c
+SOURCE=..\book.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\gamelist.c
+SOURCE=..\gamelist.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\lists.c
+SOURCE=..\lists.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\moves.c
+SOURCE=..\moves.c
 # End Source File
 # Begin Source File
 
@@ -105,424 +116,85 @@ SOURCE=.\parser.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\parser.l
+SOURCE=..\pgntags.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\pgntags.c
+SOURCE=..\uci.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\wedittags.c
+SOURCE=.\wclipbrd.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\wgamelist.c
+SOURCE=.\wedittags.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\winboard.c
+SOURCE=.\wengineo.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\wsockerr.c
+SOURCE=.\wevalgraph.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\zippy.c
+SOURCE=.\wgamelist.c
 # End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
 # Begin Source File
 
-SOURCE=.\backend.h
+SOURCE=.\whistory.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\backendz.h
+SOURCE=.\winboard.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\common.h
-# End Source File
-# Begin Source File
+SOURCE=.\winboard.rc
 
-SOURCE=.\config.h
-# End Source File
-# Begin Source File
+!IF  "$(CFG)" == "winboard - Win32 Release"
 
-SOURCE=.\defaults.h
-# End Source File
-# Begin Source File
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
 
-SOURCE=.\frontend.h
-# End Source File
-# Begin Source File
+!ELSEIF  "$(CFG)" == "winboard - Win32 Debug"
 
-SOURCE=.\lists.h
-# End Source File
-# Begin Source File
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
 
-SOURCE=.\moves.h
-# End Source File
-# Begin Source File
+!ENDIF 
 
-SOURCE=.\parser.h
 # End Source File
 # Begin Source File
 
-SOURCE=.\resource.h
+SOURCE=.\wlayout.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\wedittags.h
+SOURCE=.\woptions.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\wgamelist.h
+SOURCE=.\wsnap.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\winboard.h
+SOURCE=.\wsockerr.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\wsockerr.h
+SOURCE=..\zippy.c
 # End Source File
-# Begin Source File
+# End Group
+# Begin Group "Header Files"
 
-SOURCE=.\zippy.h
-# End Source File
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
 # End Group
 # Begin Group "Resource Files"
 
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=.\bitmaps\B21o.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\B21s.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\B40o.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\B40s.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\B64s.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\B80o.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\B80s.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\bepbeep.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\board.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\ching.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\click.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\cymbal.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\Ding1.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\doodloop.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\drip.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\galactic.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\gong.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\honkhonk.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\icon_b.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\icon_ob.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\icon_ow.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\icon_whi.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\K21o.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\K21s.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\laser.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\move.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\N21o.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\N21s.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\P21o.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\P21s.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\penalty.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\phone.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\pop.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\pop2.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\Q21o.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\Q21s.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\R21o.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\R21s.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\R80o.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\R80s.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\slap.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\squeak.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\swish.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\thud.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\tim.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\whipcrak.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\winboard.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\WINBOARD.rtf
-# End Source File
-# Begin Source File
-
-SOURCE=.\bitmaps\zap.wav
-# End Source File
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
 # End Group
-# Begin Source File
-
-SOURCE=.\sounds\alarm.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\challenge.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\channel.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\channel1.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\ching.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\click.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\cymbal.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\ding1.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\draw.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\drip.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\gong.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\honkhonk.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\kibitz.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\laser.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\lose.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\move.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\penalty.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\phone.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\pop.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\pop2.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\request.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\seek.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\shout.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\slap.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\squeak.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\sshout.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\swish.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\tell.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\thud.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\unfinished.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\whipcrak.wav
-# End Source File
-# Begin Source File
-
-SOURCE=.\sounds\win.wav
-# End Source File
 # End Target
 # End Project
diff --git a/winboard/winboard.dsw b/winboard/winboard.dsw
index 3945304..e0bf89c 100644
--- a/winboard/winboard.dsw
+++ b/winboard/winboard.dsw
@@ -1,9 +1,9 @@
-Microsoft Developer Studio Workspace File, Format Version 5.00
+Microsoft Developer Studio Workspace File, Format Version 6.00
 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
 
 ###############################################################################
 
-Project: "winboard"=.\winboard.dsp - Package Owner=<4>
+Project: "winboard"=".\winboard.dsp" - Package Owner=<4>
 
 Package=<5>
 {{{
diff --git a/winboard/winboard.h b/winboard/winboard.h
index 5823b2e..19f539e 100644
--- a/winboard/winboard.h
+++ b/winboard/winboard.h
@@ -1,165 +1,194 @@
-/*
- * WinBoard.h -- Definitions for Windows NT front end to XBoard
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-97 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 XBoard distributed
- * by the Free Software Foundation:
- * ------------------------------------------------------------------------
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
-#include "resource.h"
-#include <dlgs.h>
-
-/* Types */
-typedef struct {
-  char faceName[LF_FACESIZE];
-  float pointSize;
-  BYTE bold, italic, underline, strikeout;
-} MyFontParams;
-
-typedef struct {
-  char *def;
-  MyFontParams mfp;
-  LOGFONT lf;
-  HFONT hf;
-} MyFont;
-
-typedef enum { 
-  SizeTiny, SizeTeeny, SizeDinky, SizePetite, SizeSlim, SizeSmall,
-  SizeMediocre, SizeMiddling, SizeAverage, SizeModerate, SizeMedium,
-  SizeBulky, SizeLarge, SizeBig, SizeHuge, SizeGiant, SizeColossal,
-  SizeTitanic, NUM_SIZES 
-} BoardSize;
-
-typedef struct {
-    COLORREF color;
-    int effects;
-    char *name;
-} MyColorizeAttribs;
-
-typedef struct {
-  char* name;
-  void* data;
-} MySound;
-
-typedef struct {
-    COLORREF color;
-    int effects;
-    MySound sound;
-} MyTextAttribs;
-
-/* Functions */
-
-BOOL InitApplication(HINSTANCE);
-BOOL InitInstance(HINSTANCE, int, LPSTR);
-LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK BoardSizeDlg(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK ButtonProc(HWND, UINT, WPARAM, LPARAM);
-VOID InitAppData(LPSTR);
-VOID InitDrawingColors(VOID);
-VOID InitDrawingSizes(BoardSize boardSize, int flags);
-VOID InitMenuChecks(VOID);
-VOID ICSInitScript(VOID);
-BOOL CenterWindow(HWND hwndChild, HWND hwndParent);
-VOID ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX, int newSizeY);
-VOID PromotionPopup(HWND hwnd);
-FILE *OpenFileDialog(HWND hWnd, BOOL write, char *defName, char *defExt, 
-		     char *nameFilt, char *dlgTitle, UINT *number,
-		     char fileTitle[MSG_SIZ], char fileName[MSG_SIZ]);
-VOID InputEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
-DWORD InputThread(LPVOID arg);
-DWORD NonOvlInputThread(LPVOID arg);
-DWORD SocketInputThread(LPVOID arg);
-BOOL ChangeColor(HWND hwnd, COLORREF *which);
-VOID ChangeBoardSize(BoardSize newSize);
-BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font);
-VOID ErrorPopDown(VOID);
-VOID EnsureOnScreen(int *x, int *y);
-typedef char GetFunc(void *getClosure);
-VOID ParseArgs(GetFunc get, void *cl);
-HBITMAP 
-DoLoadBitmap(HINSTANCE hinst, char *piece, int squareSize, char *suffix);
-COLORREF ParseColorName(char *name);
-void ParseAttribs(COLORREF *color, int *effects, char* argValue);
-VOID CreateFontInMF(MyFont *mf);
-VOID ChangedConsoleFont();
-VOID ParseFontName(char *name, MyFontParams *mfp);
-void InitComboStrings(HANDLE hwndCombo, char **cd);
-BOOLEAN MyLoadSound(MySound *ms);
-BOOLEAN MyPlaySound(MySound *ms);
-VOID ExitArgError(char *msg, char *badArg);
-
-/* Constants */
-
-#define CLOCK_FONT 0
-#define MESSAGE_FONT 1
-#define COORD_FONT 2
-#define CONSOLE_FONT 3
-#define COMMENT_FONT 4
-#define EDITTAGS_FONT 5
-#define NUM_FONTS 6
-
-/* Positions of some menu items.  Origin is zero and separator lines count. */
-/* It's gross that these are needed. */
-#define ACTION_POS 2	 /* Posn of "Action" on menu bar */
-#define OPTIONS_POS 4	 /* Posn of "Options" on menu bar */
-#define ICS_POS 4 	 /* Posn of "ICS " on Options menu */
-#define SOUNDS_POS 6     /* Posn of "Sounds" on Options menu */
-/* end grossness */
-
-extern MyFont *font[NUM_SIZES][NUM_FONTS];
-
-#define WM_USER_Input                 (WM_USER + 4242)
-#define WM_USER_Mouseleave            (WM_USER + 4243)
-#define WM_USER_GetConsoleBackground  (WM_USER + 4244)
-
-#define CLOCK_TIMER_ID        51
-#define LOAD_GAME_TIMER_ID    52
-#define ANALYSIS_TIMER_ID     53
-#define MOUSE_TIMER_ID        54
-#define DELAYED_TIMER_ID      55
-
-#define SOLID_PIECE           0
-#define OUTLINE_PIECE         1
-#define WHITE_PIECE           2
-
-#define COPY_TMP "wbcopy.tmp"
-#define PASTE_TMP "wbpaste.tmp"
+/*
+ * WinBoard.h -- Definitions for Windows NT front end to XBoard
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 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 XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "resource.h"
+#include <dlgs.h>
+
+/* Types */
+typedef struct {
+  char faceName[LF_FACESIZE];
+  float pointSize;
+  BYTE bold, italic, underline, strikeout;
+} MyFontParams;
+
+typedef struct {
+  char *def;
+  MyFontParams mfp;
+  LOGFONT lf;
+  HFONT hf;
+} MyFont;
+
+typedef enum { 
+  SizeTiny, SizeTeeny, SizeDinky, SizePetite, SizeSlim, SizeSmall,
+  SizeMediocre, SizeMiddling, SizeAverage, SizeModerate, SizeMedium,
+  SizeBulky, SizeLarge, SizeBig, SizeHuge, SizeGiant, SizeColossal,
+  SizeTitanic, NUM_SIZES 
+} BoardSize;
+
+typedef struct {
+    COLORREF color;
+    int effects;
+    char *name;
+} MyColorizeAttribs;
+
+typedef struct {
+  char* name;
+  void* data;
+} MySound;
+
+typedef struct {
+    COLORREF color;
+    int effects;
+    MySound sound;
+} MyTextAttribs;
+
+/* Functions */
+
+BOOL InitApplication(HINSTANCE);
+BOOL InitInstance(HINSTANCE, int, LPSTR);
+LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK BoardSizeDlg(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK ButtonProc(HWND, UINT, WPARAM, LPARAM);
+VOID InitAppData(LPSTR);
+VOID InitDrawingColors(VOID);
+VOID InitDrawingSizes(BoardSize boardSize, int flags);
+VOID InitMenuChecks(VOID);
+VOID ICSInitScript(VOID);
+BOOL CenterWindow(HWND hwndChild, HWND hwndParent);
+VOID ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX, int newSizeY);
+VOID PromotionPopup(HWND hwnd);
+FILE *OpenFileDialog(HWND hWnd, char *write, char *defName, char *defExt, 
+		     char *nameFilt, char *dlgTitle, UINT *number,
+		     char fileTitle[MSG_SIZ], char fileName[MSG_SIZ]);
+VOID InputEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+DWORD InputThread(LPVOID arg);
+DWORD NonOvlInputThread(LPVOID arg);
+DWORD SocketInputThread(LPVOID arg);
+BOOL ChangeColor(HWND hwnd, COLORREF *which);
+VOID ChangeBoardSize(BoardSize newSize);
+BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font);
+VOID ErrorPopDown(VOID);
+VOID EnsureOnScreen(int *x, int *y);
+typedef char GetFunc(void *getClosure);
+VOID ParseArgs(GetFunc get, void *cl);
+HBITMAP 
+DoLoadBitmap(HINSTANCE hinst, char *piece, int squareSize, char *suffix);
+COLORREF ParseColorName(char *name);
+void ParseAttribs(COLORREF *color, int *effects, char* argValue);
+VOID CreateFontInMF(MyFont *mf);
+VOID ChangedConsoleFont();
+VOID ParseFontName(char *name, MyFontParams *mfp);
+void InitComboStrings(HANDLE hwndCombo, char **cd);
+BOOLEAN MyLoadSound(MySound *ms);
+BOOLEAN MyPlaySound(MySound *ms);
+VOID ExitArgError(char *msg, char *badArg);
+
+/* Constants */
+
+#define CLOCK_FONT 0
+#define MESSAGE_FONT 1
+#define COORD_FONT 2
+#define CONSOLE_FONT 3
+#define COMMENT_FONT 4
+#define EDITTAGS_FONT 5
+#define MOVEHISTORY_FONT 6
+#define NUM_FONTS 7
+
+/* Positions of some menu items.  Origin is zero and separator lines count. */
+/* It's gross that these are needed. */
+#define ACTION_POS 2	 /* Posn of "Action" on menu bar */
+#define OPTIONS_POS 4	 /* Posn of "Options" on menu bar */
+#define ICS_POS 4 	 /* Posn of "ICS " on Options menu */
+#define SOUNDS_POS 6     /* Posn of "Sounds" on Options menu */
+/* end grossness */
+
+extern MyFont *font[NUM_SIZES][NUM_FONTS];
+
+#define WM_USER_Input                 (WM_USER + 4242)
+#define WM_USER_Mouseleave            (WM_USER + 4243)
+#define WM_USER_GetConsoleBackground  (WM_USER + 4244)
+
+#define CLOCK_TIMER_ID        51
+#define LOAD_GAME_TIMER_ID    52
+#define ANALYSIS_TIMER_ID     53
+#define MOUSE_TIMER_ID        54
+#define DELAYED_TIMER_ID      55
+
+#define SOLID_PIECE           0
+#define OUTLINE_PIECE         1
+#define WHITE_PIECE           2
+
+/* Some definitions required by MSVC 4.1 */ 
+#ifndef WM_MOUSEWHEEL 
+#define WM_MOUSEWHEEL 0x020A 
+#endif 
+#ifndef SCF_DEFAULT 
+#define SCF_DEFAULT 0x0000 
+#define SCF_ALL 0x0004 
+#endif 
+
+#define COPY_TMP "wbcopy.tmp"
+#define PASTE_TMP "wbpaste.tmp"
+
+/* [AS] Layout management */
+typedef struct {
+    Boolean visible;
+    int x;
+    int y;
+    int width;
+    int height;
+} WindowPlacement;
+
+VOID InitWindowPlacement( WindowPlacement * wp );
+
+VOID RestoreWindowPlacement( HWND hWnd, WindowPlacement * wp );
+
+VOID ReattachAfterMove( LPRECT lprcOldPos, int new_x, int new_y, HWND hWndChild, WindowPlacement * pwpChild );
diff --git a/winboard/winboard.hlp b/winboard/winboard.hlp
deleted file mode 100755
index 1430e9c..0000000
Binary files a/winboard/winboard.hlp and /dev/null differ
diff --git a/winboard/winboard.hpj b/winboard/winboard.hpj
old mode 100755
new mode 100644
diff --git a/winboard/winboard.ini b/winboard/winboard.ini
new file mode 100644
index 0000000..5b69f1c
--- /dev/null
+++ b/winboard/winboard.ini
@@ -0,0 +1,330 @@
+;
+; WinBoard 4.3.15k Save Settings file
+;
+; You can edit the values of options that are already set in this file,
+; but if you add other options, the next Save Settings will not save them.
+; Use a shortcut, an @indirection file, or a .bat file instead.
+;
+/whitePieceColor=#ffffcc
+/blackPieceColor=#202020
+/lightSquareColor=#c8c365
+/darkSquareColor=#77a26d
+/highlightSquareColor=#ffff00
+/premoveHighlightColor=#ff0000
+/movesPerSession=40
+/timeDelay=1
+/timeControl="5"
+/timeIncrement=-1
+/saveGameFile=""
+/autoSaveGames=false
+/monoMode=false
+/showCoords=false
+/showThinking=false
+/ponderNextMove=true
+/periodicUpdates=true
+/popupExitMessage=true
+/popupMoveErrors=false
+/size=tiny /clockFont="Arial:9 b"
+/size=teeny /clockFont="Arial:9 b"
+/size=dinky /clockFont="Arial:10 b"
+/size=petite /clockFont="Arial:10 b"
+/size=slim /clockFont="Arial:12 b"
+/size=small /clockFont="Arial:14 b"
+/size=mediocre /clockFont="Arial:14 b"
+/size=middling /clockFont="Arial:14 b"
+/size=average /clockFont="Arial:15 b"
+/size=moderate /clockFont="Arial:16 b"
+/size=medium /clockFont="Arial:16 b"
+/size=bulky /clockFont="Arial:17 b"
+/size=large /clockFont="Arial:19 b"
+/size=big /clockFont="Arial:20 b"
+/size=huge /clockFont="Arial:21 b"
+/size=giant /clockFont="Arial:22 b"
+/size=colossal /clockFont="Arial:23 b"
+/size=titanic /clockFont="Arial:24 b"
+/size=tiny /messageFont="Small Fonts:6"
+/size=teeny /messageFont="Small Fonts:6"
+/size=dinky /messageFont="Small Fonts:7"
+/size=petite /messageFont="Small Fonts:7"
+/size=slim /messageFont="Arial:8 b"
+/size=small /messageFont="Arial:9 b"
+/size=mediocre /messageFont="Arial:9 b"
+/size=middling /messageFont="Arial:9 b"
+/size=average /messageFont="Arial:10 b"
+/size=moderate /messageFont="Arial:10 b"
+/size=medium /messageFont="Arial:10 b"
+/size=bulky /messageFont="Arial:10 b"
+/size=large /messageFont="Arial:10 b"
+/size=big /messageFont="Arial:11 b"
+/size=huge /messageFont="Arial:11 b"
+/size=giant /messageFont="Arial:11 b"
+/size=colossal /messageFont="Arial:12 b"
+/size=titanic /messageFont="Arial:12 b"
+/size=tiny /coordFont="Small Fonts:4"
+/size=teeny /coordFont="Small Fonts:4"
+/size=dinky /coordFont="Small Fonts:5"
+/size=petite /coordFont="Small Fonts:5"
+/size=slim /coordFont="Small Fonts:6"
+/size=small /coordFont="Small Fonts:7"
+/size=mediocre /coordFont="Small Fonts:7"
+/size=middling /coordFont="Small Fonts:7"
+/size=average /coordFont="Arial:7 b"
+/size=moderate /coordFont="Arial:7 b"
+/size=medium /coordFont="Arial:7 b"
+/size=bulky /coordFont="Arial:7 b"
+/size=large /coordFont="Arial:7 b"
+/size=big /coordFont="Arial:8 b"
+/size=huge /coordFont="Arial:8 b"
+/size=giant /coordFont="Arial:8 b"
+/size=colossal /coordFont="Arial:9 b"
+/size=titanic /coordFont="Arial:9 b"
+/size=tiny /tagsFont="Courier New:8"
+/size=teeny /tagsFont="Courier New:8"
+/size=dinky /tagsFont="Courier New:8"
+/size=petite /tagsFont="Courier New:8"
+/size=slim /tagsFont="Courier New:8"
+/size=small /tagsFont="Courier New:8"
+/size=mediocre /tagsFont="Courier New:8"
+/size=middling /tagsFont="Courier New:8"
+/size=average /tagsFont="Courier New:8"
+/size=moderate /tagsFont="Courier New:8"
+/size=medium /tagsFont="Courier New:8"
+/size=bulky /tagsFont="Courier New:8"
+/size=large /tagsFont="Courier New:8"
+/size=big /tagsFont="Courier New:8"
+/size=huge /tagsFont="Courier New:8"
+/size=giant /tagsFont="Courier New:8"
+/size=colossal /tagsFont="Courier New:8"
+/size=titanic /tagsFont="Courier New:8"
+/size=tiny /commentFont="Arial:9"
+/size=teeny /commentFont="Arial:9"
+/size=dinky /commentFont="Arial:9"
+/size=petite /commentFont="Arial:9"
+/size=slim /commentFont="Arial:9"
+/size=small /commentFont="Arial:9"
+/size=mediocre /commentFont="Arial:9"
+/size=middling /commentFont="Arial:9"
+/size=average /commentFont="Arial:9"
+/size=moderate /commentFont="Arial:9"
+/size=medium /commentFont="Arial:9"
+/size=bulky /commentFont="Arial:9"
+/size=large /commentFont="Arial:9"
+/size=big /commentFont="Arial:9"
+/size=huge /commentFont="Arial:9"
+/size=giant /commentFont="Arial:9"
+/size=colossal /commentFont="Arial:9"
+/size=titanic /commentFont="Arial:9"
+/size=tiny /icsFont="Courier New:8"
+/size=teeny /icsFont="Courier New:8"
+/size=dinky /icsFont="Courier New:8"
+/size=petite /icsFont="Courier New:8"
+/size=slim /icsFont="Courier New:8"
+/size=small /icsFont="Courier New:8"
+/size=mediocre /icsFont="Courier New:8"
+/size=middling /icsFont="Courier New:8"
+/size=average /icsFont="Courier New:8"
+/size=moderate /icsFont="Courier New:8"
+/size=medium /icsFont="Courier New:8"
+/size=bulky /icsFont="Courier New:8"
+/size=large /icsFont="Courier New:8"
+/size=big /icsFont="Courier New:8"
+/size=huge /icsFont="Courier New:8"
+/size=giant /icsFont="Courier New:8"
+/size=colossal /icsFont="Courier New:8"
+/size=titanic /icsFont="Courier New:8"
+/size=tiny /moveHistoryFont="MS Sans Serif:8"
+/size=teeny /moveHistoryFont="MS Sans Serif:8"
+/size=dinky /moveHistoryFont="MS Sans Serif:8"
+/size=petite /moveHistoryFont="MS Sans Serif:8"
+/size=slim /moveHistoryFont="MS Sans Serif:8"
+/size=small /moveHistoryFont="MS Sans Serif:8"
+/size=mediocre /moveHistoryFont="MS Sans Serif:8"
+/size=middling /moveHistoryFont="MS Sans Serif:8"
+/size=average /moveHistoryFont="MS Sans Serif:8"
+/size=moderate /moveHistoryFont="MS Sans Serif:8"
+/size=medium /moveHistoryFont="MS Sans Serif:8"
+/size=bulky /moveHistoryFont="MS Sans Serif:8"
+/size=large /moveHistoryFont="MS Sans Serif:8"
+/size=big /moveHistoryFont="MS Sans Serif:8"
+/size=huge /moveHistoryFont="MS Sans Serif:8"
+/size=giant /moveHistoryFont="MS Sans Serif:8"
+/size=colossal /moveHistoryFont="MS Sans Serif:8"
+/size=titanic /moveHistoryFont="MS Sans Serif:8"
+/boardSize=bulky
+/alwaysOnTop=false
+/autoCallFlag=false
+/autoComment=false
+/autoObserve=false
+/autoFlipView=true
+/autoRaiseBoard=true
+/alwaysPromoteToQueen=false
+/oldSaveStyle=false
+/quietPlay=false
+/getMoveList=true
+/testLegality=true
+/premove=true
+/premoveWhite=false
+/premoveWhiteText=""
+/premoveBlack=false
+/premoveBlackText=""
+/icsAlarm=true
+/icsAlarmTime=5000
+/animateMoving=true
+/animateSpeed=10
+/animateDragging=true
+/blindfold=false
+/highlightLastMove=true
+/highlightDragging=false
+/colorizeMessages=true
+/colorShout="#209000"
+/colorSShout="b #289808"
+/colorChannel1="#2020e0"
+/colorChannel="b #4040ff"
+/colorKibitz="b #ff00ff"
+/colorTell="b #ff0000"
+/colorChallenge="bi #ff0000"
+/colorRequest="bi #ff0000"
+/colorSeek="#980808"
+/colorNormal="#000000"
+/colorBackground=#ffffff
+/soundShout=""
+/soundSShout=""
+/soundChannel1=""
+/soundChannel=""
+/soundKibitz=""
+/soundTell=""
+/soundChallenge=""
+/soundRequest=""
+/soundSeek=""
+/soundMove=""
+/soundBell="$"
+/soundIcsWin=""
+/soundIcsLoss=""
+/soundIcsDraw=""
+/soundIcsUnfinished=""
+/soundIcsAlarm=""
+/comPortSettings=9600,7,Space,1,None
+/x=10
+/y=30
+/icsX=-2147483648
+/icsY=-2147483648
+/icsW=-2147483648
+/icsH=-2147483648
+/analysisX=-2147483648
+/analysisY=-2147483648
+/analysisW=-2147483648
+/analysisH=-2147483648
+/commentX=-2147483648
+/commentY=-2147483648
+/commentW=-2147483648
+/commentH=-2147483648
+/tagsX=-2147483648
+/tagsY=-2147483648
+/tagsW=-2147483648
+/tagsH=-2147483648
+/gameListX=-2147483648
+/gameListY=-2147483648
+/gameListW=-2147483648
+/gameListH=-2147483648
+/saveSettingsOnExit=true
+/icsMenu={-
+&Who,who,0,1
+Playe&rs,players,0,1
+&Games,games,0,1
+&Sought,sought,0,1
+|&Tell (name),tell,1,0
+M&essage (name),message,1,0
+-
+&Finger (name),finger,1,1
+&Vars (name),vars,1,1
+&Observe (name),observe,1,1
+&Match (name),match,1,1
+Pl&ay (name),play,1,1
+}
+/icsNames={chessclub.com /icsport=5000 /icshelper=timestamp
+freechess.org /icsport=5000 /icshelper=timeseal
+global.chessparlor.com /icsport=6000 /icshelper=timeseal
+chessanytime.com /icsport=5000
+chess.net /icsport=5000
+zics.org /icsport=5000
+jogo.cex.org.br /icsport=5000
+ajedrez.cec.uchile.cl /icsport=5000
+fly.cc.fer.hr /icsport=7890
+freechess.nl /icsport=5000 /icshelper=timeseal
+jeu.echecs.com /icsport=5000
+chess.unix-ag.uni-kl.de /icsport=5000 /icshelper=timeseal
+chess.mds.mdh.se /icsport=5000
+}
+/firstChessProgramNames={GNUChess
+"GNUChes5 xboard"
+}
+/secondChessProgramNames={GNUChess
+"GNUChes5 xboard"
+}
+/showButtonBar=true
+/pgnExtendedInfo=false
+/hideThinkingFromHuman=false
+/liteBackTextureFile=""
+/darkBackTextureFile=""
+/liteBackTextureMode=1
+/darkBackTextureMode=1
+/renderPiecesWithFont=""
+/fontPieceToCharTable=""
+/fontPieceBackColorWhite=#000000
+/fontPieceForeColorWhite=#000000
+/fontPieceBackColorBlack=#000000
+/fontPieceForeColorBlack=#000000
+/fontPieceSize=80
+/overrideLineGap=1
+/adjudicateLossThreshold=0
+/delayBeforeQuit=0
+/delayAfterQuit=0
+/pgnEventHeader="Computer Chess Game"
+/defaultFrcPosition=-1
+/gameListTags="eprd"
+/saveOutOfBookInfo=true
+/showEvalInMoveHistory=true
+/evalHistColorWhite=#ffffb0
+/evalHistColorBlack=#ad5d3d
+/highlightMoveWithArrow=false
+/highlightArrowColor=#ffff80
+/stickyWindows=true
+/adjudicateDrawMoves=0
+/autoDisplayComment=true
+/autoDisplayTags=true
+/polyglotDir=""
+/usePolyglotBook=false
+/polyglotBook=""
+/defaultHashSize=64
+/defaultCacheSizeEGTB=4
+/defaultPathEGTB="c:\egtb"
+/moveHistoryUp=false
+/moveHistoryX=136
+/moveHistoryY=224
+/moveHistoryW=346
+/moveHistoryH=237
+/evalGraphUp=false
+/evalGraphX=136
+/evalGraphY=224
+/evalGraphW=332
+/evalGraphH=148
+/engineOutputUp=false
+/engineOutputX=136
+/engineOutputY=224
+/engineOutputW=407
+/engineOutputH=297
+/boardWidth=-1
+/boardHeight=-1
+/holdingsSize=-1
+/matchPause=10000
+/flipBlack=false
+/allWhite=false
+/testClaims=false
+/checkMates=false
+/materialDraws=false
+/trivialDraws=false
+/ruleMoves=51
+/repeatsToDraw=6
+/smpCores=1
+/egtFormats=""
+/timeOddsMode=0
diff --git a/winboard/winboard.rc b/winboard/winboard.rc
index fa51d89..6fd769d 100644
--- a/winboard/winboard.rc
+++ b/winboard/winboard.rc
@@ -25,32 +25,33 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
 #pragma code_page(1252)
 #endif //_WIN32
 
+// moved to "res" subdir to make testing easier-- don't want it in the root
+MANIFEST_RESOURCE_ID    24      MOVEABLE PURE   "res\\winboard.exe.manifest"
+
 /////////////////////////////////////////////////////////////////////////////
 //
 // Dialog
 //
 
-ABOUTBOX DIALOG DISCARDABLE  22, 17, 167, 67
+ABOUTBOX DIALOG DISCARDABLE  22, 17, 180, 88
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "About WinBoard"
 FONT 8, "MS Sans Serif"
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,131,47,32,14,WS_GROUP
-#if __GNUC__
-    ICON            icon_white,-1,3,6,20,20,0
-#else
-    ICON            "icon_white",-1,3,6,20,20,0
-#endif
+    DEFPUSHBUTTON   "OK",IDOK,126,69,50,14,WS_GROUP
+    ICON            "icon_white",IDC_STATIC,3,6,20,20
     LTEXT           "Chessboard for Windows",400,25,15,121,8
     LTEXT           "Copyright 1991 Digital Equipment Corporation",201,6,34,
                     149,8
     LTEXT           "Enhancements Copyright 1992-2003   Free Software Foundation",
-                    OPT_TCtext1,6,44,121,17
+                    OPT_TCtext1,6,45,121,17
     CONTROL         "",OPT_TCTime,"Static",SS_BLACKRECT,4,28,159,1
-    LTEXT           "WinBoard 0.0.0",ABOUTBOX_Version,25,5,142,8
+    LTEXT           "WinBoard 0.0.0",ABOUTBOX_Version,25,5,61,8
+    LTEXT           "Enhancements Copyright 2005\r\nAlessandro Scotti",
+                    IDC_STATIC,6,65,120,24
 END
 
-DLG_TimeControl DIALOG DISCARDABLE  6, 18, 147, 113
+DLG_TimeControl DIALOG DISCARDABLE  6, 18, 174, 134
 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 CAPTION "Time Control"
 FONT 8, "MS Sans Serif"
@@ -59,33 +60,37 @@ BEGIN
                     BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,6,6,113,10
     CONTROL         "Incremental clock",OPT_TCUseInc,"Button",
                     BS_AUTORADIOBUTTON | WS_TABSTOP,6,42,107,10
-    EDITTEXT        OPT_TCMoves,14,20,22,12,ES_AUTOHSCROLL | WS_GROUP
-    LTEXT           "moves in",OPT_TCtext1,40,22,30,8,NOT WS_GROUP
-    EDITTEXT        OPT_TCTime,74,20,32,12,ES_AUTOHSCROLL
-    LTEXT           "minutes",OPT_TCtext2,111,22,26,8,NOT WS_GROUP
-    EDITTEXT        OPT_TCTime2,14,56,32,12,ES_AUTOHSCROLL | WS_GROUP
-    LTEXT           "minutes initially,",405,51,57,73,8,NOT WS_GROUP
-    LTEXT           "plus",406,19,74,15,8,NOT WS_GROUP
-    EDITTEXT        OPT_TCInc,37,72,32,12,ES_AUTOHSCROLL
-    LTEXT           "seconds per move",408,74,74,67,8,NOT WS_GROUP
-    PUSHBUTTON      "OK",IDOK,32,95,40,14,WS_GROUP
-    PUSHBUTTON      "Cancel",IDCANCEL,88,95,40,14
+    EDITTEXT        OPT_TCMoves,14,20,26,12,ES_AUTOHSCROLL | WS_GROUP
+    LTEXT           "moves in",OPT_TCtext1,44,22,30,8,NOT WS_GROUP
+    EDITTEXT        OPT_TCTime,78,20,26,12,ES_AUTOHSCROLL
+    LTEXT           "minutes",OPT_TCtext2,108,22,26,8,NOT WS_GROUP
+    EDITTEXT        OPT_TCTime2,14,56,26,12,ES_AUTOHSCROLL | WS_GROUP
+    LTEXT           "minutes +",405,44,58,34,8,NOT WS_GROUP
+    EDITTEXT        OPT_TCInc,78,56,26,12,ES_AUTOHSCROLL
+    LTEXT           "seconds per move",408,108,58,62,8,NOT WS_GROUP
+    LTEXT           "Time-Odds Factors:",IDC_STATIC,6,78,150,8,NOT WS_GROUP
+    EDITTEXT        OPT_TCOdds1,47,92,26,12,ES_AUTOHSCROLL | WS_GROUP
+    LTEXT           "Engine #1:",IDC_STATIC,6,94,41,8,NOT WS_GROUP
+    EDITTEXT        OPT_TCOdds2,124,92,26,12,ES_AUTOHSCROLL
+    LTEXT           "Engine #2:",IDC_STATIC,83,94,41,8,NOT WS_GROUP
+    PUSHBUTTON      "OK",IDOK,64,116,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,120,116,50,14
 END
 
-DLG_LoadOptions DIALOG DISCARDABLE  10, 18, 144, 55
+DLG_LoadOptions DIALOG DISCARDABLE  10, 18, 136, 55
 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 CAPTION "Load Game Options"
 FONT 8, "MS Sans Serif"
 BEGIN
     CONTROL         "Load games with automatic stepping",OPT_Autostep,"Button",
-                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,4,136,10
-    EDITTEXT        OPT_ASTimeDelay,23,18,28,12,ES_AUTOHSCROLL
-    LTEXT           "seconds per move",OPT_AStext1,57,20,60,8,NOT WS_GROUP
-    PUSHBUTTON      "OK",IDOK,24,37,40,14,WS_GROUP
-    PUSHBUTTON      "Cancel",IDCANCEL,80,37,40,14
+                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,4,130,10
+    EDITTEXT        OPT_ASTimeDelay,16,16,28,14,ES_AUTOHSCROLL
+    LTEXT           "seconds per move",OPT_AStext1,46,20,60,8,NOT WS_GROUP
+    PUSHBUTTON      "OK",IDOK,26,36,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,82,36,50,14
 END
 
-DLG_SaveOptions DIALOG DISCARDABLE  6, 17, 133, 119
+DLG_SaveOptions DIALOG DISCARDABLE  6, 17, 178, 119
 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 CAPTION "Save Game Options"
 FONT 8, "MS Sans Serif"
@@ -93,17 +98,19 @@ BEGIN
     CONTROL         "Save games automatically",OPT_Autosave,"Button",
                     BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,4,97,10
     CONTROL         "Prompt for filename",OPT_AVPrompt,"Button",
-                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,18,18,75,10
-    CONTROL         "To file:",OPT_AVToFile,"Button",BS_AUTORADIOBUTTON,18,
-                    31,36,10
-    EDITTEXT        OPT_AVFilename,18,44,97,12,ES_AUTOHSCROLL
-    GROUPBOX        "Save Style",801,4,63,125,28,WS_GROUP
-    CONTROL         "PGN",OPT_PGN,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
-                    18,75,39,10
-    CONTROL         "Old",OPT_Old,"Button",BS_AUTORADIOBUTTON,73,75,39,10
-    PUSHBUTTON      "OK",IDOK,18,98,40,14,WS_GROUP
-    PUSHBUTTON      "Cancel",IDCANCEL,74,98,40,14
-    PUSHBUTTON      "Browse...",OPT_AVBrowse,76,31,39,14
+                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,18,75,10
+    CONTROL         "To file:",OPT_AVToFile,"Button",BS_AUTORADIOBUTTON,16,
+                    32,36,10
+    EDITTEXT        OPT_AVFilename,54,30,97,14,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",OPT_AVBrowse,156,30,18,14
+    GROUPBOX        "Save As: ",801,4,48,170,28,WS_GROUP
+    CONTROL         "PGN",OPT_PGN,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,
+                    60,39,10
+    CONTROL         "Old",OPT_Old,"Button",BS_AUTORADIOBUTTON,54,60,114,10
+    CONTROL         "Save out of book info in PGN",OPT_OutOfBookInfo,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,82,109,10
+    PUSHBUTTON      "OK",IDOK,68,100,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,124,100,50,14
 END
 
 1536 DIALOG DISCARDABLE  36, 24, 264, 134
@@ -136,122 +143,127 @@ BEGIN
     PUSHBUTTON      "Net&work...",1037,208,113,50,14,WS_GROUP
 END
 
-DLG_CommPort DIALOG DISCARDABLE  25, 30, 159, 98
+DLG_CommPort DIALOG DISCARDABLE  25, 30, 220, 79
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Communication Port Settings"
 FONT 8, "Helv"
 BEGIN
+    PUSHBUTTON      "OK",IDOK,106,60,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,164,60,50,14
     RTEXT           "&Port:",-1,4,6,40,10
     COMBOBOX        OPT_Port,49,4,55,60,CBS_DROPDOWN | WS_VSCROLL | 
                     WS_TABSTOP
-    RTEXT           "Data &Rate:",-1,4,21,40,10,NOT WS_GROUP
-    COMBOBOX        OPT_DataRate,49,19,55,100,CBS_DROPDOWN | WS_VSCROLL | 
+    RTEXT           "Data &Rate:",-1,114,6,40,10,NOT WS_GROUP
+    COMBOBOX        OPT_DataRate,159,4,55,100,CBS_DROPDOWN | WS_VSCROLL | 
                     WS_TABSTOP
-    RTEXT           "Data &Bits:",-1,4,36,40,10,NOT WS_GROUP
-    COMBOBOX        OPT_Bits,49,34,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | 
-                    WS_VSCROLL | WS_TABSTOP
-    RTEXT           "P&arity:",-1,4,51,40,10,NOT WS_GROUP
-    COMBOBOX        OPT_Parity,49,49,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | 
+    RTEXT           "Data &Bits:",-1,4,25,40,10,NOT WS_GROUP
+    COMBOBOX        OPT_Bits,49,22,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | 
                     WS_VSCROLL | WS_TABSTOP
-    RTEXT           "&Stop Bits:",-1,4,66,40,10,NOT WS_GROUP
-    COMBOBOX        OPT_StopBits,49,64,55,60,CBS_DROPDOWNLIST | 
+    RTEXT           "P&arity:",-1,114,24,40,10,NOT WS_GROUP
+    COMBOBOX        OPT_Parity,159,22,55,60,CBS_DROPDOWNLIST | 
+                    CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+    RTEXT           "&Stop Bits:",-1,4,42,40,10,NOT WS_GROUP
+    COMBOBOX        OPT_StopBits,49,40,55,60,CBS_DROPDOWNLIST | 
                     CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    RTEXT           "F&low:",-1,4,81,40,10,NOT WS_GROUP
-    DEFPUSHBUTTON   "OK",IDOK,115,4,40,14
-    PUSHBUTTON      "Cancel",IDCANCEL,115,24,40,14
-    COMBOBOX        OPT_Flow,49,79,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | 
+    RTEXT           "F&low:",-1,114,42,40,10,NOT WS_GROUP
+    COMBOBOX        OPT_Flow,159,40,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | 
                     WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "&Help",OPT_SerialHelp,115,80,40,14,NOT WS_VISIBLE
+    PUSHBUTTON      "Help",OPT_SerialHelp,4,60,50,14,NOT WS_VISIBLE
 END
 
-DLG_EditComment DIALOG DISCARDABLE  6, 18, 306, 104
+DLG_EditComment DIALOG DISCARDABLE  6, 18, 302, 102
 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
 CAPTION "Edit Comment"
 FONT 8, "MS Sans Serif"
 BEGIN
-    PUSHBUTTON      "OK",IDOK,61,86,40,14
-    PUSHBUTTON      "Cancel",OPT_CancelComment,109,86,40,14
-    PUSHBUTTON      "&Clear",OPT_ClearComment,157,86,40,14
-    PUSHBUTTON      "&Edit",OPT_EditComment,205,86,40,14
+    PUSHBUTTON      "OK",IDOK,194,84,50,14
+    PUSHBUTTON      "Cancel",OPT_CancelComment,250,84,50,14
     CONTROL         "",OPT_CommentText,"RICHEDIT",ES_MULTILINE | 
                     ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | 
-                    WS_HSCROLL | WS_TABSTOP,4,4,298,78
+                    WS_HSCROLL | WS_TABSTOP,2,2,298,78
+    PUSHBUTTON      "&Clear",OPT_ClearComment,2,84,50,14
+    PUSHBUTTON      "&Edit",OPT_EditComment,58,84,50,14
 END
 
 DLG_PromotionKing DIALOG DISCARDABLE  98, 90, 183, 41
 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Promotion"
+CAPTION "Promote to:"
 FONT 8, "MS Sans Serif"
 BEGIN
+    PUSHBUTTON      "Chance&llor",PB_Chancellor,49,4,40,14,NOT WS_TABSTOP
+    PUSHBUTTON      "&Archbishop",PB_Archbishop,94,4,40,14,NOT WS_TABSTOP
     PUSHBUTTON      "&Queen",PB_Queen,4,23,40,14,WS_GROUP
     PUSHBUTTON      "&Rook",PB_Rook,49,23,40,14,NOT WS_TABSTOP
     PUSHBUTTON      "&Bishop",PB_Bishop,94,23,40,14,NOT WS_TABSTOP
     PUSHBUTTON      "K&night",PB_Knight,139,23,40,14,NOT WS_TABSTOP
-    PUSHBUTTON      "&King",PB_King,94,4,40,14,NOT WS_TABSTOP
+    PUSHBUTTON      "&King",PB_King,4,4,40,14,NOT WS_TABSTOP
     PUSHBUTTON      "&Cancel",IDCANCEL,139,4,40,14,WS_GROUP
-    LTEXT           "Promote pawn to:",501,6,8,58,8
+    LTEXT           "      YES",IDC_Yes,6,25,36,10
+    LTEXT           "       NO",IDC_No,141,25,36,10
+    LTEXT           "C&entaur",IDC_Centaur,12,6,25,10
 END
 
-ABOUTBOX2 DIALOG DISCARDABLE  22, 17, 281, 198
+ABOUTBOX2 DIALOG DISCARDABLE  22, 17, 281, 223
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "About WinBoard"
 FONT 8, "MS Sans Serif"
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,244,180,32,14,WS_GROUP
     RTEXT           "Chessboard for Windows",DLG_TimeControl,196,154,80,8
-    LTEXT           "Copyright 1991 Digital Equipment Corporation",201,4,167,
+    LTEXT           "Copyright 1991 Digital Equipment Corporation",201,4,168,
                     151,8
     LTEXT           "Enhancements Copyright 1992-2003   Free Software Foundation",
-                    OPT_TCtext1,4,177,126,17
+                    OPT_TCtext1,4,179,126,17
     CONTROL         "",OPT_TCTime,"Static",SS_BLACKRECT,4,164,272,1
     LTEXT           "WinBoard 0.0.0",ABOUTBOX_Version,4,154,64,8
     CONTROL         "galactic",IDC_STATIC,"Static",SS_BITMAP,4,4,15,13
+    DEFPUSHBUTTON   "OK",IDOK,226,204,50,14
+    LTEXT           "Enhancements Copyright 2005\r\nAlessandro Scotti",
+                    IDC_STATIC,4,199,183,20
+    LTEXT           "(unofficial version ""X"")",IDC_STATIC,68,154,71,8
 END
 
-DLG_GameList DIALOG DISCARDABLE  6, 18, 307, 159
+DLG_GameList DIALOG DISCARDABLE  6, 18, 259, 153
 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
 CAPTION "Game List"
 FONT 8, "MS Sans Serif"
 BEGIN
-    LISTBOX         OPT_GameListText,4,4,299,130,LBS_NOINTEGRALHEIGHT | 
+    LISTBOX         OPT_GameListText,2,2,254,130,LBS_NOINTEGRALHEIGHT | 
                     WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
-    PUSHBUTTON      "&Load",OPT_GameListLoad,61,138,40,15
-    PUSHBUTTON      "&Prev",OPT_GameListPrev,109,138,40,15
-    PUSHBUTTON      "&Next",OPT_GameListNext,157,138,40,15
-    PUSHBUTTON      "&Close",OPT_GameListClose,205,138,40,15
+    PUSHBUTTON      "&Load",OPT_GameListLoad,2,135,32,15
+    PUSHBUTTON      "&<",OPT_GameListPrev,38,135,22,15
+    PUSHBUTTON      "&>",OPT_GameListNext,64,135,24,15
+    PUSHBUTTON      "&Close",OPT_GameListClose,92,135,32,15
+    PUSHBUTTON      "Filter",IDC_GameListDoFilter,144,136,30,14
+    EDITTEXT        IDC_GameListFilter,178,136,78,14,ES_AUTOHSCROLL
 END
 
-DLG_EditTags DIALOG DISCARDABLE  6, 18, 160, 141
+DLG_EditTags DIALOG DISCARDABLE  6, 18, 167, 140
 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
 CAPTION "Edit Tags"
 FONT 8, "MS Sans Serif"
 BEGIN
-    PUSHBUTTON      "OK",IDOK,12,123,40,14
-    PUSHBUTTON      "Cancel",OPT_TagsCancel,60,123,40,14
-    PUSHBUTTON      "&Edit",OPT_EditTags,108,123,40,14
+    PUSHBUTTON      "OK",IDOK,58,122,50,14
+    PUSHBUTTON      "Cancel",OPT_TagsCancel,114,122,50,14
     CONTROL         "",OPT_TagsText,"RICHEDIT",ES_MULTILINE | ES_AUTOVSCROLL | 
                     ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | 
-                    WS_HSCROLL | WS_TABSTOP,4,4,152,115
+                    WS_HSCROLL | WS_TABSTOP,2,2,162,115
+    PUSHBUTTON      "&Edit",OPT_EditTags,2,122,50,14
 END
 
 WBCONSOLE DIALOG DISCARDABLE  0, 0, 335, 133
 STYLE WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | WS_SYSMENU | 
     WS_THICKFRAME
 CAPTION "ICS Interaction"
-#if __GNUC__
-CLASS WBConsole
-#else
 CLASS "WBConsole"
-#endif
 FONT 8, "Courier New"
 BEGIN
     CONTROL         "",OPT_ConsoleText,"RICHEDIT",ES_MULTILINE | 
                     ES_AUTOVSCROLL | ES_NOHIDESEL | ES_READONLY | ES_NUMBER | 
                     WS_BORDER | WS_VSCROLL | WS_TABSTOP,0,0,335,119
-    CONTROL         "",OPT_ConsoleInput,"RICHEDIT",ES_AUTOHSCROLL | 
-                    ES_AUTOVSCROLL | ES_MULTILINE | 
-                    ES_NOHIDESEL | ES_NUMBER | WS_BORDER | 
-                    WS_TABSTOP,0,120,335,13,WS_EX_TRANSPARENT
+    CONTROL         "",OPT_ConsoleInput,"RICHEDIT",ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL | 
+                    ES_NUMBER | WS_BORDER | WS_TABSTOP,0,120,335,13,
+                    WS_EX_TRANSPARENT
 END
 
 DLG_Analysis DIALOG DISCARDABLE  0, 0, 294, 62
@@ -265,47 +277,47 @@ BEGIN
                     WS_HSCROLL | WS_TABSTOP,4,4,286,54
 END
 
-DLG_Error DIALOG DISCARDABLE  0, 0, 183, 33
-STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
+DLG_Error DIALOG DISCARDABLE  0, 0, 220, 66
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 CAPTION "Error"
 FONT 8, "MS Sans Serif"
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,163,9,16,14
-    ICON            32515,IDC_STATIC,4,6,20,20
-    LTEXT           "Sorry Charlie",OPT_ErrorText,27,4,130,25
+    ICON            32515,IDC_STATIC,4,4,21,20
+    LTEXT           "Sorry Charlie",OPT_ErrorText,28,4,188,36
+    DEFPUSHBUTTON   "OK",IDOK,84,48,50,14
 END
 
-DLG_Colorize DIALOGEX 0, 0, 183, 52
+DLG_Colorize DIALOGEX 0, 0, 174, 61
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "ICS Interaction Colors"
 FONT 8, "MS Sans Serif"
 BEGIN
-    PUSHBUTTON      "&Choose Color...",OPT_ChooseColor,15,29,51,14,WS_GROUP
+    DEFPUSHBUTTON   "OK",IDOK,64,42,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,120,42,50,14
+    PUSHBUTTON      "&Color...",OPT_ChooseColor,119,4,51,14,WS_GROUP
     CONTROL         "&Bold",OPT_Bold,"Button",BS_AUTOCHECKBOX | WS_GROUP | 
-                    WS_TABSTOP,93,4,30,10
-    CONTROL         "&Italic",OPT_Italic,"Button",BS_AUTOCHECKBOX,93,14,30,
+                    WS_TABSTOP,4,24,30,10
+    CONTROL         "&Italic",OPT_Italic,"Button",BS_AUTOCHECKBOX,40,24,30,
                     10
-    CONTROL         "&Underline",OPT_Underline,"Button",BS_AUTOCHECKBOX,93,
+    CONTROL         "&Underline",OPT_Underline,"Button",BS_AUTOCHECKBOX,76,
                     24,45,10
-    CONTROL         "&Strikeout",OPT_Strikeout,"Button",BS_AUTOCHECKBOX,93,
-                    34,42,10
-    DEFPUSHBUTTON   "OK",IDOK,145,7,31,14,WS_GROUP
-    PUSHBUTTON      "Cancel",IDCANCEL,145,24,31,14
+    CONTROL         "&Strikeout",OPT_Strikeout,"Button",BS_AUTOCHECKBOX,128,
+                    24,42,10
     CONTROL         "",OPT_Sample,"RICHEDIT",ES_CENTER | ES_MULTILINE | 
-                    ES_READONLY | WS_GROUP,4,9,75,15,WS_EX_CLIENTEDGE
+                    ES_READONLY | WS_GROUP,4,4,106,15,WS_EX_CLIENTEDGE
 END
 
-DLG_Question DIALOG DISCARDABLE  0, 0, 187, 60
+DLG_Question DIALOG DISCARDABLE  0, 0, 187, 77
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Question"
 FONT 8, "MS Sans Serif"
 BEGIN
-    EDITTEXT        OPT_QuestionInput,4,44,179,12,ES_AUTOHSCROLL
-    DEFPUSHBUTTON   "Enter",IDOK,133,4,50,14,WS_GROUP
-    PUSHBUTTON      "Cancel",IDCANCEL,133,24,50,14
+    EDITTEXT        OPT_QuestionInput,4,36,179,14,ES_AUTOHSCROLL
+    DEFPUSHBUTTON   "OK",IDOK,78,58,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,134,58,50,14
     LTEXT           "Enter a chess engine command or just type something stupid that will completely screw things up.",
-                    OPT_QuestionText,27,4,101,33
-    ICON            32514,IDC_STATIC,4,13,20,20
+                    OPT_QuestionText,30,2,153,28
+    ICON            32514,IDC_STATIC,4,4,20,20
 END
 
 DLG_Startup DIALOG DISCARDABLE  0, 0, 276, 127
@@ -336,292 +348,544 @@ BEGIN
 END
 
 DLG_IndexNumber DIALOG DISCARDABLE  0, 0, 236, 18
-#if __GNUC__
-STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_CLIPSIBLINGS |
-	NOT WS_POPUP | NOT WS_BORDER | NOT WS_SYSMENU
-#else
 STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_CLIPSIBLINGS
-#endif
 FONT 8, "MS Sans Serif"
 BEGIN
     LTEXT           "Inde&x number:",IDC_STATIC,5,2,46,8
     EDITTEXT        OPT_IndexNumber,54,0,155,13,ES_AUTOHSCROLL
 END
 
-DLG_TypeInMove DIALOG DISCARDABLE  0, 0, 186, 46
+DLG_TypeInMove DIALOG DISCARDABLE  0, 0, 206, 23
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Type in a move"
 FONT 8, "MS Sans Serif"
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,129,7,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,129,24,50,14
-    EDITTEXT        OPT_Move,7,16,109,13,ES_AUTOHSCROLL
+    DEFPUSHBUTTON   "OK",IDOK,96,4,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,152,4,50,14
+    EDITTEXT        OPT_Move,4,4,86,13,ES_AUTOHSCROLL
 END
 
-DLG_Sound DIALOG DISCARDABLE  0, 0, 257, 95
+DLG_TypeInName DIALOG DISCARDABLE  0, 0, 206, 23
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Type in your name"
+FONT 8, "MS Sans Serif"
+BEGIN
+    DEFPUSHBUTTON   "OK",IDOK,96,4,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,152,4,50,14
+    EDITTEXT        OPT_Name,4,4,86,13,ES_AUTOHSCROLL
+END
+
+DLG_Sound DIALOG DISCARDABLE  0, 0, 242, 105
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Sounds"
 FONT 8, "MS Sans Serif"
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,199,6,47,14
-    PUSHBUTTON      "Cancel",IDCANCEL,199,23,47,14
-    PUSHBUTTON      "Defaults",OPT_DefaultSounds,199,40,47,14
-    COMBOBOX        CBO_Sounds,52,6,128,110,CBS_DROPDOWNLIST | WS_VSCROLL | 
+    DEFPUSHBUTTON   "OK",IDOK,132,86,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,188,86,50,14
+    LTEXT           "Event:",IDC_STATIC,4,7,26,9
+    COMBOBOX        CBO_Sounds,30,4,208,110,CBS_DROPDOWNLIST | WS_VSCROLL | 
                     WS_TABSTOP
     CONTROL         "No sound",OPT_NoSound,"Button",BS_AUTORADIOBUTTON | 
-                    WS_GROUP | WS_TABSTOP,11,25,47,10
+                    WS_GROUP | WS_TABSTOP,12,22,47,10
     CONTROL         "Default beep",OPT_DefaultBeep,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,11,42,57,10
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,12,36,57,10
     CONTROL         "Built-in sound:",OPT_BuiltInSound,"Button",
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,11,59,60,10
-    COMBOBOX        OPT_BuiltInSoundName,78,58,103,109,CBS_DROPDOWNLIST | 
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,12,51,60,10
+    COMBOBOX        OPT_BuiltInSoundName,76,48,103,109,CBS_DROPDOWNLIST | 
                     CBS_SORT | WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Play",OPT_PlaySound,200,57,47,14
+    PUSHBUTTON      "Play",OPT_PlaySound,188,47,50,14
     CONTROL         "WAV file:",OPT_WavFile,"Button",BS_AUTORADIOBUTTON | 
-                    WS_TABSTOP,11,76,45,10
-    EDITTEXT        OPT_WavFileName,78,75,103,12,ES_AUTOHSCROLL
-    PUSHBUTTON      "Browse...",OPT_BrowseSound,200,74,47,14
-    LTEXT           "Event:",IDC_STATIC,19,9,26,9
+                    WS_TABSTOP,12,66,45,10
+    EDITTEXT        OPT_WavFileName,76,65,103,12,ES_AUTOHSCROLL
+    PUSHBUTTON      "Browse...",OPT_BrowseSound,188,64,50,14
+    PUSHBUTTON      "Defaults",OPT_DefaultSounds,6,86,50,14
 END
 
-DLG_GeneralOptions DIALOG DISCARDABLE  0, 0, 271, 135
+DLG_GeneralOptions DIALOG DISCARDABLE  0, 0, 220, 183
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "General Options"
 FONT 8, "MS Sans Serif"
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,207,7,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,208,25,50,14
+    DEFPUSHBUTTON   "OK",IDOK,110,164,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,166,164,50,14
     CONTROL         "Always on &Top",OPT_AlwaysOnTop,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,16,6,79,10
-    CONTROL         "Always &Queen",OPT_AlwaysQueen,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,16,20,79,10
-    CONTROL         "Animate &Dragging",OPT_AnimateDragging,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,16,34,79,10
-    CONTROL         "&Animate Moving",OPT_AnimateMoving,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,16,48,79,10
-    CONTROL         "Auto &Flag",OPT_AutoFlag,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,16,62,79,10
-    CONTROL         "Auto Flip &View",OPT_AutoFlipView,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,16,76,79,10
-    CONTROL         "Auto &Raise Board",OPT_AutoRaiseBoard,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,16,90,71,10
-    CONTROL         "&Blindfold",OPT_Blindfold,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,16,104,79,10
-    CONTROL         "&Highlight Dragging",OPT_HighlightDragging,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,16,118,79,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,6,79,10
     CONTROL         "Highlight Last &Move",OPT_HighlightLastMove,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,109,6,79,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,116,6,79,10
+    CONTROL         "Always &Queen",OPT_AlwaysQueen,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,4,20,79,10
     CONTROL         "Periodic &Updates",OPT_PeriodicUpdates,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,109,20,79,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,116,20,79,10
+    CONTROL         "Animate &Dragging",OPT_AnimateDragging,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,34,79,10
     CONTROL         "Ponder &Next Move",OPT_PonderNextMove,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,109,34,79,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,116,34,79,10
+    CONTROL         "&Animate Moving",OPT_AnimateMoving,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,48,79,10
     CONTROL         "&Popup Exit Message",OPT_PopupExitMessage,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,109,48,79,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,116,48,79,10
+    CONTROL         "Auto &Flag",OPT_AutoFlag,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,4,62,79,10
     CONTROL         "Popup Move &Errors",OPT_PopupMoveErrors,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,109,62,79,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,116,62,79,10
+    CONTROL         "Auto Flip &View",OPT_AutoFlipView,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,76,79,10
     CONTROL         "Show Butt&on Bar",OPT_ShowButtonBar,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,109,76,79,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,116,76,79,10
+    CONTROL         "Auto &Raise Board",OPT_AutoRaiseBoard,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,90,71,10
     CONTROL         "Show &Coordinates",OPT_ShowCoordinates,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,109,90,79,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,116,90,79,10
+    CONTROL         "&Blindfold",OPT_Blindfold,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,4,104,79,10
     CONTROL         "&Show Thinking",OPT_ShowThinking,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,109,104,79,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,116,104,79,10
+    CONTROL         "&Highlight Dragging",OPT_HighlightDragging,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,118,79,10
     CONTROL         "Test &Legality",OPT_TestLegality,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,109,118,79,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,116,118,79,10
+    CONTROL         "Extended PGN Info",OPT_SaveExtPGN,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,132,79,10
+    CONTROL         "Hide Thinking from Human",OPT_HideThinkFromHuman,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,116,132,100,10
+    CONTROL         "Extra Info in Move History",OPT_ExtraInfoInMoveHistory,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,146,97,10
+    CONTROL         "Highlight Move with Arrow",OPT_HighlightMoveArrow,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,116,145,100,9
 END
 
-DLG_IcsOptions DIALOGEX 0, 0, 318, 271
+DLG_IcsOptions DIALOGEX 0, 0, 302, 255
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "ICS Options"
 FONT 8, "MS Sans Serif"
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,88,250,60,15
-    PUSHBUTTON      "Cancel",IDCANCEL,168,250,60,15
+    DEFPUSHBUTTON   "OK",IDOK,194,237,50,15
+    PUSHBUTTON      "Cancel",IDCANCEL,248,237,50,15
     CONTROL         "&Auto Comment",OPT_AutoComment,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,20,12,63,8
+                    WS_TABSTOP,10,12,63,8
     CONTROL         "Auto &Observe",OPT_AutoObserve,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,20,27,63,8
+                    WS_TABSTOP,10,25,63,8
     CONTROL         "&Get Move List",OPT_GetMoveList,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,20,42,63,8
+                    BS_AUTOCHECKBOX | WS_TABSTOP,10,38,63,8
     CONTROL         "&Local Line Editing",OPT_LocalLineEditing,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,20,57,84,8
+                    BS_AUTOCHECKBOX | WS_TABSTOP,10,51,84,8
     CONTROL         "&Quiet Play",OPT_QuietPlay,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,20,72,63,8
+                    WS_TABSTOP,10,64,63,8
     CONTROL         "&Premove",OPT_Premove,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,171,12,46,10
+                    WS_TABSTOP,160,12,46,10
     CONTROL         "&White first move",OPT_PremoveWhite,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,171,27,67,10
-    EDITTEXT        OPT_PremoveWhiteText,252,23,25,14,ES_AUTOHSCROLL
+                    BS_AUTOCHECKBOX | WS_TABSTOP,160,26,67,10
+    EDITTEXT        OPT_PremoveWhiteText,236,22,25,14,ES_AUTOHSCROLL
     CONTROL         "&Black first move",OPT_PremoveBlack,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,171,42,66,10
-    EDITTEXT        OPT_PremoveBlackText,252,39,25,14,ES_AUTOHSCROLL
+                    BS_AUTOCHECKBOX | WS_TABSTOP,160,40,66,10
+    EDITTEXT        OPT_PremoveBlackText,236,38,25,14,ES_AUTOHSCROLL
     CONTROL         "&Sound alarm at",OPT_IcsAlarm,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,171,72,63,10
-    EDITTEXT        OPT_IcsAlarmTime,243,70,20,13,ES_AUTOHSCROLL
-    LTEXT           "seconds",IDC_STATIC,270,72,28,8
-    PUSHBUTTON      "Choose...",OPT_ChooseShoutColor,104,101,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseSShoutColor,104,121,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseChannel1Color,104,141,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseChannelColor,104,161,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseKibitzColor,104,181,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseTellColor,252,101,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseChallengeColor,252,121,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseRequestColor,252,141,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseSeekColor,252,161,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseNormalColor,252,181,45,15
-    PUSHBUTTON      "&Choose Background Color...",OPT_ChooseBackgroundColor,
-                    17,204,132,16
-    PUSHBUTTON      "&Default ICS Colors",OPT_DefaultColors,165,204,132,16
+                    WS_TABSTOP,160,72,63,10
+    EDITTEXT        OPT_IcsAlarmTime,236,68,26,14,ES_AUTOHSCROLL
+    LTEXT           "seconds",IDC_STATIC,264,72,28,8
+    PUSHBUTTON      "Choose...",OPT_ChooseShoutColor,97,101,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseSShoutColor,97,121,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseChannel1Color,97,141,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseChannelColor,97,161,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseKibitzColor,97,181,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseTellColor,246,101,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseChallengeColor,246,121,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseRequestColor,246,141,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseSeekColor,246,161,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseNormalColor,246,181,45,15
+    PUSHBUTTON      "Background...",OPT_ChooseBackgroundColor,10,208,50,16
+    PUSHBUTTON      "&Defaults...",OPT_DefaultColors,68,208,50,16
     CONTROL         "Do &not colorize messages",OPT_DontColorize,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,110,225,97,10
+                    BS_AUTOCHECKBOX | WS_TABSTOP,192,212,97,10
     CONTROL         "",OPT_SampleShout,"RICHEDIT",ES_CENTER | ES_MULTILINE | 
-                    ES_READONLY | WS_DISABLED | WS_GROUP,17,101,75,15,
+                    ES_READONLY | WS_DISABLED | WS_GROUP,10,101,75,15,
                     WS_EX_CLIENTEDGE
     CONTROL         "",OPT_SampleSShout,"RICHEDIT",ES_CENTER | ES_MULTILINE | 
-                    ES_READONLY | WS_DISABLED | WS_GROUP,17,121,75,15,
+                    ES_READONLY | WS_DISABLED | WS_GROUP,10,121,75,15,
                     WS_EX_CLIENTEDGE
     CONTROL         "",OPT_SampleChannel1,"RICHEDIT",ES_CENTER | 
-                    ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,17,
+                    ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,10,
                     141,75,15,WS_EX_CLIENTEDGE
     CONTROL         "",OPT_SampleChannel,"RICHEDIT",ES_CENTER | ES_MULTILINE | 
-                    ES_READONLY | WS_DISABLED | WS_GROUP,17,161,75,15,
+                    ES_READONLY | WS_DISABLED | WS_GROUP,10,161,75,15,
                     WS_EX_CLIENTEDGE
     CONTROL         "",OPT_SampleKibitz,"RICHEDIT",ES_CENTER | ES_MULTILINE | 
-                    ES_READONLY | WS_GROUP,17,181,75,15,WS_EX_CLIENTEDGE
+                    ES_READONLY | WS_GROUP,10,181,75,15,WS_EX_CLIENTEDGE
     CONTROL         "",OPT_SampleTell,"RICHEDIT",ES_CENTER | ES_MULTILINE | 
-                    ES_READONLY | WS_DISABLED | WS_GROUP,165,101,75,15,
+                    ES_READONLY | WS_DISABLED | WS_GROUP,159,101,75,15,
                     WS_EX_CLIENTEDGE
     CONTROL         "",OPT_SampleChallenge,"RICHEDIT",ES_CENTER | 
-                    ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,165,
+                    ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,159,
                     121,75,15,WS_EX_CLIENTEDGE
     CONTROL         "",OPT_SampleRequest,"RICHEDIT",ES_CENTER | ES_MULTILINE | 
-                    ES_READONLY | WS_DISABLED | WS_GROUP,165,141,75,15,
+                    ES_READONLY | WS_DISABLED | WS_GROUP,159,141,75,15,
                     WS_EX_CLIENTEDGE
     CONTROL         "",OPT_SampleSeek,"RICHEDIT",ES_CENTER | ES_MULTILINE | 
-                    ES_READONLY | WS_DISABLED | WS_GROUP,165,161,75,15,
+                    ES_READONLY | WS_DISABLED | WS_GROUP,159,161,75,15,
                     WS_EX_CLIENTEDGE
     CONTROL         "",OPT_SampleNormal,"RICHEDIT",ES_CENTER | ES_MULTILINE | 
-                    ES_READONLY | WS_DISABLED | WS_GROUP,165,181,75,15,
+                    ES_READONLY | WS_DISABLED | WS_GROUP,159,181,75,15,
                     WS_EX_CLIENTEDGE
-    GROUPBOX        "Interaction Colors",IDC_STATIC,10,90,295,150
-    GROUPBOX        "Premove",IDC_STATIC,159,0,146,59
-    GROUPBOX        "",IDC_STATIC,10,0,146,89
-    GROUPBOX        "Alarm",IDC_STATIC,159,59,146,30
+    GROUPBOX        "Interaction Colors",IDC_STATIC,4,90,294,140
+    GROUPBOX        "Premove",IDC_STATIC,154,0,144,56
+    GROUPBOX        "General",IDC_STATIC,4,0,146,88
+    GROUPBOX        "Alarm",IDC_STATIC,154,58,144,30
 END
 
-DLG_BoardOptions DIALOG DISCARDABLE  0, 0, 262, 250
+DLG_BoardOptions DIALOG DISCARDABLE  0, 0, 194, 250
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Board Options"
 FONT 8, "MS Sans Serif"
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,205,10,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,205,35,50,14
+    DEFPUSHBUTTON   "OK",IDOK,84,232,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,140,232,50,14
     CONTROL         "&Tiny",OPT_SizeTiny,"Button",BS_AUTORADIOBUTTON | 
-                    WS_GROUP | WS_TABSTOP,15,15,50,10
-    CONTROL         "T&eeny",OPT_SizeTeeny,"Button",BS_AUTORADIOBUTTON,15,25,
+                    WS_GROUP | WS_TABSTOP,9,14,50,10
+    CONTROL         "T&eeny",OPT_SizeTeeny,"Button",BS_AUTORADIOBUTTON,9,24,
                     50,10
-    CONTROL         "&Dinky",OPT_SizeDinky,"Button",BS_AUTORADIOBUTTON,15,35,
+    CONTROL         "&Dinky",OPT_SizeDinky,"Button",BS_AUTORADIOBUTTON,9,34,
                     50,10
-    CONTROL         "&Petite",OPT_SizePetite,"Button",BS_AUTORADIOBUTTON,15,
-                    45,50,10
-    CONTROL         "Sl&im",OPT_SizeSlim,"Button",BS_AUTORADIOBUTTON,15,55,
-                    50,10
-    CONTROL         "&Small",OPT_SizeSmall,"Button",BS_AUTORADIOBUTTON,15,65,
+    CONTROL         "&Petite",OPT_SizePetite,"Button",BS_AUTORADIOBUTTON,9,
+                    44,50,10
+    CONTROL         "Sl&im",OPT_SizeSlim,"Button",BS_AUTORADIOBUTTON,9,54,50,
+                    10
+    CONTROL         "&Small",OPT_SizeSmall,"Button",BS_AUTORADIOBUTTON,9,64,
                     50,10
     CONTROL         "Medi&ocre",OPT_SizeMediocre,"Button",BS_AUTORADIOBUTTON,
-                    76,15,50,10
+                    70,14,50,10
     CONTROL         "&Middling",OPT_SizeMiddling,"Button",BS_AUTORADIOBUTTON,
-                    76,25,50,10
+                    70,24,50,10
     CONTROL         "&Average",OPT_SizeAverage,"Button",BS_AUTORADIOBUTTON,
-                    76,35,50,10
+                    70,34,50,10
     CONTROL         "Mode&rate",OPT_SizeModerate,"Button",BS_AUTORADIOBUTTON,
-                    76,45,50,10
-    CONTROL         "Medi&um",OPT_SizeMedium,"Button",BS_AUTORADIOBUTTON,76,
-                    55,50,10
-    CONTROL         "Bul&ky",OPT_SizeBulky,"Button",BS_AUTORADIOBUTTON,76,65,
+                    70,44,50,10
+    CONTROL         "Medi&um",OPT_SizeMedium,"Button",BS_AUTORADIOBUTTON,70,
+                    54,50,10
+    CONTROL         "Bul&ky",OPT_SizeBulky,"Button",BS_AUTORADIOBUTTON,70,64,
                     50,10
-    CONTROL         "&Large",OPT_SizeLarge,"Button",BS_AUTORADIOBUTTON,140,
-                    15,50,10
-    CONTROL         "&Big",OPT_SizeBig,"Button",BS_AUTORADIOBUTTON,140,25,50,
+    CONTROL         "&Large",OPT_SizeLarge,"Button",BS_AUTORADIOBUTTON,134,
+                    14,50,10
+    CONTROL         "&Big",OPT_SizeBig,"Button",BS_AUTORADIOBUTTON,134,24,50,
                     10
-    CONTROL         "&Huge",OPT_SizeHuge,"Button",BS_AUTORADIOBUTTON,140,35,
+    CONTROL         "&Huge",OPT_SizeHuge,"Button",BS_AUTORADIOBUTTON,134,34,
                     50,10
-    CONTROL         "&Giant",OPT_SizeGiant,"Button",BS_AUTORADIOBUTTON,140,
-                    45,50,10
+    CONTROL         "&Giant",OPT_SizeGiant,"Button",BS_AUTORADIOBUTTON,134,
+                    44,50,10
     CONTROL         "&Colossal",OPT_SizeColossal,"Button",BS_AUTORADIOBUTTON,
-                    140,55,50,10
+                    134,54,50,10
     CONTROL         "Tita&nic",OPT_SizeTitanic,"Button",BS_AUTORADIOBUTTON,
-                    140,65,50,10
-    PUSHBUTTON      "Choose...",OPT_ChooseLightSquareColor,144,100,40,15
-    PUSHBUTTON      "Choose...",OPT_ChooseDarkSquareColor,144,120,40,15
-    PUSHBUTTON      "Choose...",OPT_ChooseWhitePieceColor,144,140,40,15
-    PUSHBUTTON      "Choose...",OPT_ChooseBlackPieceColor,144,160,40,15
-    PUSHBUTTON      "Choose...",OPT_ChooseHighlightSquareColor,144,180,40,15
-    PUSHBUTTON      "Choose...",OPT_ChoosePremoveHighlightColor,144,200,40,
-                    15
-    PUSHBUTTON      "Defaults",OPT_DefaultBoardColors,118,225,65,15
-    EDITTEXT        OPT_DarkSquareColor,104,120,25,15,ES_READONLY | 
+                    134,64,50,10
+    PUSHBUTTON      "...",OPT_ChooseLightSquareColor,110,94,20,15
+    PUSHBUTTON      "...",OPT_ChooseDarkSquareColor,110,112,20,15
+    PUSHBUTTON      "...",OPT_ChooseWhitePieceColor,110,130,20,15
+    PUSHBUTTON      "...",OPT_ChooseBlackPieceColor,110,148,20,15
+    PUSHBUTTON      "...",OPT_ChooseHighlightSquareColor,110,166,20,15
+    PUSHBUTTON      "...",OPT_ChoosePremoveHighlightColor,110,184,20,15
+    CONTROL         "Monochrome",OPT_Monochrome,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,10,210,64,10
+    CONTROL         "All White",OPT_AllWhite,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,140,180,53,10
+    CONTROL         "Flip Black",OPT_UpsideDown,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,140,192,53,10
+    PUSHBUTTON      "Defaults",OPT_DefaultBoardColors,80,206,50,15
+    EDITTEXT        OPT_DarkSquareColor,80,112,25,15,ES_READONLY | 
                     WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP
-    EDITTEXT        OPT_LightSquareColor,104,100,25,15,ES_READONLY | 
+    EDITTEXT        OPT_LightSquareColor,80,94,25,15,ES_READONLY | 
                     WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP
-    EDITTEXT        OPT_WhitePieceColor,104,140,25,15,ES_READONLY | 
+    EDITTEXT        OPT_WhitePieceColor,80,130,25,15,ES_READONLY | 
                     WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP
-    EDITTEXT        OPT_BlackPieceColor,104,160,25,15,ES_READONLY | 
+    EDITTEXT        OPT_BlackPieceColor,80,148,25,15,ES_READONLY | 
                     WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP
-    EDITTEXT        OPT_HighlightSquareColor,104,180,25,15,ES_READONLY | 
+    EDITTEXT        OPT_HighlightSquareColor,80,166,25,15,ES_READONLY | 
                     WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP
-    GROUPBOX        "Colors",IDC_STATIC,10,90,185,155
-    EDITTEXT        OPT_PremoveHighlightColor,104,200,25,15,ES_READONLY | 
+    GROUPBOX        "Colors",IDC_STATIC,4,84,185,142
+    EDITTEXT        OPT_PremoveHighlightColor,80,184,25,15,ES_READONLY | 
                     WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP
-    LTEXT           "Light Squares",IDC_STATIC,25,105,60,10
-    LTEXT           "Dark Squares",IDC_STATIC,25,124,60,10
-    LTEXT           "White Pieces",IDC_STATIC,25,145,60,10
-    LTEXT           "Black Pieces",IDC_STATIC,25,165,60,10
-    LTEXT           "Square Highlights",IDC_STATIC,25,185,60,10
-    LTEXT           "Premove Highlights",IDC_STATIC,25,205,70,10
-    GROUPBOX        "Size",IDC_STATIC,10,5,185,75
-    CONTROL         "Monochrome",OPT_Monochrome,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,25,225,75,10
-    EDITTEXT        OPT_SampleLightSquare,205,110,39,36,ES_READONLY | 
+    LTEXT           "Light Squares",IDC_STATIC,10,98,60,10
+    LTEXT           "Dark Squares",IDC_STATIC,10,116,60,10
+    LTEXT           "White Pieces",IDC_STATIC,10,134,60,10
+    LTEXT           "Black Pieces",IDC_STATIC,10,152,60,10
+    LTEXT           "Square Highlights",IDC_STATIC,10,170,60,10
+    LTEXT           "Premove Highlights",IDC_STATIC,10,188,70,10
+    GROUPBOX        "Size",IDC_STATIC,4,4,185,75
+    EDITTEXT        OPT_SampleLightSquare,144,96,39,36,ES_READONLY | 
                     WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP
-    EDITTEXT        OPT_SampleDarkSquare,205,165,39,36,ES_READONLY | 
+    EDITTEXT        OPT_SampleDarkSquare,144,138,39,36,ES_READONLY | 
                     WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP
 END
 
-DLG_Fonts DIALOG DISCARDABLE  0, 0, 280, 231
+DLG_NewVariant DIALOG DISCARDABLE  0, 0, 194, 250
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Variants"
+FONT 8, "MS Sans Serif"
+BEGIN
+    DEFPUSHBUTTON   "OK",IDOK,84,232,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,140,232,50,14
+    CONTROL         "&normal",OPT_VariantNormal,"Button",BS_AUTORADIOBUTTON | 
+                    WS_GROUP | WS_TABSTOP,9,14,50,10
+    CONTROL         "&FRC",OPT_VariantFRC,"Button",BS_AUTORADIOBUTTON,9,
+                    24,50,10
+    CONTROL         "&wildcastle",OPT_VariantWildcastle,"Button",BS_AUTORADIOBUTTON,9,34,
+                    50,10
+    CONTROL         "&nocastle",OPT_VariantNocastle,"Button",BS_AUTORADIOBUTTON,9,
+                    44,50,10
+    CONTROL         "&losers",OPT_VariantLosers,"Button",BS_AUTORADIOBUTTON,
+                    9,54,50,10
+    CONTROL         "&giveaway",OPT_VariantGiveaway,"Button",BS_AUTORADIOBUTTON,
+                    9,64,50,10
+    CONTROL         "s&uicide",OPT_VariantSuicide,"Button",BS_AUTORADIOBUTTON,
+                    9,74,50,10
+    CONTROL         "&3Check",OPT_Variant3Check,"Button",BS_AUTORADIOBUTTON,9,84,
+                    50,10
+    CONTROL         "&twokings",OPT_VariantTwoKings,"Button",BS_AUTORADIOBUTTON,9,94,
+                    50,10
+    CONTROL         "&atomic",OPT_VariantAtomic,"Button",BS_AUTORADIOBUTTON,
+                    9,104,50,10
+    CONTROL         "cra&zyhouse",OPT_VariantCrazyhouse,"Button",BS_AUTORADIOBUTTON,70,14,
+                    50,10
+    CONTROL         "&bughouse",OPT_VariantBughouse,"Button",BS_AUTORADIOBUTTON,70,24,50,
+                    10
+    CONTROL         "&Twilight",OPT_VariantBughouse,"Button",BS_AUTORADIOBUTTON,70,34,50,
+                    10
+    CONTROL         "&shogi",OPT_VariantShogi,"Button",BS_AUTORADIOBUTTON,70,
+                    44,50,10
+    CONTROL         "su&per",OPT_VariantSuper,"Button",BS_AUTORADIOBUTTON,70,
+                    54,50,10
+    CONTROL         "&knightmate",OPT_VariantKnightmate,"Button",BS_AUTORADIOBUTTON,
+                    70,64,50,10
+    CONTROL         "&Berolina",OPT_VariantBerolina,"Button",BS_AUTORADIOBUTTON,70,74,
+                    50,10
+    CONTROL         "c&ylinder",OPT_VariantCylinder,"Button",BS_AUTORADIOBUTTON,70,
+                    84,50,10
+    CONTROL         "&fairy",OPT_VariantFairy,"Button",BS_AUTORADIOBUTTON,70,
+                    94,50,10
+    CONTROL         "&gothic",OPT_VariantGothic,"Button",BS_AUTORADIOBUTTON,134,14,
+                    50,10
+    CONTROL         "&capablanca",OPT_VariantCapablanca,"Button",BS_AUTORADIOBUTTON,134,
+                    24,50,10
+    CONTROL         "&Janus",OPT_VariantJanus,"Button",BS_AUTORADIOBUTTON,134,34,
+                    50,10
+    CONTROL         "&CRC",OPT_VariantCRC,"Button",BS_AUTORADIOBUTTON,134,44,
+                    50,10
+    CONTROL         "&Falcon",OPT_VariantFalcon,"Button",BS_AUTORADIOBUTTON,134,
+                    54,50,10
+    CONTROL         "cou&rier",OPT_VariantCourier,"Button",BS_AUTORADIOBUTTON,134,64,
+                    50,10
+    CONTROL         "&Great",OPT_VariantGreat,"Button",BS_AUTORADIOBUTTON,134,74,
+                    50,10
+    CONTROL         "&Shatranj",OPT_VariantShatranj,"Button",BS_AUTORADIOBUTTON,134,
+                    84,50,10
+    CONTROL         "&xiangqi",OPT_VariantXiangqi,"Button",BS_AUTORADIOBUTTON,134,94,50,
+                    10
+    GROUPBOX        "Variant",IDC_STATIC,4,4,185,115
+    LTEXT           "Board size:",IDC_STATIC,10,135,40,8
+    EDITTEXT        IDC_Ranks,60,131,14,14,ES_AUTOHSCROLL
+    LTEXT           "ranks",IDC_STATIC,77,135,22,8
+    EDITTEXT        IDC_Files,116,131,14,14,ES_AUTOHSCROLL
+    LTEXT           "files",IDC_STATIC,133,135,37,8
+    LTEXT           "Holdings with room for:",IDC_STATIC,10,153,90,8
+    EDITTEXT        IDC_Holdings,93,149,14,14,ES_AUTOHSCROLL
+    LTEXT           "pieces",IDC_STATIC,110,153,22,8
+    LTEXT           "('-1' means defaults for selected variant)",IDC_STATIC,10,171,150,8
+END
+
+DLG_Fonts DIALOG DISCARDABLE  0, 0, 266, 226
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Fonts"
 FONT 8, "MS Sans Serif"
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,155,210,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,215,210,50,14
-    PUSHBUTTON      "Choose...",OPT_ChooseClockFont,221,17,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseMessageFont,221,47,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseCoordFont,221,77,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseTagFont,221,120,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseCommentsFont,221,150,45,15
-    PUSHBUTTON      "Choose...",OPT_ChooseConsoleFont,221,180,45,15
-    PUSHBUTTON      "&Revert to Defaults",OPT_DefaultFonts,15,210,80,15
+    DEFPUSHBUTTON   "OK",IDOK,156,208,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,212,208,50,14
+    PUSHBUTTON      "Choose...",OPT_ChooseClockFont,212,15,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseMessageFont,212,39,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseCoordFont,212,63,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseTagFont,212,101,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseCommentsFont,212,125,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseConsoleFont,212,149,45,15
+    PUSHBUTTON      "Choose...",OPT_ChooseMoveHistoryFont,212,174,45,15
+    PUSHBUTTON      "&Defaults",OPT_DefaultFonts,3,208,50,15
     CONTROL         "",OPT_SampleCoordFont,"RICHEDIT",ES_READONLY | 
-                    WS_DISABLED | WS_BORDER,70,72,140,20
+                    WS_DISABLED | WS_BORDER,67,59,140,20
     CONTROL         "",OPT_SampleTagFont,"RICHEDIT",ES_READONLY | 
-                    WS_DISABLED | WS_BORDER,70,115,140,20
+                    WS_DISABLED | WS_BORDER,67,97,140,20
     CONTROL         "",OPT_SampleCommentsFont,"RICHEDIT",ES_READONLY | 
-                    WS_DISABLED | WS_BORDER,70,145,140,20
+                    WS_DISABLED | WS_BORDER,67,121,140,20
     CONTROL         "",OPT_SampleConsoleFont,"RICHEDIT",ES_READONLY | 
-                    WS_DISABLED | WS_BORDER,70,175,140,20
-    LTEXT           "Clocks",OPT_ClockFont,16,17,45,10,NOT WS_GROUP
-    LTEXT           "Messages",OPT_MessageFont,16,47,45,10,NOT WS_GROUP
-    LTEXT           "Coordinates",OPT_CoordFont,16,77,45,10,NOT WS_GROUP
-    LTEXT           "Tags",OPT_EditTagsFont,16,120,45,10,NOT WS_GROUP
-    LTEXT           "Comments",OPT_CommentsFont,16,150,45,10,NOT WS_GROUP
-    LTEXT           "ICS Interaction",OPT_MessageFont5,16,180,50,10,NOT 
+                    WS_DISABLED | WS_BORDER,67,145,140,20
+    LTEXT           "Clocks",OPT_ClockFont,13,16,45,10,NOT WS_GROUP
+    LTEXT           "Messages",OPT_MessageFont,13,40,45,10,NOT WS_GROUP
+    LTEXT           "Coordinates",OPT_CoordFont,13,64,45,10,NOT WS_GROUP
+    LTEXT           "Tags",OPT_EditTagsFont,13,102,45,10,NOT WS_GROUP
+    LTEXT           "Comments",OPT_CommentsFont,13,126,45,10,NOT WS_GROUP
+    LTEXT           "ICS Interaction",OPT_MessageFont5,13,150,50,10,NOT 
                     WS_GROUP
     CONTROL         "",OPT_SampleClockFont,"RICHEDIT",ES_READONLY | 
-                    WS_DISABLED | WS_BORDER,70,12,140,20
+                    WS_DISABLED | WS_BORDER,67,11,140,20
     CONTROL         "",OPT_SampleMessageFont,"RICHEDIT",ES_READONLY | 
-                    WS_DISABLED | WS_BORDER,70,42,140,20
-    GROUPBOX        "Current Board Size",IDC_STATIC,5,2,270,100
-    GROUPBOX        "All Board Sizes",IDC_STATIC,5,105,270,100
+                    WS_DISABLED | WS_BORDER,67,35,140,20
+    GROUPBOX        "Current Board Size",IDC_STATIC,3,1,259,83
+    GROUPBOX        "All Board Sizes",IDC_STATIC,3,87,259,109
+    CONTROL         "",OPT_SampleMoveHistoryFont,"RICHEDIT",ES_READONLY | 
+                    WS_DISABLED | WS_BORDER,67,170,140,20
+    LTEXT           "Move History",OPT_MessageFont6,13,175,50,10,NOT 
+                    WS_GROUP
+END
+
+DLG_NewGameFRC DIALOG DISCARDABLE  0, 0, 176, 47
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "New Shuffle Game"
+FONT 8, "MS Sans Serif"
+BEGIN
+    LTEXT           "&Start Position Number:",IDC_NFG_Label,4,7,71,8
+    EDITTEXT        IDC_NFG_Edit,76,4,42,14,ES_AUTOHSCROLL
+    PUSHBUTTON      "Random",IDC_NFG_Random,122,4,50,14
+    DEFPUSHBUTTON   "OK",IDOK,64,28,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,122,28,50,14
+END
+
+DLG_GameListOptions DIALOG DISCARDABLE  0, 0, 206, 140
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Game List Options"
+FONT 8, "MS Sans Serif"
+BEGIN
+    LTEXT           "PGN &Tags:",IDC_GLT,2,2,36,8
+    LISTBOX         IDC_GameListTags,2,12,158,102,LBS_USETABSTOPS | 
+                    LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
+    PUSHBUTTON      "&Up",IDC_GLT_Up,164,12,38,14
+    PUSHBUTTON      "&Down",IDC_GLT_Down,164,30,38,14
+    PUSHBUTTON      "Default",IDC_GLT_Restore,164,82,38,14
+    PUSHBUTTON      "Factory",IDC_GLT_Default,164,100,38,14
+    DEFPUSHBUTTON   "OK",IDOK,96,122,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,152,122,50,14
+    LTEXT           "Restore to:",IDC_GLT_RestoreTo,164,70,36,8
+END
+
+DLG_MoveHistory DIALOGEX 0, 0, 225, 130
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+EXSTYLE WS_EX_TOOLWINDOW
+CAPTION "Move History"
+FONT 8, "MS Sans Serif", 0, 0, 0x1
+BEGIN
+    CONTROL         "",IDC_MoveHistory,"RICHEDIT",ES_MULTILINE | ES_READONLY | 
+                    WS_BORDER | WS_VSCROLL | WS_TABSTOP,2,2,222,128
+END
+
+DLG_EvalGraph DIALOGEX 0, 0, 216, 75
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+EXSTYLE WS_EX_TOOLWINDOW
+CAPTION "Evaluation Diagram"
+FONT 8, "MS Sans Serif"
+BEGIN
+END
+
+DLG_EngineOutput DIALOGEX 0, 0, 266, 167
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+EXSTYLE WS_EX_TOOLWINDOW
+CAPTION "Engine output"
+FONT 8, "MS Sans Serif"
+BEGIN
+    LTEXT           "Engine #1",IDC_EngineLabel1,14,2,84,8
+    RTEXT           "NPS",IDC_Engine1_NPS,206,2,57,8
+    CONTROL         "",IDC_EngineMemo1,"RICHEDIT",ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | 
+                    WS_HSCROLL | WS_TABSTOP,0,10,262,72
+    LTEXT           "Engine #2",IDC_EngineLabel2,15,84,103,8
+    RTEXT           "NPS",IDC_Engine2_NPS,210,84,55,8
+    CONTROL         "",IDC_EngineMemo2,"RICHEDIT",ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | 
+                    WS_HSCROLL | WS_TABSTOP,2,92,262,74
+    ICON            IDI_UNKNOWN_14,IDC_Color1,2,4,20,20,SS_REALSIZEIMAGE
+    ICON            IDI_UNKNOWN_14,IDC_Color2,4,84,20,20
+    LTEXT           "Static",IDC_StateData1,120,2,83,8
+    ICON            IDI_TRANS_14,IDC_StateIcon1,98,0,21,20
+    LTEXT           "Static",IDC_StateData2,186,84,19,8
+    ICON            IDI_TRANS_14,IDC_StateIcon2,164,84,20,20
+END
+
+DLG_EnginePlayOptions DIALOG DISCARDABLE  0, 0, 208, 202
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Adjudications"
+FONT 8, "MS Sans Serif"
+BEGIN
+    CONTROL         "Ponder Next Move",IDC_EpPonder,"Button",BS_AUTOCHECKBOX |
+                    WS_TABSTOP,4,4,75,10
+    CONTROL         "Enable and Show Thinking (recommended)",
+                    IDC_EpShowThinking,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+                    4,16,152,10
+    CONTROL         "Hide Thinking when Playing against Human",
+                    IDC_EpHideThinkingHuman,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,4,28,153,10
+    CONTROL         "Periodic Updates (for Analysis Mode)",
+                    IDC_EpPeriodicUpdates,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,4,40,131,10
+    GROUPBOX        "Engine-engine matches",IDC_STATIC,4,56,200,98
+    LTEXT           "Adjudicate draw after:",IDC_STATIC,10,72,70,8
+    EDITTEXT        IDC_EpDrawMoveCount,116,68,40,14,ES_AUTOHSCROLL
+    LTEXT           "moves",IDC_STATIC,158,72,22,8
+    LTEXT           "Win/loss adjudication threshold:",IDC_STATIC,10,90,102,
+                    8
+    EDITTEXT        IDC_EpAdjudicationThreshold,116,86,40,14,ES_AUTOHSCROLL
+    LTEXT           "centipawns",IDC_STATIC,158,90,37,8
+    CONTROL         "&Verify Engine Claims",IDC_TestClaims,"Button",BS_AUTOCHECKBOX |
+                    WS_TABSTOP,10,108,100,10
+    CONTROL         "Detect &Mates",
+                    IDC_DetectMates,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+                    10,118,100,10
+    CONTROL         "Draw if &Insufficient Material",
+                    IDC_MaterialDraws,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,10,128,100,10
+    CONTROL         "Adjudicate &Trivial Draws",
+                    IDC_TrivialDraws,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,10,138,100,10
+    GROUPBOX        "Apply",IDC_STATIC,115,102,81,47
+    EDITTEXT        IDC_RuleMoves,120,113,20,14,ES_AUTOHSCROLL
+    LTEXT           "-move rule",IDC_STATIC,142,117,35,8
+    EDITTEXT        IDC_DrawRepeats,120,130,20,14,ES_AUTOHSCROLL
+    LTEXT           "-fold repeats",IDC_STATIC,142,134,50,8
+    CONTROL         "Engine #1 Score is Absolute",
+                    IDC_ScoreAbs1,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,10,156,120,10
+    CONTROL         "Engine #2 Score is Absolute",
+                    IDC_ScoreAbs2,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,10,168,120,10
+    DEFPUSHBUTTON   "OK",IDOK,98,185,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,154,185,50,14
+END
+
+DLG_OptionsUCI DIALOG DISCARDABLE  0, 0, 228, 124
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Engine Settings"
+FONT 8, "MS Sans Serif"
+BEGIN
+    LTEXT           "Polyglot Directory:",IDC_STATIC,2,8,58,8
+    EDITTEXT        IDC_PolyglotDir,62,4,140,14,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_BrowseForPolyglotDir,206,4,17,14
+    LTEXT           "Hash Size (MB):",IDC_STATIC,2,26,52,8
+    EDITTEXT        IDC_HashSize,62,22,40,14,ES_AUTOHSCROLL
+    LTEXT           "EGTB Path:",IDC_STATIC,2,44,39,8
+    EDITTEXT        IDC_PathToEGTB,62,40,140,14,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_BrowseForEGTB,206,40,17,14
+    LTEXT           "EGTB Size (MB):",IDC_STATIC,2,62,54,8
+    EDITTEXT        IDC_SizeOfEGTB,62,58,40,14,ES_AUTOHSCROLL
+    CONTROL         "Use Book:",IDC_UseBook,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,2,80,49,10
+    EDITTEXT        IDC_BookFile,62,76,140,14,ES_AUTOHSCROLL
+    PUSHBUTTON      "...",IDC_BrowseForBook,206,76,17,14
+    LTEXT           "Max nr of CPUs:",IDC_STATIC,106,26,52,8
+    EDITTEXT        IDC_Cores,162,22,40,14,ES_AUTOHSCROLL
+    CONTROL         "First has Own Book",IDC_OwnBook1,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,2,94,100,10
+    CONTROL         "Second has Own Book",IDC_OwnBook2,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,2,107,100,10
+    DEFPUSHBUTTON   "OK",IDOK,118,106,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,174,106,50,14
+END
+
+DLG_Null DIALOG DISCARDABLE  0, 0, 186, 50
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Null"
+FONT 8, "MS Sans Serif"
+BEGIN
 END
 
 
@@ -633,26 +897,36 @@ END
 #ifdef APSTUDIO_INVOKED
 GUIDELINES DESIGNINFO DISCARDABLE 
 BEGIN
+    DLG_GameList, DIALOG
+    BEGIN
+        RIGHTMARGIN, 258
+    END
+
+    DLG_Colorize, DIALOG
+    BEGIN
+        BOTTOMMARGIN, 32
+    END
+
     DLG_GeneralOptions, DIALOG
     BEGIN
         LEFTMARGIN, 7
-        RIGHTMARGIN, 264
+        RIGHTMARGIN, 213
         TOPMARGIN, 7
-        BOTTOMMARGIN, 128
+        BOTTOMMARGIN, 176
     END
 
     DLG_IcsOptions, DIALOG
     BEGIN
         LEFTMARGIN, 7
-        RIGHTMARGIN, 311
+        RIGHTMARGIN, 295
         TOPMARGIN, 7
-        BOTTOMMARGIN, 264
+        BOTTOMMARGIN, 248
     END
 
     DLG_BoardOptions, DIALOG
     BEGIN
         LEFTMARGIN, 7
-        RIGHTMARGIN, 255
+        RIGHTMARGIN, 187
         TOPMARGIN, 7
         BOTTOMMARGIN, 243
     END
@@ -660,9 +934,73 @@ BEGIN
     DLG_Fonts, DIALOG
     BEGIN
         LEFTMARGIN, 7
-        RIGHTMARGIN, 273
+        RIGHTMARGIN, 259
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 219
+    END
+
+    DLG_NewGameFRC, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 169
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 40
+    END
+
+    DLG_GameListOptions, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 199
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 133
+    END
+
+    DLG_MoveHistory, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 218
         TOPMARGIN, 7
-        BOTTOMMARGIN, 224
+        BOTTOMMARGIN, 123
+    END
+
+    DLG_EvalGraph, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 209
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 68
+    END
+
+    DLG_EngineOutput, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 259
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 160
+    END
+
+    DLG_EnginePlayOptions, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 201
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 122
+    END
+
+    DLG_OptionsUCI, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 221
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 117
+    END
+
+    DLG_Null, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 179
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 43
     END
 END
 #endif    // APSTUDIO_INVOKED
@@ -675,9 +1013,18 @@ END
 
 // Icon with lowest ID value placed first to ensure application icon
 // remains consistent on all systems.
-ICON_BLACK              ICON    DISCARDABLE     "bitmaps\\icon_ob.ico"
-ICON_BOARD              ICON    DISCARDABLE     "bitmaps\\board.ico"
-ICON_WHITE              ICON    DISCARDABLE     "bitmaps\\icon_whi.ico"
+IDI_WHITE_14            ICON    DISCARDABLE     "bitmaps/white_14.ico"
+ICON_BLACK              ICON    DISCARDABLE     "bitmaps/icon_ob.ico"
+ICON_BOARD              ICON    DISCARDABLE     "bitmaps/board.ico"
+ICON_WHITE              ICON    DISCARDABLE     "bitmaps/icon_whi.ico"
+IDI_BLACK_14            ICON    DISCARDABLE     "bitmaps/black_14.ico"
+IDI_PONDER_14           ICON    DISCARDABLE     "bitmaps/ponder_14.ico"
+IDI_TRANS_14            ICON    DISCARDABLE     "bitmaps/trans_14.ico"
+IDI_CLOCK_14            ICON    DISCARDABLE     "bitmaps/clock_14.ico"
+IDI_UNKNOWN_14          ICON    DISCARDABLE     "bitmaps/unknown_14.ico"
+IDI_BALOON_14           ICON    DISCARDABLE     "bitmaps/baloon_14.ico"
+IDI_ANALYZE_14          ICON    DISCARDABLE     "bitmaps/analyze_14.ico"
+IDI_ANALYZE2_14         ICON    DISCARDABLE     "bitmaps/analyze2_14.ico"
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -688,23 +1035,28 @@ WINBOARD MENU DISCARDABLE
 BEGIN
     POPUP "&File"
     BEGIN
-        MENUITEM "Reset &Game",                 IDM_NewGame
+        MENUITEM "New &Game\tCtrl-N",           IDM_NewGame
+        MENUITEM "New Shuffle Game...",         IDM_NewGameFRC
+        MENUITEM "New Variant...",              IDM_NewVariant
         MENUITEM SEPARATOR
-        MENUITEM "&Load Game...",               IDM_LoadGame
+        MENUITEM "&Load Game...\tCtrl-O",       IDM_LoadGame
         MENUITEM "Load &Next Game\tAlt+PgDn",   IDM_LoadNextGame
         MENUITEM "Load &Previous Game\tAlt+PgUp", IDM_LoadPrevGame
         MENUITEM "&Reload Same Game",           IDM_ReloadGame
-        MENUITEM "&Save Game...",               IDM_SaveGame
+        MENUITEM "&Save Game...\tCtrl-S",       IDM_SaveGame
         MENUITEM SEPARATOR
         MENUITEM "&Copy Game To Clipboard\tAlt+C", IDM_CopyGame
         MENUITEM "Paste Game &From Clipboard\tAlt+V", IDM_PasteGame
         MENUITEM SEPARATOR
+        MENUITEM "Copy Game List to Clipboard", IDM_CopyGameListToClipboard
+        MENUITEM SEPARATOR
         MENUITEM "L&oad Position...",           IDM_LoadPosition
         MENUITEM "Load N&ext Position\tAlt+Shift+PgDn", IDM_LoadNextPosition
         MENUITEM "Load Pre&vious Position\tAlt+Shift+PgUp", 
                                                 IDM_LoadPrevPosition
         MENUITEM "Reload Sa&me Position",       IDM_ReloadPosition
         MENUITEM "S&ave Position...",           IDM_SavePosition
+        MENUITEM "Save &Diagram...",            IDM_SaveDiagram
         MENUITEM SEPARATOR
         MENUITEM "Cop&y Position To Clipboard\tAlt+Shift+C", 
                                                 IDM_CopyPosition
@@ -718,6 +1070,7 @@ BEGIN
         MENUITEM "Machine &White",              IDM_MachineWhite
         MENUITEM "Machine &Black",              IDM_MachineBlack
         MENUITEM "Two &Machines",               IDM_TwoMachines
+        MENUITEM "Machine Bot&h",               IDM_MachineBoth
         MENUITEM "&Analysis Mode",              IDM_AnalysisMode
         MENUITEM "Analyze &File",               IDM_AnalyzeFile
         MENUITEM "&ICS Client",                 IDM_IcsClient
@@ -725,9 +1078,14 @@ BEGIN
         MENUITEM "&Edit Position",              IDM_EditPosition
         MENUITEM "Trai&ning",                   IDM_Training, GRAYED
         MENUITEM SEPARATOR
-        MENUITEM "Show Game &List...",          IDM_ShowGameList
+        MENUITEM "Show Engine &Output",         IDM_ShowEngineOutput
+        MENUITEM "Show Evaluation Graph",       IDM_ShowEvalGraph
+        MENUITEM "Show Game &List",             IDM_ShowGameList
+        MENUITEM "Show Move History",           IDM_ShowMoveHistory
+        MENUITEM SEPARATOR
         MENUITEM "Edit &Tags...",               IDM_EditTags
         MENUITEM "Edit &Comment...",            IDM_EditComment
+        MENUITEM "Enter &Username...",          IDM_TypeInName
         MENUITEM "&Pause\tPause",               IDM_Pause
     END
     POPUP "&Action"
@@ -744,6 +1102,10 @@ BEGIN
         MENUITEM SEPARATOR
         MENUITEM "Stop &Observing\tF10",        IDM_StopObserving
         MENUITEM "Stop E&xamining\tF11",        IDM_StopExamining
+        MENUITEM SEPARATOR
+        MENUITEM "Adjudicate to White",         IDM_UserAdjudication_White
+        MENUITEM "Adjudicate to Black",         IDM_UserAdjudication_Black
+        MENUITEM "Adjudicate Draw",             IDM_UserAdjudication_Draw
     END
     POPUP "&Step"
     BEGIN
@@ -762,12 +1124,16 @@ BEGIN
     POPUP "&Options"
     BEGIN
         MENUITEM "Flip &View\tF2",              IDM_FlipView
+        MENUITEM "Swap &Clocks",                IDM_FlipClock
         MENUITEM SEPARATOR
         MENUITEM "&General...",                 IDM_GeneralOptions
         MENUITEM "&Board...",                   IDM_BoardOptions
+        MENUITEM "Adjudications...",            IDM_EnginePlayOptions
+        MENUITEM "Engine Settings...",          IDM_OptionsUCI
         MENUITEM "&ICS...",                     IDM_IcsOptions, GRAYED
         MENUITEM "&Fonts...",                   IDM_Fonts
         MENUITEM "Soun&ds...",                  IDM_Sounds
+        MENUITEM "Game List...",                IDM_GameListOptions
         MENUITEM SEPARATOR
         MENUITEM "Comm&unications...",          IDM_CommPort
         MENUITEM "&Load Game...",               IDM_LoadOptions
@@ -796,6 +1162,8 @@ BEGIN
     BEGIN
         MENUITEM "White",                       EP_White
         MENUITEM SEPARATOR
+        MENUITEM "Promote",                     EP_Promote
+        MENUITEM SEPARATOR
         MENUITEM "Pawn",                        EP_WhitePawn
         MENUITEM "Knight",                      EP_WhiteKnight
         MENUITEM "Bishop",                      EP_WhiteBishop
@@ -803,9 +1171,16 @@ BEGIN
         MENUITEM "Queen",                       EP_WhiteQueen
         MENUITEM "King",                        EP_WhiteKing
         MENUITEM SEPARATOR
+        MENUITEM "Archbishop",                  EP_WhiteCardinal
+        MENUITEM "Chancellor",                  EP_WhiteMarshall
+        MENUITEM "Elephant",                    EP_WhiteAlfil
+        MENUITEM "Cannon",                      EP_WhiteCannon
+        MENUITEM SEPARATOR
         MENUITEM "Empty Square",                EP_EmptySquare
         MENUITEM "Black",                       EP_Black, MENUBARBREAK
         MENUITEM SEPARATOR
+        MENUITEM "Demote",                      EP_Demote
+        MENUITEM SEPARATOR
         MENUITEM "Pawn",                        EP_BlackPawn
         MENUITEM "Knight",                      EP_BlackKnight
         MENUITEM "Bishop",                      EP_BlackBishop
@@ -813,6 +1188,46 @@ BEGIN
         MENUITEM "Queen",                       EP_BlackQueen
         MENUITEM "King",                        EP_BlackKing
         MENUITEM SEPARATOR
+        MENUITEM "Archbishop",                  EP_BlackCardinal
+        MENUITEM "Chancellor",                  EP_BlackMarshall
+        MENUITEM "Elephant",                    EP_BlackAlfil
+        MENUITEM "Cannon",                      EP_BlackCannon
+        MENUITEM SEPARATOR
+        MENUITEM "Clear Board    ",             EP_ClearBoard
+    END
+END
+
+SHOGIPIECEMENU MENU DISCARDABLE 
+BEGIN
+    POPUP ""
+    BEGIN
+        MENUITEM "White",                       EP_White
+        MENUITEM SEPARATOR
+        MENUITEM "Pawn",                        EP_WhitePawn
+        MENUITEM "Knight",                      EP_WhiteKnight
+        MENUITEM "Bishop",                      EP_WhiteBishop
+        MENUITEM "Rook",                        EP_WhiteRook
+        MENUITEM "Lance",                       EP_WhiteQueen
+        MENUITEM "Silver",                      EP_WhiteFerz
+        MENUITEM "Gold",                        EP_WhiteWazir
+        MENUITEM "King",                        EP_WhiteKing
+        MENUITEM SEPARATOR
+        MENUITEM "Promote",                     EP_Promote
+        MENUITEM SEPARATOR
+        MENUITEM "Empty Square",                EP_EmptySquare
+        MENUITEM "Black",                       EP_Black, MENUBARBREAK
+        MENUITEM SEPARATOR
+        MENUITEM "Pawn",                        EP_BlackPawn
+        MENUITEM "Knight",                      EP_BlackKnight
+        MENUITEM "Bishop",                      EP_BlackBishop
+        MENUITEM "Rook",                        EP_BlackRook
+        MENUITEM "Lance",                       EP_BlackQueen
+        MENUITEM "Silver",                      EP_BlackFerz
+        MENUITEM "Gold",                        EP_BlackWazir
+        MENUITEM "King",                        EP_BlackKing
+        MENUITEM SEPARATOR
+        MENUITEM "Demote",                      EP_Demote
+        MENUITEM SEPARATOR
         MENUITEM "Clear Board    ",             EP_ClearBoard
     END
 END
@@ -901,12 +1316,17 @@ WINBOARD ACCELERATORS MOVEABLE PURE
 BEGIN
     "1",            IDM_DirectCommand1,     VIRTKEY, ALT, NOINVERT
     "2",            IDM_DirectCommand2,     VIRTKEY, ALT, NOINVERT
+    "B",            IDM_Book,               VIRTKEY, ALT, NOINVERT
     "C",            IDM_CopyGame,           VIRTKEY, ALT, NOINVERT
-    "C",            IDM_CopyPosition,       VIRTKEY, SHIFT, ALT, 
-                                                    NOINVERT
+    "C",            IDM_CopyPosition,       VIRTKEY, SHIFT, ALT, NOINVERT
+    "I",            IDM_TypeInMove,         VIRTKEY, ALT, NOINVERT
+    "N",            IDM_NewGame,            VIRTKEY, CONTROL, NOINVERT
+    "O",            IDM_LoadGame,           VIRTKEY, CONTROL, NOINVERT
+    "S",            IDM_SaveGame,           VIRTKEY, CONTROL, NOINVERT
     "V",            IDM_PasteGame,          VIRTKEY, ALT, NOINVERT
-    "V",            IDM_PastePosition,      VIRTKEY, SHIFT, ALT, 
+    "V",            IDM_PasteAny,           VIRTKEY, SHIFT, CONTROL, 
                                                     NOINVERT
+    "V",            IDM_PastePosition,      VIRTKEY, SHIFT, ALT, NOINVERT
     VK_DELETE,      IDM_RetractMove,        VIRTKEY, ALT, NOINVERT
     VK_DOWN,        IDM_ToEnd,              VIRTKEY, ALT, NOINVERT
     VK_END,         IDM_TruncateGame,       VIRTKEY, ALT, NOINVERT
@@ -953,338 +1373,596 @@ BEGIN
     VK_UP,          IDM_ToStart,            VIRTKEY, NOINVERT
 END
 
+NO_ICS ACCELERATORS DISCARDABLE 
+BEGIN
+    "A",            IDM_AnalysisMode,       VIRTKEY, CONTROL, NOINVERT
+    "V",            IDM_PasteAny,           VIRTKEY, CONTROL, NOINVERT
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
 // Bitmap
 //
 
-P21O                    BITMAP  MOVEABLE PURE   "bitmaps\\p21o.bmp"
-N21O                    BITMAP  MOVEABLE PURE   "bitmaps\\n21o.bmp"
-B21O                    BITMAP  MOVEABLE PURE   "bitmaps\\b21o.bmp"
-R21O                    BITMAP  MOVEABLE PURE   "bitmaps\\r21o.bmp"
-K21O                    BITMAP  MOVEABLE PURE   "bitmaps\\k21o.bmp"
-Q21O                    BITMAP  MOVEABLE PURE   "bitmaps\\q21o.bmp"
-P21S                    BITMAP  MOVEABLE PURE   "bitmaps\\p21s.bmp"
-N21S                    BITMAP  MOVEABLE PURE   "bitmaps\\n21s.bmp"
-B21S                    BITMAP  MOVEABLE PURE   "bitmaps\\b21s.bmp"
-R21S                    BITMAP  MOVEABLE PURE   "bitmaps\\r21s.bmp"
-Q21S                    BITMAP  MOVEABLE PURE   "bitmaps\\q21s.bmp"
-K21S                    BITMAP  MOVEABLE PURE   "bitmaps\\k21s.bmp"
-P21W                    BITMAP  MOVEABLE PURE   "bitmaps\\p21w.bmp"
-N21W                    BITMAP  MOVEABLE PURE   "bitmaps\\n21w.bmp"
-B21W                    BITMAP  MOVEABLE PURE   "bitmaps\\b21w.bmp"
-R21W                    BITMAP  MOVEABLE PURE   "bitmaps\\r21w.bmp"
-Q21W                    BITMAP  MOVEABLE PURE   "bitmaps\\q21w.bmp"
-K21W                    BITMAP  MOVEABLE PURE   "bitmaps\\k21w.bmp"
-P25O                    BITMAP  MOVEABLE PURE   "bitmaps\\p25o.bmp"
-N25O                    BITMAP  MOVEABLE PURE   "bitmaps\\n25o.bmp"
-B25O                    BITMAP  MOVEABLE PURE   "bitmaps\\b25o.bmp"
-R25O                    BITMAP  MOVEABLE PURE   "bitmaps\\r25o.bmp"
-Q25O                    BITMAP  MOVEABLE PURE   "bitmaps\\q25o.bmp"
-K25O                    BITMAP  MOVEABLE PURE   "bitmaps\\k25o.bmp"
-P25S                    BITMAP  MOVEABLE PURE   "bitmaps\\p25s.bmp"
-N25S                    BITMAP  MOVEABLE PURE   "bitmaps\\n25s.bmp"
-B25S                    BITMAP  MOVEABLE PURE   "bitmaps\\b25s.bmp"
-R25S                    BITMAP  MOVEABLE PURE   "bitmaps\\r25s.bmp"
-Q25S                    BITMAP  MOVEABLE PURE   "bitmaps\\q25s.bmp"
-K25S                    BITMAP  MOVEABLE PURE   "bitmaps\\k25s.bmp"
-P25W                    BITMAP  MOVEABLE PURE   "bitmaps\\p25w.bmp"
-N25W                    BITMAP  MOVEABLE PURE   "bitmaps\\n25w.bmp"
-B25W                    BITMAP  MOVEABLE PURE   "bitmaps\\b25w.bmp"
-R25W                    BITMAP  MOVEABLE PURE   "bitmaps\\r25w.bmp"
-Q25W                    BITMAP  MOVEABLE PURE   "bitmaps\\q25w.bmp"
-K25W                    BITMAP  MOVEABLE PURE   "bitmaps\\k25w.bmp"
-P29O                    BITMAP  MOVEABLE PURE   "bitmaps\\p29o.bmp"
-N29O                    BITMAP  MOVEABLE PURE   "bitmaps\\n29o.bmp"
-B29O                    BITMAP  MOVEABLE PURE   "bitmaps\\b29o.bmp"
-R29O                    BITMAP  MOVEABLE PURE   "bitmaps\\r29o.bmp"
-Q29O                    BITMAP  MOVEABLE PURE   "bitmaps\\q29o.bmp"
-K29O                    BITMAP  MOVEABLE PURE   "bitmaps\\k29o.bmp"
-P29S                    BITMAP  MOVEABLE PURE   "bitmaps\\p29s.bmp"
-N29S                    BITMAP  MOVEABLE PURE   "bitmaps\\n29s.bmp"
-B29S                    BITMAP  MOVEABLE PURE   "bitmaps\\b29s.bmp"
-R29S                    BITMAP  MOVEABLE PURE   "bitmaps\\r29s.bmp"
-Q29S                    BITMAP  MOVEABLE PURE   "bitmaps\\q29s.bmp"
-K29S                    BITMAP  MOVEABLE PURE   "bitmaps\\k29s.bmp"
-P29W                    BITMAP  MOVEABLE PURE   "bitmaps\\p29w.bmp"
-N29W                    BITMAP  MOVEABLE PURE   "bitmaps\\n29w.bmp"
-B29W                    BITMAP  MOVEABLE PURE   "bitmaps\\b29w.bmp"
-R29W                    BITMAP  MOVEABLE PURE   "bitmaps\\r29w.bmp"
-Q29W                    BITMAP  MOVEABLE PURE   "bitmaps\\q29w.bmp"
-K29W                    BITMAP  MOVEABLE PURE   "bitmaps\\k29w.bmp"
-P33O                    BITMAP  MOVEABLE PURE   "bitmaps\\p33o.bmp"
-N33O                    BITMAP  MOVEABLE PURE   "bitmaps\\n33o.bmp"
-B33O                    BITMAP  MOVEABLE PURE   "bitmaps\\b33o.bmp"
-R33O                    BITMAP  MOVEABLE PURE   "bitmaps\\r33o.bmp"
-Q33O                    BITMAP  MOVEABLE PURE   "bitmaps\\q33o.bmp"
-K33O                    BITMAP  MOVEABLE PURE   "bitmaps\\k33o.bmp"
-P33S                    BITMAP  MOVEABLE PURE   "bitmaps\\p33s.bmp"
-N33S                    BITMAP  MOVEABLE PURE   "bitmaps\\n33s.bmp"
-B33S                    BITMAP  MOVEABLE PURE   "bitmaps\\b33s.bmp"
-R33S                    BITMAP  MOVEABLE PURE   "bitmaps\\r33s.bmp"
-Q33S                    BITMAP  MOVEABLE PURE   "bitmaps\\q33s.bmp"
-K33S                    BITMAP  MOVEABLE PURE   "bitmaps\\k33s.bmp"
-P33W                    BITMAP  MOVEABLE PURE   "bitmaps\\p33w.bmp"
-N33W                    BITMAP  MOVEABLE PURE   "bitmaps\\n33w.bmp"
-B33W                    BITMAP  MOVEABLE PURE   "bitmaps\\b33w.bmp"
-R33W                    BITMAP  MOVEABLE PURE   "bitmaps\\r33w.bmp"
-Q33W                    BITMAP  MOVEABLE PURE   "bitmaps\\q33w.bmp"
-K33W                    BITMAP  MOVEABLE PURE   "bitmaps\\k33w.bmp"
-P37O                    BITMAP  MOVEABLE PURE   "bitmaps\\p37o.bmp"
-N37O                    BITMAP  MOVEABLE PURE   "bitmaps\\n37o.bmp"
-B37O                    BITMAP  MOVEABLE PURE   "bitmaps\\b37o.bmp"
-R37O                    BITMAP  MOVEABLE PURE   "bitmaps\\r37o.bmp"
-Q37O                    BITMAP  MOVEABLE PURE   "bitmaps\\q37o.bmp"
-K37O                    BITMAP  MOVEABLE PURE   "bitmaps\\k37o.bmp"
-P37S                    BITMAP  MOVEABLE PURE   "bitmaps\\p37s.bmp"
-N37S                    BITMAP  MOVEABLE PURE   "bitmaps\\n37s.bmp"
-B37S                    BITMAP  MOVEABLE PURE   "bitmaps\\b37s.bmp"
-R37S                    BITMAP  MOVEABLE PURE   "bitmaps\\r37s.bmp"
-Q37S                    BITMAP  MOVEABLE PURE   "bitmaps\\q37s.bmp"
-K37S                    BITMAP  MOVEABLE PURE   "bitmaps\\k37s.bmp"
-P37W                    BITMAP  MOVEABLE PURE   "bitmaps\\p37w.bmp"
-N37W                    BITMAP  MOVEABLE PURE   "bitmaps\\n37w.bmp"
-B37W                    BITMAP  MOVEABLE PURE   "bitmaps\\b37w.bmp"
-R37W                    BITMAP  MOVEABLE PURE   "bitmaps\\r37w.bmp"
-Q37W                    BITMAP  MOVEABLE PURE   "bitmaps\\q37w.bmp"
-K37W                    BITMAP  MOVEABLE PURE   "bitmaps\\k37w.bmp"
-P40O                    BITMAP  MOVEABLE PURE   "bitmaps\\p40o.bmp"
-N40O                    BITMAP  MOVEABLE PURE   "bitmaps\\n40o.bmp"
-B40O                    BITMAP  MOVEABLE PURE   "bitmaps\\b40o.bmp"
-R40O                    BITMAP  MOVEABLE PURE   "bitmaps\\r40o.bmp"
-Q40O                    BITMAP  MOVEABLE PURE   "bitmaps\\q40o.bmp"
-K40O                    BITMAP  MOVEABLE PURE   "bitmaps\\k40o.bmp"
-P40S                    BITMAP  MOVEABLE PURE   "bitmaps\\p40s.bmp"
-N40S                    BITMAP  MOVEABLE PURE   "bitmaps\\n40s.bmp"
-B40S                    BITMAP  MOVEABLE PURE   "bitmaps\\b40s.bmp"
-R40S                    BITMAP  MOVEABLE PURE   "bitmaps\\r40s.bmp"
-Q40S                    BITMAP  MOVEABLE PURE   "bitmaps\\q40s.bmp"
-K40S                    BITMAP  MOVEABLE PURE   "bitmaps\\k40s.bmp"
-P40W                    BITMAP  MOVEABLE PURE   "bitmaps\\p40w.bmp"
-N40W                    BITMAP  MOVEABLE PURE   "bitmaps\\n40w.bmp"
-B40W                    BITMAP  MOVEABLE PURE   "bitmaps\\b40w.bmp"
-R40W                    BITMAP  MOVEABLE PURE   "bitmaps\\r40w.bmp"
-Q40W                    BITMAP  MOVEABLE PURE   "bitmaps\\q40w.bmp"
-K40W                    BITMAP  MOVEABLE PURE   "bitmaps\\k40w.bmp"
-P45O                    BITMAP  MOVEABLE PURE   "bitmaps\\p45o.bmp"
-N45O                    BITMAP  MOVEABLE PURE   "bitmaps\\n45o.bmp"
-B45O                    BITMAP  MOVEABLE PURE   "bitmaps\\b45o.bmp"
-R45O                    BITMAP  MOVEABLE PURE   "bitmaps\\r45o.bmp"
-Q45O                    BITMAP  MOVEABLE PURE   "bitmaps\\q45o.bmp"
-K45O                    BITMAP  MOVEABLE PURE   "bitmaps\\k45o.bmp"
-P45S                    BITMAP  MOVEABLE PURE   "bitmaps\\p45s.bmp"
-N45S                    BITMAP  MOVEABLE PURE   "bitmaps\\n45s.bmp"
-B45S                    BITMAP  MOVEABLE PURE   "bitmaps\\b45s.bmp"
-R45S                    BITMAP  MOVEABLE PURE   "bitmaps\\r45s.bmp"
-Q45S                    BITMAP  MOVEABLE PURE   "bitmaps\\q45s.bmp"
-K45S                    BITMAP  MOVEABLE PURE   "bitmaps\\k45s.bmp"
-P45W                    BITMAP  MOVEABLE PURE   "bitmaps\\p45w.bmp"
-N45W                    BITMAP  MOVEABLE PURE   "bitmaps\\n45w.bmp"
-B45W                    BITMAP  MOVEABLE PURE   "bitmaps\\b45w.bmp"
-R45W                    BITMAP  MOVEABLE PURE   "bitmaps\\r45w.bmp"
-Q45W                    BITMAP  MOVEABLE PURE   "bitmaps\\q45w.bmp"
-K45W                    BITMAP  MOVEABLE PURE   "bitmaps\\k45w.bmp"
-P49O                    BITMAP  MOVEABLE PURE   "bitmaps\\p49o.bmp"
-N49O                    BITMAP  MOVEABLE PURE   "bitmaps\\n49o.bmp"
-B49O                    BITMAP  MOVEABLE PURE   "bitmaps\\b49o.bmp"
-R49O                    BITMAP  MOVEABLE PURE   "bitmaps\\r49o.bmp"
-Q49O                    BITMAP  MOVEABLE PURE   "bitmaps\\q49o.bmp"
-K49O                    BITMAP  MOVEABLE PURE   "bitmaps\\k49o.bmp"
-P49S                    BITMAP  MOVEABLE PURE   "bitmaps\\p49s.bmp"
-N49S                    BITMAP  MOVEABLE PURE   "bitmaps\\n49s.bmp"
-B49S                    BITMAP  MOVEABLE PURE   "bitmaps\\b49s.bmp"
-R49S                    BITMAP  MOVEABLE PURE   "bitmaps\\r49s.bmp"
-Q49S                    BITMAP  MOVEABLE PURE   "bitmaps\\q49s.bmp"
-K49S                    BITMAP  MOVEABLE PURE   "bitmaps\\k49s.bmp"
-P49W                    BITMAP  MOVEABLE PURE   "bitmaps\\p49w.bmp"
-N49W                    BITMAP  MOVEABLE PURE   "bitmaps\\n49w.bmp"
-B49W                    BITMAP  MOVEABLE PURE   "bitmaps\\b49w.bmp"
-R49W                    BITMAP  MOVEABLE PURE   "bitmaps\\r49w.bmp"
-Q49W                    BITMAP  MOVEABLE PURE   "bitmaps\\q49w.bmp"
-K49W                    BITMAP  MOVEABLE PURE   "bitmaps\\k49w.bmp"
-P54O                    BITMAP  MOVEABLE PURE   "bitmaps\\p54o.bmp"
-N54O                    BITMAP  MOVEABLE PURE   "bitmaps\\n54o.bmp"
-B54O                    BITMAP  MOVEABLE PURE   "bitmaps\\b54o.bmp"
-R54O                    BITMAP  MOVEABLE PURE   "bitmaps\\r54o.bmp"
-Q54O                    BITMAP  MOVEABLE PURE   "bitmaps\\q54o.bmp"
-K54O                    BITMAP  MOVEABLE PURE   "bitmaps\\k54o.bmp"
-P54S                    BITMAP  MOVEABLE PURE   "bitmaps\\p54s.bmp"
-N54S                    BITMAP  MOVEABLE PURE   "bitmaps\\n54s.bmp"
-B54S                    BITMAP  MOVEABLE PURE   "bitmaps\\b54s.bmp"
-R54S                    BITMAP  MOVEABLE PURE   "bitmaps\\r54s.bmp"
-Q54S                    BITMAP  MOVEABLE PURE   "bitmaps\\q54s.bmp"
-K54S                    BITMAP  MOVEABLE PURE   "bitmaps\\k54s.bmp"
-P54W                    BITMAP  MOVEABLE PURE   "bitmaps\\p54w.bmp"
-N54W                    BITMAP  MOVEABLE PURE   "bitmaps\\n54w.bmp"
-B54W                    BITMAP  MOVEABLE PURE   "bitmaps\\b54w.bmp"
-R54W                    BITMAP  MOVEABLE PURE   "bitmaps\\r54w.bmp"
-Q54W                    BITMAP  MOVEABLE PURE   "bitmaps\\q54w.bmp"
-K54W                    BITMAP  MOVEABLE PURE   "bitmaps\\k54w.bmp"
-P58O                    BITMAP  MOVEABLE PURE   "bitmaps\\p58o.bmp"
-N58O                    BITMAP  MOVEABLE PURE   "bitmaps\\n58o.bmp"
-B58O                    BITMAP  MOVEABLE PURE   "bitmaps\\b58o.bmp"
-R58O                    BITMAP  MOVEABLE PURE   "bitmaps\\r58o.bmp"
-Q58O                    BITMAP  MOVEABLE PURE   "bitmaps\\q58o.bmp"
-K58O                    BITMAP  MOVEABLE PURE   "bitmaps\\k58o.bmp"
-P58S                    BITMAP  MOVEABLE PURE   "bitmaps\\p58s.bmp"
-N58S                    BITMAP  MOVEABLE PURE   "bitmaps\\n58s.bmp"
-B58S                    BITMAP  MOVEABLE PURE   "bitmaps\\b58s.bmp"
-R58S                    BITMAP  MOVEABLE PURE   "bitmaps\\r58s.bmp"
-Q58S                    BITMAP  MOVEABLE PURE   "bitmaps\\q58s.bmp"
-K58S                    BITMAP  MOVEABLE PURE   "bitmaps\\k58s.bmp"
-P58W                    BITMAP  MOVEABLE PURE   "bitmaps\\p58w.bmp"
-N58W                    BITMAP  MOVEABLE PURE   "bitmaps\\n58w.bmp"
-B58W                    BITMAP  MOVEABLE PURE   "bitmaps\\b58w.bmp"
-R58W                    BITMAP  MOVEABLE PURE   "bitmaps\\r58w.bmp"
-Q58W                    BITMAP  MOVEABLE PURE   "bitmaps\\q58w.bmp"
-K58W                    BITMAP  MOVEABLE PURE   "bitmaps\\k58w.bmp"
-P64O                    BITMAP  MOVEABLE PURE   "bitmaps\\p64o.bmp"
-N64O                    BITMAP  MOVEABLE PURE   "bitmaps\\n64o.bmp"
-B64O                    BITMAP  MOVEABLE PURE   "bitmaps\\b64o.bmp"
-R64O                    BITMAP  MOVEABLE PURE   "bitmaps\\r64o.bmp"
-Q64O                    BITMAP  MOVEABLE PURE   "bitmaps\\q64o.bmp"
-K64O                    BITMAP  MOVEABLE PURE   "bitmaps\\k64o.bmp"
-P64S                    BITMAP  MOVEABLE PURE   "bitmaps\\p64s.bmp"
-N64S                    BITMAP  MOVEABLE PURE   "bitmaps\\n64s.bmp"
-B64S                    BITMAP  MOVEABLE PURE   "bitmaps\\b64s.bmp"
-R64S                    BITMAP  MOVEABLE PURE   "bitmaps\\r64s.bmp"
-Q64S                    BITMAP  MOVEABLE PURE   "bitmaps\\q64s.bmp"
-K64S                    BITMAP  MOVEABLE PURE   "bitmaps\\k64s.bmp"
-P64W                    BITMAP  MOVEABLE PURE   "bitmaps\\p64w.bmp"
-N64W                    BITMAP  MOVEABLE PURE   "bitmaps\\n64w.bmp"
-B64W                    BITMAP  MOVEABLE PURE   "bitmaps\\b64w.bmp"
-R64W                    BITMAP  MOVEABLE PURE   "bitmaps\\r64w.bmp"
-Q64W                    BITMAP  MOVEABLE PURE   "bitmaps\\q64w.bmp"
-K64W                    BITMAP  MOVEABLE PURE   "bitmaps\\k64w.bmp"
-P72O                    BITMAP  MOVEABLE PURE   "bitmaps\\p72o.bmp"
-N72O                    BITMAP  MOVEABLE PURE   "bitmaps\\n72o.bmp"
-B72O                    BITMAP  MOVEABLE PURE   "bitmaps\\b72o.bmp"
-R72O                    BITMAP  MOVEABLE PURE   "bitmaps\\r72o.bmp"
-Q72O                    BITMAP  MOVEABLE PURE   "bitmaps\\q72o.bmp"
-K72O                    BITMAP  MOVEABLE PURE   "bitmaps\\k72o.bmp"
-P72S                    BITMAP  MOVEABLE PURE   "bitmaps\\p72s.bmp"
-N72S                    BITMAP  MOVEABLE PURE   "bitmaps\\n72s.bmp"
-B72S                    BITMAP  MOVEABLE PURE   "bitmaps\\b72s.bmp"
-R72S                    BITMAP  MOVEABLE PURE   "bitmaps\\r72s.bmp"
-Q72S                    BITMAP  MOVEABLE PURE   "bitmaps\\q72s.bmp"
-K72S                    BITMAP  MOVEABLE PURE   "bitmaps\\k72s.bmp"
-P72W                    BITMAP  MOVEABLE PURE   "bitmaps\\p72w.bmp"
-N72W                    BITMAP  MOVEABLE PURE   "bitmaps\\n72w.bmp"
-B72W                    BITMAP  MOVEABLE PURE   "bitmaps\\b72w.bmp"
-R72W                    BITMAP  MOVEABLE PURE   "bitmaps\\r72w.bmp"
-Q72W                    BITMAP  MOVEABLE PURE   "bitmaps\\q72w.bmp"
-K72W                    BITMAP  MOVEABLE PURE   "bitmaps\\k72w.bmp"
-P80O                    BITMAP  MOVEABLE PURE   "bitmaps\\p80o.bmp"
-N80O                    BITMAP  MOVEABLE PURE   "bitmaps\\n80o.bmp"
-B80O                    BITMAP  MOVEABLE PURE   "bitmaps\\b80o.bmp"
-R80O                    BITMAP  MOVEABLE PURE   "bitmaps\\r80o.bmp"
-Q80O                    BITMAP  MOVEABLE PURE   "bitmaps\\q80o.bmp"
-K80O                    BITMAP  MOVEABLE PURE   "bitmaps\\k80o.bmp"
-P80S                    BITMAP  MOVEABLE PURE   "bitmaps\\p80s.bmp"
-N80S                    BITMAP  MOVEABLE PURE   "bitmaps\\n80s.bmp"
-B80S                    BITMAP  MOVEABLE PURE   "bitmaps\\b80s.bmp"
-R80S                    BITMAP  MOVEABLE PURE   "bitmaps\\r80s.bmp"
-Q80S                    BITMAP  MOVEABLE PURE   "bitmaps\\q80s.bmp"
-K80S                    BITMAP  MOVEABLE PURE   "bitmaps\\k80s.bmp"
-P80W                    BITMAP  MOVEABLE PURE   "bitmaps\\p80w.bmp"
-N80W                    BITMAP  MOVEABLE PURE   "bitmaps\\n80w.bmp"
-B80W                    BITMAP  MOVEABLE PURE   "bitmaps\\b80w.bmp"
-R80W                    BITMAP  MOVEABLE PURE   "bitmaps\\r80w.bmp"
-Q80W                    BITMAP  MOVEABLE PURE   "bitmaps\\q80w.bmp"
-K80W                    BITMAP  MOVEABLE PURE   "bitmaps\\k80w.bmp"
-P87O                    BITMAP  MOVEABLE PURE   "bitmaps\\p87o.bmp"
-N87O                    BITMAP  MOVEABLE PURE   "bitmaps\\n87o.bmp"
-B87O                    BITMAP  MOVEABLE PURE   "bitmaps\\b87o.bmp"
-R87O                    BITMAP  MOVEABLE PURE   "bitmaps\\r87o.bmp"
-Q87O                    BITMAP  MOVEABLE PURE   "bitmaps\\q87o.bmp"
-K87O                    BITMAP  MOVEABLE PURE   "bitmaps\\k87o.bmp"
-P87S                    BITMAP  MOVEABLE PURE   "bitmaps\\p87s.bmp"
-N87S                    BITMAP  MOVEABLE PURE   "bitmaps\\n87s.bmp"
-B87S                    BITMAP  MOVEABLE PURE   "bitmaps\\b87s.bmp"
-R87S                    BITMAP  MOVEABLE PURE   "bitmaps\\r87s.bmp"
-Q87S                    BITMAP  MOVEABLE PURE   "bitmaps\\q87s.bmp"
-K87S                    BITMAP  MOVEABLE PURE   "bitmaps\\k87s.bmp"
-P87W                    BITMAP  MOVEABLE PURE   "bitmaps\\p87w.bmp"
-N87W                    BITMAP  MOVEABLE PURE   "bitmaps\\n87w.bmp"
-B87W                    BITMAP  MOVEABLE PURE   "bitmaps\\b87w.bmp"
-R87W                    BITMAP  MOVEABLE PURE   "bitmaps\\r87w.bmp"
-Q87W                    BITMAP  MOVEABLE PURE   "bitmaps\\q87w.bmp"
-K87W                    BITMAP  MOVEABLE PURE   "bitmaps\\k87w.bmp"
-P95O                    BITMAP  MOVEABLE PURE   "bitmaps\\p95o.bmp"
-N95O                    BITMAP  MOVEABLE PURE   "bitmaps\\n95o.bmp"
-B95O                    BITMAP  MOVEABLE PURE   "bitmaps\\b95o.bmp"
-R95O                    BITMAP  MOVEABLE PURE   "bitmaps\\r95o.bmp"
-Q95O                    BITMAP  MOVEABLE PURE   "bitmaps\\q95o.bmp"
-K95O                    BITMAP  MOVEABLE PURE   "bitmaps\\k95o.bmp"
-P95S                    BITMAP  MOVEABLE PURE   "bitmaps\\p95s.bmp"
-N95S                    BITMAP  MOVEABLE PURE   "bitmaps\\n95s.bmp"
-B95S                    BITMAP  MOVEABLE PURE   "bitmaps\\b95s.bmp"
-R95S                    BITMAP  MOVEABLE PURE   "bitmaps\\r95s.bmp"
-Q95S                    BITMAP  MOVEABLE PURE   "bitmaps\\q95s.bmp"
-K95S                    BITMAP  MOVEABLE PURE   "bitmaps\\k95s.bmp"
-P95W                    BITMAP  MOVEABLE PURE   "bitmaps\\p95w.bmp"
-N95W                    BITMAP  MOVEABLE PURE   "bitmaps\\n95w.bmp"
-B95W                    BITMAP  MOVEABLE PURE   "bitmaps\\b95w.bmp"
-R95W                    BITMAP  MOVEABLE PURE   "bitmaps\\r95w.bmp"
-Q95W                    BITMAP  MOVEABLE PURE   "bitmaps\\q95w.bmp"
-K95W                    BITMAP  MOVEABLE PURE   "bitmaps\\k95w.bmp"
-P108O                   BITMAP  MOVEABLE PURE   "bitmaps\\p108o.bmp"
-N108O                   BITMAP  MOVEABLE PURE   "bitmaps\\n108o.bmp"
-B108O                   BITMAP  MOVEABLE PURE   "bitmaps\\b108o.bmp"
-R108O                   BITMAP  MOVEABLE PURE   "bitmaps\\r108o.bmp"
-Q108O                   BITMAP  MOVEABLE PURE   "bitmaps\\q108o.bmp"
-K108O                   BITMAP  MOVEABLE PURE   "bitmaps\\k108o.bmp"
-P108S                   BITMAP  MOVEABLE PURE   "bitmaps\\p108s.bmp"
-N108S                   BITMAP  MOVEABLE PURE   "bitmaps\\n108s.bmp"
-B108S                   BITMAP  MOVEABLE PURE   "bitmaps\\b108s.bmp"
-R108S                   BITMAP  MOVEABLE PURE   "bitmaps\\r108s.bmp"
-Q108S                   BITMAP  MOVEABLE PURE   "bitmaps\\q108s.bmp"
-K108S                   BITMAP  MOVEABLE PURE   "bitmaps\\k108s.bmp"
-P108W                   BITMAP  MOVEABLE PURE   "bitmaps\\p108w.bmp"
-N108W                   BITMAP  MOVEABLE PURE   "bitmaps\\n108w.bmp"
-B108W                   BITMAP  MOVEABLE PURE   "bitmaps\\b108w.bmp"
-R108W                   BITMAP  MOVEABLE PURE   "bitmaps\\r108w.bmp"
-Q108W                   BITMAP  MOVEABLE PURE   "bitmaps\\q108w.bmp"
-K108W                   BITMAP  MOVEABLE PURE   "bitmaps\\k108w.bmp"
-P116O                   BITMAP  MOVEABLE PURE   "bitmaps\\p116o.bmp"
-N116O                   BITMAP  MOVEABLE PURE   "bitmaps\\n116o.bmp"
-B116O                   BITMAP  MOVEABLE PURE   "bitmaps\\b116o.bmp"
-R116O                   BITMAP  MOVEABLE PURE   "bitmaps\\r116o.bmp"
-Q116O                   BITMAP  MOVEABLE PURE   "bitmaps\\q116o.bmp"
-K116O                   BITMAP  MOVEABLE PURE   "bitmaps\\k116o.bmp"
-P116S                   BITMAP  MOVEABLE PURE   "bitmaps\\p116s.bmp"
-N116S                   BITMAP  MOVEABLE PURE   "bitmaps\\n116s.bmp"
-B116S                   BITMAP  MOVEABLE PURE   "bitmaps\\b116s.bmp"
-R116S                   BITMAP  MOVEABLE PURE   "bitmaps\\r116s.bmp"
-Q116S                   BITMAP  MOVEABLE PURE   "bitmaps\\q116s.bmp"
-K116S                   BITMAP  MOVEABLE PURE   "bitmaps\\k116s.bmp"
-P116W                   BITMAP  MOVEABLE PURE   "bitmaps\\p116w.bmp"
-N116W                   BITMAP  MOVEABLE PURE   "bitmaps\\n116w.bmp"
-B116W                   BITMAP  MOVEABLE PURE   "bitmaps\\b116w.bmp"
-R116W                   BITMAP  MOVEABLE PURE   "bitmaps\\r116w.bmp"
-Q116W                   BITMAP  MOVEABLE PURE   "bitmaps\\q116w.bmp"
-K116W                   BITMAP  MOVEABLE PURE   "bitmaps\\k116w.bmp"
-P129O                   BITMAP  MOVEABLE PURE   "bitmaps\\p129o.bmp"
-N129O                   BITMAP  MOVEABLE PURE   "bitmaps\\n129o.bmp"
-B129O                   BITMAP  MOVEABLE PURE   "bitmaps\\b129o.bmp"
-R129O                   BITMAP  MOVEABLE PURE   "bitmaps\\r129o.bmp"
-Q129O                   BITMAP  MOVEABLE PURE   "bitmaps\\q129o.bmp"
-K129O                   BITMAP  MOVEABLE PURE   "bitmaps\\k129o.bmp"
-P129S                   BITMAP  MOVEABLE PURE   "bitmaps\\p129s.bmp"
-N129S                   BITMAP  MOVEABLE PURE   "bitmaps\\n129s.bmp"
-B129S                   BITMAP  MOVEABLE PURE   "bitmaps\\b129s.bmp"
-R129S                   BITMAP  MOVEABLE PURE   "bitmaps\\r129s.bmp"
-Q129S                   BITMAP  MOVEABLE PURE   "bitmaps\\q129s.bmp"
-K129S                   BITMAP  MOVEABLE PURE   "bitmaps\\k129s.bmp"
-P129W                   BITMAP  MOVEABLE PURE   "bitmaps\\p129w.bmp"
-N129W                   BITMAP  MOVEABLE PURE   "bitmaps\\n129w.bmp"
-B129W                   BITMAP  MOVEABLE PURE   "bitmaps\\b129w.bmp"
-R129W                   BITMAP  MOVEABLE PURE   "bitmaps\\r129w.bmp"
-Q129W                   BITMAP  MOVEABLE PURE   "bitmaps\\q129w.bmp"
-K129W                   BITMAP  MOVEABLE PURE   "bitmaps\\k129w.bmp"
-GALACTIC                BITMAP  MOVEABLE PURE   "bitmaps\\galactic.bmp"
-TIM                     BITMAP  MOVEABLE PURE   "bitmaps\\tim.bmp"
+P21O                    BITMAP  MOVEABLE PURE   "bitmaps/p21o.bmp"
+N21O                    BITMAP  MOVEABLE PURE   "bitmaps/n21o.bmp"
+B21O                    BITMAP  MOVEABLE PURE   "bitmaps/b21o.bmp"
+R21O                    BITMAP  MOVEABLE PURE   "bitmaps/r21o.bmp"
+K21O                    BITMAP  MOVEABLE PURE   "bitmaps/k21o.bmp"
+Q21O                    BITMAP  MOVEABLE PURE   "bitmaps/q21o.bmp"
+P21S                    BITMAP  MOVEABLE PURE   "bitmaps/p21s.bmp"
+N21S                    BITMAP  MOVEABLE PURE   "bitmaps/n21s.bmp"
+B21S                    BITMAP  MOVEABLE PURE   "bitmaps/b21s.bmp"
+R21S                    BITMAP  MOVEABLE PURE   "bitmaps/r21s.bmp"
+Q21S                    BITMAP  MOVEABLE PURE   "bitmaps/q21s.bmp"
+K21S                    BITMAP  MOVEABLE PURE   "bitmaps/k21s.bmp"
+P21W                    BITMAP  MOVEABLE PURE   "bitmaps/p21w.bmp"
+N21W                    BITMAP  MOVEABLE PURE   "bitmaps/n21w.bmp"
+B21W                    BITMAP  MOVEABLE PURE   "bitmaps/b21w.bmp"
+R21W                    BITMAP  MOVEABLE PURE   "bitmaps/r21w.bmp"
+Q21W                    BITMAP  MOVEABLE PURE   "bitmaps/q21w.bmp"
+K21W                    BITMAP  MOVEABLE PURE   "bitmaps/k21w.bmp"
+P25O                    BITMAP  MOVEABLE PURE   "bitmaps/p25o.bmp"
+N25O                    BITMAP  MOVEABLE PURE   "bitmaps/n25o.bmp"
+B25O                    BITMAP  MOVEABLE PURE   "bitmaps/b25o.bmp"
+R25O                    BITMAP  MOVEABLE PURE   "bitmaps/r25o.bmp"
+Q25O                    BITMAP  MOVEABLE PURE   "bitmaps/q25o.bmp"
+K25O                    BITMAP  MOVEABLE PURE   "bitmaps/k25o.bmp"
+P25S                    BITMAP  MOVEABLE PURE   "bitmaps/p25s.bmp"
+N25S                    BITMAP  MOVEABLE PURE   "bitmaps/n25s.bmp"
+B25S                    BITMAP  MOVEABLE PURE   "bitmaps/b25s.bmp"
+R25S                    BITMAP  MOVEABLE PURE   "bitmaps/r25s.bmp"
+Q25S                    BITMAP  MOVEABLE PURE   "bitmaps/q25s.bmp"
+K25S                    BITMAP  MOVEABLE PURE   "bitmaps/k25s.bmp"
+P25W                    BITMAP  MOVEABLE PURE   "bitmaps/p25w.bmp"
+N25W                    BITMAP  MOVEABLE PURE   "bitmaps/n25w.bmp"
+B25W                    BITMAP  MOVEABLE PURE   "bitmaps/b25w.bmp"
+R25W                    BITMAP  MOVEABLE PURE   "bitmaps/r25w.bmp"
+Q25W                    BITMAP  MOVEABLE PURE   "bitmaps/q25w.bmp"
+K25W                    BITMAP  MOVEABLE PURE   "bitmaps/k25w.bmp"
+P29O                    BITMAP  MOVEABLE PURE   "bitmaps/p29o.bmp"
+N29O                    BITMAP  MOVEABLE PURE   "bitmaps/n29o.bmp"
+B29O                    BITMAP  MOVEABLE PURE   "bitmaps/b29o.bmp"
+R29O                    BITMAP  MOVEABLE PURE   "bitmaps/r29o.bmp"
+Q29O                    BITMAP  MOVEABLE PURE   "bitmaps/q29o.bmp"
+K29O                    BITMAP  MOVEABLE PURE   "bitmaps/k29o.bmp"
+P29S                    BITMAP  MOVEABLE PURE   "bitmaps/p29s.bmp"
+N29S                    BITMAP  MOVEABLE PURE   "bitmaps/n29s.bmp"
+B29S                    BITMAP  MOVEABLE PURE   "bitmaps/b29s.bmp"
+R29S                    BITMAP  MOVEABLE PURE   "bitmaps/r29s.bmp"
+Q29S                    BITMAP  MOVEABLE PURE   "bitmaps/q29s.bmp"
+K29S                    BITMAP  MOVEABLE PURE   "bitmaps/k29s.bmp"
+P29W                    BITMAP  MOVEABLE PURE   "bitmaps/p29w.bmp"
+N29W                    BITMAP  MOVEABLE PURE   "bitmaps/n29w.bmp"
+B29W                    BITMAP  MOVEABLE PURE   "bitmaps/b29w.bmp"
+R29W                    BITMAP  MOVEABLE PURE   "bitmaps/r29w.bmp"
+Q29W                    BITMAP  MOVEABLE PURE   "bitmaps/q29w.bmp"
+K29W                    BITMAP  MOVEABLE PURE   "bitmaps/k29w.bmp"
+P33O                    BITMAP  MOVEABLE PURE   "bitmaps/p33o.bmp"
+N33O                    BITMAP  MOVEABLE PURE   "bitmaps/n33o.bmp"
+B33O                    BITMAP  MOVEABLE PURE   "bitmaps/b33o.bmp"
+R33O                    BITMAP  MOVEABLE PURE   "bitmaps/r33o.bmp"
+Q33O                    BITMAP  MOVEABLE PURE   "bitmaps/q33o.bmp"
+K33O                    BITMAP  MOVEABLE PURE   "bitmaps/k33o.bmp"
+P33S                    BITMAP  MOVEABLE PURE   "bitmaps/p33s.bmp"
+N33S                    BITMAP  MOVEABLE PURE   "bitmaps/n33s.bmp"
+B33S                    BITMAP  MOVEABLE PURE   "bitmaps/b33s.bmp"
+R33S                    BITMAP  MOVEABLE PURE   "bitmaps/r33s.bmp"
+Q33S                    BITMAP  MOVEABLE PURE   "bitmaps/q33s.bmp"
+K33S                    BITMAP  MOVEABLE PURE   "bitmaps/k33s.bmp"
+P33W                    BITMAP  MOVEABLE PURE   "bitmaps/p33w.bmp"
+N33W                    BITMAP  MOVEABLE PURE   "bitmaps/n33w.bmp"
+B33W                    BITMAP  MOVEABLE PURE   "bitmaps/b33w.bmp"
+R33W                    BITMAP  MOVEABLE PURE   "bitmaps/r33w.bmp"
+Q33W                    BITMAP  MOVEABLE PURE   "bitmaps/q33w.bmp"
+K33W                    BITMAP  MOVEABLE PURE   "bitmaps/k33w.bmp"
+P37O                    BITMAP  MOVEABLE PURE   "bitmaps/p37o.bmp"
+N37O                    BITMAP  MOVEABLE PURE   "bitmaps/n37o.bmp"
+B37O                    BITMAP  MOVEABLE PURE   "bitmaps/b37o.bmp"
+R37O                    BITMAP  MOVEABLE PURE   "bitmaps/r37o.bmp"
+Q37O                    BITMAP  MOVEABLE PURE   "bitmaps/q37o.bmp"
+K37O                    BITMAP  MOVEABLE PURE   "bitmaps/k37o.bmp"
+P37S                    BITMAP  MOVEABLE PURE   "bitmaps/p37s.bmp"
+N37S                    BITMAP  MOVEABLE PURE   "bitmaps/n37s.bmp"
+B37S                    BITMAP  MOVEABLE PURE   "bitmaps/b37s.bmp"
+R37S                    BITMAP  MOVEABLE PURE   "bitmaps/r37s.bmp"
+Q37S                    BITMAP  MOVEABLE PURE   "bitmaps/q37s.bmp"
+K37S                    BITMAP  MOVEABLE PURE   "bitmaps/k37s.bmp"
+P37W                    BITMAP  MOVEABLE PURE   "bitmaps/p37w.bmp"
+N37W                    BITMAP  MOVEABLE PURE   "bitmaps/n37w.bmp"
+B37W                    BITMAP  MOVEABLE PURE   "bitmaps/b37w.bmp"
+R37W                    BITMAP  MOVEABLE PURE   "bitmaps/r37w.bmp"
+Q37W                    BITMAP  MOVEABLE PURE   "bitmaps/q37w.bmp"
+K37W                    BITMAP  MOVEABLE PURE   "bitmaps/k37w.bmp"
+P40O                    BITMAP  MOVEABLE PURE   "bitmaps/p40o.bmp"
+N40O                    BITMAP  MOVEABLE PURE   "bitmaps/n40o.bmp"
+B40O                    BITMAP  MOVEABLE PURE   "bitmaps/b40o.bmp"
+R40O                    BITMAP  MOVEABLE PURE   "bitmaps/r40o.bmp"
+Q40O                    BITMAP  MOVEABLE PURE   "bitmaps/q40o.bmp"
+K40O                    BITMAP  MOVEABLE PURE   "bitmaps/k40o.bmp"
+P40S                    BITMAP  MOVEABLE PURE   "bitmaps/p40s.bmp"
+N40S                    BITMAP  MOVEABLE PURE   "bitmaps/n40s.bmp"
+B40S                    BITMAP  MOVEABLE PURE   "bitmaps/b40s.bmp"
+R40S                    BITMAP  MOVEABLE PURE   "bitmaps/r40s.bmp"
+Q40S                    BITMAP  MOVEABLE PURE   "bitmaps/q40s.bmp"
+K40S                    BITMAP  MOVEABLE PURE   "bitmaps/k40s.bmp"
+P40W                    BITMAP  MOVEABLE PURE   "bitmaps/p40w.bmp"
+N40W                    BITMAP  MOVEABLE PURE   "bitmaps/n40w.bmp"
+B40W                    BITMAP  MOVEABLE PURE   "bitmaps/b40w.bmp"
+R40W                    BITMAP  MOVEABLE PURE   "bitmaps/r40w.bmp"
+Q40W                    BITMAP  MOVEABLE PURE   "bitmaps/q40w.bmp"
+K40W                    BITMAP  MOVEABLE PURE   "bitmaps/k40w.bmp"
+P45O                    BITMAP  MOVEABLE PURE   "bitmaps/p45o.bmp"
+N45O                    BITMAP  MOVEABLE PURE   "bitmaps/n45o.bmp"
+B45O                    BITMAP  MOVEABLE PURE   "bitmaps/b45o.bmp"
+R45O                    BITMAP  MOVEABLE PURE   "bitmaps/r45o.bmp"
+Q45O                    BITMAP  MOVEABLE PURE   "bitmaps/q45o.bmp"
+K45O                    BITMAP  MOVEABLE PURE   "bitmaps/k45o.bmp"
+P45S                    BITMAP  MOVEABLE PURE   "bitmaps/p45s.bmp"
+N45S                    BITMAP  MOVEABLE PURE   "bitmaps/n45s.bmp"
+B45S                    BITMAP  MOVEABLE PURE   "bitmaps/b45s.bmp"
+R45S                    BITMAP  MOVEABLE PURE   "bitmaps/r45s.bmp"
+Q45S                    BITMAP  MOVEABLE PURE   "bitmaps/q45s.bmp"
+K45S                    BITMAP  MOVEABLE PURE   "bitmaps/k45s.bmp"
+P45W                    BITMAP  MOVEABLE PURE   "bitmaps/p45w.bmp"
+N45W                    BITMAP  MOVEABLE PURE   "bitmaps/n45w.bmp"
+B45W                    BITMAP  MOVEABLE PURE   "bitmaps/b45w.bmp"
+R45W                    BITMAP  MOVEABLE PURE   "bitmaps/r45w.bmp"
+Q45W                    BITMAP  MOVEABLE PURE   "bitmaps/q45w.bmp"
+K45W                    BITMAP  MOVEABLE PURE   "bitmaps/k45w.bmp"
+P49O                    BITMAP  MOVEABLE PURE   "bitmaps/p49o.bmp"
+N49O                    BITMAP  MOVEABLE PURE   "bitmaps/n49o.bmp"
+B49O                    BITMAP  MOVEABLE PURE   "bitmaps/b49o.bmp"
+R49O                    BITMAP  MOVEABLE PURE   "bitmaps/r49o.bmp"
+Q49O                    BITMAP  MOVEABLE PURE   "bitmaps/q49o.bmp"
+K49O                    BITMAP  MOVEABLE PURE   "bitmaps/k49o.bmp"
+P49S                    BITMAP  MOVEABLE PURE   "bitmaps/p49s.bmp"
+N49S                    BITMAP  MOVEABLE PURE   "bitmaps/n49s.bmp"
+B49S                    BITMAP  MOVEABLE PURE   "bitmaps/b49s.bmp"
+R49S                    BITMAP  MOVEABLE PURE   "bitmaps/r49s.bmp"
+Q49S                    BITMAP  MOVEABLE PURE   "bitmaps/q49s.bmp"
+K49S                    BITMAP  MOVEABLE PURE   "bitmaps/k49s.bmp"
+P49W                    BITMAP  MOVEABLE PURE   "bitmaps/p49w.bmp"
+N49W                    BITMAP  MOVEABLE PURE   "bitmaps/n49w.bmp"
+B49W                    BITMAP  MOVEABLE PURE   "bitmaps/b49w.bmp"
+R49W                    BITMAP  MOVEABLE PURE   "bitmaps/r49w.bmp"
+Q49W                    BITMAP  MOVEABLE PURE   "bitmaps/q49w.bmp"
+K49W                    BITMAP  MOVEABLE PURE   "bitmaps/k49w.bmp"
+P54O                    BITMAP  MOVEABLE PURE   "bitmaps/p54o.bmp"
+N54O                    BITMAP  MOVEABLE PURE   "bitmaps/n54o.bmp"
+B54O                    BITMAP  MOVEABLE PURE   "bitmaps/b54o.bmp"
+R54O                    BITMAP  MOVEABLE PURE   "bitmaps/r54o.bmp"
+Q54O                    BITMAP  MOVEABLE PURE   "bitmaps/q54o.bmp"
+K54O                    BITMAP  MOVEABLE PURE   "bitmaps/k54o.bmp"
+P54S                    BITMAP  MOVEABLE PURE   "bitmaps/p54s.bmp"
+N54S                    BITMAP  MOVEABLE PURE   "bitmaps/n54s.bmp"
+B54S                    BITMAP  MOVEABLE PURE   "bitmaps/b54s.bmp"
+R54S                    BITMAP  MOVEABLE PURE   "bitmaps/r54s.bmp"
+Q54S                    BITMAP  MOVEABLE PURE   "bitmaps/q54s.bmp"
+K54S                    BITMAP  MOVEABLE PURE   "bitmaps/k54s.bmp"
+P54W                    BITMAP  MOVEABLE PURE   "bitmaps/p54w.bmp"
+N54W                    BITMAP  MOVEABLE PURE   "bitmaps/n54w.bmp"
+B54W                    BITMAP  MOVEABLE PURE   "bitmaps/b54w.bmp"
+R54W                    BITMAP  MOVEABLE PURE   "bitmaps/r54w.bmp"
+Q54W                    BITMAP  MOVEABLE PURE   "bitmaps/q54w.bmp"
+K54W                    BITMAP  MOVEABLE PURE   "bitmaps/k54w.bmp"
+P58O                    BITMAP  MOVEABLE PURE   "bitmaps/p58o.bmp"
+N58O                    BITMAP  MOVEABLE PURE   "bitmaps/n58o.bmp"
+B58O                    BITMAP  MOVEABLE PURE   "bitmaps/b58o.bmp"
+R58O                    BITMAP  MOVEABLE PURE   "bitmaps/r58o.bmp"
+Q58O                    BITMAP  MOVEABLE PURE   "bitmaps/q58o.bmp"
+K58O                    BITMAP  MOVEABLE PURE   "bitmaps/k58o.bmp"
+P58S                    BITMAP  MOVEABLE PURE   "bitmaps/p58s.bmp"
+N58S                    BITMAP  MOVEABLE PURE   "bitmaps/n58s.bmp"
+B58S                    BITMAP  MOVEABLE PURE   "bitmaps/b58s.bmp"
+R58S                    BITMAP  MOVEABLE PURE   "bitmaps/r58s.bmp"
+Q58S                    BITMAP  MOVEABLE PURE   "bitmaps/q58s.bmp"
+K58S                    BITMAP  MOVEABLE PURE   "bitmaps/k58s.bmp"
+P58W                    BITMAP  MOVEABLE PURE   "bitmaps/p58w.bmp"
+N58W                    BITMAP  MOVEABLE PURE   "bitmaps/n58w.bmp"
+B58W                    BITMAP  MOVEABLE PURE   "bitmaps/b58w.bmp"
+R58W                    BITMAP  MOVEABLE PURE   "bitmaps/r58w.bmp"
+Q58W                    BITMAP  MOVEABLE PURE   "bitmaps/q58w.bmp"
+K58W                    BITMAP  MOVEABLE PURE   "bitmaps/k58w.bmp"
+P64O                    BITMAP  MOVEABLE PURE   "bitmaps/p64o.bmp"
+N64O                    BITMAP  MOVEABLE PURE   "bitmaps/n64o.bmp"
+B64O                    BITMAP  MOVEABLE PURE   "bitmaps/b64o.bmp"
+R64O                    BITMAP  MOVEABLE PURE   "bitmaps/r64o.bmp"
+Q64O                    BITMAP  MOVEABLE PURE   "bitmaps/q64o.bmp"
+K64O                    BITMAP  MOVEABLE PURE   "bitmaps/k64o.bmp"
+P64S                    BITMAP  MOVEABLE PURE   "bitmaps/p64s.bmp"
+N64S                    BITMAP  MOVEABLE PURE   "bitmaps/n64s.bmp"
+B64S                    BITMAP  MOVEABLE PURE   "bitmaps/b64s.bmp"
+R64S                    BITMAP  MOVEABLE PURE   "bitmaps/r64s.bmp"
+Q64S                    BITMAP  MOVEABLE PURE   "bitmaps/q64s.bmp"
+K64S                    BITMAP  MOVEABLE PURE   "bitmaps/k64s.bmp"
+P64W                    BITMAP  MOVEABLE PURE   "bitmaps/p64w.bmp"
+N64W                    BITMAP  MOVEABLE PURE   "bitmaps/n64w.bmp"
+B64W                    BITMAP  MOVEABLE PURE   "bitmaps/b64w.bmp"
+R64W                    BITMAP  MOVEABLE PURE   "bitmaps/r64w.bmp"
+Q64W                    BITMAP  MOVEABLE PURE   "bitmaps/q64w.bmp"
+K64W                    BITMAP  MOVEABLE PURE   "bitmaps/k64w.bmp"
+P72O                    BITMAP  MOVEABLE PURE   "bitmaps/p72o.bmp"
+N72O                    BITMAP  MOVEABLE PURE   "bitmaps/n72o.bmp"
+B72O                    BITMAP  MOVEABLE PURE   "bitmaps/b72o.bmp"
+R72O                    BITMAP  MOVEABLE PURE   "bitmaps/r72o.bmp"
+Q72O                    BITMAP  MOVEABLE PURE   "bitmaps/q72o.bmp"
+K72O                    BITMAP  MOVEABLE PURE   "bitmaps/k72o.bmp"
+P72S                    BITMAP  MOVEABLE PURE   "bitmaps/p72s.bmp"
+N72S                    BITMAP  MOVEABLE PURE   "bitmaps/n72s.bmp"
+B72S                    BITMAP  MOVEABLE PURE   "bitmaps/b72s.bmp"
+R72S                    BITMAP  MOVEABLE PURE   "bitmaps/r72s.bmp"
+Q72S                    BITMAP  MOVEABLE PURE   "bitmaps/q72s.bmp"
+K72S                    BITMAP  MOVEABLE PURE   "bitmaps/k72s.bmp"
+P72W                    BITMAP  MOVEABLE PURE   "bitmaps/p72w.bmp"
+N72W                    BITMAP  MOVEABLE PURE   "bitmaps/n72w.bmp"
+B72W                    BITMAP  MOVEABLE PURE   "bitmaps/b72w.bmp"
+R72W                    BITMAP  MOVEABLE PURE   "bitmaps/r72w.bmp"
+Q72W                    BITMAP  MOVEABLE PURE   "bitmaps/q72w.bmp"
+K72W                    BITMAP  MOVEABLE PURE   "bitmaps/k72w.bmp"
+P80O                    BITMAP  MOVEABLE PURE   "bitmaps/p80o.bmp"
+N80O                    BITMAP  MOVEABLE PURE   "bitmaps/n80o.bmp"
+B80O                    BITMAP  MOVEABLE PURE   "bitmaps/b80o.bmp"
+R80O                    BITMAP  MOVEABLE PURE   "bitmaps/r80o.bmp"
+Q80O                    BITMAP  MOVEABLE PURE   "bitmaps/q80o.bmp"
+K80O                    BITMAP  MOVEABLE PURE   "bitmaps/k80o.bmp"
+P80S                    BITMAP  MOVEABLE PURE   "bitmaps/p80s.bmp"
+N80S                    BITMAP  MOVEABLE PURE   "bitmaps/n80s.bmp"
+B80S                    BITMAP  MOVEABLE PURE   "bitmaps/b80s.bmp"
+R80S                    BITMAP  MOVEABLE PURE   "bitmaps/r80s.bmp"
+Q80S                    BITMAP  MOVEABLE PURE   "bitmaps/q80s.bmp"
+K80S                    BITMAP  MOVEABLE PURE   "bitmaps/k80s.bmp"
+P80W                    BITMAP  MOVEABLE PURE   "bitmaps/p80w.bmp"
+N80W                    BITMAP  MOVEABLE PURE   "bitmaps/n80w.bmp"
+B80W                    BITMAP  MOVEABLE PURE   "bitmaps/b80w.bmp"
+R80W                    BITMAP  MOVEABLE PURE   "bitmaps/r80w.bmp"
+Q80W                    BITMAP  MOVEABLE PURE   "bitmaps/q80w.bmp"
+K80W                    BITMAP  MOVEABLE PURE   "bitmaps/k80w.bmp"
+P87O                    BITMAP  MOVEABLE PURE   "bitmaps/p87o.bmp"
+N87O                    BITMAP  MOVEABLE PURE   "bitmaps/n87o.bmp"
+B87O                    BITMAP  MOVEABLE PURE   "bitmaps/b87o.bmp"
+R87O                    BITMAP  MOVEABLE PURE   "bitmaps/r87o.bmp"
+Q87O                    BITMAP  MOVEABLE PURE   "bitmaps/q87o.bmp"
+K87O                    BITMAP  MOVEABLE PURE   "bitmaps/k87o.bmp"
+P87S                    BITMAP  MOVEABLE PURE   "bitmaps/p87s.bmp"
+N87S                    BITMAP  MOVEABLE PURE   "bitmaps/n87s.bmp"
+B87S                    BITMAP  MOVEABLE PURE   "bitmaps/b87s.bmp"
+R87S                    BITMAP  MOVEABLE PURE   "bitmaps/r87s.bmp"
+Q87S                    BITMAP  MOVEABLE PURE   "bitmaps/q87s.bmp"
+K87S                    BITMAP  MOVEABLE PURE   "bitmaps/k87s.bmp"
+P87W                    BITMAP  MOVEABLE PURE   "bitmaps/p87w.bmp"
+N87W                    BITMAP  MOVEABLE PURE   "bitmaps/n87w.bmp"
+B87W                    BITMAP  MOVEABLE PURE   "bitmaps/b87w.bmp"
+R87W                    BITMAP  MOVEABLE PURE   "bitmaps/r87w.bmp"
+Q87W                    BITMAP  MOVEABLE PURE   "bitmaps/q87w.bmp"
+K87W                    BITMAP  MOVEABLE PURE   "bitmaps/k87w.bmp"
+P95O                    BITMAP  MOVEABLE PURE   "bitmaps/p95o.bmp"
+N95O                    BITMAP  MOVEABLE PURE   "bitmaps/n95o.bmp"
+B95O                    BITMAP  MOVEABLE PURE   "bitmaps/b95o.bmp"
+R95O                    BITMAP  MOVEABLE PURE   "bitmaps/r95o.bmp"
+Q95O                    BITMAP  MOVEABLE PURE   "bitmaps/q95o.bmp"
+K95O                    BITMAP  MOVEABLE PURE   "bitmaps/k95o.bmp"
+P95S                    BITMAP  MOVEABLE PURE   "bitmaps/p95s.bmp"
+N95S                    BITMAP  MOVEABLE PURE   "bitmaps/n95s.bmp"
+B95S                    BITMAP  MOVEABLE PURE   "bitmaps/b95s.bmp"
+R95S                    BITMAP  MOVEABLE PURE   "bitmaps/r95s.bmp"
+Q95S                    BITMAP  MOVEABLE PURE   "bitmaps/q95s.bmp"
+K95S                    BITMAP  MOVEABLE PURE   "bitmaps/k95s.bmp"
+P95W                    BITMAP  MOVEABLE PURE   "bitmaps/p95w.bmp"
+N95W                    BITMAP  MOVEABLE PURE   "bitmaps/n95w.bmp"
+B95W                    BITMAP  MOVEABLE PURE   "bitmaps/b95w.bmp"
+R95W                    BITMAP  MOVEABLE PURE   "bitmaps/r95w.bmp"
+Q95W                    BITMAP  MOVEABLE PURE   "bitmaps/q95w.bmp"
+K95W                    BITMAP  MOVEABLE PURE   "bitmaps/k95w.bmp"
+P108O                   BITMAP  MOVEABLE PURE   "bitmaps/p108o.bmp"
+N108O                   BITMAP  MOVEABLE PURE   "bitmaps/n108o.bmp"
+B108O                   BITMAP  MOVEABLE PURE   "bitmaps/b108o.bmp"
+R108O                   BITMAP  MOVEABLE PURE   "bitmaps/r108o.bmp"
+Q108O                   BITMAP  MOVEABLE PURE   "bitmaps/q108o.bmp"
+K108O                   BITMAP  MOVEABLE PURE   "bitmaps/k108o.bmp"
+P108S                   BITMAP  MOVEABLE PURE   "bitmaps/p108s.bmp"
+N108S                   BITMAP  MOVEABLE PURE   "bitmaps/n108s.bmp"
+B108S                   BITMAP  MOVEABLE PURE   "bitmaps/b108s.bmp"
+R108S                   BITMAP  MOVEABLE PURE   "bitmaps/r108s.bmp"
+Q108S                   BITMAP  MOVEABLE PURE   "bitmaps/q108s.bmp"
+K108S                   BITMAP  MOVEABLE PURE   "bitmaps/k108s.bmp"
+P108W                   BITMAP  MOVEABLE PURE   "bitmaps/p108w.bmp"
+N108W                   BITMAP  MOVEABLE PURE   "bitmaps/n108w.bmp"
+B108W                   BITMAP  MOVEABLE PURE   "bitmaps/b108w.bmp"
+R108W                   BITMAP  MOVEABLE PURE   "bitmaps/r108w.bmp"
+Q108W                   BITMAP  MOVEABLE PURE   "bitmaps/q108w.bmp"
+K108W                   BITMAP  MOVEABLE PURE   "bitmaps/k108w.bmp"
+P116O                   BITMAP  MOVEABLE PURE   "bitmaps/p116o.bmp"
+N116O                   BITMAP  MOVEABLE PURE   "bitmaps/n116o.bmp"
+B116O                   BITMAP  MOVEABLE PURE   "bitmaps/b116o.bmp"
+R116O                   BITMAP  MOVEABLE PURE   "bitmaps/r116o.bmp"
+Q116O                   BITMAP  MOVEABLE PURE   "bitmaps/q116o.bmp"
+K116O                   BITMAP  MOVEABLE PURE   "bitmaps/k116o.bmp"
+P116S                   BITMAP  MOVEABLE PURE   "bitmaps/p116s.bmp"
+N116S                   BITMAP  MOVEABLE PURE   "bitmaps/n116s.bmp"
+B116S                   BITMAP  MOVEABLE PURE   "bitmaps/b116s.bmp"
+R116S                   BITMAP  MOVEABLE PURE   "bitmaps/r116s.bmp"
+Q116S                   BITMAP  MOVEABLE PURE   "bitmaps/q116s.bmp"
+K116S                   BITMAP  MOVEABLE PURE   "bitmaps/k116s.bmp"
+P116W                   BITMAP  MOVEABLE PURE   "bitmaps/p116w.bmp"
+N116W                   BITMAP  MOVEABLE PURE   "bitmaps/n116w.bmp"
+B116W                   BITMAP  MOVEABLE PURE   "bitmaps/b116w.bmp"
+R116W                   BITMAP  MOVEABLE PURE   "bitmaps/r116w.bmp"
+Q116W                   BITMAP  MOVEABLE PURE   "bitmaps/q116w.bmp"
+K116W                   BITMAP  MOVEABLE PURE   "bitmaps/k116w.bmp"
+P129O                   BITMAP  MOVEABLE PURE   "bitmaps/p129o.bmp"
+N129O                   BITMAP  MOVEABLE PURE   "bitmaps/n129o.bmp"
+B129O                   BITMAP  MOVEABLE PURE   "bitmaps/b129o.bmp"
+R129O                   BITMAP  MOVEABLE PURE   "bitmaps/r129o.bmp"
+Q129O                   BITMAP  MOVEABLE PURE   "bitmaps/q129o.bmp"
+K129O                   BITMAP  MOVEABLE PURE   "bitmaps/k129o.bmp"
+P129S                   BITMAP  MOVEABLE PURE   "bitmaps/p129s.bmp"
+N129S                   BITMAP  MOVEABLE PURE   "bitmaps/n129s.bmp"
+B129S                   BITMAP  MOVEABLE PURE   "bitmaps/b129s.bmp"
+R129S                   BITMAP  MOVEABLE PURE   "bitmaps/r129s.bmp"
+Q129S                   BITMAP  MOVEABLE PURE   "bitmaps/q129s.bmp"
+K129S                   BITMAP  MOVEABLE PURE   "bitmaps/k129s.bmp"
+P129W                   BITMAP  MOVEABLE PURE   "bitmaps/p129w.bmp"
+N129W                   BITMAP  MOVEABLE PURE   "bitmaps/n129w.bmp"
+B129W                   BITMAP  MOVEABLE PURE   "bitmaps/b129w.bmp"
+R129W                   BITMAP  MOVEABLE PURE   "bitmaps/r129w.bmp"
+Q129W                   BITMAP  MOVEABLE PURE   "bitmaps/q129w.bmp"
+K129W                   BITMAP  MOVEABLE PURE   "bitmaps/k129w.bmp"
+GALACTIC                BITMAP  MOVEABLE PURE   "bitmaps/galactic.bmp"
+TIM                     BITMAP  MOVEABLE PURE   "bitmaps/tim.bmp"
+// [HGM] Some fairy symbols:
+E72O                    BITMAP  MOVEABLE PURE   "bitmaps/e72o.bmp"
+A72O                    BITMAP  MOVEABLE PURE   "bitmaps/a72o.bmp"
+AA72O                   BITMAP  MOVEABLE PURE   "bitmaps/as72o.bmp"
+C72O                    BITMAP  MOVEABLE PURE   "bitmaps/c72o.bmp"
+CV72O                   BITMAP  MOVEABLE PURE   "bitmaps/cv72o.bmp"
+F72O                    BITMAP  MOVEABLE PURE   "bitmaps/f72o.bmp"
+M72O                    BITMAP  MOVEABLE PURE   "bitmaps/m72o.bmp"
+W72O                    BITMAP  MOVEABLE PURE   "bitmaps/w72o.bmp"
+O72O                    BITMAP  MOVEABLE PURE   "bitmaps/o72o.bmp"
+U72O                    BITMAP  MOVEABLE PURE   "bitmaps/u72o.bmp"
+H72O                    BITMAP  MOVEABLE PURE   "bitmaps/h72o.bmp"
+G72O                    BITMAP  MOVEABLE PURE   "bitmaps/g72o.bmp"
+V72O                    BITMAP  MOVEABLE PURE   "bitmaps/v72o.bmp"
+S72O                    BITMAP  MOVEABLE PURE   "bitmaps/s72o.bmp"
+L72O                    BITMAP  MOVEABLE PURE   "bitmaps/l72o.bmp"
+DK72O                   BITMAP  MOVEABLE PURE   "bitmaps/dk72o.bmp"
+WP72O                   BITMAP  MOVEABLE PURE   "bitmaps/wp72o.bmp"
+WN72O                   BITMAP  MOVEABLE PURE   "bitmaps/wn72o.bmp"
+WL72O                   BITMAP  MOVEABLE PURE   "bitmaps/wl72o.bmp"
+WS72O                   BITMAP  MOVEABLE PURE   "bitmaps/ws72o.bmp"
+E72S                    BITMAP  MOVEABLE PURE   "bitmaps/e72s.bmp"
+A72S                    BITMAP  MOVEABLE PURE   "bitmaps/a72s.bmp"
+AA72S                   BITMAP  MOVEABLE PURE   "bitmaps/as72s.bmp"
+C72S                    BITMAP  MOVEABLE PURE   "bitmaps/c72s.bmp"
+CV72S                   BITMAP  MOVEABLE PURE   "bitmaps/cv72s.bmp"
+F72S                    BITMAP  MOVEABLE PURE   "bitmaps/f72s.bmp"
+M72S                    BITMAP  MOVEABLE PURE   "bitmaps/m72s.bmp"
+W72S                    BITMAP  MOVEABLE PURE   "bitmaps/w72s.bmp"
+O72S                    BITMAP  MOVEABLE PURE   "bitmaps/o72s.bmp"
+U72S                    BITMAP  MOVEABLE PURE   "bitmaps/u72s.bmp"
+H72S                    BITMAP  MOVEABLE PURE   "bitmaps/h72s.bmp"
+G72S                    BITMAP  MOVEABLE PURE   "bitmaps/g72s.bmp"
+V72S                    BITMAP  MOVEABLE PURE   "bitmaps/v72s.bmp"
+S72S                    BITMAP  MOVEABLE PURE   "bitmaps/s72s.bmp"
+L72S                    BITMAP  MOVEABLE PURE   "bitmaps/l72s.bmp"
+DK72S                   BITMAP  MOVEABLE PURE   "bitmaps/dk72s.bmp"
+WP72S                   BITMAP  MOVEABLE PURE   "bitmaps/wp72s.bmp"
+WN72S                   BITMAP  MOVEABLE PURE   "bitmaps/wn72s.bmp"
+WL72S                   BITMAP  MOVEABLE PURE   "bitmaps/wl72s.bmp"
+WS72S                   BITMAP  MOVEABLE PURE   "bitmaps/ws72s.bmp"
+E72W                    BITMAP  MOVEABLE PURE   "bitmaps/e72w.bmp"
+A72W                    BITMAP  MOVEABLE PURE   "bitmaps/a72w.bmp"
+AA72W                   BITMAP  MOVEABLE PURE   "bitmaps/as72w.bmp"
+C72W                    BITMAP  MOVEABLE PURE   "bitmaps/c72w.bmp"
+CV72W                   BITMAP  MOVEABLE PURE   "bitmaps/cv72w.bmp"
+F72W                    BITMAP  MOVEABLE PURE   "bitmaps/f72w.bmp"
+M72W                    BITMAP  MOVEABLE PURE   "bitmaps/m72w.bmp"
+W72W                    BITMAP  MOVEABLE PURE   "bitmaps/w72w.bmp"
+O72W                    BITMAP  MOVEABLE PURE   "bitmaps/o72w.bmp"
+U72W                    BITMAP  MOVEABLE PURE   "bitmaps/u72w.bmp"
+H72W                    BITMAP  MOVEABLE PURE   "bitmaps/h72w.bmp"
+G72W                    BITMAP  MOVEABLE PURE   "bitmaps/g72w.bmp"
+V72W                    BITMAP  MOVEABLE PURE   "bitmaps/v72w.bmp"
+S72W                    BITMAP  MOVEABLE PURE   "bitmaps/s72w.bmp"
+L72W                    BITMAP  MOVEABLE PURE   "bitmaps/l72w.bmp"
+DK72W                   BITMAP  MOVEABLE PURE   "bitmaps/dk72w.bmp"
+E49O                    BITMAP  MOVEABLE PURE   "bitmaps/e49o.bmp"
+A49O                    BITMAP  MOVEABLE PURE   "bitmaps/a49o.bmp"
+AA49O                   BITMAP  MOVEABLE PURE   "bitmaps/as49o.bmp"
+C49O                    BITMAP  MOVEABLE PURE   "bitmaps/c49o.bmp"
+CV49O                   BITMAP  MOVEABLE PURE   "bitmaps/cv49o.bmp"
+F49O                    BITMAP  MOVEABLE PURE   "bitmaps/f49o.bmp"
+M49O                    BITMAP  MOVEABLE PURE   "bitmaps/m49o.bmp"
+W49O                    BITMAP  MOVEABLE PURE   "bitmaps/w49o.bmp"
+O49O                    BITMAP  MOVEABLE PURE   "bitmaps/o49o.bmp"
+U49O                    BITMAP  MOVEABLE PURE   "bitmaps/u49o.bmp"
+H49O                    BITMAP  MOVEABLE PURE   "bitmaps/h49o.bmp"
+G49O                    BITMAP  MOVEABLE PURE   "bitmaps/g49o.bmp"
+V49O                    BITMAP  MOVEABLE PURE   "bitmaps/v49o.bmp"
+S49O                    BITMAP  MOVEABLE PURE   "bitmaps/s49o.bmp"
+L49O                    BITMAP  MOVEABLE PURE   "bitmaps/l49o.bmp"
+DK49O                   BITMAP  MOVEABLE PURE   "bitmaps/dk49o.bmp"
+WP49O                   BITMAP  MOVEABLE PURE   "bitmaps/wp49o.bmp"
+WN49O                   BITMAP  MOVEABLE PURE   "bitmaps/wn49o.bmp"
+WL49O                   BITMAP  MOVEABLE PURE   "bitmaps/wl49o.bmp"
+WS49O                   BITMAP  MOVEABLE PURE   "bitmaps/ws49o.bmp"
+E49S                    BITMAP  MOVEABLE PURE   "bitmaps/e49s.bmp"
+A49S                    BITMAP  MOVEABLE PURE   "bitmaps/a49s.bmp"
+AA49S                   BITMAP  MOVEABLE PURE   "bitmaps/as49s.bmp"
+C49S                    BITMAP  MOVEABLE PURE   "bitmaps/c49s.bmp"
+CV49S                   BITMAP  MOVEABLE PURE   "bitmaps/cv49s.bmp"
+F49S                    BITMAP  MOVEABLE PURE   "bitmaps/f49s.bmp"
+M49S                    BITMAP  MOVEABLE PURE   "bitmaps/m49s.bmp"
+W49S                    BITMAP  MOVEABLE PURE   "bitmaps/w49s.bmp"
+O49S                    BITMAP  MOVEABLE PURE   "bitmaps/o49s.bmp"
+U49S                    BITMAP  MOVEABLE PURE   "bitmaps/u49s.bmp"
+H49S                    BITMAP  MOVEABLE PURE   "bitmaps/h49s.bmp"
+G49S                    BITMAP  MOVEABLE PURE   "bitmaps/g49s.bmp"
+V49S                    BITMAP  MOVEABLE PURE   "bitmaps/v49s.bmp"
+S49S                    BITMAP  MOVEABLE PURE   "bitmaps/s49s.bmp"
+L49S                    BITMAP  MOVEABLE PURE   "bitmaps/l49s.bmp"
+DK49S                   BITMAP  MOVEABLE PURE   "bitmaps/dk49s.bmp"
+WP49S                   BITMAP  MOVEABLE PURE   "bitmaps/wp49s.bmp"
+WN49S                   BITMAP  MOVEABLE PURE   "bitmaps/wn49s.bmp"
+WL49S                   BITMAP  MOVEABLE PURE   "bitmaps/wl49s.bmp"
+WS49S                   BITMAP  MOVEABLE PURE   "bitmaps/ws49s.bmp"
+E49W                    BITMAP  MOVEABLE PURE   "bitmaps/e49w.bmp"
+A49W                    BITMAP  MOVEABLE PURE   "bitmaps/a49w.bmp"
+AA49W                   BITMAP  MOVEABLE PURE   "bitmaps/as49w.bmp"
+C49W                    BITMAP  MOVEABLE PURE   "bitmaps/c49w.bmp"
+CV49W                   BITMAP  MOVEABLE PURE   "bitmaps/cv49w.bmp"
+F49W                    BITMAP  MOVEABLE PURE   "bitmaps/f49w.bmp"
+M49W                    BITMAP  MOVEABLE PURE   "bitmaps/m49w.bmp"
+W49W                    BITMAP  MOVEABLE PURE   "bitmaps/w49w.bmp"
+O49W                    BITMAP  MOVEABLE PURE   "bitmaps/o49w.bmp"
+U49W                    BITMAP  MOVEABLE PURE   "bitmaps/u49w.bmp"
+H49W                    BITMAP  MOVEABLE PURE   "bitmaps/h49w.bmp"
+G49W                    BITMAP  MOVEABLE PURE   "bitmaps/g49w.bmp"
+V49W                    BITMAP  MOVEABLE PURE   "bitmaps/v49w.bmp"
+S49W                    BITMAP  MOVEABLE PURE   "bitmaps/s49w.bmp"
+L49W                    BITMAP  MOVEABLE PURE   "bitmaps/l49w.bmp"
+DK49W                   BITMAP  MOVEABLE PURE   "bitmaps/dk49w.bmp"
+A33O                    BITMAP  MOVEABLE PURE   "bitmaps/a33o.bmp"
+AA33O                   BITMAP  MOVEABLE PURE   "bitmaps/as33o.bmp"
+C33O                    BITMAP  MOVEABLE PURE   "bitmaps/c33o.bmp"
+CV33O                   BITMAP  MOVEABLE PURE   "bitmaps/cv33o.bmp"
+V33O                    BITMAP  MOVEABLE PURE   "bitmaps/v33o.bmp"
+E33O                    BITMAP  MOVEABLE PURE   "bitmaps/e33o.bmp"
+F33O                    BITMAP  MOVEABLE PURE   "bitmaps/f33o.bmp"
+H33O                    BITMAP  MOVEABLE PURE   "bitmaps/h33o.bmp"
+G33O                    BITMAP  MOVEABLE PURE   "bitmaps/g33o.bmp"
+L33O                    BITMAP  MOVEABLE PURE   "bitmaps/l33o.bmp"
+W33O                    BITMAP  MOVEABLE PURE   "bitmaps/w33o.bmp"
+M33O                    BITMAP  MOVEABLE PURE   "bitmaps/m33o.bmp"
+O33O                    BITMAP  MOVEABLE PURE   "bitmaps/o33o.bmp"
+DK33O                   BITMAP  MOVEABLE PURE   "bitmaps/dk33o.bmp"
+A33W                    BITMAP  MOVEABLE PURE   "bitmaps/a33w.bmp"
+AA33W                   BITMAP  MOVEABLE PURE   "bitmaps/as33w.bmp"
+C33W                    BITMAP  MOVEABLE PURE   "bitmaps/c33w.bmp"
+CV33W                   BITMAP  MOVEABLE PURE   "bitmaps/cv33w.bmp"
+V33W                    BITMAP  MOVEABLE PURE   "bitmaps/v33w.bmp"
+E33W                    BITMAP  MOVEABLE PURE   "bitmaps/e33w.bmp"
+F33W                    BITMAP  MOVEABLE PURE   "bitmaps/f33w.bmp"
+H33W                    BITMAP  MOVEABLE PURE   "bitmaps/h33w.bmp"
+G33W                    BITMAP  MOVEABLE PURE   "bitmaps/g33w.bmp"
+L33W                    BITMAP  MOVEABLE PURE   "bitmaps/l33w.bmp"
+W33W                    BITMAP  MOVEABLE PURE   "bitmaps/w33w.bmp"
+M33W                    BITMAP  MOVEABLE PURE   "bitmaps/m33w.bmp"
+O33W                    BITMAP  MOVEABLE PURE   "bitmaps/o33w.bmp"
+DK33W                   BITMAP  MOVEABLE PURE   "bitmaps/dk33w.bmp"
+A33S                    BITMAP  MOVEABLE PURE   "bitmaps/a33s.bmp"
+AA33S                   BITMAP  MOVEABLE PURE   "bitmaps/as33s.bmp"
+C33S                    BITMAP  MOVEABLE PURE   "bitmaps/c33s.bmp"
+CV33S                   BITMAP  MOVEABLE PURE   "bitmaps/cv33s.bmp"
+V33S                    BITMAP  MOVEABLE PURE   "bitmaps/v33s.bmp"
+E33S                    BITMAP  MOVEABLE PURE   "bitmaps/e33s.bmp"
+F33S                    BITMAP  MOVEABLE PURE   "bitmaps/f33s.bmp"
+H33S                    BITMAP  MOVEABLE PURE   "bitmaps/h33s.bmp"
+G33S                    BITMAP  MOVEABLE PURE   "bitmaps/g33s.bmp"
+L33S                    BITMAP  MOVEABLE PURE   "bitmaps/l33s.bmp"
+W33S                    BITMAP  MOVEABLE PURE   "bitmaps/w33s.bmp"
+M33S                    BITMAP  MOVEABLE PURE   "bitmaps/m33s.bmp"
+O33S                    BITMAP  MOVEABLE PURE   "bitmaps/o33s.bmp"
+DK33S                   BITMAP  MOVEABLE PURE   "bitmaps/dk33s.bmp"
+
+A37O                    BITMAP  MOVEABLE PURE   "bitmaps/a37o.bmp"
+L37O                    BITMAP  MOVEABLE PURE   "bitmaps/l37o.bmp"
+C37O                    BITMAP  MOVEABLE PURE   "bitmaps/c37o.bmp"
+CV37O                   BITMAP  MOVEABLE PURE   "bitmaps/cv37o.bmp"
+A40O                    BITMAP  MOVEABLE PURE   "bitmaps/a40o.bmp"
+L40O                    BITMAP  MOVEABLE PURE   "bitmaps/l40o.bmp"
+C40O                    BITMAP  MOVEABLE PURE   "bitmaps/c40o.bmp"
+CV40O                   BITMAP  MOVEABLE PURE   "bitmaps/cv40o.bmp"
+A45O                    BITMAP  MOVEABLE PURE   "bitmaps/a45o.bmp"
+L45O                    BITMAP  MOVEABLE PURE   "bitmaps/l45o.bmp"
+C45O                    BITMAP  MOVEABLE PURE   "bitmaps/c45o.bmp"
+CV45O                   BITMAP  MOVEABLE PURE   "bitmaps/cv45o.bmp"
+A54O                    BITMAP  MOVEABLE PURE   "bitmaps/a54o.bmp"
+L54O                    BITMAP  MOVEABLE PURE   "bitmaps/l54o.bmp"
+C54O                    BITMAP  MOVEABLE PURE   "bitmaps/c54o.bmp"
+CV54O                   BITMAP  MOVEABLE PURE   "bitmaps/cv54o.bmp"
+V54O                    BITMAP  MOVEABLE PURE   "bitmaps/v54o.bmp"
+A58O                    BITMAP  MOVEABLE PURE   "bitmaps/a58o.bmp"
+L58O                    BITMAP  MOVEABLE PURE   "bitmaps/l58o.bmp"
+C58O                    BITMAP  MOVEABLE PURE   "bitmaps/c58o.bmp"
+CV58O                   BITMAP  MOVEABLE PURE   "bitmaps/cv58o.bmp"
+A64O                    BITMAP  MOVEABLE PURE   "bitmaps/a64o.bmp"
+L64O                    BITMAP  MOVEABLE PURE   "bitmaps/l64o.bmp"
+C64O                    BITMAP  MOVEABLE PURE   "bitmaps/c64o.bmp"
+CV64O                   BITMAP  MOVEABLE PURE   "bitmaps/cv64o.bmp"
+A37W                    BITMAP  MOVEABLE PURE   "bitmaps/a37w.bmp"
+L37W                    BITMAP  MOVEABLE PURE   "bitmaps/l37w.bmp"
+C37W                    BITMAP  MOVEABLE PURE   "bitmaps/c37w.bmp"
+CV37W                   BITMAP  MOVEABLE PURE   "bitmaps/cv37w.bmp"
+A40W                    BITMAP  MOVEABLE PURE   "bitmaps/a40w.bmp"
+L40W                    BITMAP  MOVEABLE PURE   "bitmaps/l40w.bmp"
+C40W                    BITMAP  MOVEABLE PURE   "bitmaps/c40w.bmp"
+CV40W                   BITMAP  MOVEABLE PURE   "bitmaps/cv40w.bmp"
+A45W                    BITMAP  MOVEABLE PURE   "bitmaps/a45w.bmp"
+L45W                    BITMAP  MOVEABLE PURE   "bitmaps/l45w.bmp"
+C45W                    BITMAP  MOVEABLE PURE   "bitmaps/c45w.bmp"
+CV45W                   BITMAP  MOVEABLE PURE   "bitmaps/cv45w.bmp"
+A54W                    BITMAP  MOVEABLE PURE   "bitmaps/a54w.bmp"
+L54W                    BITMAP  MOVEABLE PURE   "bitmaps/l54w.bmp"
+C54W                    BITMAP  MOVEABLE PURE   "bitmaps/c54w.bmp"
+CV54W                   BITMAP  MOVEABLE PURE   "bitmaps/cv54w.bmp"
+V54W                    BITMAP  MOVEABLE PURE   "bitmaps/v54w.bmp"
+A58W                    BITMAP  MOVEABLE PURE   "bitmaps/a58w.bmp"
+L58W                    BITMAP  MOVEABLE PURE   "bitmaps/l58w.bmp"
+C58W                    BITMAP  MOVEABLE PURE   "bitmaps/c58w.bmp"
+CV58W                   BITMAP  MOVEABLE PURE   "bitmaps/cv58w.bmp"
+A64W                    BITMAP  MOVEABLE PURE   "bitmaps/a64w.bmp"
+L64W                    BITMAP  MOVEABLE PURE   "bitmaps/l64w.bmp"
+C64W                    BITMAP  MOVEABLE PURE   "bitmaps/c64w.bmp"
+CV64W                   BITMAP  MOVEABLE PURE   "bitmaps/cv64w.bmp"
+A37S                    BITMAP  MOVEABLE PURE   "bitmaps/a37s.bmp"
+L37S                    BITMAP  MOVEABLE PURE   "bitmaps/l37s.bmp"
+C37S                    BITMAP  MOVEABLE PURE   "bitmaps/c37s.bmp"
+CV37S                   BITMAP  MOVEABLE PURE   "bitmaps/cv37s.bmp"
+A40S                    BITMAP  MOVEABLE PURE   "bitmaps/a40s.bmp"
+L40S                    BITMAP  MOVEABLE PURE   "bitmaps/l40s.bmp"
+C40S                    BITMAP  MOVEABLE PURE   "bitmaps/c40s.bmp"
+CV40S                   BITMAP  MOVEABLE PURE   "bitmaps/cv40s.bmp"
+A45S                    BITMAP  MOVEABLE PURE   "bitmaps/a45s.bmp"
+L45S                    BITMAP  MOVEABLE PURE   "bitmaps/l45s.bmp"
+C45S                    BITMAP  MOVEABLE PURE   "bitmaps/c45s.bmp"
+CV45S                   BITMAP  MOVEABLE PURE   "bitmaps/cv45s.bmp"
+A54S                    BITMAP  MOVEABLE PURE   "bitmaps/a54s.bmp"
+L54S                    BITMAP  MOVEABLE PURE   "bitmaps/l54s.bmp"
+C54S                    BITMAP  MOVEABLE PURE   "bitmaps/c54s.bmp"
+CV54S                   BITMAP  MOVEABLE PURE   "bitmaps/cv54s.bmp"
+V54S                    BITMAP  MOVEABLE PURE   "bitmaps/v54s.bmp"
+A58S                    BITMAP  MOVEABLE PURE   "bitmaps/a58s.bmp"
+L58S                    BITMAP  MOVEABLE PURE   "bitmaps/l58s.bmp"
+C58S                    BITMAP  MOVEABLE PURE   "bitmaps/c58s.bmp"
+CV58S                   BITMAP  MOVEABLE PURE   "bitmaps/cv58s.bmp"
+A64S                    BITMAP  MOVEABLE PURE   "bitmaps/a64s.bmp"
+L64S                    BITMAP  MOVEABLE PURE   "bitmaps/l64s.bmp"
+C64S                    BITMAP  MOVEABLE PURE   "bitmaps/c64s.bmp"
+CV64S                   BITMAP  MOVEABLE PURE   "bitmaps/cv64s.bmp"
+
+SP58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sp58o.bmp"
+SN58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sn58o.bmp"
+SB58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sb58o.bmp"
+SR58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sr58o.bmp"
+SL58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sl58o.bmp"
+SK58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sk58o.bmp"
+SF58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sf58o.bmp"
+SW58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sw58o.bmp"
+SU58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/su58o.bmp"
+SH58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sh58o.bmp"
+SA58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sa58o.bmp"
+SC58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sc58o.bmp"
+SG58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sg58o.bmp"
+SS58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/ss58o.bmp"
+SP58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sp58w.bmp"
+SN58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sn58w.bmp"
+SR58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sr58w.bmp"
+SL58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sl58w.bmp"
+SK58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sk58w.bmp"
+SW58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sw58w.bmp"
 
 #ifdef APSTUDIO_INVOKED
 /////////////////////////////////////////////////////////////////////////////
@@ -1321,39 +1999,38 @@ END
 // WAVE
 //
 
-DING                    WAVE    DISCARDABLE     "..\\sounds\\ding1.wav"
-CHING                   WAVE    DISCARDABLE     "..\\sounds\\ching.wav"
-CLICK                   WAVE    DISCARDABLE     "..\\sounds\\click.wav"
-CYMBAL                  WAVE    DISCARDABLE     "..\\sounds\\cymbal.wav"
-DRIP                    WAVE    DISCARDABLE     "..\\sounds\\drip.wav"
-GONG                    WAVE    DISCARDABLE     "..\\sounds\\gong.wav"
-BEEPBEEP                WAVE    DISCARDABLE     "..\\sounds\\honkhonk.wav"
-LASER                   WAVE    DISCARDABLE     "..\\sounds\\laser.wav"
-PENALTY                 WAVE    DISCARDABLE     "..\\sounds\\penalty.wav"
-PHONE                   WAVE    DISCARDABLE     "..\\sounds\\phone.wav"
-POP                     WAVE    DISCARDABLE     "..\\sounds\\pop.wav"
-POP2                    WAVE    DISCARDABLE     "..\\sounds\\pop2.wav"
-SLAP                    WAVE    DISCARDABLE     "..\\sounds\\slap.wav"
-SQUEAK                  WAVE    DISCARDABLE     "..\\sounds\\squeak.wav"
-SWISH                   WAVE    DISCARDABLE     "..\\sounds\\swish.wav"
-THUD                    WAVE    DISCARDABLE     "..\\sounds\\thud.wav"
-WHIPCRACK               WAVE    DISCARDABLE     "..\\sounds\\whipcrak.wav"
-MOVE                    WAVE    DISCARDABLE     "..\\sounds\\move.wav"
-ALARM			WAVE	DISCARDABLE	"..\\sounds\\alarm.wav"
-CHALLENGE		WAVE	DISCARDABLE	"..\\sounds\\challenge.wav"
-CHANNEL			WAVE	DISCARDABLE	"..\\sounds\\channel.wav"
-CHANNEL1		WAVE	DISCARDABLE	"..\\sounds\\channel1.wav"
-DRAW			WAVE	DISCARDABLE	"..\\sounds\\draw.wav"
-KIBITZ			WAVE	DISCARDABLE	"..\\sounds\\kibitz.wav"
-LOSE			WAVE	DISCARDABLE	"..\\sounds\\lose.wav"
-REQUEST			WAVE	DISCARDABLE	"..\\sounds\\request.wav"
-SEEK			WAVE	DISCARDABLE	"..\\sounds\\seek.wav"
-SHOUT			WAVE	DISCARDABLE	"..\\sounds\\shout.wav"
-SSHOUT			WAVE	DISCARDABLE	"..\\sounds\\sshout.wav"
-TELL			WAVE	DISCARDABLE	"..\\sounds\\tell.wav"
-UNFINISHED		WAVE	DISCARDABLE	"..\\sounds\\unfinished.wav"
-WIN			WAVE	DISCARDABLE	"..\\sounds\\win.wav"
-
+DING                    WAVE    DISCARDABLE     "sounds/ding1.wav"
+CHING                   WAVE    DISCARDABLE     "sounds/ching.wav"
+CLICK                   WAVE    DISCARDABLE     "sounds/click.wav"
+CYMBAL                  WAVE    DISCARDABLE     "sounds/cymbal.wav"
+DRIP                    WAVE    DISCARDABLE     "sounds/drip.wav"
+GONG                    WAVE    DISCARDABLE     "sounds/gong.wav"
+BEEPBEEP                WAVE    DISCARDABLE     "sounds/honkhonk.wav"
+LASER                   WAVE    DISCARDABLE     "sounds/laser.wav"
+PENALTY                 WAVE    DISCARDABLE     "sounds/penalty.wav"
+PHONE                   WAVE    DISCARDABLE     "sounds/phone.wav"
+POP                     WAVE    DISCARDABLE     "sounds/pop.wav"
+POP2                    WAVE    DISCARDABLE     "sounds/pop2.wav"
+SLAP                    WAVE    DISCARDABLE     "sounds/slap.wav"
+SQUEAK                  WAVE    DISCARDABLE     "sounds/squeak.wav"
+SWISH                   WAVE    DISCARDABLE     "sounds/swish.wav"
+THUD                    WAVE    DISCARDABLE     "sounds/thud.wav"
+WHIPCRACK               WAVE    DISCARDABLE     "sounds/whipcrak.wav"
+MOVE                    WAVE    DISCARDABLE     "sounds/move.wav"
+ALARM                   WAVE    DISCARDABLE     "sounds/alarm.wav"
+CHALLENGE               WAVE    DISCARDABLE     "sounds/challenge.wav"
+CHANNEL                 WAVE    DISCARDABLE     "sounds/channel.wav"
+CHANNEL1                WAVE    DISCARDABLE     "sounds/channel1.wav"
+DRAW                    WAVE    DISCARDABLE     "sounds/draw.wav"
+KIBITZ                  WAVE    DISCARDABLE     "sounds/kibitz.wav"
+LOSE                    WAVE    DISCARDABLE     "sounds/lose.wav"
+REQUEST                 WAVE    DISCARDABLE     "sounds/request.wav"
+SEEK                    WAVE    DISCARDABLE     "sounds/seek.wav"
+SHOUT                   WAVE    DISCARDABLE     "sounds/shout.wav"
+SSHOUT                  WAVE    DISCARDABLE     "sounds/sshout.wav"
+TELL                    WAVE    DISCARDABLE     "sounds/tell.wav"
+UNFINISHED              WAVE    DISCARDABLE     "sounds/unfinished.wav"
+WIN                     WAVE    DISCARDABLE     "sounds/win.wav"
 #endif    // English (U.S.) resources
 /////////////////////////////////////////////////////////////////////////////
 
diff --git a/winboard/winboard.rtf b/winboard/winboard.rtf
old mode 100755
new mode 100644
index aa5f578..7330276
--- a/winboard/winboard.rtf
+++ b/winboard/winboard.rtf
@@ -1,167 +1,270 @@
-{\rtf1\ansi\ansicpg1252\uc1 \deff5\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
-{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Times;}
-{\f5\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helvetica{\*\falt Arial};}{\f6\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Courier;}{\f7\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Geneva;}
+{\rtf1\ansi\ansicpg1252\uc1 \deff5\deflang1033\deflangfe1043{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times;}
+{\f5\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Helvetica{\*\falt Arial};}{\f6\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Courier{\*\falt Courier New};}{\f7\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Geneva;}
 {\f8\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Tms Rmn;}{\f9\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helv;}{\f10\froman\fcharset0\fprq2{\*\panose 00000000000000000000}MS Serif;}
-{\f11\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}MS Sans Serif;}{\f12\froman\fcharset0\fprq2{\*\panose 00000000000000000000}New York;}{\f13\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}System;}
-{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f15\froman\fcharset128\fprq1{\*\panose 00000000000000000000}Mincho{\*\falt ??};}{\f16\fnil\fcharset129\fprq1{\*\panose 00000000000000000000}Batang{\*\falt ??};}
-{\f17\fnil\fcharset134\fprq2{\*\panose 00000000000000000000}SimSun{\*\falt ??};}{\f18\fnil\fcharset136\fprq2{\*\panose 00000000000000000000}PMingLiU{\*\falt ????};}{\f19\fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}Gothic{\*\falt ?????};}
-{\f20\fmodern\fcharset129\fprq1{\*\panose 00000000000000000000}Dotum{\*\falt ??};}{\f21\fmodern\fcharset134\fprq1{\*\panose 00000000000000000000}SimHei{\*\falt ??};}{\f22\fmodern\fcharset136\fprq1{\*\panose 00000000000000000000}MingLiU{\*\falt ???};}
-{\f23\froman\fcharset128\fprq1{\*\panose 00000000000000000000}MS Mincho{\*\falt ?? ??};}{\f24\froman\fcharset129\fprq1{\*\panose 00000000000000000000}Gulim{\*\falt ??};}
-{\f25\fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}MS Gothic{\*\falt ?? ????};}{\f26\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Century;}{\f27\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}
-{\f28\fswiss\fcharset0\fprq0{\*\panose 00000000000000000000}Univers (WN);}{\f29\froman\fcharset0\fprq0{\*\panose 00000000000000000000}CG Times (WN);}{\f30\froman\fcharset177\fprq2{\*\panose 00000000000000000000}Times New Roman (Hebrew);}
-{\f31\froman\fcharset178\fprq2{\*\panose 00000000000000000000}Times New Roman (Arabic);}{\f32\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Arial (Hebrew);}{\f33\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Arial (Arabic);}
-{\f34\fmodern\fcharset177\fprq1{\*\panose 00000000000000000000}Courier New (Hebrew);}{\f35\fmodern\fcharset178\fprq1{\*\panose 00000000000000000000}Courier New (Arabic);}{\f36\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Tahoma (Hebrew);}
-{\f37\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Tahoma (Arabic);}{\f38\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Fixedsys;}{\f39\fmodern\fcharset255\fprq1{\*\panose 00000000000000000000}Terminal;}
-{\f40\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Small Fonts;}{\f41\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Marlett;}{\f42\fswiss\fcharset0\fprq2{\*\panose 020b0504020203020204}News Gothic MT;}
-{\f43\fscript\fcharset0\fprq2{\*\panose 03010101010101010101}Lucida Handwriting;}{\f44\fswiss\fcharset0\fprq2{\*\panose 020b0602030504090204}Lucida Sans;}{\f45\fswiss\fcharset0\fprq2{\*\panose 020b0602030504020204}Lucida Sans Unicode;}
-{\f46\froman\fcharset0\fprq2{\*\panose 02040602050305030304}Book Antiqua;}{\f47\fswiss\fcharset0\fprq2{\*\panose 020b0502020202020204}Century Gothic;}{\f48\fmodern\fcharset0\fprq1{\*\panose 02010509020102010303}OCR A Extended;}
-{\f49\froman\fcharset0\fprq2{\*\panose 02040603050505030304}Calisto MT;}{\f50\fswiss\fcharset0\fprq2{\*\panose 020b0306030101010103}Abadi MT Condensed Light;}{\f51\fswiss\fcharset0\fprq2{\*\panose 020e0705020206020404}Copperplate Gothic Bold;}
-{\f52\fswiss\fcharset0\fprq2{\*\panose 020e0507020206020404}Copperplate Gothic Light;}{\f53\fdecor\fcharset0\fprq2{\*\panose 04040403030d02020704}Matisse ITC;}{\f54\fdecor\fcharset0\fprq2{\*\panose 04020404030d07020202}Tempus Sans ITC;}
-{\f55\fdecor\fcharset0\fprq2{\*\panose 04040506030f02020702}Westminster;}{\f56\fmodern\fcharset0\fprq1{\*\panose 020b0609040504020204}Lucida Console;}{\f57\fswiss\fcharset0\fprq2{\*\panose 020b0a04020102020204}Arial Black;}
-{\f58\fscript\fcharset0\fprq2{\*\panose 030f0702030302020204}Comic Sans MS;}{\f59\fswiss\fcharset0\fprq2{\*\panose 020b0806030902050204}Impact;}{\f60\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}
-{\f61\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f62\fmodern\fcharset0\fprq1{\*\panose 020f0609000104060307}OCR-A II;}{\f63\fmodern\fcharset0\fprq1{\*\panose 020b0509000102020203}OCR B MT;}
-{\f64\fswiss\fcharset0\fprq2{\*\panose 020b0603020004020203}QuickType II;}{\f65\fswiss\fcharset0\fprq2{\*\panose 020b0506030403020203}QuickType II Condensed;}{\f66\fmodern\fcharset0\fprq1{\*\panose 020b0509020104020203}QuickType II Mono;}
-{\f67\fswiss\fcharset0\fprq2{\*\panose 020b0600020000000001}QuickType II Pi;}{\f68\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f69\froman\fcharset0\fprq2{\*\panose 02050604050505020204}Bookman Old Style;}
-{\f70\froman\fcharset0\fprq2{\*\panose 02020404030301010803}Garamond;}{\f71\fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS;}{\f72\froman\fcharset2\fprq2{\*\panose 05050102010205020202}MT Extra;}
-{\f73\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Lucida Sans Unicode (Hebrew);}{\f74\froman\fcharset238\fprq2 Times New Roman CE;}{\f75\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f77\froman\fcharset161\fprq2 Times New Roman Greek;}
-{\f78\froman\fcharset162\fprq2 Times New Roman Tur;}{\f79\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f80\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f81\froman\fcharset186\fprq2 Times New Roman Baltic;}
-{\f82\fswiss\fcharset238\fprq2 Arial CE;}{\f83\fswiss\fcharset204\fprq2 Arial Cyr;}{\f85\fswiss\fcharset161\fprq2 Arial Greek;}{\f86\fswiss\fcharset162\fprq2 Arial Tur;}{\f87\fswiss\fcharset177\fprq2 Arial (Hebrew);}
-{\f88\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f89\fswiss\fcharset186\fprq2 Arial Baltic;}{\f90\fmodern\fcharset238\fprq1 Courier New CE;}{\f91\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f93\fmodern\fcharset161\fprq1 Courier New Greek;}
-{\f94\fmodern\fcharset162\fprq1 Courier New Tur;}{\f95\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f96\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f97\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f290\fswiss\fcharset238\fprq2 Tahoma CE;}
-{\f291\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f293\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f294\fswiss\fcharset162\fprq2 Tahoma Tur;}{\f295\fswiss\fcharset177\fprq2 Tahoma (Hebrew);}{\f296\fswiss\fcharset178\fprq2 Tahoma (Arabic);}
-{\f297\fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f434\fswiss\fcharset238\fprq2 Lucida Sans Unicode CE;}{\f435\fswiss\fcharset204\fprq2 Lucida Sans Unicode Cyr;}{\f437\fswiss\fcharset161\fprq2 Lucida Sans Unicode Greek;}
-{\f438\fswiss\fcharset162\fprq2 Lucida Sans Unicode Tur;}{\f439\fswiss\fcharset177\fprq2 Lucida Sans Unicode (Hebrew);}{\f442\froman\fcharset238\fprq2 Book Antiqua CE;}{\f443\froman\fcharset204\fprq2 Book Antiqua Cyr;}
-{\f445\froman\fcharset161\fprq2 Book Antiqua Greek;}{\f446\froman\fcharset162\fprq2 Book Antiqua Tur;}{\f449\froman\fcharset186\fprq2 Book Antiqua Baltic;}{\f450\fswiss\fcharset238\fprq2 Century Gothic CE;}
-{\f451\fswiss\fcharset204\fprq2 Century Gothic Cyr;}{\f453\fswiss\fcharset161\fprq2 Century Gothic Greek;}{\f454\fswiss\fcharset162\fprq2 Century Gothic Tur;}{\f457\fswiss\fcharset186\fprq2 Century Gothic Baltic;}
-{\f522\fmodern\fcharset238\fprq1 Lucida Console CE;}{\f523\fmodern\fcharset204\fprq1 Lucida Console Cyr;}{\f525\fmodern\fcharset161\fprq1 Lucida Console Greek;}{\f526\fmodern\fcharset162\fprq1 Lucida Console Tur;}
-{\f530\fswiss\fcharset238\fprq2 Arial Black CE;}{\f531\fswiss\fcharset204\fprq2 Arial Black Cyr;}{\f533\fswiss\fcharset161\fprq2 Arial Black Greek;}{\f534\fswiss\fcharset162\fprq2 Arial Black Tur;}{\f537\fswiss\fcharset186\fprq2 Arial Black Baltic;}
-{\f538\fscript\fcharset238\fprq2 Comic Sans MS CE;}{\f539\fscript\fcharset204\fprq2 Comic Sans MS Cyr;}{\f541\fscript\fcharset161\fprq2 Comic Sans MS Greek;}{\f542\fscript\fcharset162\fprq2 Comic Sans MS Tur;}
-{\f545\fscript\fcharset186\fprq2 Comic Sans MS Baltic;}{\f546\fswiss\fcharset238\fprq2 Impact CE;}{\f547\fswiss\fcharset204\fprq2 Impact Cyr;}{\f549\fswiss\fcharset161\fprq2 Impact Greek;}{\f550\fswiss\fcharset162\fprq2 Impact Tur;}
-{\f553\fswiss\fcharset186\fprq2 Impact Baltic;}{\f554\fswiss\fcharset238\fprq2 Verdana CE;}{\f555\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f557\fswiss\fcharset161\fprq2 Verdana Greek;}{\f558\fswiss\fcharset162\fprq2 Verdana Tur;}
-{\f561\fswiss\fcharset186\fprq2 Verdana Baltic;}{\f618\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f619\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}{\f621\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f622\fswiss\fcharset162\fprq2 Arial Narrow Tur;}
-{\f625\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}{\f626\froman\fcharset238\fprq2 Bookman Old Style CE;}{\f627\froman\fcharset204\fprq2 Bookman Old Style Cyr;}{\f629\froman\fcharset161\fprq2 Bookman Old Style Greek;}
-{\f630\froman\fcharset162\fprq2 Bookman Old Style Tur;}{\f633\froman\fcharset186\fprq2 Bookman Old Style Baltic;}{\f634\froman\fcharset238\fprq2 Garamond CE;}{\f635\froman\fcharset204\fprq2 Garamond Cyr;}{\f637\froman\fcharset161\fprq2 Garamond Greek;}
-{\f638\froman\fcharset162\fprq2 Garamond Tur;}{\f641\froman\fcharset186\fprq2 Garamond Baltic;}{\f642\fswiss\fcharset238\fprq2 Trebuchet MS CE;}{\f646\fswiss\fcharset162\fprq2 Trebuchet MS Tur;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;
-\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;
-\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{
-\s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext26 heading 1;}{\s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 2;}{\s3\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 3;}{\s4\ql \fi-245\li360\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin360\itap0 
-\f11\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon2 \snext4 heading 4;}{\s5\ql \li120\ri0\sb80\sl-240\slmult0\keepn\nowidctlpar\faauto\outlinelevel4\adjustright\rin0\lin120\itap0 
-\f5\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive \f5\fs18\up6\lang1033\langfe0\langnp1033\langfenp0 \sbasedon10 footnote reference;}{
-\s16\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 footnote text;}{\s17\ql \li360\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin360\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 Normal Indent;}{\s18\ql \fi-240\li600\ri0\sb60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin600\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext18 Jli;}{\s19\ql \li120\ri0\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin120\itap0 
-\f6\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext19 Ex;}{\s20\ql \li120\ri0\sb160\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext29 Sa1;}{
-\s21\ql \fi-240\li360\ri0\sl-240\slmult0\nowidctlpar\tx360\faauto\adjustright\rin0\lin360\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext22 Lb1;}{\s22\ql \fi-240\li360\ri0\sb60\sl-240\slmult0\nowidctlpar
-\tx360\faauto\adjustright\rin0\lin360\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext22 Lb2;}{\s23\ql \li360\ri0\sb60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin360\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext22 Lp1;}{\s24\ql \fi-1800\li1920\ri0\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \tx1920\faauto\adjustright\rin0\lin1920\itap0 
-\b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext25 Th;}{\s25\ql \fi-1800\li1920\ri0\sb60\sl-240\slmult0\nowidctlpar\tx1920\faauto\adjustright\rin0\lin1920\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext25 Tp;}{
-\s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal 2;}{\s27\ql \li120\ri0\sb120\sa120\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 bitmap;}{\s28\ql \li120\ri0\sb120\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext29 Sa2;}{
-\s29\ql \fi-240\li360\ri0\sb60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin360\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext29 Jl;}{\s30\ql \li120\ri0\sa60\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext30 *body;}{\s31\ql \li120\ri0\sa60\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \b\f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext31 *heading;}{
-\s32\ql \li120\ri0\sa60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext32 para;}{
-\s33\ql \fi-280\li400\ri0\sa60\nowidctlpar\faauto\adjustright\rin0\lin400\itap0 \f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext33 jump;}{\s34\ql \fi-280\li400\ri0\sa60\nowidctlpar\tx400\faauto\adjustright\rin0\lin400\itap0 
-\f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext34 list bullet;}{\s35\ql \fi-280\li600\ri0\sa60\nowidctlpar\faauto\adjustright\rin0\lin600\itap0 \f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 
-\sbasedon30 \snext35 jump indent;}{\s36\ql \li120\ri0\sa60\sl-40\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \faauto\adjustright\rin0\lin120\itap0 \f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 
-\sbasedon30 \snext36 table rule;}{\s37\ql \fi-280\li400\ri0\sa60\nowidctlpar\tqr\tx280\tx400\faauto\adjustright\rin0\lin400\itap0 \f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext37 list number;}{
-\s38\ql \li120\ri0\sb100\sa60\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \b\f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon31 \snext33 see also;}{\s39\ql \li400\ri0\sa60\nowidctlpar\faauto\adjustright\rin0\lin400\itap0 
-\f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext39 para indent;}{\s40\ql \fi-1800\li1920\ri0\nowidctlpar\tx1920\faauto\adjustright\rin0\lin1920\itap0 \b\f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 
-\sbasedon31 \snext36 table head;}{\s41\ql \fi-1800\li1920\ri0\sa60\nowidctlpar\tx1920\faauto\adjustright\rin0\lin1920\itap0 \f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext41 table text;}{
-\s42\ql \li120\ri0\sb120\sa60\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f28\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext35 see also 2;}{\s43\ql \li120\ri0\sa60\keep\nowidctlpar
-\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin120\itap0 \f6\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext43 code;}{\s44\ql \li0\ri0\sl-120\slmult0\nowidctlpar\faauto\adjustright\rin0\lin0\itap0 
-\f29\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext32 *spacing;}{\s45\ql \li0\ri0\sl-120\slmult0\nowidctlpar\faauto\adjustright\rin0\lin0\itap0 \f29\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon44 \snext45 s6;}{
-\s46\qj \li360\ri0\nowidctlpar\faauto\adjustright\rin0\lin360\itap0 \f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext46 Help Text;}{\s47\ql \li115\ri0\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw
-\brdrs\brdrw15\brsp20 \faauto\adjustright\rin0\lin115\itap0 \f11\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon24 \snext25 Th2;}{\s48\ql \li115\ri0\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw
-\brdrs\brdrw15\brsp20 \faauto\adjustright\rin0\lin115\itap0 \b\f11\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon24 \snext25 Th3;}{\s49\ql \li115\ri0\sb200\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin115\itap0 
-\f11\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 Normal 3;}{\s50\ql \fi-1800\li1915\ri0\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 
-\tx1915\faauto\adjustright\rin0\lin1915\itap0 \b\f11\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext51 Thh;}{\s51\ql \fi-1800\li1915\ri0\sb60\sl-240\slmult0\nowidctlpar\tx1915\faauto\adjustright\rin0\lin1915\itap0 
-\f11\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext51 Tph;}{\s52\ql \li288\ri-432\sb80\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\faauto\adjustright\rin-432\lin288\itap0 
-\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext52 unixman1;}{\s53\ql \li1440\ri-432\sb80\sa240\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\faauto\adjustright\rin-432\lin1440\itap0 
-\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext53 unixman2;}{\s54\ql \li115\ri-432\sb80\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\faauto\adjustright\rin-432\lin115\itap0 
-\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon52 \snext54 unixman0;}{\s55\ql \li288\ri-432\sb80\sa240\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\faauto\adjustright\rin-432\lin288\itap0 
-\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon52 \snext55 unixman1a;}{\s56\ql \li115\ri0\sa60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin115\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 
-\sbasedon2 \snext56 heading 2a;}{\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext57 endnote text;}{\*\cs58 \additive \super \sbasedon10 
-endnote reference;}{\*\cs59 \additive \ul\cf2 \sbasedon10 Hyperlink;}{\*\cs60 \additive \ul\cf12 \sbasedon10 FollowedHyperlink;}{\s61\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \cbpat9 
-\f27\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext61 Document Map;}{\s62\ql \li480\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin480\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 
-\sbasedon0 \snext62 Body Text 2;}{\s63\ql \fi-720\li1440\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin1440\itap0 \f2\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext63 Body Text Indent 2;}{
-\s64\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext64 header;}{\s65\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar
-\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext65 footer;}}{\*\listtable{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0
-\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid74976790}{\list\listtemplateid67698703\listsimple
-{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname 
-;}\listid349260549}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 
-\chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid470094698}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
-\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid640160996}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
-\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid768165129}{\list\listtemplateid67698703\listsimple
-{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname 
-;}\listid781152802}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 
-\chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid903878531}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
-\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1002394966}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0
-\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1021513731}{\list\listtemplateid67698703\listsimple
-{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname 
-;}\listid1099714113}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 
-\chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1240552867}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
-\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1332292840}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0
-\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1358388700}{\list\listtemplateid67698689\listsimple{\listlevel
-\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname 
-;}\listid1405952460}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 
-\chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2025940873}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
-\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2044863907}}{\*\listoverridetable{\listoverride\listid2025940873\listoverridecount0\ls1}
-{\listoverride\listid1002394966\listoverridecount0\ls2}{\listoverride\listid470094698\listoverridecount0\ls3}{\listoverride\listid1099714113\listoverridecount0\ls4}{\listoverride\listid1358388700\listoverridecount0\ls5}{\listoverride\listid2044863907
-\listoverridecount0\ls6}{\listoverride\listid640160996\listoverridecount0\ls7}{\listoverride\listid768165129\listoverridecount0\ls8}{\listoverride\listid903878531\listoverridecount0\ls9}{\listoverride\listid781152802\listoverridecount0\ls10}
-{\listoverride\listid1240552867\listoverridecount0\ls11}{\listoverride\listid640160996\listoverridecount0\ls12}{\listoverride\listid349260549\listoverridecount0\ls13}{\listoverride\listid1021513731\listoverridecount0\ls14}{\listoverride\listid1405952460
-\listoverridecount0\ls15}{\listoverride\listid1332292840\listoverridecount0\ls16}}{\*\revtbl {Unknown;}{Tim Mann;}}{\info{\title + $ # KWinBoard: Chessboard for Windows}{\author TRIO}{\operator Tim Mann}{\creatim\yr2003\mo10\dy25\hr23\min40}{\revtim\yr2003\mo11\dy2\hr18\min20}
-{\printim\yr1997\mo4\dy22\hr23\min5}{\version4}{\edmins5}{\nofpages60}{\nofwords12847}{\nofchars-32766}{\*\company DEC SRC}{\nofcharsws0}{\vern8247}}
-\widowctrl\endnotes\aendnotes\ftnnrlc\aftnnar\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind4\viewscale100\nolnhtadjtbl \fet1{\*\aftnsep 
-\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\chftnsep 
-\par }}\sectd \linex0\sectdefaultcl {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+{\f11\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}MS Sans Serif;}{\f12\froman\fcharset0\fprq2{\*\panose 00000000000000000000}New York{\*\falt Times New Roman};}{\f13\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}System;}
+{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f15\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f16\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ??};}
+{\f17\froman\fcharset0\fprq0{\*\panose 00000000000000000000}??;}{\f18\fswiss\fcharset0\fprq0{\*\panose 00000000000000000000}BookAntiqua-Bold;}{\f19\fswiss\fcharset0\fprq0{\*\panose 00000000000000000000}BookAntiqua;}
+{\f20\froman\fcharset0\fprq0{\*\panose 00000000000000000000}Minion-Regular;}{\f21\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Calibri;}{\f22\froman\fcharset0\fprq0{\*\panose 00000000000000000000}TimesNewRoman;}
+{\f23\froman\fcharset0\fprq0{\*\panose 00000000000000000000}TimesNewRoman,Italic;}{\f24\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria Math;}{\f25\fmodern\fcharset255\fprq1{\*\panose 00000000000000000000}Terminal;}
+{\f26\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Fixedsys;}{\f27\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Small Fonts;}{\f28\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Czec;}
+{\f29\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Engl;}{\f30\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Fren;}{\f31\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Germ;}
+{\f32\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Ital;}{\f33\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Span;}{\f34\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Swed;}
+{\f35\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Marlett;}{\f36\fmodern\fcharset0\fprq1{\*\panose 020b0609040504020204}Lucida Console;}{\f37\fswiss\fcharset0\fprq2{\*\panose 020b0602030504020204}Lucida Sans Unicode;}
+{\f38\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\f39\fswiss\fcharset0\fprq2{\*\panose 020b0a04020102020204}Arial Black;}{\f40\fscript\fcharset0\fprq2{\*\panose 030f0702030302020204}Comic Sans MS;}
+{\f41\fswiss\fcharset0\fprq2{\*\panose 020b0806030902050204}Impact;}{\f42\froman\fcharset0\fprq2{\*\panose 02040502050405020303}Georgia;}{\f43\fswiss\fcharset0\fprq2{\*\panose 020b0603020102020204}Franklin Gothic Medium;}
+{\f44\froman\fcharset0\fprq2{\*\panose 02040502050505030304}Palatino Linotype;}{\f45\fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS;}{\f46\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}
+{\f47\fscript\fcharset0\fprq2 Estrangelo Edessa;}{\f48\fnil\fcharset0\fprq2 Gautami;}{\f49\fnil\fcharset0\fprq2 Latha;}{\f50\fnil\fcharset0\fprq2 Mangal;}{\f51\fnil\fcharset0\fprq2 MV Boli;}{\f52\fnil\fcharset0\fprq2 Raavi;}
+{\f53\fnil\fcharset0\fprq2 Shruti;}{\f54\fnil\fcharset0\fprq2 Tunga;}{\f55\froman\fcharset0\fprq2{\*\panose 010a0502050306030303}Sylfaen;}{\f56\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Microsoft Sans Serif;}
+{\f57\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f58\froman\fcharset0\fprq2{\*\panose 02060603020205020403}Rockwell;}{\f59\froman\fcharset0\fprq2{\*\panose 02060903040505020403}Rockwell Extra Bold;}
+{\f60\fscript\fcharset0\fprq2{\*\panose 03090702030407020403}Mistral;}{\f61\fdecor\fcharset0\fprq2{\*\panose 04020505051007020d02}Blackadder ITC;}{\f62\fscript\fcharset0\fprq2{\*\panose 03070402050302030203}Bradley Hand ITC;}
+{\f63\fswiss\fcharset0\fprq2{\*\panose 020e0705020206020404}Copperplate Gothic Bold;}{\f64\fswiss\fcharset0\fprq2{\*\panose 020e0507020206020404}Copperplate Gothic Light;}{\f65\fdecor\fcharset0\fprq2{\*\panose 04040404050702020202}Curlz MT;}
+{\f66\fscript\fcharset0\fprq2{\*\panose 030303020407070d0804}Edwardian Script ITC;}{\f67\froman\fcharset0\fprq2{\*\panose 02090707080505020304}Engravers MT;}{\f68\fswiss\fcharset0\fprq2{\*\panose 020b0805030504020804}Eras Demi ITC;}
+{\f69\fswiss\fcharset0\fprq2{\*\panose 020b0402030504020804}Eras Light ITC;}{\f70\fswiss\fcharset0\fprq2{\*\panose 020b0504020202050204}Eurostile;}{\f71\fdecor\fcharset0\fprq2{\*\panose 04060505060202020a04}Felix Titling;}
+{\f72\fswiss\fcharset0\fprq2{\*\panose 020b0503020102020204}Franklin Gothic Book;}{\f73\fswiss\fcharset0\fprq2{\*\panose 020b0703020102020204}Franklin Gothic Demi;}{\f74\fswiss\fcharset0\fprq2{\*\panose 020b0606030402020204}Franklin Gothic Medium Cond;}
+{\f75\fswiss\fcharset0\fprq2{\*\panose 020b0903020102020204}Franklin Gothic Heavy;}{\f76\fswiss\fcharset0\fprq2{\*\panose 020b0706030402020204}Franklin Gothic Demi Cond;}{\f77\fscript\fcharset0\fprq2{\*\panose 03020402040607040605}French Script MT;}
+{\f78\fswiss\fcharset0\fprq2{\*\panose 020b0502020202020204}Century Gothic;}{\f79\fscript\fcharset0\fprq2{\*\panose 03050502040202030202}Kristen ITC;}{\f80\fswiss\fcharset0\fprq2{\*\panose 020b0602030504020204}Lucida Sans;}
+{\f81\fswiss\fcharset0\fprq2{\*\panose 020e0502030308020204}Maiandra GD;}{\f82\fdecor\fcharset0\fprq2{\*\panose 04040403030d02020704}Matisse ITC;}{\f83\fscript\fcharset0\fprq2{\*\panose 03070502060502030205}Papyrus;}
+{\f84\froman\fcharset0\fprq2{\*\panose 02020502060401020303}Perpetua;}{\f85\fdecor\fcharset0\fprq2{\*\panose 04020404030d07020202}Tempus Sans ITC;}{\f86\fscript\fcharset0\fprq2{\*\panose 03020602050506090804}Vivaldi;}
+{\f87\froman\fcharset2\fprq2{\*\panose 05020102010507070707}Wingdings 2;}{\f88\froman\fcharset2\fprq2{\*\panose 05040102010807070707}Wingdings 3;}{\f89\fdecor\fcharset0\fprq2{\*\panose 04090605060d06020702}Jokerman;}
+{\f90\fdecor\fcharset0\fprq2{\*\panose 04040403040a02020202}Juice ITC;}{\f91\fmodern\fcharset0\fprq2{\*\panose 02010509020102010303}OCR A Extended;}{\f92\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}MS Reference 1;}
+{\f93\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}MS Reference 2;}{\f94\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}MS Reference Sans Serif;}{\f95\fnil\fcharset2\fprq2{\*\panose 05000500000000000000}MS Reference Specialty;}
+{\f96\froman\fcharset2\fprq2{\*\panose 05050102010205020202}MT Extra;}{\f97\fswiss\fcharset0\fprq2{\*\panose 020b0706040902060204}Haettenschweiler;}{\f98\froman\fcharset0\fprq2{\*\panose 02050604050505020204}Bookman Old Style;}
+{\f99\fnil\fcharset2\fprq2{\*\panose 01010601010101010101}Monotype Sorts;}{\f100\froman\fcharset0\fprq2{\*\panose 02020404030301010803}Garamond;}{\f101\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}MS Outlook;}
+{\f102\froman\fcharset0\fprq2{\*\panose 02020503030404060203}Kartika;}{\f103\fnil\fcharset0\fprq2{\*\panose 01010600010101010101}Vrinda;}{\f104\fswiss\fcharset2\fprq2{\*\panose 020b0603050302020204}WinboardF;}
+{\f105\fswiss\fcharset2\fprq2{\*\panose 020b0603050302020204}Chess Mark;}{\f106\fnil\fcharset0\fprq2{\*\panose 02000500000000000000}Superchess;}{\f107\fswiss\fcharset0\fprq2{\*\panose 020b0603050302020204}Tasc Chess Figurine;}
+{\f108\fnil\fcharset0\fprq1{\*\panose 02010603010101010101}XIANGQI;}{\f109\fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt ?? ??};}{\f110\fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}@MS Mincho;}
+{\f111\froman\fcharset128\fprq2{\*\panose 02020600040205080304}MS PMincho;}{\f112\froman\fcharset128\fprq2{\*\panose 02020600040205080304}@MS PMincho;}{\f113\fmodern\fcharset128\fprq1{\*\panose 020b0609070205080204}MS Gothic{\*\falt ?? ????};}
+{\f114\fmodern\fcharset128\fprq1{\*\panose 020b0609070205080204}@MS Gothic;}{\f115\fswiss\fcharset128\fprq2{\*\panose 020b0600070205080204}MS PGothic;}{\f116\fswiss\fcharset128\fprq2{\*\panose 020b0600070205080204}@MS PGothic;}
+{\f117\fswiss\fcharset128\fprq2{\*\panose 020b0600070205080204}MS UI Gothic;}{\f118\fswiss\fcharset128\fprq2{\*\panose 020b0600070205080204}@MS UI Gothic;}{\f119\fswiss\fcharset129\fprq2{\*\panose 020b0600000101010101}Gulim{\*\falt ??};}
+{\f120\fswiss\fcharset129\fprq2{\*\panose 020b0600000101010101}@Gulim;}{\f121\fmodern\fcharset129\fprq1{\*\panose 020b0609000101010101}GulimChe;}{\f122\fmodern\fcharset129\fprq1{\*\panose 020b0609000101010101}@GulimChe;}
+{\f123\fswiss\fcharset129\fprq2{\*\panose 020b0600000101010101}Dotum{\*\falt ??};}{\f124\fswiss\fcharset129\fprq2{\*\panose 020b0600000101010101}@Dotum;}{\f125\fmodern\fcharset129\fprq1{\*\panose 020b0609000101010101}DotumChe;}
+{\f126\fmodern\fcharset129\fprq1{\*\panose 020b0609000101010101}@DotumChe;}{\f127\froman\fcharset129\fprq2{\*\panose 02030600000101010101}Batang{\*\falt ??};}{\f128\froman\fcharset129\fprq2{\*\panose 02030600000101010101}@Batang;}
+{\f129\fmodern\fcharset129\fprq1{\*\panose 02030609000101010101}BatangChe;}{\f130\fmodern\fcharset129\fprq1{\*\panose 02030609000101010101}@BatangChe;}{\f131\froman\fcharset129\fprq2{\*\panose 02030600000101010101}Gungsuh;}
+{\f132\froman\fcharset129\fprq2{\*\panose 02030600000101010101}@Gungsuh;}{\f133\fmodern\fcharset129\fprq1{\*\panose 02030609000101010101}GungsuhChe;}{\f134\fmodern\fcharset129\fprq1{\*\panose 02030609000101010101}@GungsuhChe;}
+{\f135\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\f136\fmodern\fcharset134\fprq1{\*\panose 02010609030101010101}NSimSun;}{\f137\fmodern\fcharset134\fprq1{\*\panose 02010609030101010101}@NSimSun;}
+{\f138\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimHei{\*\falt ??};}{\f139\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimHei;}{\f140\fmodern\fcharset136\fprq1{\*\panose 02020309000000000000}MingLiU{\*\falt ???};}
+{\f141\fmodern\fcharset136\fprq1{\*\panose 02020309000000000000}@MingLiU;}{\f142\froman\fcharset136\fprq2{\*\panose 02020300000000000000}PMingLiU{\*\falt ????};}{\f143\froman\fcharset136\fprq2{\*\panose 02020300000000000000}@PMingLiU;}
+{\f144\froman\fcharset128\fprq1{\*\panose 00000000000000000000}Mincho{\*\falt ??};}{\f145\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Century;}{\f146\froman\fcharset222\fprq2{\*\panose 00000000000000000000}Angsana New;}
+{\f147\froman\fcharset222\fprq2{\*\panose 00000000000000000000}Cordia New;}{\f148\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Sendnya;}{\f149\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Estrangella Edessa;}
+{\f150\fswiss\fcharset128\fprq2{\*\panose 00000000000000000000}Arial Unicode MS;}{\f151\fswiss\fcharset0\fprq0{\*\panose 00000000000000000000}Univers (WN);}{\f152\froman\fcharset0\fprq0{\*\panose 00000000000000000000}CG Times (WN);}
+{\f153\fswiss\fcharset128\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS;}{\f154\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Book Antiqua;}{\f155\fscript\fcharset0\fprq2{\*\panose 00000000000000000000}Monotype Corsiva;}
+{\f156\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}CA Chess;}{\f157\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}ISDiagram;}{\f158\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}CADiagram;}
+{\f159\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Alfonso-X;}{\f160\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Adventurer;}{\f161\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Cases;}
+{\f162\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Marroquin;}{\f163\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Condal;}{\f164\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Harlequin;}
+{\f165\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Kingdom;}{\f166\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Leipzig;}{\f167\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Line;}
+{\f168\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Lucena;}{\f169\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Magnetic;}{\f170\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Maya;}
+{\f171\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Merida Fatx;}{\f172\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Merida;}{\f173\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Millennia-D;}
+{\f174\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Miscel;}{\f175\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Motif;}{\f176\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Mediaeval;}
+{\f177\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Smart;}{\f178\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Traveller Standard;}{\f179\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess;}
+{\f180\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Usual;}{\f181\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Utrecht;}{\f182\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica1;}
+{\f183\froman\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica1Mono;}{\f184\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica2;}{\f185\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica2Mono;}
+{\f186\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica3;}{\f187\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica3Mono;}{\f188\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica4;}
+{\f189\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica4Mono;}{\f190\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica5;}{\f191\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica5Mono;}
+{\f192\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica6;}{\f193\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica6Mono;}{\f194\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica7;}
+{\f195\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica7Mono;}{\f196\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Bookup;}{\f197\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chessmaster9000;}
+{\f198\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}FigurineCB AriesSP;}{\f199\fnil\fcharset0\fprq1{\*\panose 00000000000000000000}FigurineCB LetterSP;}{\f200\froman\fcharset0\fprq2{\*\panose 00000000000000000000}FigurineCB TimeSP;}
+{\f201\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}DiagramTTFritz;}{\f202\fmodern\fcharset2\fprq1{\*\panose 00000000000000000000}FigurineCrrCB;}{\f203\froman\fcharset2\fprq2{\*\panose 00000000000000000000}FigurineTmsCB;}
+{\f204\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}HE_TERMINAL;}{\f205\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Digiface;}{\f206\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Sydnie;}
+{\f207\froman\fcharset177\fprq2{\*\panose 00000000000000000000}Times New Roman (Hebrew);}{\f208\froman\fcharset178\fprq2{\*\panose 00000000000000000000}Times New Roman (Arabic);}
+{\f209\froman\fcharset163\fprq2{\*\panose 00000000000000000000}Times New Roman (Vietnamese);}{\f210\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Arial (Hebrew);}{\f211\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Arial (Arabic);}
+{\f212\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Arial (Vietnamese);}{\f213\fmodern\fcharset177\fprq1{\*\panose 00000000000000000000}Courier New (Hebrew);}{\f214\fmodern\fcharset178\fprq1{\*\panose 00000000000000000000}Courier New (Arabic);}
+{\f215\fmodern\fcharset163\fprq1{\*\panose 00000000000000000000}Courier New (Vietnamese);}{\f216\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Helvetica (Hebrew){\*\falt Arial};}
+{\f217\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Helvetica (Arabic){\*\falt Arial};}{\f218\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Helvetica (Vietnamese){\*\falt Arial};}
+{\f219\froman\fcharset238\fprq2{\*\panose 00000000000000000000}Century CE;}{\f220\froman\fcharset204\fprq2{\*\panose 00000000000000000000}Century Cyr;}{\f221\froman\fcharset161\fprq2{\*\panose 00000000000000000000}Century Greek;}
+{\f222\froman\fcharset162\fprq2{\*\panose 00000000000000000000}Century Tur;}{\f223\froman\fcharset186\fprq2{\*\panose 00000000000000000000}Century Baltic;}{\f224\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Arial Unicode MS Western;}
+{\f225\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}Arial Unicode MS CE;}{\f226\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}Arial Unicode MS Cyr;}
+{\f227\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Arial Unicode MS Greek;}{\f228\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}Arial Unicode MS Tur;}
+{\f229\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Arial Unicode MS (Hebrew);}{\f230\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Arial Unicode MS (Arabic);}
+{\f231\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Arial Unicode MS Baltic;}{\f232\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Arial Unicode MS (Vietnamese);}
+{\f233\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}Arial Unicode MS (Thai);}{\f234\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Tahoma (Hebrew);}{\f235\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Tahoma (Arabic);}
+{\f236\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Tahoma (Vietnamese);}{\f237\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}Tahoma (Thai);}{\f238\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Lucida Sans Unicode (Hebrew);}
+{\f239\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Verdana (Vietnamese);}{\f240\froman\fcharset163\fprq2{\*\panose 00000000000000000000}Palatino Linotype (Vietnamese);}
+{\f241\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Microsoft Sans Serif (Hebrew);}{\f242\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Microsoft Sans Serif (Arabic);}
+{\f243\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Microsoft Sans Serif (Vietnames;}{\f244\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}Microsoft Sans Serif (Thai);}
+{\f245\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS Western;}{\f246\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS CE;}
+{\f247\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS Cyr;}{\f248\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS Greek;}
+{\f249\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS Tur;}{\f250\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS (Hebrew);}
+{\f251\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS (Arabic);}{\f252\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS Baltic;}
+{\f253\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS (Vietnamese);}{\f254\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS (Thai);}
+{\f255\froman\fcharset238\fprq2{\*\panose 00000000000000000000}Book Antiqua CE;}{\f256\froman\fcharset204\fprq2{\*\panose 00000000000000000000}Book Antiqua Cyr;}{\f257\froman\fcharset161\fprq2{\*\panose 00000000000000000000}Book Antiqua Greek;}
+{\f258\froman\fcharset162\fprq2{\*\panose 00000000000000000000}Book Antiqua Tur;}{\f259\froman\fcharset186\fprq2{\*\panose 00000000000000000000}Book Antiqua Baltic;}{\f260\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}Haettenschweiler CE;}
+{\f261\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}Haettenschweiler Cyr;}{\f262\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Haettenschweiler Greek;}
+{\f263\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}Haettenschweiler Tur;}{\f264\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Haettenschweiler Baltic;}
+{\f265\fscript\fcharset238\fprq2{\*\panose 00000000000000000000}Monotype Corsiva CE;}{\f266\fscript\fcharset204\fprq2{\*\panose 00000000000000000000}Monotype Corsiva Cyr;}
+{\f267\fscript\fcharset161\fprq2{\*\panose 00000000000000000000}Monotype Corsiva Greek;}{\f268\fscript\fcharset162\fprq2{\*\panose 00000000000000000000}Monotype Corsiva Tur;}
+{\f269\fscript\fcharset186\fprq2{\*\panose 00000000000000000000}Monotype Corsiva Baltic;}{\f270\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}CA Chess Cyr;}{\f271\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}CA Chess Tur;}
+{\f272\fmodern\fcharset238\fprq1{\*\panose 00000000000000000000}HE_TERMINAL CE;}{\f273\fmodern\fcharset204\fprq1{\*\panose 00000000000000000000}HE_TERMINAL Cyr;}{\f274\fmodern\fcharset161\fprq1{\*\panose 00000000000000000000}HE_TERMINAL Greek;}
+{\f275\fmodern\fcharset162\fprq1{\*\panose 00000000000000000000}HE_TERMINAL Tur;}{\f276\fmodern\fcharset186\fprq1{\*\panose 00000000000000000000}HE_TERMINAL Baltic;}{\f277\fnil\fcharset161\fprq2{\*\panose 00000000000000000000}Sydnie Greek;}
+{\f278\fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}Gothic{\*\falt ?????};}{\f279\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}News Gothic MT;}{\f280\fscript\fcharset0\fprq2{\*\panose 00000000000000000000}Lucida Handwriting;}
+{\f281\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Calisto MT;}{\f282\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Abadi MT Condensed Light;}{\f283\fdecor\fcharset0\fprq2{\*\panose 00000000000000000000}Westminster;}
+{\f284\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}OCR-A II;}{\f285\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}OCR B MT;}{\f286\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}QuickType II;}
+{\f287\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}QuickType II Condensed;}{\f288\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}QuickType II Mono;}{\f289\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}QuickType II Pi;}
+{\f290\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Franklin Gothic Medium Cond Gre;}{\f291\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Franklin Gothic Medium Cond Bal;}
+{\f292\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Franklin Gothic Demi Cond Balti;}{\f293\froman\fcharset238\fprq0{\*\panose 00000000000000000000}?? CE;}{\f294\froman\fcharset162\fprq0{\*\panose 00000000000000000000}?? Tur;}
+{\f295\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}Calibri CE;}{\f296\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}Calibri Cyr;}{\f297\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Calibri Greek;}
+{\f298\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}Calibri Tur;}{\f299\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Calibri Baltic;}{\f300\froman\fcharset238\fprq2{\*\panose 00000000000000000000}Cambria Math CE;}
+{\f301\froman\fcharset204\fprq2{\*\panose 00000000000000000000}Cambria Math Cyr;}{\f302\froman\fcharset161\fprq2{\*\panose 00000000000000000000}Cambria Math Greek;}{\f303\froman\fcharset162\fprq2{\*\panose 00000000000000000000}Cambria Math Tur;}
+{\f304\froman\fcharset186\fprq2{\*\panose 00000000000000000000}Cambria Math Baltic;}{\f305\froman\fcharset238\fprq2 Times New Roman CE;}{\f306\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f308\froman\fcharset161\fprq2 Times New Roman Greek;}
+{\f309\froman\fcharset162\fprq2 Times New Roman Tur;}{\f310\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f311\fswiss\fcharset238\fprq2 Arial CE;}{\f312\fswiss\fcharset204\fprq2 Arial Cyr;}{\f314\fswiss\fcharset161\fprq2 Arial Greek;}
+{\f315\fswiss\fcharset162\fprq2 Arial Tur;}{\f316\fswiss\fcharset186\fprq2 Arial Baltic;}{\f317\fmodern\fcharset238\fprq1 Courier New CE;}{\f318\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f320\fmodern\fcharset161\fprq1 Courier New Greek;}
+{\f321\fmodern\fcharset162\fprq1 Courier New Tur;}{\f322\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f329\froman\fcharset238\fprq2 Times CE;}{\f330\froman\fcharset204\fprq2 Times Cyr;}{\f332\froman\fcharset161\fprq2 Times Greek;}
+{\f333\froman\fcharset162\fprq2 Times Tur;}{\f334\froman\fcharset186\fprq2 Times Baltic;}{\f335\fswiss\fcharset238\fprq2 Helvetica CE{\*\falt Arial};}{\f336\fswiss\fcharset204\fprq2 Helvetica Cyr{\*\falt Arial};}
+{\f338\fswiss\fcharset161\fprq2 Helvetica Greek{\*\falt Arial};}{\f339\fswiss\fcharset162\fprq2 Helvetica Tur{\*\falt Arial};}{\f340\fswiss\fcharset186\fprq2 Helvetica Baltic{\*\falt Arial};}{\f395\fswiss\fcharset238\fprq2 Tahoma CE;}
+{\f396\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f398\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f399\fswiss\fcharset162\fprq2 Tahoma Tur;}{\f400\fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f403\fnil\fcharset0\fprq2 SimSun{\*\falt ??};}
+{\f521\fmodern\fcharset238\fprq1 Lucida Console CE;}{\f522\fmodern\fcharset204\fprq1 Lucida Console Cyr;}{\f524\fmodern\fcharset161\fprq1 Lucida Console Greek;}{\f525\fmodern\fcharset162\fprq1 Lucida Console Tur;}
+{\f527\fswiss\fcharset238\fprq2 Lucida Sans Unicode CE;}{\f528\fswiss\fcharset204\fprq2 Lucida Sans Unicode Cyr;}{\f530\fswiss\fcharset161\fprq2 Lucida Sans Unicode Greek;}{\f531\fswiss\fcharset162\fprq2 Lucida Sans Unicode Tur;}
+{\f533\fswiss\fcharset238\fprq2 Verdana CE;}{\f534\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f536\fswiss\fcharset161\fprq2 Verdana Greek;}{\f537\fswiss\fcharset162\fprq2 Verdana Tur;}{\f538\fswiss\fcharset186\fprq2 Verdana Baltic;}
+{\f539\fswiss\fcharset238\fprq2 Arial Black CE;}{\f540\fswiss\fcharset204\fprq2 Arial Black Cyr;}{\f542\fswiss\fcharset161\fprq2 Arial Black Greek;}{\f543\fswiss\fcharset162\fprq2 Arial Black Tur;}{\f544\fswiss\fcharset186\fprq2 Arial Black Baltic;}
+{\f545\fscript\fcharset238\fprq2 Comic Sans MS CE;}{\f546\fscript\fcharset204\fprq2 Comic Sans MS Cyr;}{\f548\fscript\fcharset161\fprq2 Comic Sans MS Greek;}{\f549\fscript\fcharset162\fprq2 Comic Sans MS Tur;}
+{\f550\fscript\fcharset186\fprq2 Comic Sans MS Baltic;}{\f551\fswiss\fcharset238\fprq2 Impact CE;}{\f552\fswiss\fcharset204\fprq2 Impact Cyr;}{\f554\fswiss\fcharset161\fprq2 Impact Greek;}{\f555\fswiss\fcharset162\fprq2 Impact Tur;}
+{\f556\fswiss\fcharset186\fprq2 Impact Baltic;}{\f557\froman\fcharset238\fprq2 Georgia CE;}{\f558\froman\fcharset204\fprq2 Georgia Cyr;}{\f560\froman\fcharset161\fprq2 Georgia Greek;}{\f561\froman\fcharset162\fprq2 Georgia Tur;}
+{\f562\froman\fcharset186\fprq2 Georgia Baltic;}{\f563\fswiss\fcharset238\fprq2 Franklin Gothic Medium CE;}{\f564\fswiss\fcharset204\fprq2 Franklin Gothic Medium Cyr;}{\f566\fswiss\fcharset161\fprq2 Franklin Gothic Medium Greek;}
+{\f567\fswiss\fcharset162\fprq2 Franklin Gothic Medium Tur;}{\f568\fswiss\fcharset186\fprq2 Franklin Gothic Medium Baltic;}{\f569\froman\fcharset238\fprq2 Palatino Linotype CE;}{\f570\froman\fcharset204\fprq2 Palatino Linotype Cyr;}
+{\f572\froman\fcharset161\fprq2 Palatino Linotype Greek;}{\f573\froman\fcharset162\fprq2 Palatino Linotype Tur;}{\f574\froman\fcharset186\fprq2 Palatino Linotype Baltic;}{\f575\fswiss\fcharset238\fprq2 Trebuchet MS CE;}
+{\f576\fswiss\fcharset204\fprq2 Trebuchet MS Cyr;}{\f578\fswiss\fcharset161\fprq2 Trebuchet MS Greek;}{\f579\fswiss\fcharset162\fprq2 Trebuchet MS Tur;}{\f580\fswiss\fcharset186\fprq2 Trebuchet MS Baltic;}{\f635\froman\fcharset238\fprq2 Sylfaen CE;}
+{\f636\froman\fcharset204\fprq2 Sylfaen Cyr;}{\f638\froman\fcharset161\fprq2 Sylfaen Greek;}{\f639\froman\fcharset162\fprq2 Sylfaen Tur;}{\f640\froman\fcharset186\fprq2 Sylfaen Baltic;}{\f641\fswiss\fcharset238\fprq2 Microsoft Sans Serif CE;}
+{\f642\fswiss\fcharset204\fprq2 Microsoft Sans Serif Cyr;}{\f644\fswiss\fcharset161\fprq2 Microsoft Sans Serif Greek;}{\f645\fswiss\fcharset162\fprq2 Microsoft Sans Serif Tur;}{\f646\fswiss\fcharset186\fprq2 Microsoft Sans Serif Baltic;}
+{\f647\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f648\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}{\f650\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f651\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f652\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}
+{\f653\froman\fcharset238\fprq2 Rockwell CE;}{\f665\fscript\fcharset238\fprq2 Mistral CE;}{\f666\fscript\fcharset204\fprq2 Mistral Cyr;}{\f668\fscript\fcharset161\fprq2 Mistral Greek;}{\f669\fscript\fcharset162\fprq2 Mistral Tur;}
+{\f670\fscript\fcharset186\fprq2 Mistral Baltic;}{\f737\fswiss\fcharset238\fprq2 Franklin Gothic Book CE;}{\f738\fswiss\fcharset204\fprq2 Franklin Gothic Book Cyr;}{\f740\fswiss\fcharset161\fprq2 Franklin Gothic Book Greek;}
+{\f741\fswiss\fcharset162\fprq2 Franklin Gothic Book Tur;}{\f742\fswiss\fcharset186\fprq2 Franklin Gothic Book Baltic;}{\f743\fswiss\fcharset238\fprq2 Franklin Gothic Demi CE;}{\f744\fswiss\fcharset204\fprq2 Franklin Gothic Demi Cyr;}
+{\f746\fswiss\fcharset161\fprq2 Franklin Gothic Demi Greek;}{\f747\fswiss\fcharset162\fprq2 Franklin Gothic Demi Tur;}{\f748\fswiss\fcharset186\fprq2 Franklin Gothic Demi Baltic;}{\f749\fswiss\fcharset238\fprq2 Franklin Gothic Medium Cond CE;}
+{\f750\fswiss\fcharset204\fprq2 Franklin Gothic Medium Cond Cyr;}{\f752\fswiss\fcharset161\fprq2 Franklin Gothic Medium Cond Greek;}{\f753\fswiss\fcharset162\fprq2 Franklin Gothic Medium Cond Tur;}
+{\f754\fswiss\fcharset186\fprq2 Franklin Gothic Medium Cond Baltic;}{\f755\fswiss\fcharset238\fprq2 Franklin Gothic Heavy CE;}{\f756\fswiss\fcharset204\fprq2 Franklin Gothic Heavy Cyr;}{\f758\fswiss\fcharset161\fprq2 Franklin Gothic Heavy Greek;}
+{\f759\fswiss\fcharset162\fprq2 Franklin Gothic Heavy Tur;}{\f760\fswiss\fcharset186\fprq2 Franklin Gothic Heavy Baltic;}{\f761\fswiss\fcharset238\fprq2 Franklin Gothic Demi Cond CE;}{\f762\fswiss\fcharset204\fprq2 Franklin Gothic Demi Cond Cyr;}
+{\f764\fswiss\fcharset161\fprq2 Franklin Gothic Demi Cond Greek;}{\f765\fswiss\fcharset162\fprq2 Franklin Gothic Demi Cond Tur;}{\f766\fswiss\fcharset186\fprq2 Franklin Gothic Demi Cond Baltic;}{\f773\fswiss\fcharset238\fprq2 Century Gothic CE;}
+{\f774\fswiss\fcharset204\fprq2 Century Gothic Cyr;}{\f776\fswiss\fcharset161\fprq2 Century Gothic Greek;}{\f777\fswiss\fcharset162\fprq2 Century Gothic Tur;}{\f778\fswiss\fcharset186\fprq2 Century Gothic Baltic;}
+{\f869\fswiss\fcharset238\fprq2 MS Reference Sans Serif CE;}{\f870\fswiss\fcharset204\fprq2 MS Reference Sans Serif Cyr;}{\f872\fswiss\fcharset161\fprq2 MS Reference Sans Serif Greek;}{\f873\fswiss\fcharset162\fprq2 MS Reference Sans Serif Tur;}
+{\f874\fswiss\fcharset186\fprq2 MS Reference Sans Serif Baltic;}{\f893\froman\fcharset238\fprq2 Bookman Old Style CE;}{\f894\froman\fcharset204\fprq2 Bookman Old Style Cyr;}{\f896\froman\fcharset161\fprq2 Bookman Old Style Greek;}
+{\f897\froman\fcharset162\fprq2 Bookman Old Style Tur;}{\f898\froman\fcharset186\fprq2 Bookman Old Style Baltic;}{\f905\froman\fcharset238\fprq2 Garamond CE;}{\f906\froman\fcharset204\fprq2 Garamond Cyr;}{\f908\froman\fcharset161\fprq2 Garamond Greek;}
+{\f909\froman\fcharset162\fprq2 Garamond Tur;}{\f910\froman\fcharset186\fprq2 Garamond Baltic;}{\f945\fnil\fcharset162\fprq2 Superchess Tur;}{\f961\fmodern\fcharset0\fprq1 MS Mincho{\*\falt ?? ??};}
+{\f959\fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt ?? ??};}{\f960\fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt ?? ??};}{\f962\fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt ?? ??};}{\f963\fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt ?? ??};}
+{\f964\fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt ?? ??};}{\f967\fmodern\fcharset0\fprq1 @MS Mincho;}{\f965\fmodern\fcharset238\fprq1 @MS Mincho CE;}{\f966\fmodern\fcharset204\fprq1 @MS Mincho Cyr;}
+{\f968\fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f969\fmodern\fcharset162\fprq1 @MS Mincho Tur;}{\f970\fmodern\fcharset186\fprq1 @MS Mincho Baltic;}{\f973\froman\fcharset0\fprq2 MS PMincho;}{\f971\froman\fcharset238\fprq2 MS PMincho CE;}
+{\f972\froman\fcharset204\fprq2 MS PMincho Cyr;}{\f974\froman\fcharset161\fprq2 MS PMincho Greek;}{\f975\froman\fcharset162\fprq2 MS PMincho Tur;}{\f976\froman\fcharset186\fprq2 MS PMincho Baltic;}{\f979\froman\fcharset0\fprq2 @MS PMincho;}
+{\f977\froman\fcharset238\fprq2 @MS PMincho CE;}{\f978\froman\fcharset204\fprq2 @MS PMincho Cyr;}{\f980\froman\fcharset161\fprq2 @MS PMincho Greek;}{\f981\froman\fcharset162\fprq2 @MS PMincho Tur;}{\f982\froman\fcharset186\fprq2 @MS PMincho Baltic;}
+{\f985\fmodern\fcharset0\fprq1 MS Gothic{\*\falt ?? ????};}{\f983\fmodern\fcharset238\fprq1 MS Gothic CE{\*\falt ?? ????};}{\f984\fmodern\fcharset204\fprq1 MS Gothic Cyr{\*\falt ?? ????};}{\f986\fmodern\fcharset161\fprq1 MS Gothic Greek{\*\falt ?? ????};}
+{\f987\fmodern\fcharset162\fprq1 MS Gothic Tur{\*\falt ?? ????};}{\f988\fmodern\fcharset186\fprq1 MS Gothic Baltic{\*\falt ?? ????};}{\f991\fmodern\fcharset0\fprq1 @MS Gothic;}{\f989\fmodern\fcharset238\fprq1 @MS Gothic CE;}
+{\f990\fmodern\fcharset204\fprq1 @MS Gothic Cyr;}{\f992\fmodern\fcharset161\fprq1 @MS Gothic Greek;}{\f993\fmodern\fcharset162\fprq1 @MS Gothic Tur;}{\f994\fmodern\fcharset186\fprq1 @MS Gothic Baltic;}{\f997\fswiss\fcharset0\fprq2 MS PGothic;}
+{\f995\fswiss\fcharset238\fprq2 MS PGothic CE;}{\f996\fswiss\fcharset204\fprq2 MS PGothic Cyr;}{\f998\fswiss\fcharset161\fprq2 MS PGothic Greek;}{\f999\fswiss\fcharset162\fprq2 MS PGothic Tur;}{\f1000\fswiss\fcharset186\fprq2 MS PGothic Baltic;}
+{\f1003\fswiss\fcharset0\fprq2 @MS PGothic;}{\f1001\fswiss\fcharset238\fprq2 @MS PGothic CE;}{\f1002\fswiss\fcharset204\fprq2 @MS PGothic Cyr;}{\f1004\fswiss\fcharset161\fprq2 @MS PGothic Greek;}{\f1005\fswiss\fcharset162\fprq2 @MS PGothic Tur;}
+{\f1006\fswiss\fcharset186\fprq2 @MS PGothic Baltic;}{\f1009\fswiss\fcharset0\fprq2 MS UI Gothic;}{\f1007\fswiss\fcharset238\fprq2 MS UI Gothic CE;}{\f1008\fswiss\fcharset204\fprq2 MS UI Gothic Cyr;}{\f1010\fswiss\fcharset161\fprq2 MS UI Gothic Greek;}
+{\f1011\fswiss\fcharset162\fprq2 MS UI Gothic Tur;}{\f1012\fswiss\fcharset186\fprq2 MS UI Gothic Baltic;}{\f1015\fswiss\fcharset0\fprq2 @MS UI Gothic;}{\f1013\fswiss\fcharset238\fprq2 @MS UI Gothic CE;}{\f1014\fswiss\fcharset204\fprq2 @MS UI Gothic Cyr;}
+{\f1016\fswiss\fcharset161\fprq2 @MS UI Gothic Greek;}{\f1017\fswiss\fcharset162\fprq2 @MS UI Gothic Tur;}{\f1018\fswiss\fcharset186\fprq2 @MS UI Gothic Baltic;}{\f1021\fswiss\fcharset0\fprq2 Gulim{\*\falt ??};}
+{\f1019\fswiss\fcharset238\fprq2 Gulim CE{\*\falt ??};}{\f1020\fswiss\fcharset204\fprq2 Gulim Cyr{\*\falt ??};}{\f1022\fswiss\fcharset161\fprq2 Gulim Greek{\*\falt ??};}{\f1023\fswiss\fcharset162\fprq2 Gulim Tur{\*\falt ??};}
+{\f1024\fswiss\fcharset186\fprq2 Gulim Baltic{\*\falt ??};}{\f1027\fswiss\fcharset0\fprq2 @Gulim;}{\f1025\fswiss\fcharset238\fprq2 @Gulim CE;}{\f1026\fswiss\fcharset204\fprq2 @Gulim Cyr;}{\f1028\fswiss\fcharset161\fprq2 @Gulim Greek;}
+{\f1029\fswiss\fcharset162\fprq2 @Gulim Tur;}{\f1030\fswiss\fcharset186\fprq2 @Gulim Baltic;}{\f1033\fmodern\fcharset0\fprq1 GulimChe;}{\f1031\fmodern\fcharset238\fprq1 GulimChe CE;}{\f1032\fmodern\fcharset204\fprq1 GulimChe Cyr;}
+{\f1034\fmodern\fcharset161\fprq1 GulimChe Greek;}{\f1035\fmodern\fcharset162\fprq1 GulimChe Tur;}{\f1036\fmodern\fcharset186\fprq1 GulimChe Baltic;}{\f1039\fmodern\fcharset0\fprq1 @GulimChe;}{\f1037\fmodern\fcharset238\fprq1 @GulimChe CE;}
+{\f1038\fmodern\fcharset204\fprq1 @GulimChe Cyr;}{\f1040\fmodern\fcharset161\fprq1 @GulimChe Greek;}{\f1041\fmodern\fcharset162\fprq1 @GulimChe Tur;}{\f1042\fmodern\fcharset186\fprq1 @GulimChe Baltic;}{\f1045\fswiss\fcharset0\fprq2 Dotum{\*\falt ??};}
+{\f1043\fswiss\fcharset238\fprq2 Dotum CE{\*\falt ??};}{\f1044\fswiss\fcharset204\fprq2 Dotum Cyr{\*\falt ??};}{\f1046\fswiss\fcharset161\fprq2 Dotum Greek{\*\falt ??};}{\f1047\fswiss\fcharset162\fprq2 Dotum Tur{\*\falt ??};}
+{\f1048\fswiss\fcharset186\fprq2 Dotum Baltic{\*\falt ??};}{\f1051\fswiss\fcharset0\fprq2 @Dotum;}{\f1049\fswiss\fcharset238\fprq2 @Dotum CE;}{\f1050\fswiss\fcharset204\fprq2 @Dotum Cyr;}{\f1052\fswiss\fcharset161\fprq2 @Dotum Greek;}
+{\f1053\fswiss\fcharset162\fprq2 @Dotum Tur;}{\f1054\fswiss\fcharset186\fprq2 @Dotum Baltic;}{\f1057\fmodern\fcharset0\fprq1 DotumChe;}{\f1055\fmodern\fcharset238\fprq1 DotumChe CE;}{\f1056\fmodern\fcharset204\fprq1 DotumChe Cyr;}
+{\f1058\fmodern\fcharset161\fprq1 DotumChe Greek;}{\f1059\fmodern\fcharset162\fprq1 DotumChe Tur;}{\f1060\fmodern\fcharset186\fprq1 DotumChe Baltic;}{\f1063\fmodern\fcharset0\fprq1 @DotumChe;}{\f1061\fmodern\fcharset238\fprq1 @DotumChe CE;}
+{\f1062\fmodern\fcharset204\fprq1 @DotumChe Cyr;}{\f1064\fmodern\fcharset161\fprq1 @DotumChe Greek;}{\f1065\fmodern\fcharset162\fprq1 @DotumChe Tur;}{\f1066\fmodern\fcharset186\fprq1 @DotumChe Baltic;}{\f1069\froman\fcharset0\fprq2 Batang{\*\falt ??};}
+{\f1067\froman\fcharset238\fprq2 Batang CE{\*\falt ??};}{\f1068\froman\fcharset204\fprq2 Batang Cyr{\*\falt ??};}{\f1070\froman\fcharset161\fprq2 Batang Greek{\*\falt ??};}{\f1071\froman\fcharset162\fprq2 Batang Tur{\*\falt ??};}
+{\f1072\froman\fcharset186\fprq2 Batang Baltic{\*\falt ??};}{\f1075\froman\fcharset0\fprq2 @Batang;}{\f1073\froman\fcharset238\fprq2 @Batang CE;}{\f1074\froman\fcharset204\fprq2 @Batang Cyr;}{\f1076\froman\fcharset161\fprq2 @Batang Greek;}
+{\f1077\froman\fcharset162\fprq2 @Batang Tur;}{\f1078\froman\fcharset186\fprq2 @Batang Baltic;}{\f1081\fmodern\fcharset0\fprq1 BatangChe;}{\f1079\fmodern\fcharset238\fprq1 BatangChe CE;}{\f1080\fmodern\fcharset204\fprq1 BatangChe Cyr;}
+{\f1082\fmodern\fcharset161\fprq1 BatangChe Greek;}{\f1083\fmodern\fcharset162\fprq1 BatangChe Tur;}{\f1084\fmodern\fcharset186\fprq1 BatangChe Baltic;}{\f1087\fmodern\fcharset0\fprq1 @BatangChe;}{\f1085\fmodern\fcharset238\fprq1 @BatangChe CE;}
+{\f1086\fmodern\fcharset204\fprq1 @BatangChe Cyr;}{\f1088\fmodern\fcharset161\fprq1 @BatangChe Greek;}{\f1089\fmodern\fcharset162\fprq1 @BatangChe Tur;}{\f1090\fmodern\fcharset186\fprq1 @BatangChe Baltic;}{\f1093\froman\fcharset0\fprq2 Gungsuh;}
+{\f1091\froman\fcharset238\fprq2 Gungsuh CE;}{\f1092\froman\fcharset204\fprq2 Gungsuh Cyr;}{\f1094\froman\fcharset161\fprq2 Gungsuh Greek;}{\f1095\froman\fcharset162\fprq2 Gungsuh Tur;}{\f1096\froman\fcharset186\fprq2 Gungsuh Baltic;}
+{\f1099\froman\fcharset0\fprq2 @Gungsuh;}{\f1097\froman\fcharset238\fprq2 @Gungsuh CE;}{\f1098\froman\fcharset204\fprq2 @Gungsuh Cyr;}{\f1100\froman\fcharset161\fprq2 @Gungsuh Greek;}{\f1101\froman\fcharset162\fprq2 @Gungsuh Tur;}
+{\f1102\froman\fcharset186\fprq2 @Gungsuh Baltic;}{\f1105\fmodern\fcharset0\fprq1 GungsuhChe;}{\f1103\fmodern\fcharset238\fprq1 GungsuhChe CE;}{\f1104\fmodern\fcharset204\fprq1 GungsuhChe Cyr;}{\f1106\fmodern\fcharset161\fprq1 GungsuhChe Greek;}
+{\f1107\fmodern\fcharset162\fprq1 GungsuhChe Tur;}{\f1108\fmodern\fcharset186\fprq1 GungsuhChe Baltic;}{\f1111\fmodern\fcharset0\fprq1 @GungsuhChe;}{\f1109\fmodern\fcharset238\fprq1 @GungsuhChe CE;}{\f1110\fmodern\fcharset204\fprq1 @GungsuhChe Cyr;}
+{\f1112\fmodern\fcharset161\fprq1 @GungsuhChe Greek;}{\f1113\fmodern\fcharset162\fprq1 @GungsuhChe Tur;}{\f1114\fmodern\fcharset186\fprq1 @GungsuhChe Baltic;}{\f1117\fnil\fcharset0\fprq2 @SimSun;}{\f1123\fmodern\fcharset0\fprq1 NSimSun;}
+{\f1129\fmodern\fcharset0\fprq1 @NSimSun;}{\f1147\fmodern\fcharset0\fprq1 MingLiU{\*\falt ???};}{\f1153\fmodern\fcharset0\fprq1 @MingLiU;}{\f1159\froman\fcharset0\fprq2 PMingLiU{\*\falt ????};}{\f1165\froman\fcharset0\fprq2 @PMingLiU;}}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
+\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \snext0 Normal;}{\s1\li120\sb280\sa120\sl-320\slmult0
+\nowidctlpar\adjustright \b\f5\cgrid \sbasedon0 \snext26 heading 1;}{\s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\adjustright \b\f5\fs20\cgrid \sbasedon0 \snext0 heading 2;}{\s3\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid 
+\sbasedon0 \snext0 heading 3;}{\s4\fi-245\li360\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \f11\fs20\cgrid \sbasedon2 \snext4 heading 4;}{\s5\li120\sb80\sl-240\slmult0\keepn\nowidctlpar\outlinelevel4\adjustright \f5\fs20\ul\cgrid 
+\sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive \f5\fs18\up6\lang1033 \sbasedon10 footnote reference;}{\s16\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \sbasedon0 \snext0 footnote text;}{
+\s17\li360\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \sbasedon0 \snext0 Normal Indent;}{\s18\fi-240\li600\sb60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \snext18 Jli;}{\s19\li120\sb60\sl-240\slmult0\keep\nowidctlpar
+\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid \snext19 Ex;}{\s20\li120\sb160\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \snext29 Sa1;}{\s21\fi-240\li360\sl-240\slmult0\nowidctlpar\tx360\adjustright \f5\fs20\cgrid \snext22 Lb1;}{
+\s22\fi-240\li360\sb60\sl-240\slmult0\nowidctlpar\tx360\adjustright \f5\fs20\cgrid \snext22 Lb2;}{\s23\li360\sb60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \snext22 Lp1;}{\s24\fi-1800\li1920\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb
+\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \tx1920\adjustright \b\f5\fs20\cgrid \snext25 Th;}{\s25\fi-1800\li1920\sb60\sl-240\slmult0\nowidctlpar\tx1920\adjustright \f5\fs20\cgrid \snext25 Tp;}{\s26\li120\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid \snext0 Normal 2;}{\s27\li120\sb120\sa120\nowidctlpar\adjustright \f5\fs20\cgrid \snext0 bitmap;}{\s28\li120\sb120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \snext29 Sa2;}{\s29\fi-240\li360\sb60\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid \snext29 Jl;}{\s30\li120\sa60\nowidctlpar\adjustright \f151\fs20\cgrid \snext30 *body;}{\s31\li120\sa60\nowidctlpar\adjustright \b\f151\fs20\cgrid \snext31 *heading;}{\s32\li120\sa60\sl-240\slmult0
+\nowidctlpar\adjustright \f151\fs20\cgrid \sbasedon30 \snext32 para;}{\s33\fi-280\li400\sa60\nowidctlpar\adjustright \f151\fs20\cgrid \sbasedon30 \snext33 jump;}{\s34\fi-280\li400\sa60\nowidctlpar\tx400\adjustright \f151\fs20\cgrid \sbasedon30 \snext34 
+list bullet;}{\s35\fi-280\li600\sa60\nowidctlpar\adjustright \f151\fs20\cgrid \sbasedon30 \snext35 jump indent;}{\s36\li120\sa60\sl-40\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \adjustright \f151\fs20\cgrid 
+\sbasedon30 \snext36 table rule;}{\s37\fi-280\li400\sa60\nowidctlpar\tqr\tx280\tx400\adjustright \f151\fs20\cgrid \sbasedon30 \snext37 list number;}{\s38\li120\sb100\sa60\nowidctlpar\adjustright \b\f151\fs20\cgrid \sbasedon31 \snext33 see also;}{
+\s39\li400\sa60\nowidctlpar\adjustright \f151\fs20\cgrid \sbasedon30 \snext39 para indent;}{\s40\fi-1800\li1920\nowidctlpar\tx1920\adjustright \b\f151\fs20\cgrid \sbasedon31 \snext36 table head;}{\s41\fi-1800\li1920\sa60\nowidctlpar\tx1920\adjustright 
+\f151\fs20\cgrid \sbasedon30 \snext41 table text;}{\s42\li120\sb120\sa60\nowidctlpar\adjustright \f151\fs20\cgrid \sbasedon30 \snext35 see also 2;}{\s43\li120\sa60\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs20\cgrid 
+\sbasedon30 \snext43 code;}{\s44\sl-120\slmult0\nowidctlpar\adjustright \f152\fs20\cgrid \snext32 *spacing;}{\s45\sl-120\slmult0\nowidctlpar\adjustright \f152\fs20\cgrid \sbasedon44 \snext45 s6;}{\s46\qj\li360\nowidctlpar\adjustright \f5\cgrid 
+\sbasedon0 \snext46 Help Text;}{\s47\li115\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \adjustright \f11\fs20\cgrid \sbasedon24 \snext25 Th2;}{\s48\li115\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb
+\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \adjustright \b\f11\fs16\cgrid \sbasedon24 \snext25 Th3;}{\s49\li115\sb200\sl-240\slmult0\nowidctlpar\adjustright \f11\fs20\cgrid \sbasedon0 \snext0 Normal 3;}{
+\s50\fi-1800\li1915\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \tx1915\adjustright \b\f11\fs20\cgrid \sbasedon0 \snext51 Thh;}{\s51\fi-1800\li1915\sb60\sl-240\slmult0\nowidctlpar\tx1915\adjustright 
+\f11\fs20\cgrid \sbasedon0 \snext51 Tph;}{\s52\li288\ri-432\sb80\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\adjustright \f5\cgrid \sbasedon0 \snext52 unixman1;}{\s53\li1440\ri-432\sb80\sa240\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\adjustright 
+\f5\cgrid \sbasedon0 \snext53 unixman2;}{\s54\li115\ri-432\sb80\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\adjustright \f5\cgrid \sbasedon52 \snext54 unixman0;}{\s55\li288\ri-432\sb80\sa240\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\adjustright 
+\f5\cgrid \sbasedon52 \snext55 unixman1a;}{\s56\li115\sa60\sl-240\slmult0\nowidctlpar\adjustright \b\f5\fs20\cgrid \sbasedon2 \snext56 heading 2a;}{\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \sbasedon0 \snext57 endnote text;}{\*
+\cs58 \additive \super \sbasedon10 endnote reference;}{\*\cs59 \additive \ul\cf2 \sbasedon10 Hyperlink;}{\*\cs60 \additive \ul\cf12 \sbasedon10 FollowedHyperlink;}{\s61\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \cbpat9 \f15\fs20\cgrid 
+\sbasedon0 \snext61 Document Map;}{\s62\li480\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \sbasedon0 \snext62 Body Text 2;}{\s63\fi-720\li1440\sb80\sl-240\slmult0\nowidctlpar\adjustright \f2\fs20\cgrid \sbasedon0 \snext63 
+Body Text Indent 2;}{\s64\li120\sb80\sl-240\slmult0\nowidctlpar\tqc\tx4320\tqr\tx8640\adjustright \f5\fs20\cgrid \sbasedon0 \snext64 header;}{\s65\li120\sb80\sl-240\slmult0\nowidctlpar\tqc\tx4320\tqr\tx8640\adjustright \f5\fs20\cgrid \sbasedon0 \snext65 
+footer;}{\s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid \sbasedon0 \snext66 Body Text Indent 3;}}{\*\listtable{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0
+\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid74976790}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid349260549}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers
+;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid470094698}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360
+\jclisttab\tx360 }{\listname ;}\listid640160996}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }
+{\listname ;}\listid768165129}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid781152802}
+{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid903878531}{\list\listtemplateid67698689
+\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1002394966}{\list\listtemplateid67698703\listsimple
+{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1021513731}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0
+\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1099714113}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0
+\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1240552867}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0
+\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1332292840}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1358388700}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1405952460}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2025940873}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2044863907}}{\*\listoverridetable{\listoverride\listid2025940873\listoverridecount0\ls1}{\listoverride\listid1002394966\listoverridecount0\ls2}
+{\listoverride\listid470094698\listoverridecount0\ls3}{\listoverride\listid1099714113\listoverridecount0\ls4}{\listoverride\listid1358388700\listoverridecount0\ls5}{\listoverride\listid2044863907\listoverridecount0\ls6}{\listoverride\listid640160996
+\listoverridecount0\ls7}{\listoverride\listid768165129\listoverridecount0\ls8}{\listoverride\listid903878531\listoverridecount0\ls9}{\listoverride\listid781152802\listoverridecount0\ls10}{\listoverride\listid1240552867\listoverridecount0\ls11}
+{\listoverride\listid640160996\listoverridecount0\ls12}{\listoverride\listid349260549\listoverridecount0\ls13}{\listoverride\listid1021513731\listoverridecount0\ls14}{\listoverride\listid1405952460\listoverridecount0\ls15}{\listoverride\listid1332292840
+\listoverridecount0\ls16}}{\*\revtbl {Unknown;}{Tim Mann;}}{\info{\title + $ # KWinBoard: Chessboard for Windows}{\author TRIO}{\operator hgm}{\creatim\yr2003\mo10\dy25\hr23\min40}{\revtim\yr2009\mo6\dy13\hr11\min42}{\printim\yr1997\mo4\dy22\hr23\min5}{\version39}{\edmins865}
+{\nofpages77}{\nofwords17662}{\nofchars-32766}{\*\company DEC SRC}{\nofcharsws0}{\vern73}}\margl1417\margr1417\margt1417\margb1417 
+\widowctrl\endnotes\aendnotes\hyphhotz425\ftnnrlc\aftnnar\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\viewkind4\viewscale100 \fet1{\*\aftnsep \pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\chftnsep 
+
+\par }}\sectd \linex0\headery709\footery709\colsx709\sectdefaultcl {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
 \pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
-{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0
-\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Contents}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Contents}}K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Contents}}}{\i\f1\fs32 WinBoard}{\f1\fs32 : Chessboard for Windows
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Description}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Description}}}{\f1  Description
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\f1 WinBoard}{\f1 
- is a graphical user interface for chess. It displays a chessboard on the screen, accepts moves made with the mouse, and loads and saves game files in standard chess notation. WinBoard serves as a front-end for many different services, including:
-\par {\pntext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \ql \fi-360\li480\ri0\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls3\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang{\pntxtb \'b7}}
-\faauto\ls3\adjustright\rin0\lin480\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\i\f1 Chess engines}{\f1 
- that run on your PC. You can play a game against an engine, set up arbitrary positions, force variations, or watch a game between two engines. }{\i\f1 GNU Chess}{\f1 
- is supplied with WinBoard, and over 100 other free chess engines are available separately. Of these, Crafty is the most popular. See }{\f1\uldb Installing Chess Engines}{\v\f1 InstallingChessEngines}{\f1 
- for instructions on installing additional chess engines.
-\par {\pntext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li480\ri0\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls3\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang{\pntxtb \'b7}}
-\faauto\ls3\adjustright\rin0\lin480\itap0 {\b\i\f1 Chess servers}{\b\f1  }{\f1 on the Internet. You can play against other Internet Chess Server (ICS) users, observe games they
- are playing, review games in the ICS libraries, chat, and more. WinBoard can also be used to run an automated computer player on the ICS, but this feature is for advanced users only and is subject to some caveats; see the separate file zippy.README for i
-nformation.
-\par {\pntext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li480\ri0\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls3\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang{\pntxtb \'b7}}
-\faauto\ls3\adjustright\rin0\lin480\itap0 {\b\i\f1 The Web}{\f1 
- and your own saved games. You can use WinBoard as a helper application to view files in your Web browser or the Explorer. You can use it to keep track of email postal games, browse games off the net, or review games you have saved.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ Getting Started}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ GettingStarted}}}{\f1 Getting Started
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-WinBoard starts up in one of three major modes: chess engine mode, ICS client mode, or game viewer mode. You cannot change modes while WinBoard is running, but you can access all the game viewer features d
-irectly from the other two modes. Also, you can start WinBoard several times to get multiple chessboard windows running in any combination of modes.
-\par }\pard\plain \s20\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {
-You will usually run WinBoard by choosing an item from the Windows Start menu that runs it in the mode you 
-want. If you just double-click on WinBoard.exe, you get a startup dialog asking which mode you want. If you choose chess engine mode, you can then select from the installed engines; if you choose ICS client mode, you can then select from a list of known c
-hess servers. More advanced users can }{\uldb customize}{\v icsNames}{ these lists or type in WinBoard }{\uldb command line options}{\v Options}{ directly.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 After starting WinBoard, you can make }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  move}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  move}}}{\f1 moves in several different ways. To move by dragging, press the left mouse bu
-tton while the cursor is on one of your pieces, move the cursor to another square, and release the button. You can also move by clicking the left mouse button once (press and release) over one of your pieces, moving the cursor to another square, and click
-i
-ng again. You drop new pieces on the board (when applicable) by selecting from a context menu. Press the right mouse button over a square to bring up the menu; no menu will come up in modes where dropping a new piece is not permitted. You can also make mo
-ves by typing them in standard algebraic chess notation. Either a dialog box will pop up for you to type into, or in ICS mode, your typing will be redirected into the ICS interaction window.
-\par When WinBoard}{\i\f1  }{\f1 is iconized, its }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {
-\cs58\f1\super K}{\f1  icon}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  icon}}}{\f1 
-icon is a white knight if it is White's turn to move, a black knight if it is Black's turn.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Additional Information
-\par }\pard\plain \s29\ql \fi-240\li360\ri0\sb60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin360\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\uldb Menus}{\v\f1\uldb Menus}{\f1\uldb 
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {
+\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super $}{\f1  Contents}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Contents}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super K}{\f1  Contents}}}{\i\f1\fs32 WinBoard}{\f1\fs32 : Chessboard for Windows
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\par }\pard\plain \s2\li119\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\f1\cf11 An updated description with the release of version 4.4.0.
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\f1\cf11 \tab \tab \tab \ldblquote For the ultimate WinBoard Experience\rdblquote 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 New features since WinBoard 4.2.7 that are implemented in Allessandro Scotti\rquote s Winboard_x are highlighted in red. }{\f1\cf11 New 
+features in the WinBoard 4.3.xx series by H.G. Muller are highlighted in green}{\f1\cf2 , that in the unified 4.4 series in blue}{\f1\cf11 .}{\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Description}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Description}}}{\f1  Description
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\i\f1 WinBoard}{\f1  is a graphical user interface for chess. It displays a chessboard on the screen, accepts moves made with the mou
+se, and loads and saves game files in standard chess notation. WinBoard serves as a front-end for many different services, including:
+\par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls3\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls3\adjustright 
+\f5\fs20\cgrid {\b\i\f1 Chess engines}{\f1  that run on your PC. You can play a game against an engine, set up arbitrary positions, force variations, or watch a game between two engines. }{\i\f1\cf11 Fairy-Max}{\f1  is supplied with WinBoard }{\f1\cf11 
+4.3.14}{\f1 , and over 100 other free chess engines are available separately. Of these, Crafty is the most popular. See }{\f1\uldb Installing Chess Engines}{\v\f1 InstallingChessEngines}{\f1  for instructions on installing additional chess engines.
+\par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls3\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls3\adjustright {\b\i\f1 
+Chess servers}{\b\f1  }{\f1 on the Internet. You can play against other Internet Chess Server (ICS) users, observe games they are playing, review games in the ICS libraries, chat, }{\f1\cf2 analyze observed games with a chess program}{\f1 , and more. Wi
+nBoard can also be used to run an automated computer player on the ICS, but this feature is for advanced users only and is subject to some caveats; see the separate file zippy.README for information.
+\par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls3\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls3\adjustright {\b\i\f1 
+The Web}{\f1  and your own saved games. You can use WinBoard as a helper application to view files in your Web browser or the Explorer. You can use it to keep track of email postal games, browse games off the net, or review games you have saved.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Getting Started}}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ GettingStarted}}}{\f1 Getting Started
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard starts up in one of three major modes: chess 
+engine mode, ICS client mode, or game viewer mode. You cannot change modes while WinBoard is running, but you can access all the game viewer features directly from the other two modes. Also, you can start WinBoard several times to get multiple chessboard 
+windows running in any combination of modes.
+\par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+You will usually run WinBoard by choosing an item from the Windows Start menu that runs it in the mode you want. If you just double-click on WinBoard.exe, you get a startup dialog asking which mode you want. If y
+ou choose chess engine mode, you can then select from the installed engines; if you choose ICS client mode, you can then select from a list of known chess servers. More advanced users can }{\uldb customize}{\v icsNames}{ these lists or type in WinBoard }{
+\uldb command line options}{\v Options}{ directly.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 After starting WinBoard, you can make }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super K}{\f1  move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  move}}}{\f1 
+moves in several different ways. To move by dragging, press the left mouse button while the cursor is on one of your pieces, move the cursor to another square, and release the button. You can also
+ move by clicking the left mouse button once (press and release) over one of your pieces, moving the cursor to another square, and clicking again. You drop new pieces on the board (when applicable) by selecting from a context menu. Press the right mouse b
+u
+tton over a square to bring up the menu; no menu will come up in modes where dropping a new piece is not permitted. You can also make moves by typing them in standard algebraic chess notation. Either a dialog box will pop up for you to type into, or in IC
+S mode, your typing will be redirected into the ICS interaction window.
+\par When WinBoard}{\i\f1  }{\f1 is iconized, its }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  icon}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  icon}}}{\f1 icon is a white knight if it is White's turn to move, a black knight if it is Black's turn.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\f1 Additional Information
+\par }\pard\plain \s29\fi-240\li360\sb60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\uldb Menus}{\v\f1\uldb Menus}{\f1\uldb 
 \par Shortcut Buttons}{\v\f1\uldb Buttons}{\f1\uldb 
 \par Command Line Options}{\v\f1 Options}{\f1 
 \par }{\f1\uldb Initialization Files}{\v\f1\uldb Files}{\f1\uldb 
@@ -171,1748 +274,1899 @@ icon is a white knight if it is White's turn to move, a black knight if it is Bl
 \par Authors}{\v\f1 Authors}{\f1 
 \par }{\f1\uldb Copyright}{\v\f1 Copyright}{\f1 
 \par }{\f1\uldb Frequently Asked Questions}{\v\f1 !ExecFile(FAQ.html)}{\f1 
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Menus}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Menus}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Menus}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20 MENUS
-\par }\pard\plain \s29\ql \fi-240\li360\ri0\sb60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin360\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\uldb File Menu}{\v\f1 FileMenu}{\f1 
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Menus}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Menus}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super $}{\f1  Menus}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs20 MENUS
+\par }\pard\plain \s29\fi-240\li360\sb60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\uldb File Menu}{\v\f1 FileMenu}{\f1 
 \par }{\f1\uldb Mode Menu}{\v\f1 ModeMenu}{\f1 
 \par }{\f1\uldb Action Menu}{\v\f1 ActionMenu}{\f1 
 \par }{\f1\uldb Step Menu}{\v\f1 StepMenu}{\f1 
 \par }{\f1\uldb Options Menu}{\v\f1 OptionsMenu}{\f1 
 \par }{\f1\uldb Help Menu}{\v\f1 HelpMenu}{\f1 
 \par }{\f1\uldb ICS Interaction Context Menu}{\v\f1 ICSInteractionContextMenu}{\f1 
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1 File Menu}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1 FileMenu}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1 File Menu}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs18\up6  }{\f1\fs20 File Menu
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Reset}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Reset}}}{\f1  Reset
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Resets WinBoard and the chess engine (if any) to the beginning o
-f a new chess game. In Internet Chess Server mode, clears the current state of WinBoard, then resynchronizes with ICS by sending a }{\b\f1 refresh }{\f1 
-command. If you want to stop playing, observing, or examining a game on ICS, use an appropriate command from the }{\f1\uldb Action}{\v\f1 ActionMenu}{\f1  menu, not Reset.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Load Game}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  LoadGame}}}{\f1  Load Game
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Plays a game from a record file. A popup dialog prompts you for the filename. If the file contains more than one game, a second popup dialog displays a list of games (with information drawn 
-from their PGN tags, if any), and you can select the one you want.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-The game file parser will accept PGN (portable game notation), or in fact almost any file that contains moves in algebraic notation. Notation of the form }{\i\f1 P at f7}{\f1  is accepted for piece-drops in
- bughouse games; this is a nonstandard extension to PGN. If the file includes a PGN position (FEN tag), or a WinBoard position diagram bracketed by "[--" and "--]" before the first move, the game starts from that position. Text enclosed in parentheses, sq
-u
-are brackets, or curly braces is assumed to be commentary and is displayed in a pop-up window. Any other text in the file is ignored. PGN variations (enclosed in parentheses) are treated as comments; WinBoard is not able to walk variation trees. The nonst
-andard PGN tag }{\f2 [Variant "varname"]}{\f1  functions similarly to the }{\f1\uldb variant}{\v\f1 variant }{\f1 command-line option, allowing games in certain chess variants to be loaded. There is also a heuristic to recognize chess variants from the }{
-\f2 Event}{\f1  tag, by looking for the strings that the Internet Chess Servers put there when saving variant ("wild") games.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Load Next Game}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  LoadNextGame}}}{\f1  Load Next Game
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Loads the next game from the last game record file you loaded.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Load Previous Game}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  LoadPreviousGame}}}{\f1  Load Previous Game
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Loads the previous game from the last game record file you loaded. Not available if the last game was loaded from a pipe.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Reload Same Game}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ReloadSameGame}}}{\f1  Reload Same Game
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Reloads the last game you loaded. Not available if the last game was loaded from a pipe.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Save Game}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  SaveGame}}}{\f1  Save Game
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Appends a record of the current game to a file. A popup dialog prompts you for the filename. If the game did not begin with the standard starting position, the game file includes 
-the starting position used. Game files are saved in the PGN (portable game notation) format, unless the }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1  option is True, in which case they are saved in an older format that is specific to WinBoard}{\i\f1 .
-}{\f1  Both formats are human-readable, and both can be read back by the Load Game command. Notation of the form }{\i\f1 P at f7}{\f1  is generated for piece-drops in bughouse games; this is a nonstandard extension to PGN.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Copy Game To Clipboard}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  CopyGameToClipboard}}}{\f1  Copy Game To Clipboard
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Copies the record
- of the current game to the Windows clipboard in PGN (portable game notation) format.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Paste Game From Clipboard}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  PasteGameFromClipboard}}}{\f1  Paste Game From Clipboard
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Plays a game from the Windows clipboard.}{\f1  See }{\f1\uldb Load Game}{\v\f1 LoadGame}{\f1 
- for a discussion of game file format and parser behavior.}{
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Load Position}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  LoadPosition}}}{\f1  Load Position
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Sets up a position from a position file. A popup dialog prompts you for the filename. Position files must be in FEN (Forsythe-Edwards notation), or in the format that the }{\f1\uldb Save Position}{\f1  command writes when }{\f1\uldb oldSaveStyle}{\v\f1 
-oldSaveStyle}{\f1  is turned on.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Load Next Position}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  LoadNextPosition}}}{\f1  Load Next Position
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Loads the next position from the last position file you loaded.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Load Previous Position}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  LoadPreviousPosition}}}{\f1  Load Previous Position
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Loads the previous position from the last position file you loaded. Not available if the last position was loaded from a pipe.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Reload Same Position}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ReloadSamePosition}}}{\f1  Reload Same Position
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Reloads the las
-t position you loaded. Not available if the last position was loaded from a pipe.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Save Position}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  SavePosition}}}{\f1  Save Position
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Appends a diagram of the current position to a file. A popup dialog prompts you for the filename. Positions are saved in FEN (Forsythe-Edwards notation) format, unless the }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1 
- option is True, in which case they are saved in an older, human-readable format that is specific to WinBoard}{\i\f1 .}{\f1  Both formats can be read back by the Load Position command; however, curren
-tly Load Position can load only the first position in a file.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Copy Position Clipboard}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  CopyPositionToClipboard}}}{\f1  Copy Position To Clipboard
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Places a diagram of the current position (in Forsythe-Edwards notation) into the Windows clipboard.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Paste Position Clipboard}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  PastePositionFromClipboard}}}{\f1  Paste Position From Clipboard
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Sets up a position from the Windows clipboard. Position must be in FEN (Forsythe-Edwards notation). Puts WinBoard into }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1  mode if it was not there already.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Exit}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Exit}}}{\f1  Exit
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Exits from WinBoard.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\b\f1\super K}{\f1  Mode Menu}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ModeMenu}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Mode Menu}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Mode Menu
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Machine White}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  MachineWhite}}}{\f1  Machine White
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Forces the chess engine to play white.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Machine Black}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  MachineBlack}}}{\f1  Machine Black
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Forces the chess engine to play black.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Two Machines}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  TwoMachines}}}{\f1  Two Machines
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Starts a game between two chess engines.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Analysis Mode}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  AnalysisMode}}}{\f1  Analysis Mode
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 In this mode, you can make moves for both sides on the board. After each move, the 
-chess engine will think about possible replies and display its analysis in a separate window. This feature currently works only if Crafty is the chess engine.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Analyze File}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  AnalyzeFile}}}{\f1  Analyze File
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 In this mode, you can load a game from a f
-ile, and the chess engine will analyze each move as in Analysis Mode. This feature currently works only if Crafty is the chess engine.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  ICS Client}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ICSClient}}}{\f1  ICS Client
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 This is the normal mode when WinBoard is connected to a chess server. If you have 
-moved into Edit Game or Edit Position mode, you can select this option to get out.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-When you run WinBoard in ICS mode, it starts up a console window in which you can type commands and receive text responses from the chess server. You can use the standard Wi
-ndows editing keys to edit your command line before pressing Enter. The console window keeps a history of the last few commands you typed. Press the up-arrow key to go back to a previous command; press the down-arrow key to go forward again to a later com
-mand. Press the right mouse button in the output area for a }{\f1\uldb context menu}{\v\f1 ICSInteractionContextMenu}{\f1  of editing commands and ICS command shortcuts.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1 File Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 FileMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super $}{\f1 File Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs18\up6  }{\f1\fs20 File Menu
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 New Game}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 NewGame}}}{\f1\cf6  New Game (former }{\f1 Reset}{\f1\cf6 )
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Resets WinBoard and the chess engine (if any) to the beginning of
+ a new chess game. In Internet Chess Server mode, clears the current state of WinBoard, then resynchronizes with ICS by sending a }{\b\f1 refresh }{\f1 
+command. If you want to stop playing, observing, or examining a game on ICS, use an appropriate command from the }{\f1\uldb Action}{\v\f1 ActionMenu}{\f1  menu, not }{\f1\cf6 New Game}{\f1 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 New Shuffle Game}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 NewShuffleGame}}}{\f1\cf11  New Shuffle Game
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 
+Brings you to a dialog box where you can enter the number of an opening setup for shuffle variants like FRC, or ask for a random number. After pressing OK, a new game is set up, using this position. The c
+hosen position will continue to be used on every subsequent \ldblquote New Game\rdblquote , }{\f1\cf11 even if you are playing a variant that normally is not shuffled, until you select a new variant through the \ldblquote New Variant\'85\rdblquote  menu.}
+{\f1\cf6  If you enter \ldblquote -1\rdblquote  for the position number,  new random number is drawn before every game.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf11 
+The type of shuffling that is done in reaction to a given position number obeys restrictions that depend on the selected variant. In variants that allow castling, Kings remain on the central files, Rooks in the corners. I
+n games with FRC-style castlings, the King starts between the Rooks, but apart from that they could be anywhere. In games without castling, there are no restrictions on King and Rook placement. Pairs of color-bound pieces (such as Bishops) will be placed 
+on oppositely colored squares. In ICS mode this feature has no effect, as the ICS determines the starting position.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 New Variant}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 NewVariant}}}{\f1\cf11  New Variant
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Select a new variant. There are controls to enter a board width, board height and holdings size, but normally you leave them at \lquote -1\rquote 
+, which means the default value for the selected variant will be used (e.g. 8x8 for normal Chess, 9x10 for xiangqi, 10x8 for capablanca, holdings for 5 pieces in crazyhouse). You can set a deviating value for each of the three parameters (e.g. to pla
+y a crazyhouse version of xiangqi or capablanca you would set the holdings to 6 or 7). If the board width deviates from the default, the game will start with an empty board. 
+\par The variant will remain in force until you select a new one; i.e. subsequent \ldblquote New Game\rdblquote  commands will start a new game of the same variant. In ICS mode this command has no effect, as the ICS determines which variant will be played.
+
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Load Game}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  LoadGame}}}{\f1  Load Game
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Plays a game from a record file. A popup dialog prompts you for the filename. If the file co
+ntains more than one game, a second popup dialog displays a list of games (with information drawn from their PGN tags, if any), and you can select the one you want.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The game file parser will accept PGN (portable game notation), or in fact almost any file that contains moves in algebraic notation. Notation of the form }{\i\f1 P at f7}{
+\f1  is accepted for piece-drops in bughouse games; this is a nonstandard extension to PGN. If the file includes a PGN position (FEN tag), or a WinBoard position diagram bracketed by "[--" and 
+"--]" before the first move, the game starts from that position. Text enclosed in parentheses, square brackets, or curly braces is assumed to be commentary and is displayed in a pop-up window. Any other text in the file is ignored. PGN variations (enclose
+d in parentheses) are treated as comments; WinBoard is not able to walk variation trees. The nonstandard PGN tag }{\f2 [Variant "varname"]}{\f1  functions similarly to the }{\f1\uldb variant}{\v\f1 variant }{\f1 
+command-line option, allowing games in certain chess variants to be loaded. There is also a heuristic to recognize chess variants from the }{\f2 Event}{\f1 
+ tag, by looking for the strings that the Internet Chess Servers put there when saving variant ("wild") games.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Load Next 
+Game}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  LoadNextGame}}}{\f1  Load Next Game
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Loads the next game from the last game record file you loaded.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Load Previous Game}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  LoadPreviousGame}}}{\f1  Load Previous Game
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Loads the previous game from the last game record file you loaded. Not available if the last game was loaded from a pipe.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Reload Same Game}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ReloadSameGame}}}{\f1  Reload Same Game
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Reloads the last game you loaded. Not available if the last game was loaded from a pipe.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Save Game}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  SaveGame}}}{\f1  Save Game
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+Appends a record of the current game to a file. A popup dialog prompts you for the filename. If the game did not begin with the standard starting position, the game file includes the starting position used. Game files are saved in the PGN (portable
+ game notation) format, unless the }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1  option is True, in which case they are saved in an older format that is specific to WinBoard}{\i\f1 .}{\f1 
+ Both formats are human-readable, and both can be read back by the Load Game command. Notation of the form }{\i\f1 P at f7}{\f1  is generated for piece-drops in bughouse games; this is a nonstandard extension to PGN.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Copy Game To Clipboard}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  CopyGameToClipboard}}}{\f1  Copy Game To Clipboard
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {Copies the record of the current game to the Windows clipboard in PGN (portable game notation) format.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Paste Game From Clipboard}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  PasteGameFromClipboard}}}{\f1  Paste Game From Clipboard
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {Plays a game from the Windows clipboard.}{\f1  See }{\f1\uldb Load Game}{\v\f1 LoadGame}{\f1  for a discussion of game file format and parser behavior.}{
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Load Position}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  LoadPosition}}}{\f1  Load Position
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets up a position from a position file. A popup dialog prompts you for the filename. Position files must be in FEN (Forsythe-Edwards notation), or in the format that the }
+{\f1\uldb Save Position}{\f1  command writes when }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1  is turned on. }{\f1\cf11 
+Note that many variants require an extension of the original FEN standard. WinBoard tries to be as universal as possible in underst
+anding FENs when different standards are raound, but has to make a choice when writing them. In FRC is uses Shredder-FEN (Haha castling notation) , but it understands KQkq as the outermost Rook, so it also reads X-FEN. In Crazyhouse / Bughouse it appends 
+t
+he holdings immediately behind the board info between brackets [], but on input it also understands bFEN (which puts it behind a slash / as if it were an extra board rank). It uses a tilde ~ behind a piece to indicate it is really a promoted Pawn (like bF
+EN). In Shogi the holdings are printed like in Crazyhouse, but promoted pieces are represented by a plus sign + before the letter of the original piece. Letters used for the pieces can be set with the /pieceToCharTable command-line option.}{\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Load
+ Next Position}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  LoadNextPosition}}}{\f1  Load Next Position
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Loads the next position from the last position file you loaded.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Load Previous Position}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  LoadPreviousPosition}}}{\f1  Load Previous Position
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Loads the previous position from the last position file you loaded. Not available if the last position was loaded from a pipe.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Reload Same Position}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ReloadSamePosition}}}{\f1  Reload Same Position
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Reloads the last position you loaded. Not available if the last position was loaded from a pipe.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Save Position}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  SavePosition}}}{\f1  Save Position
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Appends a diagram of the current position to a file. A popup dialog prompts you for the filename. Positions are saved in FEN (Forsythe-Edwards notation) format, unless the 
+}{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1  option is True, in which case they are saved in an older, human-readable format that is specific to WinBoard}{\i\f1 .}{\f1 
+ Both formats can be read back by the Load Position command; however, currently Load Position can load only the first position in a file.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 Save Diagram}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 Save Diagram}}}{\f1\cf11  Save Diagram
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Writes the current board display as a bitmap file. With this command you can use WinBoard as a diagram generator.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Copy Position Clipboard}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  CopyPositionToClipboard}}}{\f1  Copy Position To Clipboard
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Places a diagram of the current position (in Forsythe-Edwards notation) into the Windows clipboard.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Paste Position Clipboard}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  PastePositionFromClipboard}}}{\f1  Paste Position From Clipboard
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets up a position from the Windows clipboard. Position must be in FEN (Forsythe-Edwards notation). Puts WinBoard into }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1 
+ mode if it was not there already.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Exit}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Exit}}}{\f1  Exit
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Exits from WinBoard.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{
+\f1  Mode Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ModeMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super $}{\f1  Mode Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Mode Menu
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Machine White}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  MachineWhite}}}{\f1  Machine White
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Forces the chess engine to play white.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Machine Black}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  MachineBlack}}}{\f1  Machine Black
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Forces the chess engine to play black.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Two Machines}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  TwoMachines}}}{\f1  Two Machines
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Starts a game between two chess engines.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 Machine Both}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 Machine Both}}}{\f1\cf11  Machine Both
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 A single chess engine plays itself. Ma
+inly useful for pseudo-engines, that are in fact communication links to another machine, where you want to observe a game that is being played. (E.g. the gothic-chess.com server). This command is not implemented yet (version 4.3.14).
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Analysis Mode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  AnalysisMode}}}{\f1  Analysis Mode
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In th
+is mode, you can make moves for both sides on the board. After each move, the chess engine will think about possible replies and display its analysis in a separate window. Crafty was the first engine to support this feature, but by now there are many othe
+rs that support it as well.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf2 From WinBoard 4.4 on this function can also be invoked in \lquote zippy mode\rquote 
+, i.e. when you are logged on to an ICS with an engine loaded. In that case it is not your own moves that the engine analyzes, but the moves that are played in
+ a game on the ICS that you are observing. You must start observing before you start the analysis mode! See the file zippy.README for how to connect to an ICS and a chess engine running on your local computer at the same time. (Basically this amounts to a
+dding the /zp command-line option in addition to all options you would need for connecting to the ICS, as well as those needed for running the chess engine.)
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Analyze
+ File}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  AnalyzeFile}}}{\f1  Analyze File
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In this mode, you can load a game from a file, and the chess engine will analyze ea
+ch move as in Analysis Mode. Crafty was the first engine to support this feature, but by now there are many others that support it as well.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  ICS Client
+}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ICSClient}}}{\f1  ICS Client
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This is the normal mode when WinBoard is connected to a chess server. If you have moved into Edit Game or Edit Position mode, you can select this option to get out.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+When you run WinBoard in ICS mode, it starts up a console window in which you can type commands and receive text responses from the chess server. You can use the standard Windows editing keys t
+o edit your command line before pressing Enter. The console window keeps a history of the last few commands you typed. Press the up-arrow key to go back to a previous command; press the down-arrow key to go forward again to a later command. Press the righ
+t mouse button in the output area for a }{\f1\uldb context menu}{\v\f1 ICSInteractionContextMenu}{\f1  of editing commands and ICS command shortcuts.
 \par Some useful ICS commands include }{\b\f1 who}{\f1  to see who is logged on, }{\b\f1 games}{\f1  to see what games are being played, }{\b\f1 match}{\f1  to challenge another player to a game, }{\b\f1 observe}{\f1  to observe an ongoing game, }{\b\f1 
 examine}{\f1  or }{\b\f1 smoves}{\f1  to review a recently completed game, and of course }{\b\f1 help}{\f1 . 
 \par Whenever you ask to observe an ongoing game, review a completed game, or resume an adjourned game, WinBoard retrieves and parses the list of past moves from the ICS, so you can review them with }{\f1\uldb Forward}{\v\f1 Forward}{\f1  and }{\f1\uldb 
 Backward}{\v\f1 Backward}{\f1  or save them with }{\f1\uldb Save Game}{\v\f1 SaveGame}{\f1 .
 \par Some special ICS Client features are activated when you are in }{\b\f1 examine}{\f1  or }{\b\f1 bsetup }{\f1 mode on ICS. See the descriptions of the menu commands }{\f1\uldb Forward}{\v\f1 Forward}{\f1 , }{\f1\uldb Backward}{\v\f1 Backward}{\f1 , }{
-\f1\uldb Pause}{\v\f1 Pause}{\f1 , and }{\f1\uldb Stop Examining}{\v\f1 StopExamining}{\f1  below. You can also issue the ICS position-editing commands with the mouse. Move pieces by dragging with the left mouse button, or by left
--clicking once on the starting square and once on the ending square. Press the right mouse button over a square for a context menu that lets you drop a new piece, empty the square, or clear the board. Click on the White or Black clock to set the side to p
-l
-ay. You cannot set the side to play or drag pieces to arbitrary squares while examining on ICC, but you can do so in bsetup mode on FICS. You can also make moves by typing them into the ICS window; you may have to do this occasionally if you are playing a
- chess variant whose rules WinBoard does not understand, such as Fischer Random.
-\par If you are playing a bughouse game on the ICS, a list of the offboard pieces that each player holds is shown in the window title bar. To drop an offboard piece, press the right
- mouse button over an empty square to bring up a context menu. To observe your partner's games, start a second copy of WinBoard, log in as a guest, and use the ICS }{\b\f1 follow}{\f1  or }{\b\f1 pfollow}{\f1  command in the new window.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Edit Game}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  EditGame}}}{\f1  Edit Game
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Allows you to make moves for both Black and White, and to change moves after backing up with the }{\f1\uldb Backward}{\v\f1 Backward}{\f1  command. The clocks do not run.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-In chess engine mode, the chess engine continues to check moves for legality but does not participate in the game. You can bring the chess engine back into the game by selecting }{\f1\uldb Machine White}{\v\f1 MachineWhite}{\f1 , }{\f1\uldb Machine Black}
-{\v\f1 MachineBlack}{\f1 , or }{\f1\uldb Two Machines}{\v\f1 TwoMachines}{\f1 .
+\f1\uldb Pause}{\v\f1 Pause}{\f1 , and }{\f1\uldb Stop Examining}{\v\f1 StopExamining}{\f1  below. You can also issue the ICS position-editing commands with the mouse. Move pieces by dragging with the left mouse button, or by left-clicking once on th
+e starting square and once on the ending square. Press the right mouse button over a square for a context menu that lets you drop a new piece, empty the square, or clear the board. Click on the White or Black clock to set the side to play. You cannot set 
+t
+he side to play or drag pieces to arbitrary squares while examining on ICC, but you can do so in bsetup mode on FICS. You can also make moves by typing them into the ICS window; you may have to do this occasionally if you are playing a chess variant whose
+ rules WinBoard does not understand, such as Fischer Random.
+\par If you are playing a bughouse game on the ICS, a list of the offboard pieces that each player holds is shown in the window title bar. To drop an offboard piece, press the right mouse button over a
+n empty square to bring up a context menu. To observe your partner's games, start a second copy of WinBoard, log in as a guest, and use the ICS }{\b\f1 follow}{\f1  or }{\b\f1 pfollow}{\f1  command in the new window.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Edit Game}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  EditGame}}}{\f1  Edit Game
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Allows you to make moves for both Black and White, and to change moves after backing up with the }{\f1\uldb Backward}{\v\f1 Backward}{\f1 
+ command. The clocks do not run, but you can adjust their reading by clicking on them. A left-click subtracts one minute, a right-click adds one minute.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In chess engine mode, the chess engine conti
+nues to check moves for legality but does not participate in the game. You can bring the chess engine back into the game by selecting }{\f1\uldb Machine White}{\v\f1 MachineWhite}{\f1 , }{\f1\uldb Machine Black}{\v\f1 MachineBlack}{\f1 , or }{\f1\uldb 
+Two Machines}{\v\f1 TwoMachines}{\f1 .
 \par In ICS mode, the moves are not sent to the ICS: Edit Game takes WinBoard out of ICS Client mode and lets you edit games locally. If you want to edit a game on ICS in a way that other ICS users can see, use the ICS }{\b\f1 examine}{\f1 
  command or start an ICS match against yourself.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Edit Position}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  EditPosition}}}{\f1  Edit Position
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Lets you set up an arbitrary board position.
- Use the left mouse button 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 the right mouse button over the square. This brings up a menu of p
-ieces. Additional menu choices let you empty the square or clear the board. You can set the side to play next by clicking on the White or Black indicator at the top of the screen.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Selecting Edit Position causes WinBoard}{\i\f1  }{\f1 to discard all remembered moves in th
-e current game.
-\par In ICS mode, change made to the position by Edit Position are not sent to the ICS: Edit Position takes WinBoard out of ICS Client mode and lets you edit positions locally. If you want to edit positions on ICS in a way that other ICS users c
-an see, use the ICS }{\b\f1 examine}{\f1  command, or start an ICS match against yourself. (See also }{\f1\uldb ICS Client}{\v\f1 ICSClient}{\f1  above.)
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Training}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Training}}}{\f1  Training
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Edit Position}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  EditPosition}}}{\f1  Edit Position
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you 
+set up an arbitrary board position. Use the left mouse button 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 the right mouse button over the
+ square. This brings up a menu of pieces. Additional menu choices let you empty the square or clear the board. You can set the side to play next by clicking on the White or Black indicator at the top of the screen. }{\f1\cf11 
+The pop-up menu also contains options to \lquote promote\rquote  or \lquote demote\rquote 
+ the piece currently in the square. (In variants like Crazyhouse a piece has a different representation when it is a promoted Pawn rater than an original piece.) This allows you to create some of the not-so-common pieces (e.g. a Unicorn
+ is a promoted King, a Commoner is a demoted King).}{\f1 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Selecting Edit Position causes WinBoard}{\i\f1  }{\f1 to discard all remembered moves in the current game.
+\par In ICS mode, change made to the position by Edit Position are not sent to the ICS: Edit Position takes WinBoard
+ out of ICS Client mode and lets you edit positions locally. If you want to edit positions on ICS in a way that other ICS users can see, use the ICS }{\b\f1 examine}{\f1  command, or start an ICS match against yourself. (See also }{\f1\uldb ICS Client}{
+\v\f1 ICSClient}{\f1  above.)
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Show Engine Output}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 Show Engine Output}}}{\f1\cf6  Show Engine Output
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf6 Open a new window dedicated to showing the thinking output of the engine(s), as controlled by \ldblquote Show Thinking\rdblquote .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Show Evaluation Graph}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 Show Evaluation Graph}}}{\f1\cf6  Show Evaluation Graph
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf6 Open a new window dedicated to displaying a graph, representing the development of the engine score(s) from the current game over time. (Needs \ldblquote show Thinking
+\rdblquote  to be enabled in order to work.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Show Game List}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ShowGameList}}}{\f1  Show Game List
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Shows or hides the list of games generated by the last }{\f1\uldb Load Game}{\v\f1 LoadGame}{\f1  command.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Show Move History}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 Show Move History}}}{\f1\cf6  Show Move History
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf6 Open a new window dedicated to showing the game currently in progress.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Training}}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Training}}}{\f1  Training
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
 Training mode lets you interactively guess the moves of a game for one of the players. While in Training mode, the navigation buttons are disabled. You guess the next move of the game by playing the move on the board (or using the }{\uldb Type In Move}{
 \v\uldb TypeInMove}{ command). If the move played matches the next move of the game, the move is accepted and the opponent\rquote s response is autoplayed.  If the move played is incorrect, an error message is displayed. 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Show Game List}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ShowGameList}}}{\f1  Show Game List
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Shows or hides the list of games generated by the last }{\f1\uldb Load Game}{\v\f1 LoadGame}{
-\f1  command.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Edit Tags}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  EditTags}}}{\f1  Edit Tags
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Lets you edit the PGN (portable game notation) tags for the current game. After editing, the tags must still conform to the PGN tag syntax:
-\par }\pard\plain \s43\ql \li520\ri0\sa60\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin520\itap0 \f6\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2 \line <tag-section> ::= <tag-pair> <tag-section>\line 
-                  <empty>\line <tag-pair>    ::= [ <tag-name> <tag-value> ]\line <tag-name>    ::= <identifier>\line <tag-value>   ::= <string>
-\par }\pard\plain \s20\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 See the PGN Standard for full details. Here is an example:
-\par }\pard\plain \s43\ql \li520\ri0\sa60\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin520\itap0 \f6\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2 \line [Event "Portoroz Interzonal"]\line 
-[Site "Portoroz, Yugoslavia"]\line [Date "1958.08.16"]\line [Round "8"]\line [White "Robert J. Fischer"]\line [Black "Bent Larsen"]\line [Result "1-0"]
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Any characters that do not match this syntax are silently ignored. Note that the PGN standard requires all games to have at least the seven tags shown above. Any that you omit will be filled in by WinBoard with }{\f2 "?"}{\f1  (unknown value) or }{\f2 "-"
-}{\f1  (inapplicable value).
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Edit Comment}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  EditComment}}}{\f1  Edit Comment
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Adds or modifies a comment on the current position. Comments are saved by }{\f1\uldb Save Game}
-{\v\f1 SaveGame}{\f1  and are displayed by }{\f1\uldb Load Game}{\v\f1 LoadGame}{\f1 , }{\f1\uldb Forward}{\v\f1 Forward}{\f1 , and }{\f1\uldb Backward}{\v\f1 Backward}{\f1 .
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Pause}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Pause}}}{\f1  Pause
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Edit Tags}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  EditTags}}}{\f1  Edit Tags
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you edit the PGN (portable game notation) tags for the current game. After editing, the tags must still conform to the PGN tag syntax:
+\par }\pard\plain \s43\li520\sa60\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs20\cgrid {\f2 \line <tag-section> ::= <tag-pair> <tag-section>\line                   <empty>\line <tag-pair>    ::= [ <tag-name> <tag-value> ]\line 
+<tag-name>    ::= <identifier>\line <tag-value>   ::= <string>
+\par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 See the PGN Standard for full details. Here is an example:
+\par }\pard\plain \s43\li520\sa60\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs20\cgrid {\f2 \line [Event "Portoroz Interzonal"]\line [Site "Portoroz, Yugoslavia"]\line [Date "1958.08.16"]\line [Round "8"]\line 
+[White "Robert J. Fischer"]\line [Black "Bent Larsen"]\line [Result "1-0"]
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Any 
+characters that do not match this syntax are silently ignored. Note that the PGN standard requires all games to have at least the seven tags shown above. Any that you omit will be filled in by WinBoard with }{\f2 "?"}{\f1  (unknown value) or }{\f2 "-"}{
+\f1  (inapplicable value).
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Edit Comment}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  EditComment}}}{\f1  Edit Comment
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Adds or modifies a comment on the current position. Comments are saved by }{\f1\uldb Save Game}{\v\f1 SaveGame}{\f1  and are displayed by }{\f1\uldb Load Game}{\v\f1 
+LoadGame}{\f1 , }{\f1\uldb Forward}{\v\f1 Forward}{\f1 , and }{\f1\uldb Backward}{\v\f1 Backward}{\f1 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 Enter Username}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 EnterUsername}}}{\f1\cf11  Enter Username
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf11 Allows you to type the name of the human player, which will appear in the PGN header and in the window title.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Pause}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Pause}}}{\f1  Pause
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
 Pauses updates to the board, and if you are playing against a local chess engine, also pauses your clock. To continue, select Pause again, and the display will automatically update to the latest position. The }{\b\f1 P}{\f1  (or }{\b\f1 C}{\f1 
 ) button is equivalent to selecting Pause.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If you select Pause when you are playing{\*\bkmkstart WHATSelSavT}{\*\bkmkend WHATSelSavT} 
-{\*\bkmkstart fWHATtopic}against{\*\bkmkend fWHATtopic} a chess engine and it is not your move, the chess engine\rquote s clock will continue to run and it will eventually make a move, at which point both clocks will s
-top. Since board updates are paused, however, you will not see the move until you exit from Pause mode (or select }{\f1\uldb Forward}{\v\f1 Forward}{\f1 ). This behavior is meant to simulate adjournment with a sealed move.
-\par If you select Pause while you are in }{\b\f1 examine}{\f1  mode on ICS, 
-you can step backward and forward in the current history of the examined game without affecting the other examiners or observers. Select Pause again to reconnect yourself to the current state of the game on ICS.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you select Pause when you are playing{\*\bkmkstart WHATSelSavT}{\*\bkmkend WHATSelSavT} {\*\bkmkstart fWHATtopic}against{\*\bkmkend fWHATtopic}
+ a chess engine and it is not your move, the chess engine\rquote s clock will continue to run and it will eventually make a move, at which point 
+both clocks will stop. Since board updates are paused, however, you will not see the move until you exit from Pause mode (or select }{\f1\uldb Forward}{\v\f1 Forward}{\f1 ). This behavior is meant to simulate adjournment with a sealed move.
+\par If you select Pause while you are in }{\b\f1 examine}{\f1 
+ mode on ICS, you can step backward and forward in the current history of the examined game without affecting the other examiners or observers. Select Pause again to reconnect yourself to the current state of the game on ICS.
 \par If you select Pause while you are loading a game, the game stops loading. You can load more moves one at a time by selecting }{\f1\uldb Forward}{\v\f1 Forward}{\f1 , or resume automatic loading by selecting Pause again.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Action Menu}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ActionMenu}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Action Menu}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Action Menu
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Most of these commands are available in chess server mode only.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Accept}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Accept}}}{\f1  Accept
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Accepts a pending match offer. If there is more than one offer pending, you will have to type in a more specific command instead of using this menu choice.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Decline}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Decline}}}{\f1  Decline
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Declines a pending offer (match, draw, etc.). If there is more than one offer pending, you will have to type in a more specific command instead of using this menu choice.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Rematch}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Rematch}}}{\f1  Rematch
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Issues the ICS }{\b\f1 rematch}{\f1 
- command, which asks for another game against your last opponent with the same time control and rule set.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Call Flag}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  CallFlag}}}{\f1  Call Flag
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Calls your opponent's flag, claiming a win on time, or claiming a draw if you are both out of time. You can also call your opponent's flag by clicking on his clock.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Draw}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Draw}}}{\f1  Draw
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Offers a draw to your opponent, accepts a pending draw offer from your opponent, or claims a draw by repetition or the 50-move rule, as appropriate.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Adjourn}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Adjourn}}}{\f1  Adjourn
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Ask
-s your opponent to agree to adjourning the current game, or agrees to a pending adjournment offer from your opponent. You continue an adjourned ICS game by challenging the same player again with the ICS }{\b\f1 match}{\f1  command.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Abort}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Abort}}}{\f1  Abort
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Action Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ActionMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super $}{\f1  Action Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Action Menu
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Most of these commands are available in chess server mode only.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Accept}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Accept}}}{\f1  Accept
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Accepts a pending match offer. If there is more than one offer pending, you will have to type in a more specific command instead of using this menu choice.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Decline}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Decline}}}{\f1  Decline
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Declines a pending offer (match, draw, etc.). If there is more than one offer pending, you will have to type in a more specific command instead of using this menu choice.
+
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Rematch}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Rematch}}}{\f1  Rematch
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Issues the ICS }{\b\f1 rematch}{\f1  command, which asks for another game against your last opponent with the same time control and rule set.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Call Flag}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  CallFlag}}}{\f1  Call Flag
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Calls your opponent's flag, claiming a win on time, or claiming a draw if you are both out of time. You can also call your opponent's flag by clicking on his clock.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Draw}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Draw}}}{\f1  Draw
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Offers a draw to your opponent, accepts a pending draw offer from your opponent, or claims a draw by repetition or the 50-move rule, as appropriate.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Adjourn}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Adjourn}}}{\f1  Adjourn
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+Asks your opponent to agree to adjourning the current game, or agrees to a pending adjournment offer from your opponent. You continue an adjourned ICS game by challenging the same player again with the ICS }{\b\f1 match}{\f1  command.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Abort}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Abort}}}{\f1  Abort
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
 Asks your opponent to agree to abort the current game, or agrees to a pending abort offer from your opponent. An aborted ICS game ends immediately without affecting either player's rating.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Resign}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Resign}}}{\f1  Resign
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Resigns the game to your opponent.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Stop Observing}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  StopObserving}}}{\f1  Stop Observing
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Ends your participation in observing a game, by issuing the ICS }{\b\f1 unobserve}{\f1 
- command.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Stop Examining}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  StopExamining}}}{\f1  Stop Examining
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Ends your participation in examining a game, by issuing the ICS }{\b\f1 unexamine}{\f1  c
-ommand.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Step Menu}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  StepMenu}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Step Menu}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Step Menu
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Type In Move}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  TypeInMove}}}{\f1  Type In Move
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Pops up a dialog box, into which you can type moves in standard algebraic chess notation. (You can also get this dialog box by simply starting to 
-type over the chessboard, except in ICS mode, where such typing is redirected into the ICS interaction window.)
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Backward}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Backward}}}{\f1  Backward
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Steps backward through a series of remembered moves. The }{\b\f1 <}{\f1 
- button is equivalent to selecting Backward.In most 
-modes, Backward only lets you look back at old positions; it does not retract moves. This is the case if you are playing against a chess engine, playing or observing a game on the ICS, or loading a game. If you select Backward in any of these situations, 
-you will not be allowed to make a different move. Use }{\f1\uldb Retract Move}{\v\f1 RetractMove}{\f1  or }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1  if you want to change past moves.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Resign}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Resign}}}{\f1  Resign
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Resigns the game to your opponent.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Stop Observing}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  StopObserving}}}{\f1  Stop Observing
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Ends your participation in observing a game, by issuing the ICS }{\b\f1 unobserve}{\f1  command.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Stop Examining}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  StopExamining}}}{\f1  Stop Examining
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Ends your participation in observing a game, by issuing the ICS }{\b\f1 unobserve}{\f1  command.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Adjudicate To White}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 AdjudicateToWhite}}}{\f1\cf6  Adjudicate To White
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 End the current game and stop participating engine. The result will appear in the PGN as a win for white.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Adjudicate To Black}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 AdjudicateToBlack}}}{\f1\cf6  Adjudicate To Black
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Same as above, but game will appear as a win for black.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Adjudicate Draw}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 AdjudicateDraw}}}{\f1\cf6  Adjudicate Draw
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Same as above, but game will appear as a draw.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20\cf6 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super K}{\f1  Step Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  StepMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super $}{\f1  Step Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Step Menu
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Type In Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  TypeInMove}}}{\f1  Type In Move
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+Pops up a dialog box, into which you can type moves in standard algebraic chess notation. (You can also get this dialog box by simply starting to type over the chessboard, except in ICS mode, where such typing is redirected into the ICS interaction
+ window.)
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Backward}}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Backward}}}{\f1  Backward
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Steps backward through a series of remembered moves. The }{\b\f1 <}{\f1  button is equivalent to selecting Backward}{\f1\cf2 , as is turning the mouse wheel towards you}{
+\f1 .In most modes, Backward only lets you look back at old positions; it does not retract mov
+es. This is the case if you are playing against a chess engine, playing or observing a game on the ICS, or loading a game. If you select Backward in any of these situations, you will not be allowed to make a different move. Use }{\f1\uldb Retract Move}{
+\v\f1 RetractMove}{\f1  or }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1  if you want to change past moves.
 \par If you are examining a game on the ICS, the behavior of Backward depends on whether WinBoard}{\i\f1  }{\f1 is in }{\f1\uldb Pause}{\v\f1 Pause}{\f1  mode. If Pause mode is off, Backward issues the ICS command}{\b\f1  backward}{\f1 
 , which backs up everyone's view of the game and allows you to make a different move. If Pause mode is on, Backward only backs up your local view.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Forward}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Forward}}}{\f1  Forward
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Steps forward through a series of remembered moves (undoing the effect of }{\f1\uldb Backward}{
-\v\f1\uldb Backward}{\f1 ) or through a game file. The }{\b\f1 >}{\f1  button is equivalent.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If you are examining a game on the ICS, the behavior of Forward depends on whether WinBoard}{
-\i\f1  }{\f1 is in }{\f1\uldb Pause}{\v\f1 Pause}{\f1  mode. If Pause mode is off, Forward issues the ICS command}{\b\f1  forward}{\f1 
-, which moves everyone's view of the game forward along the current line. If Pause mode is on, Forward only moves your local view forward, and it will not go past the position the game was in when you paused.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Back to Start}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  BacktoStart}}}{\f1  Back to Start
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Jumps backward to the first remembered position in the game. The }{\b\f1 << }{\f1 
-button is equivalent.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-In most modes, Back to Start only lets you look back at old positions; it does not retract moves. This 
-is the case if you are playing against a chess engine, playing or observing a game on the ICS, or loading a game. If you select Back to Start in any of these situations, you will not be allowed to make a different move. Use }{\f1\uldb Retract Move}{\v\f1 
-RetractMove}{\f1  or }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1  if you want to change past moves; or use }{\f1\uldb Reset}{\v\f1 Reset}{\f1  to start a new game.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Forward}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Forward}}}{\f1  Forward
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Steps forward through a series of remembered moves (undoing the effect of }{\f1\uldb Backward}{\v\f1\uldb Backward}{\f1 ) or through a game file. The }{\b\f1 >}{\f1  but
+ton is equivalent}{\f1\cf2 , as is turning the mouse wheel away from you}{\f1 .
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you are examining a game on the ICS, the behavior of Forward depends on whether WinBoard}{\i\f1  }{\f1 is in }{\f1\uldb Pause}{\v\f1 Pause}{\f1 
+ mode. If Pause mode is off, Forward issues the ICS command}{\b\f1  forward}{\f1 , which moves eve
+ryone's view of the game forward along the current line. If Pause mode is on, Forward only moves your local view forward, and it will not go past the position the game was in when you paused.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Back to Start}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  BacktoStart}}}{\f1  Back to Start
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Jumps backward to the first remembered position in the game. The }{\b\f1 << }{\f1 button is equivalent.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+In most modes, Back to Start only lets you look back at old positions; it does not retract moves. This is the case if you are playing against a chess engine, playing or observing a game on the ICS, or loading a ga
+me. If you select Back to Start in any of these situations, you will not be allowed to make a different move. Use }{\f1\uldb Retract Move}{\v\f1 RetractMove}{\f1  or }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1  if you want to change past moves; or use }{
+\f1\uldb New Game}{\v\f1 NewGame}{\f1  to start a new game.
 \par If you are examining a game on the ICS, the behavior of Back to Start depends on whether WinBoard}{\i\f1  }{\f1 is in }{\f1\uldb Pause}{\v\f1 Pause}{\f1  mode. If Pause mode is off, Backward issues the ICS command }{\b\f1 backward 999999}{\f1 
 , which backs up everyone's view of the game to the start and allows you to make different moves. If Pause mode is on, Back to Start only backs up your local view.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Forward to End}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ForwardtoEnd}}}{\f1  Forward to End
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Jumps forward to the last position in the game. The }{\b\f1 >>}{\f1  button is equivalent.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Forward to End}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ForwardtoEnd}}}{\f1  Forward to End
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Jumps forward to the last position in the game. The }{\b\f1 >>}{\f1  button is equivalent.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you are examining a game on the ICS, the behavior of Forward to End depends on whether WinBoard}{\i\f1  }{\f1 is in }{\f1\uldb Pause}{\v\f1 Pause}{\f1 
+ mode. If Pause mode is off, Forward to End issues the ICS command }{\b\f1 forward 999999}{\f1 , which moves everyone's view of the game forward to the end of the current line. If Pause mode is on, Forward to End only moves your local vi
+ew forward, and it will not go past the position the game was in when you paused.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Revert}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Revert}}}{\f1  Revert
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you are examining a game on the ICS, issues the ICS command }{\b\f1 revert}{\f1 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Truncate Game}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  TruncateGame}}}{\f1  Truncate Game
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Discards all remembered moves of the game beyond the current position. Puts WinBoard into }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1  mode if it was not there already.
 
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If you are examining a game on the ICS, the behavior of Forward to End depends on whether WinBoard}{\i\f1  }{\f1 is in }{\f1\uldb Pause}{\v\f1 Pause}{\f1  mode. If Pause mode is off, Forward to End issues the ICS command }{\b\f1 forward 999999}{\f1 , whi
-ch moves everyone's view of the game forward to the end of the current line. If Pause mode is on, Forward to End only moves your local view forward, and it will not go past the position the game was in when you paused.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Revert}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Revert}}}{\f1  Revert
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If you are examining a game on the ICS, issues the ICS command }{\b\f1 revert}{\f1 .
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Truncate Game}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  TruncateGame}}}{\f1  Truncate Game
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Discards all remembered moves of the game beyond the current position. Puts WinBoard into }{
-\f1\uldb Edit Game}{\v\f1 EditGame}{\f1  mode if it was not there already.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Move Now}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  MoveNow}}}{\f1  Move Now
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Forces the chess engine to move immediately. May not work with all chess engines.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Retract Move}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  RetractMove}}}{\f1  Retract Move
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Retracts your last move.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-In chess engine mode, you can do this only after the chess engine has replied to your move. If the chess engine is still thinking, use }{\f1\uldb Move Now}{\v\f1 MoveNow}{\f1  first.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Move Now}}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  MoveNow}}}{\f1  Move Now
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Forces the chess engine to move immediately. May not work with all chess engines.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Retract Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  RetractMove}}}{\f1  Retract Move
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Retracts your last move.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In chess engine mode, you can do this only after the chess engine has replied to your move. If the chess engine is still thinking, use }{\f1\uldb Move Now}{\v\f1 MoveNow}{
+\f1  first.
 \par In ICS mode, Retract Move issues the command }{\b\f1 takeback 1 }{\f1 or }{\b\f1 takeback 2}{\f1 , depending on whether it is your opponent's move or yours.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Options Menu}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  OptionsMenu}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Options Menu}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Options Menu
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Flip View}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  FlipView}}}{\f1  }{\f1\ul Flip View}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Inverts your view of the chessboard.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If you are playing a game on the ICS, the board is always oriented at the start of
- the game so that your pawns move from the bottom of the window towards the top. Otherwise, the starting position is determined by the }{\f1\uldb flipView}{\v\f1 flipViewOption}{\f1  command line option.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\ul\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ General Options}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ GeneralOptions}}}{\f1\ul General}{\f1 
-\par }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Always On Top}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  AlwaysOnTop}}}{\f1  Always On Top
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If this option is on, WinBoard sets its chessboard to be a }{\i\f1 topmost}{\f1 
- window, meaning that it always appears on top of all ordinary windows on the screen.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Always Queen}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  AlwaysQueen}}}{\f1  Always Queen
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If Always Queen is off, WinBoard brings up a
- dialog box whenever you move a pawn to the last rank, asking what piece you want to promote it to. If the option is on, your pawns are always promoted to queens. Your opponent can still underpromote, however.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Animate Dragging}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  AnimateDragging}}}{\f1  Animate Dragging
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Options Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  OptionsMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super $}{\f1  Options Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Options Menu
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Flip View}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  FlipView}}}{\f1  }{\f1\ul Flip View}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Inverts your view of the chessboard.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+If you are playing a game on the ICS, the board is always oriented at the start of the game so that your pawns move from the bottom of the window towards the top. Otherwise, the starting position is determined by the }{\f1\uldb flipView}{\v\f1 
+flipViewOption}{\f1  command line option.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\ul\cf11 Swap Clocks}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\ul\cf11 Swap Clocks}}}{\f1\cf11  }{\f1\ul\cf11 Swap Clocks}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 
+Interchanges the position of the white and black clocks on the screen. Intended for manually-operated computer-computer games, where the monitor is standing to the side of the playing board, 
+to make sure that the operator sees the time of his own machine on his side of the table. Note that it is possible to adjust the clocks in steps of one minute, by left- (decrement) or right-clicking (increment) it with the mouse in \ldblquote Edit Game
+\rdblquote  mode. (Clicking the clocks in other modes is interpreted as claiming the flag.)
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\ul\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{
+ General Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ GeneralOptions}}}{\f1\ul General}{\f1 
+\par }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Always On Top}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super #}{\f1  AlwaysOnTop}}}{\f1  Always On Top
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is on, WinBoard sets its chessboard to be a }{\i\f1 topmost}{\f1  window, meaning that it always appears on top of all ordinary windows on the screen.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Always Queen}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  AlwaysQueen}}}{\f1  Always Queen
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+If Always Queen is off, WinBoard brings up a dialog box whenever you move a pawn to the last rank, asking what piece you want to promote it to. If the option is on, your pawns are always promoted to queens. Your opponent can still underpromote, however.
+
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Animate Dragging}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  AnimateDragging}}}{\f1  Animate Dragging
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
 If Animate Dragging is on while you are dragging a piece with the mouse, an image of the piece follows the mouse cursor. If Animate Dragging is off, there is no visual feedback while you are
 \par dragging a piece, but if Animate Moving is on, the move will be animated when it is complete.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Animate Moving}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  AnimateMoving}}}{\f1  Animate Moving
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If Animate Moving is on, all piece moves are animated.  An image of the piece is shown moving from the old square to the new square when the move is completed (unle
-ss the move was already animated by Animate Dragging). If Animate Moving is off, a moved piece instantly disappears from its old square and reappears on its new square when the move is complete.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Auto Flag}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  AutoflagCmd}}}{\f1  Auto Flag
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If this option is on a
-nd one player runs out of time before the other, WinBoard will automatically call his flag, claiming a win on time. In ICS mode, Auto Flag will only call your opponent's flag, not yours, and the ICS may award you a draw instead of a win if you have insuff
-icient mating material. On most chess servers, you can now do}{\b\f1  set autoflag 1 }{\f1 instead and have the server call the flag. In local chess engine mode, WinBoard may call either player's flag and will not take material into account.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ Auto Flip View}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ AutoFlipView}}}{\b  Auto Flip View
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Animat
+e Moving}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  AnimateMoving}}}{\f1  Animate Moving
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+If Animate Moving is on, all piece moves are animated.  An image of the piece is shown moving from the old square to the new square when the move is completed (unless the move was alre
+ady animated by Animate Dragging). If Animate Moving is off, a moved piece instantly disappears from its old square and reappears on its new square when the move is complete.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Auto Flag}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  AutoflagCmd}}}{\f1  Auto Flag
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is on and one player runs out of time before the othe
+r, WinBoard will automatically call his flag, claiming a win on time. In ICS mode, Auto Flag will only call your opponent's flag, not yours, and the ICS may award you a draw instead of a win if you have insufficient mating material. On most chess servers,
+ you can now do}{\b\f1  set autoflag 1 }{\f1 instead and have the server call the flag. In local chess engine mode, WinBoard may call either player's flag and will not take material into account.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Auto Flip View}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ AutoFlipView}}}{\b  Auto Flip View
 \par }{If this option is on when you}{\f1  start a game, the board will be automatically oriented so that your pawns move from the bottom of the window towards the top.}{
-\par }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ Auto Raise Board}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ AutoRaiseBoard}}}{\b  Auto Raise Board
+\par }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Auto Raise Board}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\super #}{ AutoRaiseBoard}}}{\b  Auto Raise Board
 \par }{If this}{\v autoFlipViewOption}{ option is on, whenever a new game begins, the chessboard window will be deiconized (if necessary) and raised to the top of the stack of windows on your screen.
-\par }\pard\plain \s2\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ Blindfold}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ BlindfoldCmd}}}{Blindfold
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {If Blindfold is on, WinBoard displays 
-a blank board. Moves can still be entered with the mouse, either by dragging the (invisible) piece or clicking the starting and ending square. You can also enter your move by typing it on the keyboard}{\f1 .}{
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Highlight Dragging}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  HighlightDragging}}}{\f1  Highlight Dragging
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
+\par }\pard\plain \s2\li120\sb80\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Blindfold}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ BlindfoldCmd}}}{Blindfold
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+If Blindfold is on, WinBoard displays a blank board. Moves can still be entered with the mouse, either by dragging the (invisible) piece or clicking the starting and ending square. You can also enter your move by typing it on the keyboard}{\f1 .}{
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Highlight Dragging}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  HighlightDragging}}}{\f1  Highlight Dragging
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
 If Highlight Dragging is on while you are dragging a piece with the mouse, the starting square and the square that the mouse cursor is over are highlighted. This option works even if Animate Dragging is off.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Highlight Last Move}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  HighlightLastMove}}}{\f1  Highlight Last Move
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If Highlight Last Move is on, after a move is made, the starting and ending squares remain highlighted. In addition, after you use }{\f1\uldb Backward}{\v\f1 Backward}{\f1  or }{\f1\uldb Back to Start}{\v\f1 BackToStart}{\f1 
-, the starting and ending squares of the last move to be }{\i\f1 unmade}{\f1  are highlighted.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Periodic Updates}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  PeriodicUpdatesCmd}}}{\f1  Periodic Updates
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If Periodic Updates is on, the Analysis window is updated every two seconds. If not, it is updated only when the best move found changes. The Analysis window currently works only with Crafty, and Periodic Updates may not work with all versions of Crafty.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Extended PGN Info}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 ExtendedPGNInfo}}}{\f1\cf6  Extended PGN Info
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 
+The PGN will contain the engine search depth, score and time for each move where the depth is non-zero, as a comment behind the move if this option is on. Works only when \ldblquote Show Thinking\rdblquote  is enabled. The recorded time
+ is the time reported by the engine.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Extra Info In Move History}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 ExtraInfoInMoveHistory}}}{\f1\cf6  Extra Info In Move History
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Same as above, but in move-history window. 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Highlight Last Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  HighlightLastMove}}}{\f1  Highlight Last Move
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Highlight Last Move is on, after a move is made, the starting and ending squares remain highlighted. In addition, after you use }{\f1\uldb Backward}{\v\f1 Backward}{\f1 
+ or }{\f1\uldb Back to Start}{\v\f1 BackToStart}{\f1 , the starting and ending squares of the last move to be }{\i\f1 unmade}{\f1  are highlighted.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Periodic Updates}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  PeriodicUpdatesCmd}}}{\f1  Periodic Updates
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Periodic Updates is on, the Analysis window is updated every two seconds. If not, it is updated onl
+y when the best move found changes. The Analysis window currently works only with Crafty, and Periodic Updates may not work with all versions of Crafty.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559  Ponder Next Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  PonderNextMoveCmd}}}{\f1  Ponder Next Move
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is off, the chess engine will think only when it is on move. If the option is on, the engine will also think while waiting for you to make your move.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Popup Exit Message}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  PopupExitMessageCmd}}}{\f1  Popup Exit Message
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is on, when WinBoard wants to display a message just before exiting, it brings up a modal dialog box and waits for you to click OK before
+ exiting. If the option is off, WinBoard prints exits immediately without showing the message. If }{\f1\uldb debugMode}{\v\f1 debugMode}{\f1  is on, however, the message will appear in the debug log.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Popup Move Errors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  PopupMoveErrorsCmd}}}{\f1  Popup Move Errors
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is off, when you make an error in moving (suc
+h as attempting an illegal move or moving the wrong color piece), the error message is displayed in the message area. If the option is on, move errors are displayed in small popup windows like other errors. You can dismiss an error popup either by clickin
+g its OK button or by clicking anywhere on the board, including downclicking to start a move.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Show Button Bar}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ShowButtonBarCmd}}}{\f1  Show Button Bar
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Show Button Bar is on, WinBoard displays on-screen }{\f1\uldb buttons}{\v\f1 BUTTONS}{\f1  to step forward, backward, or pause the game. If it is off, the buttons are
+ hidden, making the message line wider.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Show Coords}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ShowCoordsCmd}}}{\f1  Show Coords
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Show Coords is on, WinBoard displays algebraic coordinates along the board's left and bottom edges. 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Show Thinking}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ShowThinkingCmd}}}{\f1  Show Thinking
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is set, WinBoard displays the chess engine\rquote s current search depth
+ and its notion of the score and best line of play from the current position as it is thinking. The score indicates how many pawns ahead (or if negative, behind) the engine thinks it is. In matches between two machines, the score is prefixed by W or B to 
+indicate whether it is showing White's thinking or Black's.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Test Legality}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  TestLegalityCmd}}}{\f1  Test Legality
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+If Test Legality is on, WinBoard tests whether the moves you enter with the mouse or read from game files are legal, and displays an error if they are not. Turn this option off if 
+you are playing a chess variant that WinBoard does not understand. (Bughouse, suicide, and wild variants where the king may castle after starting on the }{\b\f1 d}{\f1  file are generally supported with Test Legality on. }{\f1\cf11 
+The same holds for variants with non-FIDE pieces,
+ like shatranj, xangqi, shogi, gothic, capablanca, courier, knightmate: WinBoard knows how all pieces occurring in those variants move. Falcon, cylinder and berolina are only partly supported, though, and the latter two should definitely be played with le
+gality testing off, and falcon uses a wildcard piece for the Falcons, so it considers any move of them legal, but might miss checkmates that involve a Falcon. So you should not play it with claim verification switched on.}{\f1 )
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Hide Thinking From Human}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 HideThinkingFromHuman}}}{\f1\cf6  Hide Thinking From Human
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 An alternative to suppressing the Thinking Output in the display above the board by switching \ldblquote Show Thinking\rdblquote 
+ off, but doing it in a way that still allows the extended PGN info to be recorded.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Highlight Move With Arrow}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 HighlightMoveWithArrow}}}{\f1\cf6  Highlight Move With Arrow
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 A big, fat arrow is drawn between the start and target field of the last move, so you cannot possibly miss it. 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\ul\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Board Options}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ BoardOptions}}}{\f1\ul Board
+\par }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Board Size}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid 
+{\cs58\f1\super #}{\f1  BoardSizeCmd}}}{\f1  Board Size
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Determines how large the board will be and what fonts and piece bitmaps will be used. On a Titanic board the piece bitmaps are 129x129 pixels, on Colossal 116x116
+, Giant 108x108, Huge 95x95, Big 87x87, Large 80x80, Bulky 72x72, Medium 64x64, Moderate 58x58, Average 54x54, Middling 49x49, Mediocre 45x45, Small 40x40, Slim 37x37, Petite 33x33, Dinky 29x29, Teeny 25x25, and Tiny 21x21. The smaller boards have no syst
+em menu, but you can minimize or close them from the File menu.
+\par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 You can also change the board size by dragging the window edges or corners with the mouse. The board will snap to the largest size that fits into the area you outline.
 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{
-\f1\revised\revauth1\revdttm-1506646559  Ponder Next Move}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  PonderNextMoveCmd}}}{\f1  Ponder Next Move
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If this option is off, the chess engine will think only when it is on move. If the option is on, the engine will also think while waiting for you to make your move.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Popup Exit Message}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  PopupExitMessageCmd}}}{\f1  Popup Exit Message
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If this option is on, when WinBoard wants to display a message just before exiting, it brings up a modal dialog box and waits for you to click OK before exiting. If the option is off, WinBoard prints exits immediately without showing the message. If }{
-\f1\uldb debugMode}{\v\f1 debugMode}{\f1  is on, however, the message will appear in the debug log.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Popup Move Errors}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  PopupMoveErrorsCmd}}}{\f1  Popup Move Errors
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If this option is off, when you make an error in moving (such as attempting an illegal move or moving the wrong color piece), the error message is displayed in the message area. If the option is on, move errors are displayed in small popup windows
- like other errors. You can dismiss an error popup either by clicking its OK button or by clicking anywhere on the board, including downclicking to start a move.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Show Button Bar}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ShowButtonBarCmd}}}{\f1  Show Button Bar
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If Show Button Bar is on, WinBoard displays on-screen }{\f1\uldb buttons}{\v\f1 BUTTONS}{\f1 
- to step forward, backward, or pause the game. If it is off, the buttons are hidden, making the message line wider.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Show Coords}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ShowCoordsCmd}}}{\f1  Show Coords
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If Show Coords is on, WinBo
-ard displays algebraic coordinates along the board's left and bottom edges. 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Show Thinking}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ShowThinkingCmd}}}{\f1  Show Thinking
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If this option is set, WinBoard displays the chess engine\rquote 
-s current search depth and its notion of the score and best li
-ne of play from the current position as it is thinking. The score indicates how many pawns ahead (or if negative, behind) the engine thinks it is. In matches between two machines, the score is prefixed by W or B to indicate whether it is showing White's t
-hinking or Black's.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Test Legality}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  TestLegalityCmd}}}{\f1  Test Legality
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If Test Legality is on, WinBoard tests whether the moves you enter with the mouse or read from game files are legal, and displays an error if they are not. Turn this option off if you ar
-e playing a chess variant that WinBoard does not understand. (Bughouse, suicide, and wild variants where the king may castle after starting on the }{\b\f1 d}{\f1  file are generally supported with Test Legality on.)
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\ul\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ Board Options}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ BoardOptions}}}{\f1\ul Board
-\par }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Board Size}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  BoardSizeCmd}}}{\f1  Board Size
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Determines how large the board will be and what fonts and piece bitmaps will be used. On a Titanic board the piece bitmaps are 129x129 pixels, on Colossal 116x116, Giant 108x108, Huge 95x95, Big 87x87, Large 80x80, Bulky 72x72, M
-edium 64x64, Moderate 58x58, Average 54x54, Middling 49x49, Mediocre 45x45, Small 40x40, Slim 37x37, Petite 33x33, Dinky 29x29, Teeny 25x25, and Tiny 21x21. The smaller boards have no system menu, but you can minimize or close them from the File menu.
-
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 You 
-can also change the board size by dragging the window edges or corners with the mouse. The board will snap to the largest size that fits into the area you outline.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Board Colors}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  BoardColors}}}{\f1  Board Colors
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Lets you change the colors WinBoard is using to draw the board and pieces.
-\par }\pard\plain \s5\ql \li115\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\outlinelevel4\adjustright\rin0\lin115\itap0 \f5\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b 
-\par }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ ICS Options}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ ICSOptions}}}{\b ICS
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Auto Comment}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  AutoCommentCmd}}}{\f1  Auto Comment
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If Auto Comment is on, any remarks made on ICS while you are observing or playing a game are recorded as a comment on the current move. This includes remarks made with the ICS commands }{\b\f1 say, tell, whisper, }{\f1 and }{\b\f1 kibitz}{\f1 
+\par }{\cf11 Note that only sizes Bulk
+y, Middling and to a lesser extent Petite have built-in bitmaps for the non-FIDE- pieces. Archbishop, Chancellor and the wildcard Lance exist in all sizes from Petite to Bulky, though. In size Moderate, variant shogi uses the traditional Japanese piece re
+presentation.}{\f1\cf11 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Board Colors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  BoardColors}}}{\f1  Board Colors
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the colors WinBoard is using to draw the board and pieces.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 All White}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 AllWhite}}}{\f1\cf11  All White
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Uses the representation of the white pieces (a filled-in black outline) also for the black pieces (where you can fill them with another col
+or to distinguish them). If you do not choose a very dark color for the black pieces, they look very ugly without outline, and using this option can fix that.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 Flip Black}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 FlipBlack}}}{\f1\cf11  Flip Black
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Displays the black pieces upside down (or the white pieces in \ldblquote Flip View\rdblquote ). This is
+ useful in Shogi, when you want to use the traditional Japanese representation of the pieces.
+\par }\pard\plain \s5\li115\sb80\sl-240\slmult0\nowidctlpar\outlinelevel4\adjustright \f5\fs20\ul\cgrid {\b 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\ul\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{
+\f1\ul\cf6 Adjudications}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\ul\cf6 Adjudications}}}{\f1\ul\cf6 Adjudications
+\par }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 Ponder Next Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 PonderNextMove}}}{\f1\cf6  Ponder Next Move,}{\cs58\f1\cf6\super  K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super K}{\f1  }{\f1\cf6 Show Thinking}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 ShowThinking}}}{\f1\cf6  Show Thinking, }{\cs58\f1\cf6\super K
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 Hide Thinking From Human}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 HideThinkingFromHuman}}}{\f1\cf6  Hide Thinking from Human and }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{
+\f1  }{\f1\cf6 Periodic Updates}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 PeriodicUpdates}}}{\f1\cf6  Periodic Updates
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Duplicates of the controls in the \ldblquote General\rdblquote  option menu.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Adjudicate Draw Moves}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 AdjudicateDrawMoves}}}{\f1\cf6  Adjudicate Draw Moves
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 
+Adjudicate a draw after the given number of moves, to prevent games from dragging on forever if two engines in a dead-drawn position, conspire to avoid 50-move draws. This and the folowing options are only active in \ldblquote Two Machines\rdblquote 
+ mode.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Adjudicate Loss Threshold}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 AdjudicateLossThreshold}}}{\f1\cf6  Adjudicate Loss Threshold
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Adjudicate the game as a loss when both engines agree that the (negative) score is  below the given threshold for the duration of 6 consecutive plies.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 Verify Claims}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 VerifyClaims}}}{\f1\cf11  Verify Claims
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Verify result claims made by engines when they terminate the game. If needed, correct the results to a loss for the engine making the false claim. Needs \ldblquote 
+Test Legality\rdblquote  to be on in order to work.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 Detect Mates}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 DetectMates}}}{\f1\cf11  Detect Mates
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Let WinBoard detect checkmate and stalemate, even before the engine gets the chance to claim i
+t. Useful with buggy engines, that exit without a claim, or just hang. Needs \ldblquote Test Legality\rdblquote  to be on in order to work.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 Draw If Insufficient Material}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 DrawIfInsufficientMaterial}}}{\f1\cf11  Draw If Insufficient Material
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is on, WinBoard will recognize KBKB positions with equally colored Bishops, KBK, KNK, an
+d KK positions as draws, even before the engine can claim them. Needs \ldblquote Test Legality\rdblquote  to be on in order to work.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 Adjudicate Trivial Draws}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 AdjudicateTrivialDraws}}}{\f1\cf11  Adjudicate Trivial Draws
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is on, KBKB (with B on unlike color), KBKN, KNKN, KNNK, KRKR and KQKQ positions will be adjudicated 
+draw after 6 ply. For KQKQ this is not really sound, and in the future it might be taken out of this option. But as long as tablebase adjudications are not implemented, it seems best to group this end-game with the trivial draws. Needs \ldblquote 
+Test Legality\rdblquote  to be on in order to work.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 N-Move Rule}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 N-MoveRule}}}{\f1\cf11  N-Move Rule
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 
+Here you can set the number of reversible moves (non-pawn, non-capture) after which WinBoard should adjudicate a game as draw. Engine draw claims are always consider ed valid after 50 moves (in the context of \ldblquote Verify Claims\rdblquote 
+), but you can set a different value here to either give the engine more leeway if it wants to play on, or test its claiming capabilities, or set it to a smaller value if you are impatient.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 N-Fold Repetition Rule}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 N-FoldRepetitionRule}}}{\f1\cf11  N-Fold Repetition Rule
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Here you can set the number of rep
+etitions of the same position that should occur in order for WinBoard to adjudicate the game as draw. Engine draw claims are always consider ed valid after 3 repetitions (in the context of \ldblquote Verify Claims\rdblquote 
+) , but you can set a different value here to either give the engine more leeway if it wants to play on, or test its claiming capabilities, or set it to 2 if you are impatient. (Do not set it to 1!)
+\par }\pard\plain \s5\li115\sb80\sl-240\slmult0\nowidctlpar\outlinelevel4\adjustright \f5\fs20\ul\cgrid {\b 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\ul\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{
+\f1\ul\cf6 Engine Settings}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\ul\cf6 Engine Settings}}}{\f1\ul\cf6 Engine Settings
+\par }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 Polyglot Directory}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 PolyglotDirectory}}}{\f1\cf6  Polyglot Directory
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If WinBoard knows where to find Polyglot, you can install UCI engine
+s as if they were WinBoard engines, and WinBoard will automatically invoke Polyglot as an adapter to run them.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 Hash Size}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 HashSize}}}{\f1\cf6  Hash Size, }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 EGTB Path}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 
+EGTBPath}}}{\f1\cf6  EGTB Path, }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 EGTB Cache Size}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 EGTBCacheSize}}}{\f1\cf6  EGTB Cache Size, }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 Opening Book}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 OpeningBook}}}{\f1\cf6  Opening Book, }{
+\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 Number of CPUs}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 Number of CPUs}}}{\f1\cf6  Number of CPUs
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 These are options that UCI engines expect to be specified. }{\f1\cf2 Win
+Board protocol now also allows native WinBoard engines to request similar information, so it might be used for these engines as well. The memory size specified by the WinBoard-protocol \lquote memory\rquote 
+ command is the sum of the hash and EGTB cache sizes. The specified opening book, when enabled through the \lquote Use Book\rquote 
+ check box, will be used as GUI book for engines that do not have their own book (as indicated by the check boxes). It must be a book in Polyglot format.}{\f1\cf6 
+\par }\pard\plain \s5\li115\sb80\sl-240\slmult0\nowidctlpar\outlinelevel4\adjustright \f5\fs20\ul\cgrid {\b 
+\par }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ ICS Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\super #}{ ICSOptions}}}{\b ICS
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Auto Comment}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  AutoCommentCmd}}}{\f1  Auto Comment
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Auto Comment is on, an
+y remarks made on ICS while you are observing or playing a game are recorded as a comment on the current move. This includes remarks made with the ICS commands }{\b\f1 say, tell, whisper, }{\f1 and }{\b\f1 kibitz}{\f1 
 . Limitation: remarks that you type yourself are not 
 \par recognized; WinBoard scans only the output from ICS, not the input you type to it.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Auto Observe}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  AutobsCmd}}}{\f1  Auto Observe
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If Auto Observe is on and you add a player to your }{\b\f1 gnotify}{\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Auto Observe}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  AutobsCmd}}}{\f1  Auto Observe
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Auto Observe is on and you add a player to your }{\b\f1 gnotify}{\f1 
  list on ICS, WinBoard will automatically observe all of that player's games, unless you are doing something else (such as observing or playing a game of your own) when one starts. On most chess servers, you can now do }{\b\f1 follow }{\b\i\f1 player}{
 \f1  instead, and the server will automatically observe all of }{\b\i\f1 player\rquote s}{\f1  games.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Get Move List}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  GetMoveListCmd}}}{\f1  Get Move List
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If Get Move List is on, whenever WinBoard}{\i\f1  }{\f1 
-receives the first board of a new ICS game (or a differ
-ent ICS game from the one it is currently displaying), it retrieves the list of past moves from the server. You can then review the moves with the Forward and Backward commands or save them with Save Game. You might want to turn off this option if you are
- observing several blitz games at once, to keep from wasting time and network bandwidth fetching the move lists over and over. If you turn this option on while a game is in progress, WinBoard}{\i\f1  }{\f1 immediately fetches the current move list.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Local Line Editing}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  LocalLineEditing}}}{\f1  Local Line Editing
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If Local Line Editing is }{\b\f1 on}{\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Get Move List}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  GetMoveListCmd}}}{\f1  Get Move List
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Get Move List is on, whenever WinBoard}{\i\f1  }{\f1 r
+eceives the first board of a new ICS game (or a different ICS game from the one it is currently displaying), it retrieves the list of past moves from the server. You can then review the moves with the Forward and Backward commands or save them with Save G
+ame. You might want to turn off this option if you are observing several blitz games at once, to keep from wasting time and network bandwidth fetching the move lists over and over. If you turn this option on while a game is in progress, WinBoard}{\i\f1  }
+{\f1 immediately fetches the current move list.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Local Line Editing}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  LocalLineEditing}}}{\f1  Local Line Editing
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Local Line Editing is }{\b\f1 on}{\f1 
 , your machine handles echoing, backspacing, etc., for the characters that you type into the ICS Interaction window. Output is forwarded to the ICS only when you hit Enter.The Enter key produces a newline character, also known as Ctrl+J, \\
-n, LF, linefeed, or decimal ASCII code 10. In this mode you can force a control character into the edit buffer by preceding it with Ctrl+Q (\'93quote\'94); however, the edit buffer will not accept certain control
- characters even when they are quoted in this way. You can force a control character to be sent immediately to ICS, bypassing the edit buffer, by preceding it with Ctrl+S (\'93send\'94).
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 WinBoard keeps a history of lines you recently typed in Local Line Editing 
-mode. You can bring back old lines by pressing the cursor up key in the text entry box. Press the cursor down key to go back down to newer lines.
+n, LF, linefeed, or decimal ASCII code 10. In this mode you can force a control character into the edit buffer by preceding it with Ctrl+Q (\ldblquote quote\rdblquote ); however, the edit buffer will not accept c
+ertain control characters even when they are quoted in this way. You can force a control character to be sent immediately to ICS, bypassing the edit buffer, by preceding it with Ctrl+S (\ldblquote send\rdblquote ).
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard keeps a history of lines you recently typed in Local
+ Line Editing mode. You can bring back old lines by pressing the cursor up key in the text entry box. Press the cursor down key to go back down to newer lines.
 \par If Local Line Editing is }{\b\f1 off}{\f1 , all characters are sent to ICS as you type them. The Enter key produces a carriage return character, also known as Ctrl+M, \\
-r, CR, or decimal ASCII code 13. Use Ctrl+Backspace if you need the ASCII DEL character. You can enter any character code by holding down the Alt key and typing its decimal value (always beginning with 0) on the 
-numeric keypad; this is a little-known standard feature of Windows.
+r, CR, or decimal ASCII code 13. Use Ctrl+Backspace if you need the ASCII DEL character. You can enter any character code by holding down the Alt key and typing its decimal value (always beginning w
+ith 0) on the numeric keypad; this is a little-known standard feature of Windows.
 \par In both modes, if WinBoard}{\i\f1 \rquote s }{\f1 internal telnet protocol implementation is active, it translates all \\n characters to the standard telnet end-of-line sequence \\r\\n just before sending them out to ICS; see }{\f1\uldb telnetProgram}{
 \v\f1 telnetProgram}{\f1 .
 \par It is generally not a good idea to turn off this option while connected to ICS. If you are tempted to do so because everything you type is being echoed an extra time, see the paragraph about extra echoes under }{\f1\uldb LIMITATIONS}{\v\f1 LIMITATIONS}{
 \f1  below.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Quiet Play}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  QuietPlayCmd}}}{\f1  Quiet Play
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If Quiet Play is on, WinBoard will automatically issue an ICS }{\b\f1 set shout 0}{\f1 
- command whenever you start a game and a }{\b\f1 set shout 1}{\f1  command whenever you finish one. Thus you will not be distracted by shouts from other ICS users while playing.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Premove}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  PremoveCmd}}}{\f1  Premove
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Premove allows you to play a move on the board before you have received your opponent\rquote 
-s move.  This move is highlighted on the board using the }{\uldb Premove Highlight}{\v\uldb premoveHighlightColor}{ color, and is sent to the ICS as soon as your opponent\rquote 
-s move is received. To cancel a premove, either click twice on the piece that was premoved or premove an illegal move.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Quiet Play
+}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  QuietPlayCmd}}}{\f1  Quiet Play
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Quiet Play is on, WinBoard will automatically issue an ICS }{\b\f1 set shout 0}{\f1  command whenever you start a game and a }{\b\f1 set shout 1}{\f1 
+ command whenever you finish one. Thus you will not be distracted by shouts from other ICS users while playing.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Premove}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  PremoveCmd}}}{\f1  Premove
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {Premove allows you to play a move on the board before you have received your opponent\rquote s move.  This move is highlighted on the board using the }{\uldb Premove Highlight
+}{\v\uldb premoveHighlightColor}{ color, and is sent to the ICS as soon as your opponent\rquote s move is received. To cancel a premove, either click twice on the piece that was premoved or premove an illegal move.
 \par This group of controls allows you to set the following options: }{\uldb premove}{\v premove}{, }{\uldb premoveWhite}{\v premoveWhite}{, }{\uldb premoveWhiteText}{\v premoveWhiteText}{, }{\uldb premoveBlack}{\v premoveBlack}{, }{\uldb premoveBlackText}{\v 
 premoveBlackText}{.
-\par }\pard\plain \s2\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ ICS Alarm}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ ICSAlarm}}}{ICS Alarm
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {When }{\b icsAlarm}{ is set to True, the }{\uldb alarm sound}{\v soundIcsAlarm}{
- is played when your clock counts down to }{\uldb icsAlarmTime}{\v icsAlarmTime}{ seconds.  For ICS games with time controls that include an increment, the alarm will sound each time the clock counts down to the }{\uldb icsAlarmTime}{\v icsAlarmTime}{.
-
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  ICS Interaction Colors}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ICSInteractionColors}}}{\f1  ICS Interaction Colors
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Lets you change the colors and type styles that WinBoard uses to distinguish between different types of messages in the ICS Interaction window. The types distinguished are: shout, sshout, channel 1 tell, other chann
-el tell, kibitz (or whisper), personal tell (or new message notification), challenge, request (including abort, adjourn, draw, pause, and takeback), seek, and normal (all other messages).
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Fonts}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Fonts}}}{\f1  }{\f1\ul Fonts}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Lets you change the fonts WinBoard is using
-.  The clock font, message font and coordinates font are specific to each board size.  The tags font, comments font and ICS Interaction font are not dependent on the current size of the board.  The \'93Revert to Defaults\'94
- button will reset the clock font, message font and coordinates font for the current board size, and will set the tags font, message font and Ics Interaction font for all board sizes.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Sounds}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Sounds}}}{\f1  }{\f1\ul Sounds}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Lets you change the sounds that WinBoard plays for various events.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Move Sound}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  MoveSound}}}{\f1 
-If the Move sound is on, WinBoard alerts you by playing a sound after each of your opponent's moves (or after every move if you are observing a game on the Internet Chess Server). The sound is not played after moves you make or moves read from 
-a saved game file. If you turn on the Move sound when using WinBoard with the Internet Chess Server, you will probably want to give the }{\b\f1 set bell 0}{\f1 
- command to the ICS. Otherwise the ICS will send a bell character after every move (not just yours), causing W
-inBoard to play the ICS Bell sound too. Alternatively, you could turn off the ICS Bell sound in WinBoard, but that might cause you to miss ICS alerts for other interesting events.
+\par }\pard\plain \s2\li120\sb80\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ ICS Alarm}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ ICSAlarm}}}{ICS Alarm
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {When }{\b icsAlarm}{ is set to True, the }{\uldb alarm sound}{\v soundIcsAlarm}{ is played when your clock counts down to }{\uldb icsAlarmTime}{\v icsAlarmTime}{
+ seconds.  For ICS games with time controls that include an increment, the alarm will sound each time the clock counts down to the }{\uldb icsAlarmTime}{\v icsAlarmTime}{.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ ICS Interaction Colors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ICSInteractionColors}}}{\f1  ICS Interaction Colors
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the colors and type styles that WinBoard uses to distinguish between different types of
+ messages in the ICS Interaction window. The types distinguished are: shout, sshout, channel 1 tell, other channel tell, kibitz (or whisper), personal tell (or new message notification), challenge, request (including abort, adjourn, draw, pause, and takeb
+ack), seek, and normal (all other messages).
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Fonts}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Fonts}}}{\f1  }{\f1\ul Fonts}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+Lets you change the fonts WinBoard is using.  The clock font, message font and coordinates font are specific to each board size.  The tags font, comments font and ICS Interaction font are not dependent on the current size of the board.  The \ldblquote 
+Revert to Defaults\rdblquote  button will reset the clock font, message font and coordinates font for the current board size, and will set the tags font, message font and Ics Interaction font for all board sizes.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Sounds}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Sounds}}}{\f1  }{\f1\ul Sounds}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the sounds that WinBoard plays for various events.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Move Sound}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  MoveSound}}}{\f1 
+If the Move sound is on, WinBoard alerts you by playing a sound after each of your opponent's moves (or after every move if you are observing a game on the Internet Chess Server). The sound i
+s not played after moves you make or moves read from a saved game file. If you turn on the Move sound when using WinBoard with the Internet Chess Server, you will probably want to give the }{\b\f1 set bell 0}{\f1 
+ command to the ICS. Otherwise the ICS will send a bell c
+haracter after every move (not just yours), causing WinBoard to play the ICS Bell sound too. Alternatively, you could turn off the ICS Bell sound in WinBoard, but that might cause you to miss ICS alerts for other interesting events.
 \par The other sound events correspond directly to the types of messages that the }{\f1\uldb ICS Interaction Colors}{\v\f1 ICSInteractionColors}{\f1  option knows how to colorize.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Communications}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Communications}}}{\f1  }{\f1\ul Communications}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Lets you change the communication port parameters when the }{\f1\uldb 
-internetChessServerComPort}{\v\f1 internetChessServerComPort}{\f1  option is in use.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Load Game}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  LoadGameOptns}}}{\f1  }{\f1\ul Load Game}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Lets you change options used while loading games (}{\f1\uldb timeDelay}{\v\f1 timeDelay}{\f1 
- option).
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Save Game}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  SaveGameOptns}}}{\f1  }{\f1\ul Save Game}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Lets you change options used for saving games (}{\f1\uldb autoSaveGames}{\v\f1 autoSaveGames}{
-\f1 , }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1 , and }{\f1\uldb saveGameFile}{\v\f1 saveGameFile}{\f1  options).
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Time Control}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  TimeControlCmd}}}{\f1  }{\f1\ul Time Control}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Lets you change the time control to be used in games against a chess engine. Two types of timing are available.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 With conventional chess clocks, each player begins with his clock set to the }{\f1\uldb 
-timeControl}{\v\f1 timeControl}{\f1  period. When both players have made }{\f1\uldb movesPerSession}{\v\f1 movesPerSession}{\f1 
- moves, a new time control period begins. The time in the new period is added to whatever time the players have left on their clocks.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Sounds}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Sounds}}}{\f1  }{\f1\ul Game List}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you select which information is displayed in the Game List window.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Communications}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Communications}}}{\f1  }{\f1\ul Communications}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the communication port parameters when the }{\f1\uldb internetChessServerComPort}{\v\f1 internetChessServerComPort}{\f1  option is in use.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Load Game}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  LoadGameOptns}}}{\f1  }{\f1\ul Load Game}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change options used while loading games (}{\f1\uldb timeDelay}{\v\f1 timeDelay}{\f1  option).
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Save Game}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  SaveGameOptns}}}{\f1  }{\f1\ul Save Game}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change options used for saving games (}{\f1\uldb autoSaveGames}{\v\f1 autoSaveGames}{\f1 , }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1 , and }{\f1\uldb 
+saveGameFile}{\v\f1 saveGameFile}{\f1  options).
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Time Control}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  TimeControlCmd}}}{\f1  }{\f1\ul Time Control}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the time control to be used in games against a chess engine. Two types of timing are available.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 With conventional chess clocks, each player begins with his clock set to the }{\f1\uldb timeControl}{\v\f1 timeControl}{\f1  period. When both players have made }{
+\f1\uldb movesPerSession}{\v\f1 movesPerSession}{\f1  moves, a new time control period begins. The time in the new period is added to whatever time the players have left on their clocks.
 \par With incremental clocks, each player is given an initial time allotment, and a }{\f1\uldb timeIncrement}{\v\f1 timeIncrement}{\f1 
  is added to his clock after every move. The increment may be zero, in which case the entire game must be finished within the initial time allotment.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Save Settings Now}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  SaveSettings}}}{\f1  }{\f1\ul Save Settings Now}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Save the current option settings to a file, along with the current window sizes and positions, to be automatically reloaded next time WinBoard is run. See }{\f1\uldb Settings}{\v\f1 Settings}{\f1  for the fine points.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Save Settings on Exit}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  SaveSettingsOnExit}}}{\f1  }{\f1\ul Save Settings on Exit}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If this option is on, the current settings are automatically saved when WinBoard exits, as with Save Settings Now.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Help Menu}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  HelpMenu}}}{\b0\f1\fs18\up6  }{\cs58\f1\fs20\super ${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Help Menu}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Help Menu
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Help Contents}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  HelpContents}}}{\f1  Help Contents
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Brings up this help file, starting at the Contents page.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Search for Help on}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  SearchHelp}}}{\f1  Help Index
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Brings up this help file, starting at the Index/Find dialog.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  How to Use Help}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  HelpHelp}}}{\f1  How to Use Help
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Brings up the standard help file that explains how to use Windows Help.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Hint}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Hint}}}{\f1  Hint
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Displays a move hint from the chess engine.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Book}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Book}}}{\f1  Book
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Displays a list of possible moves from the chess engine\rquote 
-s opening book. The first column gives m
-oves, the second column gives one possible response for each move, and the third column shows the number of lines in the book that include the move from the first column. If you select this option and nothing happens, the engine is out of its book or does
- not support the book command.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  About WinBoard}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  AboutWinBoard}}}{\f1  About WinBoard
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Displays the WinBoard version number.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  ICS Interaction Context Menu}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ICSInteractionContextMenu}}}{\b0\f1\fs18\up6  }{\cs58\f1\fs20\super $
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  ICS Interaction Context Menu}}+{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20 ICS Interaction Context Menu
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 To se
-e this menu, press the right mouse button anywhere in the output (upper) pane of the ICS Interaction window. Pressing the right mouse button in the input (lower) pane gives a standard editing context menu, not described here. Use the }{\b\f1 help}{\f1 
- command on ICS to learn what these commands mean.
-\par You can customize the lower part of this menu (below the Paste option) by setting the }{\f1\uldb icsMenu}{\v\f1 icsMenu}{\f1  option. The easiest way to accomplish this is to edit your }{\f1\uldb settings file}{\v\f1 settings}{\f1  with Notepa
-d or another plain text editor. Sorry, there is no graphical user interface for customizing the menu.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Copy and Paste}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  CopyAndPaste}}}{\f1  Copy and Paste
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Copies the current selection to the clipboard, then pastes it to the input box. As a shortcut to this function, you can press the middle mouse button (if you have one), or Shift plus the right mouse button.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Copy}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Copy}}}{\f1  Copy
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Copies the current selection to the clipboard.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Paste}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Paste}}}{\f1  Paste
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Pastes the clipboard contents to the input box.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{
-\f1\revised\revauth1\revdttm-1506646559  Who}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  Who}}}{\f1  Who
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sends the command \'93who\'94}{\b\i\f1  }{\f1 to ICS.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{
-\f1\revised\revauth1\revdttm-1506646559  Players}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  Players}}}{\f1  Players
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sends the command \'93players\'94}{\b\i\f1  }{\f1 to ICS.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{
-\f1\revised\revauth1\revdttm-1506646559  Games}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  Games}}}{\f1  Games
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sends the command \'93games\'94}{\b\i\f1  }{\f1 to ICS.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{
-\f1\revised\revauth1\revdttm-1506646559  Sought}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  Sought}}}{\f1  Sought
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sends the command \'93sought\'94}{\b\i\f1  }{\f1 to ICS.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Tell}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Tell}}}{\f1  Tell (name)
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Inserts \'93tell }{\i\f1 name }{\f1 \'94}{\b\i\f1  }{\f1 into the input box. The string }{
-\i\f1 name }{\f1 is the current selection if it is not empty. Otherwise }{\i\f1 name }{\f1 is the word surrounding the mouse position, where a \'93word\'94 is a string of letters, digits, or hyphens (-), such as an ICS user handle or game number.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Message}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Message}}}{\f1  Message (name)
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Inserts \'93message }{\i\f1 name }{\f1 \'94}{\b\i\f1  }{\f1 into the input box, where }{\i\f1 
-name}{\f1  is as defined above.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Finger}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Finger}}}{\f1  Finger (name)
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sends the command \'93finger }{\i\f1 name}{\f1 \'94}{\b\i\f1  }{\f1 to ICS, where }{\i\f1 name}
-{\f1  is as defined above. 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Vars}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Vars}}}{\f1  Vars (name)
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sends the command \'93vars }{\i\f1 name}{\f1 \'94}{\b\i\f1  }{\f1 to ICS, where }{\i\f1 name}{
-\f1  is as defined above. 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Observe}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Observe}}}{\f1  Observe (name)
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sends the command \'93observe }{\i\f1 name}{\f1 \'94}{\b\i\f1  }{\f1 to ICS, where }{\i\f1 name
-}{\f1  is as defined above. Here }{\i\f1 name}{\f1  can be either a user handle or a game number.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Match}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Match}}}{\f1  Match (name)
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sends the command \'93match }{\i\f1 name}{\f1 \'94}{\b\i\f1  }{\f1 to ICS, where }{\i\f1 name}{
-\f1  is as defined above. 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{
-\f1\revised\revauth1\revdttm-1506646559  Play}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  Play}}}{\f1  Play (name)
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sends the command \'93play }{\i\f1 name}{\f1 \'94}{\b\i\f1  }{\f1 to ICS, where }{\i\f1 name}{
-\f1  is as defined above. Here }{\i\f1 name}{\f1  can be either a user handle or a seek ad number.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Buttons}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Buttons}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Buttons}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\b0\f1\fs18\up6  }{\f1\fs20 BUTTONS
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Back to Start}}}{\f1  <<
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Same as }{\f1\uldb Back to Start}{\v\f1 BacktoStart}{\f1 .
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Backward}}}{\f1  <
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Same as }{\f1\uldb Backward}{\v\f1 Backward}{\f1 .
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Pause}}}{\f1  P
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Same as }{\f1\uldb Pause}{\v\f1 Pause}{\f1 . The button label changes to }{\b\f1 C}{\f1 
- while WinBoard is pausing.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Forward}}}{\f1  >
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Same as }{\f1\uldb Forward}{\v\f1 Forward}{\f1 .
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Forward to End}}}{\f1  >>
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Same as }{\f1\uldb Forward to End}{\v\f1 ForwardtoEnd}{\f1 .
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Command Line Options}}K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Options}}}{\f1\fs20  }{\cs58\f1\fs20\super #{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Options}}}{\f1\fs20  }{\cs58\f1\fs20\super ${\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Command Line Options}}}{\f1\fs20  }{\cs58\f1\fs20\super +{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  COMMAND LINE OPTIONS
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-All WinBoard options can be set either on the command line (if you start WinBoard by typing into an MSDOS Prompt box), in the Properties/Shortcut/Target box of a Windows shortcut, in a }{\f1\uldb settings file}{\v\f1 settings}{\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Save Settings Now}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  SaveSettings}}}{\f1  }{\f1\ul Save Settings Now}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Save the current option settings to a file, along with the current window sizes and positions, to be automatically reloaded next time WinBoard is run. See }{\f1\uldb 
+Settings}{\v\f1 Settings}{\f1  for the fine points.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Save Settings on Exit}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  SaveSettingsOnExit}}}{\f1  }{\f1\ul Save Settings on Exit}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is on, the current settings are automatically saved when WinBoard exits, as with Save Settings Now.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Help Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  HelpMenu}}}{\b0\f1\fs18\up6  }{\cs58\f1\fs20\super ${\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1  Help Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs20 
+ Help Menu
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Help Contents}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  HelpContents}}}{\f1  Help Contents
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Brings up this help file, starting at the Contents page.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Search for Help on}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  SearchHelp}}}{\f1  Help Index
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Brings up this help file, starting at the Index/Find dialog.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ How to Use Help}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  HelpHelp}}}{\f1  How to Use Help
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Brings up the standard help file that explains how to use Windows Help.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Hint}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Hint}}}{\f1  Hint
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Displays a move hint from the chess engine.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Book}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Book}}}{\f1  Book
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Displays a list of possible moves from the chess engine\rquote s opening book. The first column g
+ives moves, the second column gives one possible response for each move, and the third column shows the number of lines in the book that include the move from the first column. If you select this option and nothing happens, the engine is out of its book o
+r does not support the book command.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ About WinBoard}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  AboutWinBoard}}}{\f1  About WinBoard
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Displays the WinBoard version number.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  ICS Interaction Context Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ICSInteractionContextMenu}}}{\b0\f1\fs18\up6  }{\cs58\f1\fs20\super ${\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1  ICS Interaction Context Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}
+{\f1  main}}}{\f1\fs20 ICS Interaction Context Menu
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 To see this menu, press the right mouse button anywhere in the output (upper) pane of the ICS Interaction window. Pressing the ri
+ght mouse button in the input (lower) pane gives a standard editing context menu, not described here. Use the }{\b\f1 help}{\f1  command on ICS to learn what these commands mean.
+\par You can customize the lower part of this menu (below the Paste option) by setting the }{\f1\uldb icsMenu}{\v\f1 icsMenu}{\f1  option. The easiest way to accomplish this is to edit your }{\f1\uldb settings file}{\v\f1 settings}{\f1 
+ with Notepad or another plain text editor. Sorry, there is no graphical user interface for customizing the menu.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Copy and Paste}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  CopyAndPaste}}}{\f1  Copy and Paste
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Copies the current selection to th
+e clipboard, then pastes it to the input box. As a shortcut to this function, you can press the middle mouse button (if you have one), or Shift plus the right mouse button.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Copy}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Copy}}}{\f1  Copy
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Copies the current selection to the clipboard.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Paste}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Paste}}}{\f1  Paste
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Pastes the clipboard contents to the input box.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559  Who}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  Who}}}{\f1  Who
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote who\rdblquote }{\b\i\f1  }{\f1 to ICS.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559  Players}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  Players}}}{\f1  Players
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote players\rdblquote }{\b\i\f1  }{\f1 to ICS.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559  Games}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  Games}}}{\f1  Games
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote games\rdblquote }{\b\i\f1  }{\f1 to ICS.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559  Sought}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  Sought}}}{\f1  Sought
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote sought\rdblquote }{\b\i\f1  }{\f1 to ICS.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Tell}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Tell}}}{\f1  Tell (name)
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Inserts \ldblquote tell }{\i\f1 name }{\f1 \rdblquote }{\b\i\f1  }{\f1 into the input box. The string }{\i\f1 name }{\f1 
+is the current selection if it is not empty. Otherwise }{\i\f1 name }{\f1 is the word surrounding the mouse position, where a \ldblquote word\rdblquote  is a string of letters, digits, or hyphens (-), such as an ICS user handle or game number.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Message}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Message}}}{\f1  Message (name)
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Inserts \ldblquote message }{\i\f1 name }{\f1 \rdblquote }{\b\i\f1  }{\f1 into the input box, where }{\i\f1 name}{\f1  is as defined above.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Finger}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Finger}}}{\f1  Finger (name)
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote finger }{\i\f1 name}{\f1 \rdblquote }{\b\i\f1  }{\f1 to ICS, where }{\i\f1 name}{\f1  is as defined above. 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Vars}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Vars}}}{\f1  Vars (name)
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote vars }{\i\f1 name}{\f1 \rdblquote }{\b\i\f1  }{\f1 to ICS, where }{\i\f1 name}{\f1  is as defined above. 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Observe}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Observe}}}{\f1  Observe (name)
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote observe }{\i\f1 name}{\f1 \rdblquote }{\b\i\f1  }{\f1 to ICS, where }{\i\f1 name}{\f1  is as defined above. Here }{\i\f1 name}{\f1 
+ can be either a user handle or a game number.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Match}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Match}}}{\f1  Match (name)
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote match }{\i\f1 name}{\f1 \rdblquote }{\b\i\f1  }{\f1 to ICS, where }{\i\f1 name}{\f1  is as defined above. 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559  Play}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  Play}}}{\f1  Play (name)
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote play }{\i\f1 name}{\f1 \rdblquote }{\b\i\f1  }{\f1 to ICS, where }{\i\f1 name}{\f1  is as defined above. Here }{\i\f1 name}{\f1 
+ can be either a user handle or a seek ad number.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Buttons}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Buttons}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super $}{\f1  Buttons}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\b0\f1\fs18\up6  }{\f1\fs20 BUTTONS
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Back to Start}}}{\f1  <<
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Same as }{\f1\uldb Back to Start}{\v\f1 BacktoStart}{\f1 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Backward}}
+}{\f1  <
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Same as }{\f1\uldb Backward}{\v\f1 Backward}{\f1 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Pause}}}{
+\f1  P
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Same as }{\f1\uldb Pause}{\v\f1 Pause}{\f1 . The button label changes to }{\b\f1 C}{\f1  while WinBoard is pausing.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Forward}}}
+{\f1  >
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Same as }{\f1\uldb Forward}{\v\f1 Forward}{\f1 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ Forward to End}}}{\f1  >>
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Same as }{\f1\uldb Forward to End}{\v\f1 ForwardtoEnd}{\f1 .
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\par }{\cf2 Note that using the mouse wheel has the same effect as using the < or > button.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Command Line Options}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Options}}}{\f1\fs20  }{\cs58\f1\fs20\super #{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Options}}}{\f1\fs20  }{\cs58\f1\fs20\super ${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $
+}{\f1  Command Line Options}}}{\f1\fs20  }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  COMMAND LINE OPTIONS
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 All WinBoard options can be set either on the command lin
+e (if you start WinBoard by typing into an MSDOS Prompt box), in the Properties/Shortcut/Target box of a Windows shortcut, in a }{\f1\uldb settings file}{\v\f1 settings}{\f1 
 , or in the Additional Options box of the WinBoard startup dialog. Exactly the same syntax is used in all four places. Most options can also be set from the menus and saved using }{\f1\uldb Save Settings Now}{\v\f1 SaveSettings}{\f1  or }{\f1\uldb 
 Save Settings on Exit}{\v\f1 SaveSettingsOnExit}{\f1 , so most people will not need to read this section.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Most options have two names, a long one that is easy to read and a short one that is easy to type. To turn on a boolean (true/false) option }{\i\f1 opt}{\f1 , you can just give its short name preceded by a minus sign or slash (-}{\i\f1 opt}{\f1  or /}{
-\i\f1 opt}{\f1 ); to turn one off, prefix the short name by an \'93x\'94 or an extra minus sign (-x}{\i\f1 opt}{\f1  or /-}{\i\f1 opt}{\f1 
-). To set any other kind of option, or to set a boolean option using its long name, give the value after the name, separated by a space, colon, or equal sign. (-}{\i\f1 opt}{\f1  23 or /}{\i\f1 option}{\f1 :true). If a strin
-g option contains spaces or special characters, enclose it in double quotes and use the \\ quoting convention of C to name the special characters. Alternatively, you can enclose a string value in curly braces (/opt=\{string\}
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Most options have two names, a long one that is easy to read and a short one that is easy to type. To turn on a boolean (true/false) option }{\i\f1 opt}{\f1 
+, you can just give its short name preceded by a minus sign or slash (-}{\i\f1 opt}{\f1  or /}{\i\f1 opt}{\f1 ); to turn one off, prefix the short name by an \ldblquote x\rdblquote  or an extra minus sign (-x}{\i\f1 opt}{\f1  or /-}{\i\f1 opt}{\f1 
+). To set any other kind of option, or to set a boolean option using its long name, give the value after the name, separated by a space, colon, or equal sign. (-}{\i\f1 opt}{\f1  23 or /}{\i\f1 option}{\f1 
+:true). If a string option contains spaces or special characters, enclose it in double quotes and use the \\ quoting convention of C to name the special characters. Alternatively, you can enclose a string value in curly braces (/opt=\{string\}
 ), as long as the value does not contain a closing curly brace. If a filename option contains spaces, enclose it in either single or double quotes. In filename options, the \\
  character is not treated specially, so use single quotes around the outside of the value if it has double quotes inside (and vice versa).
-\par When you start WinBoard, it will pop up the Startup dialog box unless you provide sufficient options on the command line for WinBoard to determine which major mode to be in and what engines to use or chess server to connect to. To by
-pass this box, you must at minimum give one of the three options }{\f1\uldb /cp}{\v\f1 cp}{\f1 , /}{\f1\uldb ics}{\v\f1 ics}{\f1 , or /}{\f1\uldb ncp}{\v\f1 ncp}{\f1 .  If you give the /cp option, you must also give the /}{\f1\uldb fcp}{\v\f1 fcp}{\f1 
- and /}{\f1\uldb scp}{\v\f1 scp}{\f1  options. If you give the /ics option, you must also give the /}{\f1\uldb icshost}{\v\f1 icshost}{\f1  option.
-\par }\pard\plain \s29\ql \fi-240\li360\ri0\sb60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin360\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\uldb Chess Engine Options}{\v\f1 ChessEngineOptions}{\f1 
+\par When you start WinBoard, it will pop 
+up the Startup dialog box unless you provide sufficient options on the command line for WinBoard to determine which major mode to be in and what engines to use or chess server to connect to. To bypass this box, you must at minimum give one of the three op
+tions }{\f1\uldb /cp}{\v\f1 cp}{\f1 , /}{\f1\uldb ics}{\v\f1 ics}{\f1 , or /}{\f1\uldb ncp}{\v\f1 ncp}{\f1 .  If you give the /cp option, you must also give the /}{\f1\uldb fcp}{\v\f1 fcp}{\f1  and /}{\f1\uldb scp}{\v\f1 scp}{\f1 
+ options. If you give the /ics option, you must also give the /}{\f1\uldb icshost}{\v\f1 icshost}{\f1  option.
+\par }\pard\plain \s29\fi-240\li360\sb60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\uldb Chess Engine Options}{\v\f1 ChessEngineOptions}{\f1 
+\par }{\f1\uldb UCI Engine Support                  !NEW!}{\v\f1 UCIEngineSupport}{\f1 
 \par }{\f1\uldb Internet Chess Server Options}{\v\f1 InternetChessServerOptions}{\f1 
 \par }{\f1\uldb Load and Save Options}{\v\f1 LoadAndSaveOptions}{\f1 
 \par }{\f1\uldb User Interface Options}{\v\f1 UserInterfaceOptions}{\f1 
+\par }{\f1\uldb Adjudication Options                   !NEW!}{\v\f1 AdjudicationOptions}{\f1 
 \par }{\f1\uldb Other Options}{\v\f1 OtherOptions}{\f1 
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Chess Engine Options}}${\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Chess Engine Options}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ChessEngineOptions}}+{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Chess Engine Options
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  cp}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  cp}}}{\f1 /cp}{\b0\f1  or}{\f1  /xcp}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  chessProgram}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  chessProgram}}}{\f1 /chessProgram }{\i\f1 true|false
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If true, puts WinBoard in chess engine mode. In this mode, you can play against a chess program running on your PC or use it as an analysis partner.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  tc}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  tc}}}{\f1 /tc }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  timeControl}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  timeControl}}}{\f1 /timeControl }{\i\f1 minutes[:seconds]
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Each player be
-gins with his clock set to the timeControl period. Default: 5 minutes. The additional options movesPerSession and timeIncrement are mutually exclusive.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  mps}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  mps}}}{\f1 /mps }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  movesPerSession}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  movesPerSession}}}{\f1 /movesPerSession }{\i\f1 moves}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 When both players hav
-e made movesPerSession moves, a new timeControl period is added to both clocks. Default: 40 moves.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  inc}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  inc}}}{\f1 /inc }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  timeIncrement}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  timeIncrement}}}{\f1 /timeIncrement }{\i\f1 seconds
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If this option is specified, movesPerSession is ignored. Instead, after each player's move, timeIncrement seconds are added to his clock. Use -timeIncrement 0 if you want to require the entire game to be played in one timeControl period, with no increment
-. Default: -1, which specifies movesPerSession mode.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  clock }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  clock }}}{\f1  /clock }{\b0\f1 or }{\f1 /xclock}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  clockMode}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  clockMode}}}{\f1  /clockMode }{\i\f1 true|false
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Determines whether or not to display the chess clocks. If clockMode is False, the clocks are not shown, but the 
-side that is to play next is still highlighted. Also, unless searchTime is set, the chess engine still keeps track of the clock time and uses it to determine how fast to make its moves.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  st}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  st}}}{\f1  /st }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  searchTime }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  searchTime }}}{\f1  /searchTime }{\i\f1 minutes[:seconds]}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Tells the chess engine to spend at most the given amount of time searching for each of its moves. Without this option, the engine chooses its search time based on the number of moves and amount of time remaining until the next time contro
-l. Setting this option also sets clockMode to False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  sd}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  sd}}}{\f1  /depth }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  searchDepth}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  searchDepth}}}{\f1  /searchDepth }{\i\f1 number}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Tells the chess engine to look ahead at most the given number of moves when searching for a move to make. Without this option, th
-e engine chooses its search depth based on the number of moves and amount of time remaining until the next time control. With the option, the engine will cut off its search early if it reaches the specified depth.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{
-\f1\revised\revauth1\revdttm-1506646559  ponder}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  ponder}}}{\f1  /ponder}{\b0\f1  or }{\f1 /xponder}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{
-\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {
-\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559  ponderNextMove}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto
-\nowidctlpar\faauto\pnrdate0\pnrnot1\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  ponderNextMove}}}{\f1 
- /ponderNextMove }{\i\f1 true|false
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Ponder Next Move}{\v\f1 ponderNextMoveCmd}{\f1  option. Default: True.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Chess Engine Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1  Chess Engine Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ChessEngineOptions}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  Chess Engine Options
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  cp}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  cp}}}{\f1 /cp}{\b0\f1  or}{\f1  /xcp}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  chessProgram}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  chessProgram}}}{\f1 
+/chessProgram }{\i\f1 true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If true, puts WinBoard in chess engine mode. In this mode, you can play against a chess program running on your PC or use it as an analysis partner.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  tc}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  tc}}}{\f1 /tc }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  timeControl}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  timeControl}}}{\f1 /timeControl }{\i\f1 minutes
+[:seconds]
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Each player begins with his clock set to the timeControl period. Default: 5 minutes. The additional options movesPerSession and timeIncrement are mutually exclusive.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  mps}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  mps}}}{\f1 /mps }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  movesPerSession}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  movesPerSession}}}{\f1 /movesPerSession }{\i\f1 
+moves}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 When both players have made movesPerSession moves, a new timeControl period is added to both clocks. Default: 40 moves.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  inc}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  inc}}}{\f1 /inc }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  timeIncrement}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  timeIncrement}}}{\f1 /timeIncrement }{\i\f1 seconds
 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  thinking}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  thinking}}}{\f1  /thinking}{\b0\f1  or }{\f1 /xthinking}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  showThinking}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  showThinking}}}{\f1  /showThinking }{\i\f1 true|false
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Show Thinking}{\v\f1 showThinkingCmd}{\f1  option. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  periodic }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  periodic}}}{\f1  /periodic }{\b0\f1 or }{\f1 /xperiodic}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  periodicUpdates}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  periodicUpdates}}}{\f1  /periodicUpdates }{\i\f1 true|false
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Periodic Updates}{\v\f1 periodicUpdatesCmd}{\f1  option. Default: True.
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is specified, movesPerSession is ignored. Instead, after each player's move, timeIncrement seconds are added to his clock. Use -ti
+meIncrement 0 if you want to require the entire game to be played in one timeControl period, with no increment. Default: -1, which specifies movesPerSession mode.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  clock }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  clock }}}{\f1  /clock }{\b0\f1 or }{\f1 /xclock}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  clockMode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  clockMode}}}{\f1 
+ /clockMode }{\i\f1 true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Determines whether or not to display the ch
+ess clocks. If clockMode is False, the clocks are not shown, but the side that is to play next is still highlighted. Also, unless searchTime is set, the chess engine still keeps track of the clock time and uses it to determine how fast to make its moves.
 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  mg }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  mg }}}{\f1  /mg }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  matchGames }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  matchGames}}}{\f1  /matchGames }{\i\f1 n
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Automatically runs an }{\b\i\f1 n}{\i\f1 -}{\f1 
-game match between two chess engines, with alternating colors. If the }{\f1\uldb loadGameFile}{\v\f1 loadGameFile}{\f1  or }{\f1\uldb loadPositionFile}{\v\f1 loadPositionFile}{\f1  option is set, WinBoard will start each game with 
-the given opening moves or the given position; otherwise, the games will start with the standard initial chess position. If the }{\f1\uldb saveGameFile}{\v\f1 saveGameFile}{\f1 
- option is set, a move record for the match will be appended to the specified file. If the }{\f1\uldb savePositionFile}{\v\f1 savePositionFile}{\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  st}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  st}}}{\f1  /st }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  searchTime }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  searchTime }}}{\f1  /searchTime }{\i\f1 
+minutes[:seconds]}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+Tells the chess engine to spend at most the given amount of time searching for each of its moves. Without this option, the engine chooses its search time based on the number of moves and amount of time remaining un
+til the next time control. Setting this option also sets clockMode to False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  sd}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  sd}}}{\f1  /depth }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  searchDepth}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  searchDepth}}}{\f1  /searchDepth }{\i\f1 number}{\f1 
+
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Tells the chess engine to look ahead at most the given number of moves when searching for a move to make. Without this option, the engine choos
+es its search depth based on the number of moves and amount of time remaining until the next time control. With the option, the engine will cut off its search early if it reaches the specified depth.
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 firstNPS}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 firstNPS}}}{\f1\cf11  /firstNPS }{\i\f1\cf11 number}{\f1\cf11 
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf11 secondNPS}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 secondNPS}}}{\f1\cf11  /secondNPS }{\i\f1\cf11 number}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Tells the chess
+ engine to use an internal time standard based on its node count, rather then wall-clock time, to make its time decisions. The time in virtual seconds should be obtained by dividing the node count through the given }{\i\f1\cf11 number}{\f1\cf11 
+, like the number was a rate in nodes per second. WinBoard will manage the clocks in accordance with this, relying on the number of nodes reported by the engine in its thinking output. If }{\i\f1\cf11 number}{\f1\cf11 
+ equals zero, it can obviously bnot be used to convert nodes to seconds, and the time reported by
+ the engine is used to decrement the WinBoard clock. The engine is supposed to report in CPU time it uses, rather than wall-clock time in this mode. Tis option can provide fairer conditions fo engine-engine matches on heavily loaded machines, or with very
+ fast games (where the wall clock is too inaccurate). \ldblquote Show Thinking\rdblquote  must be on for this option to work. Not many engines might support this yet!
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 firstTimeOdds}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 firstTimeOdds}}}{\f1\cf11  /firstTimeOdds }{\i\f1\cf11 factor}{\f1\cf11 
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf11 secondTimeOdds}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 secondTimeOdds}}}{\f1\cf11  /secondTimeOdds }{\i\f1\cf11 factor}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Reduces the time given to the mentioned engine by the given }{\i\f1\cf11 factor}{\f1\cf11 
+. If pondering is off, the effect is indistinguishable from what would happen if the engine was running on a }{\i\f1\cf11 factor}{\f1\cf11  times slower machine.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559  }{\f1\cf11 timeOddsMode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  }{\f1\cf11 timeOddsMode}}}{\f1\cf11  /timeOddsMode }{\i\f1\cf11 mode
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 This option determines how the case is handled when both engines have a time-odds handica
+p. If mode=1, the engine that gets the most time will always get the nominal time, as specified by the time-control options, and its opponent\rquote s time is normalized similarly. If mode=0, both play with reduced time.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559  ponder}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {
+\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  ponder}}}{\f1  /ponder}{\b0\f1  or }{\f1 /xponder}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559  ponderNextMove}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559  ponderNextMove}}}{\f1  /ponderNextMove }{\i\f1 true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Ponder Next Move}{\v\f1 ponderNextMoveCmd}{\f1  option. Default: True.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  thinking}}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  thinking}}}{\f1  /thinking}{\b0\f1  or }{\f1 /xthinking}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  showThinking}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ showThinking}}}{\f1  /showThinking }{\i\f1 true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Show Thinking}{\v\f1 showThinkingCmd}{\f1  option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  periodic }
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  periodic}}}{\f1  /periodic }{\b0\f1 or }{\f1 /xperiodic}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  periodicUpdates}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  periodicUpdates}}}{
+\f1  /periodicUpdates }{\i\f1 true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Periodic Updates}{\v\f1 periodicUpdatesCmd}{\f1  option. Default: True.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  mg }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  mg }}}{\f1  /mg }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  matchGames }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  matchGames}}}{\f1  /matchGames }{\i\f1 n
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Automatically runs an }{\b\i\f1 n}{\i\f1 -}{\f1 game match between two chess engines, with alternating colors. If the }{\f1\uldb loadGameFile}{\v\f1 loadGameFile}{\f1  or }
+{\f1\uldb loadPositionFile}{\v\f1 loadPositionFile}{\f1  option is set, WinBoard will start each game with the given opening moves or the given position; otherwise, the games will start with the standard initial chess position. If the }{\f1\uldb 
+saveGameFile}{\v\f1 saveGameFile}{\f1  option is set, a move record for the match will be appended to the specified file. If the }{\f1\uldb savePositionFile}{\v\f1 savePositionFile}{\f1 
  option is set, the final position reached in each game of the match will be appended to the specified file. When the match is over, WinBoard will display the match score and exit. Default: 0 (do not run a match).
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  mm }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  mm }}}{\f1  /mm }{\b0\f1 or }{\f1 /xmm}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  matchMode }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  matchMode }}}{\f1  /matchMode }{\i\f1 true|false
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Provided for backward compatibility. If true and matchGames=0, sets matchGames=1.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  fd}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  fd }}}{\f1  /fd }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  firstDirectory}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  firstDirectory}}}{\f1  /firstDirectory }{\i\f1 dir\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  sd}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  sd }}}{\f1  /sd }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  secondDirectory}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  secondDirectory}}}{\f1  /secondDirectory }{\i\f1 dir}{\cs58\f1\super  }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  fcp }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  fcp }}}{\f1  /fcp }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  firstChessProgram }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  firstChessProgram }}}{\f1  /firstChessProgram }{\i\f1 command\line }{\cs58\f1\super 
-K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  scp }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  scp }}}{\f1  /scp }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  secondChessProgram }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  secondChessProgram }}}{\f1  /secondChessProgram }{\i\f1 command}{\cs58\f1\super  }{
-\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Names of the chess engines and working directories in which they are to be run. The second chess engine is started only in Two Machines (match) mode. These arguments are parsed as filenames; that is, the \\
- character is interpreted literally, not as a C-style escape.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 The }{\i\f1 dir}{\f1 
- argument specifies the initial working directory for the chess engine. It should usually be the directory where the engine and its working files are installed. If }{\i\f1 dir}{\f1  is not an absolute pathname, it is interpreted relative to the direct
-ory from which WinBoard.exe itself was loaded. The }{\i\f1 dir}{\f1  argument is ignored if the chess engine is being run on a remote machine (see firstHost and secondHost below). The default value for }{\i\f1 dir }{\f1 
-"", meaning that the chess engine is expected to be installed in the same directory as WinBoard.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  mm }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  mm }}}{\f1  /mm }{\b0\f1 or }{\f1 /xmm}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  matchMode }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  matchMode }}}{\f1 
+ /matchMode }{\i\f1 true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Provided for backward compatibility. If true and matchGames=0, sets matchGames=1.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 matchPause}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 matchPause}}}{\f1\cf11  /matchPause }{\i\f1\cf11 number}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Sets the length of the pause between games in match mode to }{\i\f1\cf11 number}{\f1\cf11  msec. Default
+ value is 10000, i.e. 10 sec. (If this pause is too short, engines not implementing \lquote ping\rquote 
+ will sometimes send the last move of their previous game only when a new game has started, at which time the move is illegal, and causes them to forfeit the game.)
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  fd}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  fd }}}{\f1  /fd }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  firstDirectory}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  firstDirectory}}}{\f1  /firstDirectory }{\i\f1 dir
+\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  sd}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super #}{\f1  sd }}}{\f1  /sd }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  secondDirectory}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  secondDirectory}}}{\f1  /secondDirectory }{\i\f1 dir}{\cs58\f1\super  }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf11 fcp }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super #}{\f1\cf11  fcp }}}{\f1  /fcp }{\b0\f1 or}{\f1  }{
+\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super K}{\f1\cf11  firstChessProgram }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super #}{\f1\cf11  firstChessProgram }}}{\f1  /firstChessProgram }{\i\f1 command\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\cf11\super K}{\f1\cf11  scp }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super #}{\f1\cf11  scp }}}{\f1  /scp }{\b0\f1 or}{\f1  }{\cs58\f1\super K
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super K}{\f1\cf11  secondChessProgram }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\cf11\super #}{\f1\cf11  secondChessProgram}{\f1  }}}{\f1  /secondChessProgram }{\i\f1 command}{\cs58\f1\super  }{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Names of the chess engines and working directories in which they are to be run. The second chess engine i
+s started only in Two Machines (match) mode. These arguments are parsed as filenames; that is, the \\ character is interpreted literally, not as a C-style escape.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The }{\i\f1 dir}{\f1  argument specifies the initial working directory for the chess engine. It should usual
+ly be the directory where the engine and its working files are installed. If }{\i\f1 dir}{\f1  is not an absolute pathname, it is interpreted relative to the directory from which WinBoard.exe itself was loaded. The }{\i\f1 dir}{\f1 
+ argument is ignored if the chess engine is being run on a remote machine (see firstHost and secondHost below). The default value for }{\i\f1 dir }{\f1 "", meaning that the chess engine is expected to be installed in the same directory as WinBoard.
 \par The }{\i\f1 command}{\f1  argument is actually the command line to the chess engine, so if the engine itself needs command line arguments, you can include them by enclosing }{\i\f1 command}{\f1 
- in single or double quotes. If the engine name or an engine argument has a space in it, use single quotes around the whole }{\i\f1 command, }{\f1 
-and inside them use double quotes around each item that contains spaces. If the engine name has more than one period in it (for example, }{\f2 QChess1.5.exe}{\f1 ), you must include the "}{\f2 .exe}{\f1 
-" extension; otherwise you can leave it out. The default value for }{\i\f1 command}{\f1  is "", which brings up the startup dialog to ask which engines you want.
+ in single or double quotes. If the engine name or an engine argument has a space in it, use single quotes around the whole }{\i\f1 command, }{\f1 and inside them use double quo
+tes around each item that contains spaces. If the engine name has more than one period in it (for example, }{\f2 QChess1.5.exe}{\f1 ), you must include the "}{\f2 .exe}{\f1 " extension; otherwise you can leave it out. The default value for }{\i\f1 command
+}{\f1  is "", which brings up the startup dialog to ask which engines you want.
 \par Examples:
-\par }\pard\plain \s19\ql \fi-518\li1036\ri0\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin1036\itap0 \f6\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2 WinBoard /cp /fd="C:\\Program Files\\
-Crafty" /fcp=WCrafty-15.12.exe /scp=GNUChess
+\par }\pard\plain \s19\fi-518\li1036\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2 WinBoard /cp /fd="C:\\Program Files\\Crafty" /fcp=WCrafty-15.12.exe /scp=GNUChess
 \par WinBoard /cp /fd="C:\\Miracle Games" /fcp='"Miracle Chess.exe" /wow' /scp=GNUChess
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  fh }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  fh }}}{\f1  /fh }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  firstHost }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  firstHost }}}{\f1  /firstHost }{\i\f1 host\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  sh }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  sh }}}{\f1  /sh }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  secondHost }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  secondHost }}}{\f1  /secondHost }{\i\f1 host}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Hosts on which the chess engines are to run. The default for each is "localhost". If you specify another host, WinBoard}{\i\f1  }{\f1 uses }{\f1\uldb rsh}{\v\f1 rsh}{\f1 
- to run the chess program there. The /fd and /sd flags do not work in conjunction with these flags; if you need a rem
-ote chess engine to run somewhere other than your default login directory on the remote machine, you will have to include a "cd" command in the argument to /fcp or /scp.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  initString}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  initString}}}{\f1  /firstInitString }{\b0\f1 or }{\f1 /initString }{\i\f1 string\line }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  secondInitString}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  secondInitString}}}{\f1  /secondInitString }{\i\f1 string}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 The strings that are sent to initialize the chess engines. Default: "new\\nrandom\\n". The "\\
-n" sequences represent newlines. You can type "\\n" on the command line or in a }{\f1\uldb settings file}{\v\f1 settings}{\f1 , and WinBoard will convert it to a newline.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 All chess engines require the "new" command to start a new game.
-\par You can remove the "random" command if you like; including it causes GNU Chess to randomize its move selection slightly so that it doesn't play the sam
-e moves in every game. Even without "random", GNU Chess randomizes its choice of moves from its opening book. You can also try adding other commands to the initString; see the GNU Chess documentati{\*\bkmkstart _Hlt386545814}o{\*\bkmkstart _Hlt386567280}
-{\*\bkmkend _Hlt386545814}n{\*\bkmkend _Hlt386567280} (gnuchess.txt) for details. Crafty ignores the "random" command; see its documentation for the commands it accepts.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  initString}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  initString}}}{\f1  /firstComputerString }{\i\f1 string\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  secondInitString}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  secondInitString}}}{\f1  /secondComputerString }{\i\f1 string}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If the chess engine is playing against another computer program (whether locally or on a chess server), by default the command "computer\\
-n" is sent to it. Some chess engines change their playing style when they receive this command. If you do not want the engine to know when it is playing another computer, you can set the string to "".
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  fb }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  fb }}}{\f1  /fb }{\b0\f1 or }{\f1 /xfb}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  firstPlaysBlack }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  firstPlaysBlack}}}{\f1  /firstPlaysBlack }{\i\f1 true|false
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 In games between two chess programs, the firstChessProgram normally plays w
-hite. (This is a change from earlier versions of WinBoard.) If this option is True, firstChessProgram plays black. In a multi-game match, this option affects the colors only for the first game; they still alternate in subsequent games.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  reuse}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  reuse}}}{\f1 /reuse}{\cs58\f1\super  }{\b0\f1 or }{\f1 /xreuse}{\b0\f1 , or }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  reuseFirst}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  reuseFirst}}}{\f1 /reuseFirst}{\i\f1  true|false\line }{\cs58\f1\super K
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  reuse2}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  reuse2}}}{\f1 /reuse2}{\cs58\f1\super  }{\b0\f1 or }{\f1 /xreuse2}{\b0\f1 , or }{
-\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  reuseSecond}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  reuseSecond}}}{\f1 /reuseSecond}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If this option is True (the default), WinBoard}{\i\f1  }{\f1 
-uses the same chess engine process repeatedly when playing multiple games. If the option is False, WinBoard kills off the chess engine after every game and starts a fresh one for the next game. Starting a fresh chess engine can be slow, so it is not recom
-mended. However, some chess engines may not work properly when reused, such as versions of Crafty earlier than 12.0.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  firstProtocolVersion}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  firstProtocolVersion}}}{\f1 /firstProtocolVersion }{\i\f1 ver\line }{\cs58\f1\super 
-K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  secondProtocolVersion}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  secondProtocolVersion}}}{\f1 /secondProtocolVersion }{\i\f1 ver}{\f1 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 The basic rule is thus that what is inside 
+the quotes delimiting the argument to /fcp and /scp, all goes to the engine, and is ignored by WinBoard. WinBoard 4.3.13 and later, however, knows an exception to this: If, within the quotes, the word WBopt appears, everything that follows this word will 
+b
+e interpreted as a WinBoard argument, in stead of being passed to the engine on startup of the latter. (The WBopt itself is also not passed to the engine.) This possibility of hiding WinBoard arguments in the engine command is provided in order to create 
+o
+ptions that follow the engine in a tournament, when a tournament manager like PSWBTM is used to invoke WinBoard. Because, in order to apply to a given engine, some options need to know if they apply to first or second engine, which might vary during the t
+ournament, options hidden inside the engine command-line can contain \lquote %s\rquote  which will be replaced at the time the option is used by \lquote first\rquote  or \lquote second\rquote , as applicable.
+\par Examples:
+\par }\pard\plain \s19\fi-518\li1036\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\cf11 WinBoard /cp /fd="C:\\Engines\\Crafty" /fcp=\rdblquote WCrafty-15.12 WBopt /%sTimeOdds=2\rdblquote  /scp=GNUChess
 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-This option specifies which version of the chess engine communication protocol to use. By default, version-number is 2. In version 1, the "protover" command is not sent to the engine; since version 1 is a subset of version 2, not
-hing else changes. Other values for version-number are not supported.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Internet Chess Server Options}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Internet Chess Server Options}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  InternetChessServerOptions}}}{\f1\fs20  Internet Chess Server Options
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  ics }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ics }}}{\f1  /ics }{\b0\f1 or }{\f1 /xics}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  internetChessServerMode}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  internetChessServerMode}}}{\f1  /internetChessServerMode}{\i\f1  true|false}{\f1 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Meaning that Crafty will have to play with half the time GNUChess will get.
+\par }\pard\plain \s19\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  fh }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  fh }}}{\f1  /fh }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  firstHost }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  firstHost }}}{\f1  /firstHost }{\i\f1 host\line }{
+\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  sh }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super #}{\f1  sh }}}{\f1  /sh }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  secondHost }}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  secondHost }}}{\f1  /secondHost }{\i\f1 host}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Hosts on which the chess engines are to run. The default for each is "localhost". If you specify another host, WinBoard}{\i\f1  }{\f1 uses }{\f1\uldb rsh}{\v\f1 rsh}{\f1 
+ to run the chess program there. The /fd and /sd flags do not work in conjunction with these flags; if you need a remote chess engine to run somewhere other than your default login directory on the remote machine, you will have to in
+clude a "cd" command in the argument to /fcp or /scp.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  initString
+}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  initString}}}{\f1  /firstInitString }{\b0\f1 or }{\f1 /initString }{\i\f1 string\line }{\cs58\f1\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  secondInitString}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ secondInitString}}}{\f1  /secondInitString }{\i\f1 string}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The strings that are sent to initialize the chess engines. Default: "new\\nrandom\\n". The "\\n" sequences represent newlines. You can type "\\
+n" on the command line or in a }{\f1\uldb settings file}{\v\f1 settings}{\f1 , and WinBoard will convert it to a newline.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 All chess engines require the "new" command to start a new game.
+\par You can remove the "random" command if you like; including it causes GNU Chess to rando
+mize its move selection slightly so that it doesn't play the same moves in every game. Even without "random", GNU Chess randomizes its choice of moves from its opening book. You can also try adding other commands to the initString; see the GNU Chess docum
+entati{\*\bkmkstart _Hlt386545814}o{\*\bkmkstart _Hlt386567280}{\*\bkmkend _Hlt386545814}n{\*\bkmkend _Hlt386567280} (gnuchess.txt) for details. Crafty ignores the "random" command; see its documentation for the commands it accepts.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  initString
+}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  initString}}}{\f1  /firstComputerString }{\i\f1 string\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  secondInitString}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  secondInitString}}
+}{\f1  /secondComputerString }{\i\f1 string}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If the chess engine is playing against another computer program (whether locally or on a chess server), by default the command "computer\\
+n" is sent to it. Some chess engines change their playing style when they receive this command. If you do not want the engine to know when it is playing another computer, you can set the string to "".
+\par }\pard\plain \s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid {
+Note that the computer string is sent to the engine after most other initialization commands, and is thus ideal for hiding a WinBoard-protocol command in that should be sent only to one engine, when the WinBoard option that normally specifies 
+this command cannot be differentiated by engine, but s always sent to both engines. E.g. if you want one of the engines to ponder, and the other not. Because it is sent last, in can overrule earlier commands.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  fb }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  fb }}}{\f1  /fb }{\b0\f1 or }{\f1 /xfb}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  firstPlaysBlack }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  firstPlaysBlack}}}
+{\f1  /firstPlaysBlack }{\i\f1 true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+In games between two chess programs, the firstChessProgram normally plays white. (This is a change from earlier versions of WinBoard.) If this option is True, firstChessProgram plays black. In a multi-game match, this option affects the colors only for 
+the first game; they still alternate in subsequent games.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  reuse}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  reuse}}}{\f1 /reuse}{\cs58\f1\super  }{\b0\f1 or }{\f1 /xreuse}{\b0\f1 , or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  reuseFirst}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  reuseFirst}}}{\f1 
+/reuseFirst}{\i\f1  true|false\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  reuse2}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  reuse2}}}{\f1 /reuse2}{\cs58\f1\super  }{\b0\f1 or }{\f1 /xreuse2}{\b0\f1 , or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super K}{\f1  reuseSecond}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  reuseSecond}}}{\f1 /reuseSecond}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is True (the default), WinBoard}{\i\f1  }{\f1 uses the same chess engine process repeatedly when
+ playing multiple games. If the option is False, WinBoard kills off the chess engine after every game and starts a fresh one for the next game. Starting a fresh chess engine can be slow, so it is not recommended. However, some chess engines may not work p
+roperly when reused, such as versions of Crafty earlier than 12.0.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ firstProtocolVersion}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  firstProtocolVersion}}}{\f1 /firstProtocolVersion }{\i\f1 ver\line }{\cs58\f1\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  secondProtocolVersion}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ secondProtocolVersion}}}{\f1 /secondProtocolVersion }{\i\f1 ver}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option specifies which version of the chess engine communication protocol to use. By default, version-number is 2. In version 1,
+ the "protover" command is not sent to the engine; since version 1 is a subset of version 2, nothing else changes. Other values for version-number are not supported.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 firstScoreAbs}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 firstScoreAbs}}}{\f1\cf6 /firstScoreAbs}{\i\f1\cf6  true|false\line }{\cs58\f1\cf6\super K
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 secondScoreAbs}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super #}{\f1  }{\f1\cf6 secondScoreAbs}}}{\f1\cf6 /secondScoreAbs}{\i\f1\cf6  true|false
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If this option is true, the score
+ reported by the engine is taken to be that in favor of white, even when the engine plays black. Important when winboard uses the score for adjudications, or in PGN reporting. This can be a useful option in combination with WBopt in the engine command-lin
+e, see under /fcp.}{\cf6 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 niceEngines}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 niceEngines}}}{\f1\cf2 /niceEngines}{\i\f1\cf2  priority
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 
+This option allows you to lower the priority of the engine processes, so that the generally insatiable hunger for CPU time of chess engines does not interfere so much with smooth operation of WinBoard (or the rest 
+of your system). Try priority = 10 or even 20 to lower the priority of the engines. Negative values could increase the engine priority, which is not recommended.}{\cf6 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 firstOptions}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 firstOptions}}}{\f1\cf2 /firstOptions}{\i\f1\cf2  string\line }{\cs58\f1\cf2\super K
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 secondOptions}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super #}{\f1  }{\f1\cf6 secondOptions}}}{\f1\cf2 /secondOptions}{\i\f1\cf2  string
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 The given string is a comma-separated list of (option name, option value) pairs, like the following example: \ldblquote style=Karpov,blunder rate=0\rdblquote 
+. If the options announced by the engine at startup through the feature commands of WinBoard protocol matches one of the option names (i.e. \ldblquote style\rdblquote  or \ldblquote blunder rate\rdblquote ), it would be set to the given value (i.e. 
+\ldblquote Karpov\rdblquote  or 0) through a corresponding option command to the engine. This provided that the type of the value (text or numeric) matches as well.}{\cf6 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{
+\f1\cf2  first}{\f1\cf2 NeedsNoncompliantFEN}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2  first}{\f1\cf2 NeedsNoncompliantFEN}}}{\f1\cf2 /firstNeedsNoncompliantFEN}{
+\i\f1\cf2  string\line }{\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{\f1\cf2  second}{\f1\cf2 NeedsNoncompliantFEN}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2  second}{\f1\cf2 NeedsNoncompliantFEN}}}{\f1\cf2 /secondNeedsNoncompliantFEN}{\i\f1\cf2  string
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 
+The castling rights and e.p. fields of the FEN sent to the mentioned engine with the setboard command will be replaced by the given string. This can for instance be used to run engines that do not understand Chess960 FENs in variant fischerandom, to 
+make them at least understand the opening position, through setting the string to \ldblquote KQkq -\rdblquote 
+. (Note you also have to give the e.p. field!) Other possible applications are to provide work-arounds for engines that want to see castling and e.p. fields in variants that do not have castling or e.p. (shatranj, courier, xiangqi, shogi)
+ so that WinBoard would normally omit them (string = \ldblquote - -\ldblquote , or to add variant-specific fields that are not yet supported by WinBoard (e.g. to indicate the number of checks in 3check).
+\par }{
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\cf6\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super +}{\f1  main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 UCI Engine Support}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1  }{\f1\cf6 UCI Engine Support}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 UCIEngineSupport}}}{
+\f1\fs20\cf6  UCI Engine Support
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 
+fUCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 fUCI}{\f1  }}}{\f1\cf6  /fUCI }{\b0\f1\cf6 or}{\f1\cf6  }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 firstIsUCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 
+firstIsUCI}}}{\f1\cf6  /firstIsUCI}{\i\f1\cf6  true|false}{\f1\cf6 
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 sUCI}{\f1  }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 sUCI}{\f1  }}}{\f1\cf6  /sUCI }{\b0\f1\cf6 or}{\f1\cf6  }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 secondIsUCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 
+secondIsUCI}}}{\f1\cf6  /secondIsUCI}{\i\f1\cf6  true|false}{\f1\cf6 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Indicates if the mentioned engine executable file is an UCI engine,}{\v\cf6  ICSLogon}{\cf6 
+ and should be run with the aid of the Polyglot adapter rather than directly. WinBoard will then pass the other UCI options and engine name to Polyglot through a .ini temporary file ceated for the purpose.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 PolyglotDir}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 PolyglotDir}{\f1  }}}{\f1\cf6  /PolyglotDir }{\i\f1\cf6 filename}{\f1\cf6 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Gives the name of the folder in which Polyglot is installed}{\v\f1\cf6 ICSLogon}{\f1\cf6 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 usePolyglotBook}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 usePolyglotBook}{\f1  }}}{\f1\cf6  /usePolyglotBook }{\i\f1\cf6 true|false}{\f1\cf6 
 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Connect with an Internet Chess Server to play chess against its other users, observe games they are playing, or review games that have recently finished. See }{\f1\uldb ICS Client}{\v\f1 ICSClient}{\f1  Default: False.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-You can create a script file containing ICS commands that WinBoard will type in for you whenever you connect to the ICS. See }{\f1\uldb ICS Logon}{\v\f1 ICSLogon}{\f1 .
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  icshost }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  icshost }}}{\f1  /icshost }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  internetChessServerHost }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  internetChessServerHost }}}{\f1  /internetChessServerHost }{\i\f1 hostname}{\f1 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Specifies if the Polygot book should be used}{\v\f1\cf6 ICSLogon}{\f1\cf6 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 PolyglotBook}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 PolyglotBook}{\f1  }}}{\f1\cf6  /PolyglotBook }{\i\f1\cf6 filename}{\f1\cf6 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Gives the filename of the opening book that Polyglot should use}{\v\f1\cf6 ICSLogon}{\f1\cf6 .
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 
+fNoOwnBookUCI}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 fNoOwnBookUCI}{\f1  }}}{\f1\cf6  /fNoOwnBookUCI }{\b0\f1\cf6 or}{\f1\cf6  }{\cs58\f1\cf6\super K
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 firstXBook}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super #}{\f1  }{\f1\cf6 firstXBook}{\f1  }}}{\f1\cf6  /firstXBook }{\b0\f1\cf6 or}{\f1\cf6  }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 firstHasOwnBookUCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 firstHasOwnBookUCI}}}{\f1\cf6  /firstHasOwnBookUCI}{\i\f1\cf6  true|false}{\f1\cf6 
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 sNoOwnBookUCI}{\f1  }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 sNoOwnBookUCI}{\f1  }}}{\f1\cf6  /sNoOwnBookUCI }{\b0\f1\cf6 or}{\f1\cf6  }{\cs58\f1\cf6\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 secondXBook}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}
+{\f1  }{\f1\cf6 secondXBook}{\f1  }}}{\f1\cf6  /secondXBook }{\b0\f1\cf6 or}{\f1\cf6  }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 
+secondHasOwnBookUCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 secondHasOwnBookUCI}}}{\f1\cf6  /secondHasOwnBookUCI}{\i\f1\cf6  true|false}{\f1\cf6 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Indicates if the mentioned engine lacks an opening book or not}{\cf6 . }{\cf2 
+Engines that have an own opening book will not use the GUI book (as given by /polyglotBook) even if /usePolyglotBook is set to true.}{\cf6 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 defaultHashSize}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 defaultHashSize}{\f1  }}}{\f1\cf6  /defaultHashSize }{\i\f1\cf6 number}{\f1\cf6 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the size of the hash table to }{\i\f1\cf6 number}{\f1\cf6  MegaBytes}{\v\f1\cf6 ICSLogon}{\f1\cf6 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 defaultCacheSizeEGTB}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 defaultCacheSizeEGTB}{\f1  }}}{\f1\cf6  /defaultCacheSizeEGTB }{\i\f1\cf6 number}{
+\f1\cf6 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the size of the EGTB cache to }{\i\f1\cf6 number}{\f1\cf6  MegaBytes}{\v\f1\cf6 ICSLogon}{\f1\cf6 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 defaultPathEGTB}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 defaultPathEGTB}{\f1  }}}{\f1\cf6  /defaultPathEGTB }{\i\f1\cf6 filename}{\f1\cf6 
 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-The host name or numeric address of the Internet Chess Server to connect to when in ICS mode. The default is the empty string, which causes WinBoard to pop up a menu of known ICS sites. The file ics-address{\*\bkmkstart _Hlt386546221}e
-{\*\bkmkend _Hlt386546221}s.txt in the WinBoard distribution gives slightly more information on these sites. It includes their numeric addresses, which you can use if your site does not have a working name server.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  icsport }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  icsport }}}{\f1  /icsport }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  internetChessServerPort }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  internetChessServerPort }}}{\f1  /internetChessServerPort }{\i\f1 portnumber}{\f1 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Gives the name of the folder where the end-game tablebases are installed}{\v\f1\cf6 ICSLogon}{\f1\cf6 .
+\par }{
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
++}{\f1  main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Internet Chess Server Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1  Internet Chess Server Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  InternetChessServerOptions}}}{
+\f1\fs20  Internet Chess Server Options
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  ics }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ics }}}{\f1  /ics }{\b0\f1 or }{\f1 /xics}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  internetChessServerMode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ internetChessServerMode}}}{\f1  /internetChessServerMode}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Connect with an Internet Chess Server to play chess against its other users, observe games they are playing, or review games that have recently finished. See }{\f1\uldb 
+ICS Client}{\v\f1 ICSClient}{\f1  Default: False.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 You can create a script file containing ICS commands that WinBoard will type in for you whenever you connect to the ICS. See }{\f1\uldb ICS Logon}{\v\f1 ICSLogon}{\f1 .
 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 The port number to use when connecting to a chess server in ICS mode. Default: 5000.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  via }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  via }}}{\f1 /icshelper }{\i\f1 program}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 An external helper program used to communicate with the chess server. Typically }{
-\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  timestamp}}}{\i\f1 timestamp}{\f1 
- for the ICC (chessclub.com) or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1 
- timeseal}}}{\i\f1 timeseal}{\f1  for FICS (freechess.org, eics.daimi.aau.dk, etc.). This option is shorthand for \'93/useTelnet /telnetProgram }{\i\f1 program}{\f1 \'94}{\b\f1 .
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  telnet}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  telnet}}}{\f1 /telnet}{\b0\f1  or }{\f1 /xtelnet}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  useTelnet}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  useTelnet}}}{\f1 /useTelnet}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 This option is poorly named; it should be called }{\b\f1 /useHelper}{\f1 
-. If set to True, it instructs WinBoard to use an external helper program to communicate with the ICS, as specified by the telnetProgr
-am option. The external program must be a pure console application that can communicate with WinBoard through pipes; the Windows telnet application is not suitable. If the option is False (the default), WinBoard communicates with the ICS by opening a Wins
-ock TCP socket and using its own internal implementation of the telnet protocol.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  gateway}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  gateway}}}{\f1 /gateway }{\i\f1 hostname}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If this option is set to a host name, WinBoard uses }{\f1\uldb rsh}{\v\f1 rsh}{\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  icshost }}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  icshost }}}{\f1  /icshost }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  internetChessServerHost }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  internetChessServerHost }}}{\f1 
+ /internetChessServerHost }{\i\f1 hostname}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The host name or numeric address of the Internet Chess Server to
+ connect to when in ICS mode. The default is the empty string, which causes WinBoard to pop up a menu of known ICS sites. The file ics-address{\*\bkmkstart _Hlt386546221}e{\*\bkmkend _Hlt386546221}
+s.txt in the WinBoard distribution gives slightly more information on these sites. It includes their numeric addresses, which you can use if your site does not have a working name server.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  icsport }}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  icsport }}}{\f1  /icsport }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  internetChessServerPort }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  internetChessServerPort }}}{\f1 
+ /internetChessServerPort }{\i\f1 portnumber}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The port number to use when connecting to a chess server in ICS mode. Default: 5000.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  via }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  via }}}{\f1 /icshelper }{\i\f1 program}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 An external helper program used to communicate with the chess server. Typically }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  timestamp}}}{\i\f1 timestamp}{\f1  for the ICC (chessclub.com) or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super K}{\f1  timeseal}}}{\i\f1 timeseal}{\f1  for FICS (freechess.org, eics.daimi.aau.dk, etc.). This option is shorthand for \ldblquote /useTelnet /telnetProgram }{\i\f1 program}{\f1 \rdblquote }{\b\f1 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  telnet}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  telnet}}}{\f1 /telnet}{\b0\f1  or }{\f1 /xtelnet}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  useTelnet}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  useTelnet}}}{\f1 
+/useTelnet}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option is poorly named; it should be called }{\b\f1 /useHelper}{\f1 
+. If set to True, it instructs WinBoard to use an external helper program to communicate with the ICS, as specified by the telnetProgram option. The external program must be a
+ pure console application that can communicate with WinBoard through pipes; the Windows telnet application is not suitable. If the option is False (the default), WinBoard communicates with the ICS by opening a Winsock TCP socket and using its own internal
+ implementation of the telnet protocol.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  gateway}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  gateway}}}{\f1 /gateway }{\i\f1 hostname}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is set to a host name, WinBoard uses }{\f1\uldb rsh}{\v\f1 rsh}{\f1 
  to run the telnetProgram remotely on the given host to communicate with the Internet Chess Server instead of using its own internal implementation of the telnet protocol. See the }{\f1\uldb FIREWALLS}{\v\f1 FIREWALLS}{\f1 
  section below for an explanation of when this option is useful.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  telnetProgram}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  telnetProgram}}}{\f1 /telnetProgram }{\i\f1 program}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 This option is poorly named; it should be called }{\b\f1 /helperProgram}{\f1 
-. It gives the name of the remote or external helper program to be used with the gateway or useTelnet option. The default is "telnet". The telnet program is invoked with the value of internetCh
-essServer as the first argument and the value of internetChessServerPort as the second argument on its command line.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  icscom }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  icscom }}}{\f1 /icscom }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  internetChessServerComPort }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  internetChessServerComPort }}}{\f1 /internetChessServerComPort }{\i\f1 name}{\f1 
-
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If this option is set, WinBoard communicates with the Internet Chess Server using a serial communication port instead of a network connection. Use this option if your machine is not connected to a network (not even via SLIP or PPP), but you do have Intern
-et access through another machine by dialing in using a modem or by connecting directly to a serial terminal port. Example:
-\par }\pard\plain \s19\ql \li120\ri0\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin120\itap0 \f6\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2 WinBoard /ics /icscom:com1
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-After you start WinBoard in this way, type whatever modem commands are necessary to dial out to your Internet provider and log in. You may need to turn off }{\f1\uldb Local Line Editing}{\v\f1 LocalLineEditing}{\f1 
- on the Options menu while typing commands to the modem, but turn it on again afterwards. Then telnet to the ICS, using a command like "telnet chessclub.com 5000". Important: See the paragraph in the }{\f1\uldb LIMITATIONS}{\v\f1 LIMITATIONS}{\f1 
- section below about extra echoes.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  comPortSettings }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  comPortSettings }}}{\f1  /comPortSettings}{\b0\f1  }{\i\f1 \'93
-dataRate,dataBits,parity,stopBits,flow\'94
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 This option allows serial port parameters to be set from the command lin
-e or a settings file. The values are simply filled in to the }{\f1\uldb Communications}{\v\f1 Communications}{\f1  dialog.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  icslogon }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  icslogon }}}{\f1  /icslogon }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  internetChessServerLogonScript }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  internetChessServerLogonScript }}}{\f1  /internetChessServerLogonScript }{\i\f1 
-filename
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 This option lets you change the name used for the }{\f1\uldb ICS Logon}{\v\f1 ICSLogon}{\f1 
- file. Default: "ICS.ini". The filename is interpreted relative to WinBoard's installation directory (the directory containing WinBoard.exe).
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  autocomm }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  autocomm }}}{\f1  /autocomm }{\b0\f1 or }{\f1 /xautocomm}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  autoComment }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  autoComment }}}{\f1  /autoComment}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Auto Comment}{\v\f1 AutoCommentCmd}{\f1  option. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  autoflag }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  autoflag }}}{\f1  /autoflag}{\b0\f1  or }{\f1 /xautoflag}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  autoCallFlag }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  autoCallFlag }}}{\f1  /autoCallFlag}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Auto Flag}{\v\f1\uldb AutoFlag}{\f1  option. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  autobs }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  autobs }}}{\f1  /autobs}{\b0\f1  or }{\f1 /xautobs}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  autoObserve }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  autoObserveCmd }}}{\f1  /autoObserve}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Auto Observe}{\v\f1 autoObserveCmd}{\f1  option. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  moves }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  moves }}}{\f1  /moves}{\b0\f1  or }{\f1 /xmoves}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  getMoveList }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  getMoveList }}}{\f1  /getMoveList}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Get Move List}{\v\f1 getMoveListCmd}{\f1  option. Default: True.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  edit}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  edit}}}{\f1  /edit}{\cs58\f1\super  }{\b0\f1  or }{\f1 /xedit}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  localLineEditing}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  localLineEditingOption}}}{\f1  /localLineEditing}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Local Line Editing}{\v\f1 localLineEditing}{\f1  option. Default: True.
-
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  quiet }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  quiet }}}{\f1  /quiet }{\b0\f1 or }{\f1 /xquiet}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  quietPlay }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  quietPlay }}}{\f1  /quietPlay}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Quiet Play}{\v\f1 quietPlayCmd}{\f1  option. Default: False
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  blindfold (option)}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  opt_blindfold }}}{\f1  /blindfold }{\i\f1 true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Blindfold}{\v\f1 BlindfoldCmd}{\f1  option. Default: False
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ pre}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ pre}}}{\f1 /pre }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ xpre}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ xpre}}}{\f1 /xpre}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  premove (option)}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  premove}}}{\f1  /premove}{\i\f1  true|false
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1 
- option. If set to True, the premove feature is enabled. If set to False, premove is disabled and the other }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1  settings are ignored. Default: False.
-\par }\pard\plain \s2\ql \li115\ri0\sb120\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin115\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ preWhite}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ preWhite}}}{\f1 /prewhite }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ xpreWhite}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ xpreWhite}}}{\f1 /xprewhite}{\b0\f1 , or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  premoveWhite}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  premoveWhite}}}{\f1  /premoveWhite}{\i\f1  true|false
-\par }\pard \s2\ql \li115\ri0\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin115\itap0 {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  premoveWhiteText}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  premoveWhiteText}}}{\f1  /premoveWhiteText}{\i\f1  movetext
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If }{\b\f1 premoveWhite}{\f1 
- is set to True and you are playing white in an ICS game, the text specified by the }{\b\f1 premoveWhiteText}{\f1  option is sent to the ICS as soon as the game starts.  These options can be set from the }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1 
- section of the }{\f1\uldb ICS Options}{\v\f1\uldb ICSOptions}{\f1  dialog box. The default for }{\b\f1 premoveWhite}{\f1  is False.
-\par }\pard\plain \s2\ql \li115\ri0\sb120\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin115\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ preBlack}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ preBlack}}}{\f1 /preblack }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ xpreBlack}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ xpreBlack}}}{\f1 /xpreblack}{\b0\f1 , or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  premoveBlack}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  premoveBlack}}}{\f1  /premoveBlack}{\i\f1  true|false
-\par }\pard \s2\ql \li115\ri0\sa120\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin115\itap0 {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  premoveBlackText}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  premoveBlackText}}}{\f1  /premoveBlackText}{\i\f1  movetext
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If }{\b\f1 premoveBlack}{\f1 
- is set to True and you are playing black in an ICS game, the text specified by the }{\b\f1 premoveBlackText}{\f1  option is sent t
-o the ICS as soon as the first move is received from your opponent, even if you make a different premove on the board before the first white move is received. These options can be set from the }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1  section of the }{
-\f1\uldb ICS Options}{\v\f1\uldb ICSOptions}{\f1  dialog box. The default for }{\b\f1 premoveBlack}{\f1  is False.
-\par }\pard\plain \ql \li115\ri0\sb120\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin115\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ alarm}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ alarm}}}{\b /alarm }{or}{\b  }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ xalarm}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ xalarm}}}{\b /xalarm}{, or }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ icsAlarm}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ icsAlarm}}}{\b /icsAlarm }{\b\i true|false}{\b 
-\par }\pard \ql \li115\ri0\sa120\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin115\itap0 {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ icsAlarmTime}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ icsAlarmTime}}}{\b /icsAlarmTime }{\b\i milliseconds
-\par }\pard \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 {When }{\b icsAlarm}{ is set to True, the }{\uldb alarm sound}{\v soundIcsAlarm}{ is played when your clock counts down to }{\b icsAlarmTime}{
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ telnetProgram}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  telnetProgram}}}{\f1 /telnetProgram }{\i\f1 program}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option is poorly named; it should be called }{\b\f1 /helperProgram}{\f1 . It gives the name of the remote or externa
+l helper program to be used with the gateway or useTelnet option. The default is "telnet". The telnet program is invoked with the value of internetChessServer as the first argument and the value of internetChessServerPort as the second argument on its com
+mand line.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  icscom }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  icscom }}}{\f1 /icscom }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  internetChessServerComPort }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  internetChessServerComPort }}}{\f1 
+/internetChessServerComPort }{\i\f1 name}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+If this option is set, WinBoard communicates with the Internet Chess Server using a serial communication port instead of a network connection. Use this option if your machine is not connected to a n
+etwork (not even via SLIP or PPP), but you do have Internet access through another machine by dialing in using a modem or by connecting directly to a serial terminal port. Example:
+\par }\pard\plain \s19\li120\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2 WinBoard /ics /icscom:com1
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 After you start WinBoard in this way, type whatever modem commands are necessary to dial out to your Internet provider and log in. You may need to turn off }{\f1\uldb 
+Local Line Editing}{\v\f1 LocalLineEditing}{\f1  on the Options menu while typing commands to the modem, but turn it on again afterwards. Then telnet to the ICS, using a command like "telnet chessclub.com 5000". Important: See the paragraph in the }{
+\f1\uldb LIMITATIONS}{\v\f1 LIMITATIONS}{\f1  section below about extra echoes.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ comPortSettings }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  comPortSettings }}}{\f1  /comPortSettings}{\b0\f1  }{\i\f1 \ldblquote dataRate,dataBits,parity,stopBits,flow
+\rdblquote 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option allows serial port parameters to be set from the command line or a settings file. The values are simply filled in to the }{\f1\uldb Communications}{\v\f1 
+Communications}{\f1  dialog.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  icslogon }
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  icslogon }}}{\f1  /icslogon }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  internetChessServerLogonScript }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  internetChessServerLogonScript }}
+}{\f1  /internetChessServerLogonScript }{\i\f1 filename
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option lets you change the name used for the }{\f1\uldb ICS Logon}{\v\f1 ICSLogon}{\f1  file. Defa
+ult: "ICS.ini". The filename is interpreted relative to WinBoard's installation directory (the directory containing WinBoard.exe).
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  autocomm }
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  autocomm }}}{\f1  /autocomm }{\b0\f1 or }{\f1 /xautocomm}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  autoComment }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  autoComment }}}{\f1 
+ /autoComment}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Auto Comment}{\v\f1 AutoCommentCmd}{\f1  option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  autoflag }
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  autoflag }}}{\f1  /autoflag}{\b0\f1  or }{\f1 /xautoflag}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  autoCallFlag }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ autoCallFlag }}}{\f1  /autoCallFlag}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Auto Flag}{\v\f1\uldb AutoFlag}{\f1  option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  autobs }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  autobs }}}{\f1  /autobs}{\b0\f1  or }{\f1 /xautobs}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  autoObserve }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ autoObserveCmd }}}{\f1  /autoObserve}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Auto Observe}{\v\f1 autoObserveCmd}{\f1  option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 autoKibitz}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 autoKibitz}{\f1  }}}{\f1\cf11  /autoKibitz
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Kibitzes the engines last thinking output (depth, score, time, speed, PV) to the ICS in zippy mode. Show Thinking must be on for this option to work. }{\f1\cf2 
+Also diverts similar kibitz information of an opponent engine that is playing you through the ICS to the engine-output window, as if the engine was playing locally.}{\f1\cf11 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  moves }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  moves }}}{\f1  /moves}{\b0\f1  or }{\f1 /xmoves}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  getMoveList }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  getMoveList }}}{\f1 
+ /getMoveList}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Get Move List}{\v\f1 getMoveListCmd}{\f1  option. Default: True.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  edit}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  edit}}}{\f1  /edit}{\cs58\f1\super  }{\b0\f1  or }{\f1 /xedit}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  localLineEditing}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super #}{\f1  localLineEditingOption}}}{\f1  /localLineEditing}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Local Line Editing}{\v\f1 localLineEditing}{\f1  option. Default: True.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  quiet }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  quiet }}}{\f1  /quiet }{\b0\f1 or }{\f1 /xquiet}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  quietPlay }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  quietPlay }}}{\f1 
+ /quietPlay}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Quiet Play}{\v\f1 quietPlayCmd}{\f1  option. Default: False
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ blindfold (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  opt_blindfold }}}{\f1  /blindfold }{\i\f1 true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Blindfold}{\v\f1 BlindfoldCmd}{\f1  option. Default: False
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ pre}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ pre}}}{\f1 /pre }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\super K}{ xpre}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ xpre}}}{\f1 /xpre}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  premove (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  premove}}}{\f1 
+ /premove}{\i\f1  true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1  option. If set to True, the premove feature is enabled. If set to False, premove is disabled and the other }{\f1\uldb 
+Premove}{\v\f1 PremoveCmd}{\f1  settings are ignored. Default: False.
+\par }\pard\plain \s2\li115\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ preWhite}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ preWhite}}}{\f1 /prewhite }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ xpreWhite}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ xpreWhite}}}{\f1 /xprewhite}{\b0\f1 , or }{\cs58\f1\super K
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  premoveWhite}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+#}{\f1  premoveWhite}}}{\f1  /premoveWhite}{\i\f1  true|false
+\par }\pard \s2\li115\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  premoveWhiteText}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  premoveWhiteText}}}{\f1  /premoveWhiteText}{\i\f1  movetext
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If }{\b\f1 premoveWhite}{\f1  is set to True and you are playing white in an ICS game, the text specified by the }{\b\f1 premoveWhiteText}{\f1 
+ option is sent to the ICS as soon as the game starts.  These options can be set from the }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1  section of the }{\f1\uldb ICS Options}{\v\f1\uldb ICSOptions}{\f1  dialog box. The default for }{\b\f1 premoveWhite}{\f1 
+ is False.
+\par }\pard\plain \s2\li115\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ preBlack}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ preBlack}}}{\f1 /preblack }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ xpreBlack}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ xpreBlack}}}{\f1 /xpreblack}{\b0\f1 , or }{\cs58\f1\super K
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  premoveBlack}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+#}{\f1  premoveBlack}}}{\f1  /premoveBlack}{\i\f1  true|false
+\par }\pard \s2\li115\sa120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  premoveBlackText}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  premoveBlackText}}}{\f1  /premoveBlackText}{\i\f1  movetext
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If }{\b\f1 premoveBlack}{\f1  is set to True and you are playing black in an ICS game, the text specified by the }{\b\f1 premoveBlackText}{\f1 
+ option is sent to the ICS as soon as the first move is received from your opponent, even if you make a different premove on the board before the first white move is received. These options can be set from the }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1 
+ section of the }{\f1\uldb ICS Options}{\v\f1\uldb ICSOptions}{\f1  dialog box. The default for }{\b\f1 premoveBlack}{\f1  is False.
+\par }\pard\plain \li115\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \f5\fs20\cgrid {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ alarm}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ alarm}}}{\b /alarm }{or}{\b  }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\super K}{ xalarm}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ xalarm}}}{\b /xalarm}{, or }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ icsAlarm}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ icsAlarm}}}{\b /icsAlarm }{\b\i true|false}{\b 
+\par }\pard \li115\sa120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ icsAlarmTime}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ icsAlarmTime}}}{\b /icsAlarmTime }{\b\i milliseconds
+\par }\pard \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright {When }{\b icsAlarm}{ is set to True, the }{\uldb alarm sound}{\v soundIcsAlarm}{ is played when your clock counts down to }{\b icsAlarmTime}{
  seconds.  For ICS games with time controls that include an increment, the alarm will sound each time the clock counts down to the }{\b icsAlarmTime}{.  The }{\b icsAlarmTime}{ can be set by selecting }{\uldb ICS Alarm}{\v ICSAlarm}{ from the }{\uldb 
 ICS options}{\v\uldb ICSOptions}{ dialog. The default is 5 seconds.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Load and Save Options}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Load and Save Options}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  LoadandSaveOptions}}}{\b0\f1\fs18\up6  }{\f1\fs20 Load and Save Options
-\par }\pard\plain \s2\ql \li115\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin115\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  lgf }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  lgf }}}{\f1  /lgf }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  loadGameFile }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  loadGameFile }}}{\f1  /loadGameFile }{\i\f1 filename}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  lgi }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  lgi }}}{\f1  /lgi }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  loadGameIndex }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  loadGameIndex }}}{\f1  /loadGameIndex }{\i\f1 N}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If loadGameFile is set, WinBoard reads the specified game file at startup. You can leave out the na
-me of this option and give just the file name, which is handy if you want to configure WinBoard as a game viewer with a browser such as the Windows Explorer or Netscape. The filename is interpreted relative to WinBoard's initial working directory. The fil
-ename "-" specifies the standard input. If there is more than one game in the file, WinBoard pops up a menu of the available games, with entries based on their PGN tags. If loadGameIndex is set to }{\i\f1 N, }{\f1 the menu is suppressed and the }{\i\f1 N}
-{\f1 th game found in the file is loaded immediately.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  td }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  td }}}{\f1  /td }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  timeDelay }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  timeDelay }}}{\f1  /timeDelay }{\i\f1 seconds}{\f1 
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Time delay between moves during }{\f1\uldb Load Game}{\v\f1 LoadGame}{\f1 
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
++}{\f1  main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Load and Save Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super $}{\f1  Load and Save Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  LoadandSaveOptions}}}{\b0\f1\fs18\up6  }{\f1\fs20 
+Load and Save Options
+\par }\pard\plain \s2\li115\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  lgf }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  lgf }}}{\f1  /lgf }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  loadGameFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  loadGameFile }}}{\f1  /loadGameFile }{\i\f1 
+filename}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  lgi }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super #}{\f1  lgi }}}{\f1  /lgi }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  loadGameIndex }}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  loadGameIndex }}}{\f1  /loadGameIndex }{\i\f1 N}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If loadGameFile is set, WinBoard reads the specified game file at startup. You can leave out the name of this option and give just the fi
+le name, which is handy if you want to configure WinBoard as a game viewer with a browser such as the Windows Explorer or Netscape. The filename is interpreted relative to WinBoard's initial working directory. The filename "-" specifies the standard input
+. If there is more than one game in the file, WinBoard pops up a menu of the available games, with entries based on their PGN tags. If loadGameIndex is set to }{\i\f1 N, }{\f1 the menu is suppressed and the }{\i\f1 N}{\f1 
+th game found in the file is loaded immediately.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  td }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  td }}}{\f1  /td }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  timeDelay }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  timeDelay }}}{\f1  /timeDelay }{\i\f1 seconds}{\f1 
+
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Time delay between moves during }{\f1\uldb Load Game}{\v\f1 LoadGame}{\f1 
 . Fractional seconds are allowed; try 0.4. A time delay value of -1 tells WinBoard not to step through game files automatically. Default: 1 second.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  sgf }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  sgf }}}{\f1  /sgf }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  saveGameFile }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  saveGameFile }}}{\f1  /saveGameFile }{\i\f1 filename}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If this option is set, WinBoard appends a record of every game played to the specified file. The filename is interpreted relative to WinBoard's initial working directory. The filename "-" specifies the standard output.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  autosave }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  autosave }}}{\f1  /autosave}{\b0\f1  or }{\f1 /xautosave}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  autoSaveGames }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  autoSaveGames }}}{\f1  /autoSaveGames}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  sgf }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  sgf }}}{\f1  /sgf }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  saveGameFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  saveGameFile }}}{\f1  /saveGameFile }{\i\f1 
+filename}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If t
+his option is set, WinBoard appends a record of every game played to the specified file. The filename is interpreted relative to WinBoard's initial working directory. The filename "-" specifies the standard output.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  autosave }
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  autosave }}}{\f1  /autosave}{\b0\f1  or }{\f1 /xautosave}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  autoSaveGames }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ autoSaveGames }}}{\f1  /autoSaveGames}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
 If this option is True, at the end of every game WinBoard prompts you for a filename and appends a record of the game to the file you specify. Ignored if saveGameFile is set. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  lpf}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  lpf}}}{\f1  /lpf }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  loadPositionFile }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  loadPositionFile }}}{\f1  /loadPositionFile }{\i\f1 filename}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  lpi }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  lpi }}}{\f1  /lpi }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  loadPositionIndex }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  loadPositionIndex }}}{\f1  /loadPositionIndex }{\i\f1 N}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  lpf}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  lpf}}}{\f1  /lpf }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  loadPositionFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  loadPositionFile }}}{\f1  /loadPositionFile }{
+\i\f1 filename}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  lpi }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  lpi }}}{\f1  /lpi }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ loadPositionIndex }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  loadPositionIndex }}}{\f1  /loadPositionIndex }{\i\f1 N}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
 If loadPositionFile is set, WinBoard loads the specified position file at startup. The filename is interpreted relative to WinBoard's initial working directory. The filename "-" specifies the standard input. If loadPositionIndex is set to }{\i\f1 N}{\f1 
 , the }{\i\f1 N}{\f1 th position found in the file is loaded; otherwise the first is loaded.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  spf }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  spf }}}{\f1  /spf }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  savePositionFile }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  savePositionFile }}}{\f1  /savePositionFile }{\i\f1 filename}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If this option is set, WinBoard appends the final position reached in every game played to the specified file. The filename is interpreted relative to WinBoard's initial working directory. The file name "-" specifies the standard output.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  oldsave }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  oldsave }}}{\f1  /oldsave }{\b0\f1 or }{\f1 /xoldsave}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  oldSaveStyle }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  oldSaveStyle }}}{\f1  /oldSaveStyle}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If th
-is option is False (the default), WinBoard saves games in PGN (portable game notation) and positions in FEN (Forsythe-Edwards notation). If the option is True, a save style that is compatible with older versions of WinBoard (and of xboard) is used instead
-.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  User Interface Options}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  User Interface Options}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  UserInterfaceOptions}}}{\b0\f1\fs18\up6  }{\f1\fs20 User Interface Options
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  top}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  top}}}{\f1  /top }{\b0\f1 or }{\f1 /xtop}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  alwaysOnTop}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  alwaysOnTopOpt}}}{\f1  /alwaysOnTop}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Always On Top}{\v\f1 AlwaysOnTop}{\f1  option. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  queen}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  queen}}}{\f1  /queen}{\b0\f1  or }{\f1 /xqueen}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  alwaysPromoteToQueen}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  alwaysPromoteToQueen}}}{\f1  /alwaysPromoteToQueen}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Always Queen}{\v\f1 AlwaysQueen}{\f1  option. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  drag}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  drag}}}{\f1 /drag}{\b0\f1  or }{\f1 /xdrag}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  animateDragging}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  animateDraggingOpt}}}{\f1 /animateDragging}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Animate Dragging}{\v\f1 animateDragging}{\f1  option. Default: True.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  animate}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  animate}}}{\f1 /animate }{\b0\f1 or }{\f1 /xanimate}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  animateMoving}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  animateMovingOpt}}}{\f1 /animateMoving}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Animate Moving}{\v\f1 animateMoving}{\f1  option. Default: True.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  flip}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  flip}}}{\f1  /flip }{\b0\f1 or }{\f1 /xflip}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  flipView}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  flipViewOption}}}{\f1  /flipView}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If Auto Flip View is not set, or if you are observing but not participating in a game, then the positioning of the board 
-at the start of each game depends on the flipView option.  If flipView is False (the default), the board is positioned so that the white pawns move from the bottom to the top; if True, the black pawns move from the bottom to the top. In any case, the }{
-\f1\uldb Flip View}{\v\f1 FlipView}{\f1  menu command can be used to flip the board after the game starts
-\par }\pard\plain \ql \li115\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin115\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ autoflip}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ autoflip}}}{\b /autoflip}{ or }{\b /xautoflip}{, or }{\cs58\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ autoFlipView}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ autoFlipViewOption}}}{\b /autoFlipView }{\b\i true|false
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Auto Flip View}{\v\f1 AutoFlipView}{\f1  option. Default: True.
-\par }\pard\plain \ql \li115\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin115\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ autoraise}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ autoraise}}}{\b /autoraise}{ or }{\b /xautoraise}{, or }{\cs58\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ autoRaiseBoardOption}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ autoRaiseBoardOption}}}{\b /autoRaiseBoard }{\b\i true|false
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Auto Raise Board}{\v\f1 AutoFlipView}{\f1  option. Default: True.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  highdrag}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  highdrag}}}{\f1 /highdrag }{\b0\f1 or }{\f1 /xhighdrag}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  highlightDragging\tab \tab }}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  highlightDraggingOpt}}}{\f1 /highlightDragging }{\i\f1 true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Highlight Dragging}{\v\f1 highlightDragging}{\f1  option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  spf }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  spf }}}{\f1  /spf }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  savePositionFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  savePositionFile }}}{\f1  /savePositionFile }{
+\i\f1 filename}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is set, WinBoard appends the final position reached in every game played to the specified file. The filenam
+e is interpreted relative to WinBoard's initial working directory. The file name "-" specifies the standard output.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 pgnExtendedInfo}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 pgnExtendedInfo}{\f1  }}}{\f1\cf6  /pgnExtendedInfo }{\i\f1\cf6 true|false}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If this option is set, WinBoard saves depth, score and time used for each move that the engine found as a comment in the PGN file.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 pgnEventHeader}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 pgnEventHeader}{\f1  }}}{\f1\cf6  /pgnEventHeader }{\i\f1\cf6 string}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the name used in the PGN event tag to }{\i\f1\cf6 string}{\f1\cf6 .
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 saveOutOfBookInfo}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 saveOutOfBookInfo}}}{\f1\cf6  /saveOutOfBookInfo }{\i\f1\cf6 true|false}{\f1\cf6 
 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  highlight}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  highlight}}}{\f1 /highlight }{\b0\f1 or }{\f1 /xhighlight}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  highlightLastMove}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  highlightLastMoveOpt}}}{\f1 /highlightLastMove}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Highlight Last Move}{\v\f1 highlightLastMoveOpt}{\f1 
- option. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  popup}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  popup}}}{\f1  /exit}{\b0\f1  or }{\f1 /xexit}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  popupMoveErrors}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  popupMoveErrorsOpt}}}{\f1  /popupExitMessage}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Popup Exit Message}{\v\f1 popupExitMessageCmd}{\f1 
- menu option. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  popup}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  popup}}}{\f1  /popup}{\b0\f1  or }{\f1 /xpopup}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  popupMoveErrors}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  popupMoveErrorsOpt}}}{\f1  /popupMoveErrors}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Popup Move Errors}{\v\f1 popupMoveErrorsCmd}{\f1 
- menu option. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  coords }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  coords }}}{\f1  /coords }{\b0\f1 or }{\f1 /xcoords}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  showCoords}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  showCoords}}}{\f1  /showCoords}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Show Coords}{\v\f1 showCoords}{\f1  option. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  legal }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  legal }}}{\f1  /legal }{\b0\f1 or }{\f1 /xlegal}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  testLegality }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  testLegality }}}{\f1  /testLegality}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Test Legality}{\v\f1 testLegalityCmd}{\f1  option. Default: True.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  size }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  size }}}{\f1  /size }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  boardSize }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  boardSize }}}{\f1  /boardSize }{\i\f1 sizename}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the }{\f1\uldb Board Size}{\v\f1 BoardSizeCmd}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Include the information on how the engine(s) game out of its opening book in a special \lquote annotator\rquote  tag with the PGN file.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  oldsave }}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  oldsave }}}{\f1  /oldsave }{\b0\f1 or }{\f1 /xoldsave}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  oldSaveStyle }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  oldSaveStyle }}}{\f1 
+ /oldSaveStyle}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+If this option is False (the default), WinBoard saves games in PGN (portable game notation) and positions in FEN (Forsythe-Edwards notation). If the option is True, a save style that is compatible with
+ older versions of WinBoard (and of xboard) is used instead.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  debug}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  debug}}}{\f1  /debug}{\b0\f1  or }{\f1 /xdebug}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  debugMode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  debugMode}}}{\f1 
+ /debugMode}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Writes debugging information to the file \ldblquote WinBoard.debug\rdblquote , including all commands sent to the chess engine, all output received from it, and all 
+commands sent to ICS. You can press Ctrl+Alt+F12 to turn this option on or off while WinBoard is running. Each time you turn it on, any existing debug file is overwritten.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 debugFile}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 debugFile}{\f1  }}}{\f1\cf6  /debugFile}{\cs58\f1\cf6\super  }{\f1\cf6  }{\i\f1\cf6 filename}{
+\f1\cf6  }{\b0\f1\cf6 or}{\f1\cf6  }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 nameOfDebugFile}{\f1  }}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 nameOfDebugFile}{\f1  }}}{\f1\cf6  /nameOfDebugFile}{\i\f1\cf6  filename}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the name of the file to which WinBoard saves debug information (including all communication to and from the engines).
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 engineDebugOutput}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 engineDebugOutput}{\f1  }}}{\f1\cf11  /engineDebugOutput}{\cs58\f1\cf11\super  }{
+\f1\cf11  }{\i\f1\cf11 number}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Specifies how WinBoard should handle unsolicited output from the engine, with respect to saing it in the debug file. The output is further (hopefully) ignored. If }{
+\i\f1\cf11 numbe}{\f1\cf11 r=0, WinBoard refrains from writing such spurious output to the debug file. If}{\i\f1\cf11  numbe}{\f1\cf11 r=1, all engine output is written faithfully to the debug file. If }{\i\f1\cf11  numbe}{\f1\cf11 
+r=2, any protocol-violating line is prefixed with a \lquote #\rquote  character, as the engine itself should have done if it wanted to submit info for inclusion in the debug file.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf11 This option is provided for the benefit of applications that use the debug file as a source of information, such as the broadcaster of live games TLCV /
+ TLCS. Such applications can be protected from spurious engine output that might otherwise confuse them.
+\par }{
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
++}{\f1  main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  User Interface Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super $}{\f1  User Interface Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  UserInterfaceOptions}}}{\b0\f1\fs18\up6  }{\f1\fs20 
+User Interface Options
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{\f1\cf2 
+ firstLogo}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2  firstLogo}}}{\f1\cf2  /firstLogo }{\i\f1\cf2 filename}{\f1\cf2 
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{\f1\cf2  secondLogo}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2  secondLogo}}}{\f1\cf2  /secondLogo }{\i\f1\cf2 filename}{\f1\cf2 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 The appearance of either of these options causes WinBoard to reserve space
+ for displaying logos on both sides of the clocks. Normally the first logo goes left, the second right, unless the option \lquote swap clocks\rquote  is in effect. The }{\i\f1\cf2 filename}{\f1\cf2 
+ must refer to a bitmap file (.bmp) containing a logo for the particular player (usually a 130x65 or 100x50 bitmap, which will be scaled to the height of two clock lines.)
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{
+\f1\cf2  autoLogo}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2  autoLogo}}}{\f1\cf2  /autoLogo}{\i\f1\cf2  true|false}{\f1\cf2 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 When true, causes WinBoard to automatically supply a logo for the first and second chess program, by looking for a fie named logo.bmp in the engine direct
+ory (as specified by the /fd or /sd option), and then displays it like this file was given as an argument to the /firstLogo or /secondLogo option.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 hideThinkingFromHuman}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 hideThinkingFromHuman}}}{\f1\cf6  /hideThinkingFromHuman}{\i\f1\cf6  true|false}{\f1\cf6 
+
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Prevents the engine thinking output to appear in the display, without ne
+cessitating to suppress the sending of this information altogether (so it can still appear in the PGN).
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{
+\f1\cf2  noGUI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2  noGUI}}}{\f1\cf2  /noGUI
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 Suppresses all GUI functions of WinBoard (to speed up automated ultra-fast engine-engine games, which you don\rquote t want to watch). There will be 
+no board or clock updates, no printing of moves, and no update of the icon on the task bar in this mode.}{\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  top}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  top}}}{\f1  /top }{\b0\f1 or }{\f1 /xtop}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  alwaysOnTop}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  alwaysOnTopOpt}}}{\f1 
+ /alwaysOnTop}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Always On Top}{\v\f1 AlwaysOnTop}{\f1  option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  queen}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  queen}}}{\f1  /queen}{\b0\f1  or }{\f1 /xqueen}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  alwaysPromoteToQueen}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ alwaysPromoteToQueen}}}{\f1  /alwaysPromoteToQueen}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Always Queen}{\v\f1 AlwaysQueen}{\f1  option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  drag}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  drag}}}{\f1 /drag}{\b0\f1  or }{\f1 /xdrag}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  animateDragging}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  animateDraggingOpt}
+}}{\f1 /animateDragging}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Animate Dragging}{\v\f1 animateDragging}{\f1  option. Default: True.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  animate}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  animate}}}{\f1 /animate }{\b0\f1 or }{\f1 /xanimate}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  animateMoving}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  animateMovingOpt}}}{
+\f1 /animateMoving}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Animate Moving}{\v\f1 animateMoving}{\f1  option. Default: True.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  flip}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  flip}}}{\f1  /flip }{\b0\f1 or }{\f1 /xflip}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  flipView}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  flipViewOption}}}{\f1 
+ /flipView}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Auto Flip View is not set, or if you are observing but not participating in a game, then the positioning of the board at the start of each game depends on th
+e flipView option.  If flipView is False (the default), the board is positioned so that the white pawns move from the bottom to the top; if True, the black pawns move from the bottom to the top. In any case, the }{\f1\uldb Flip View}{\v\f1 FlipView}{\f1 
+ menu command can be used to flip the board after the game starts
+\par }\pard\plain \li115\sb120\sa60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ autoflip}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ autoflip}}}{\b /autoflip}{ or }{\b /xautoflip}{, or }{\cs58\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\super K}{ autoFlipView}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ autoFlipViewOption}}}{\b /autoFlipView }{\b\i true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Auto Flip View}{\v\f1 AutoFlipView}{\f1  option. Default: True.
+\par }\pard\plain \li115\sb120\sa60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ autoraise}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ autoraise}}}{\b /autoraise}{ or }{\b /xautoraise}{, or }{\cs58\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\super K}{ autoRaiseBoardOption}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ autoRaiseBoardOption}}}{\b /autoRaiseBoard }{\b\i true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Auto Raise Board}{\v\f1 AutoFlipView}{\f1  option. Default: True.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  highdrag}}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  highdrag}}}{\f1 /highdrag }{\b0\f1 or }{\f1 /xhighdrag}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  highlightDragging\tab \tab }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ highlightDraggingOpt}}}{\f1 /highlightDragging }{\i\f1 true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Highlight Dragging}{\v\f1 highlightDragging}{\f1  option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  highlight}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  highlight}}}{\f1 /highlight }{\b0\f1 or }{\f1 /xhighlight}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  highlightLastMove}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ highlightLastMoveOpt}}}{\f1 /highlightLastMove}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Highlight Last Move}{\v\f1 highlightLastMoveOpt}{\f1  option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  popup}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  popup}}}{\f1  /exit}{\b0\f1  or }{\f1 /xexit}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  popupMoveErrors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  popupMoveErrorsOpt}
+}}{\f1  /popupExitMessage}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Popup Exit Message}{\v\f1 popupExitMessageCmd}{\f1  menu option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  popup}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  popup}}}{\f1  /popup}{\b0\f1  or }{\f1 /xpopup}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  popupMoveErrors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  popupMoveErrorsOpt}
+}}{\f1  /popupMoveErrors}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Popup Move Errors}{\v\f1 popupMoveErrorsCmd}{\f1  menu option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  coords }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  coords }}}{\f1  /coords }{\b0\f1 or }{\f1 /xcoords}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  showCoords}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  showCoords}}}{\f1 
+ /showCoords}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Show Coords}{\v\f1 showCoords}{\f1  option. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  legal }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  legal }}}{\f1  /legal }{\b0\f1 or }{\f1 /xlegal}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  testLegality }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  testLegality }}}{\f1 
+ /testLegality}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Test Legality}{\v\f1 testLegalityCmd}{\f1  option. Default: True.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  size }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  size }}}{\f1  /size }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  boardSize }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  boardSize }}}{\f1  /boardSize }{\i\f1 sizename}{\f1 
+
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Board Size}{\v\f1 BoardSizeCmd}{\f1 
  option. Also chooses which board size any following Font options will affect. The default is the largest size that will fit on your screen.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ wpc}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ wpc}}}{\f1 /wpc}{\b0\f1  or }{\cs58\b0\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  whitePieceColor}}}{\cs58\f1\super #{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  whitePieceColor}}}{\f1  /whitePieceColor }{\i\f1 color\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ bpc}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ bpc}}}{\f1 /bpc }{\b0\f1 or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  blackPieceColor}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  blackPieceColor}}}{\f1  /blackPieceColor }{\i\f1 color\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ lsc}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ lsc}}}{\f1 /lsc }{\b0\f1 or}{\i\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  lightSquareColor}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  lightSquareColor}}}{\f1  /lightSquareColor }{\i\f1 color}{\cs58\f1\super  }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ dsc}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ dsc}}}{\f1 /dsc }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  darkSquareColor}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  darkSquareColor}}}{\f1  /darkSquareColor }{\i\f1 color}{\cs58\f1\super  }{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Color specifications for white pieces, black pieces, light squares, and dark squares. Colors can be specified only by red/green/blue intensity, either in hexadecimal (as }{\i\f1 #rrggbb}{\f1 ) or in decimal (as }{\i\f1 rrr,ggg,bbb}{\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ wpc}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ wpc}}}{\f1 /wpc}{\b0\f1  or }{\cs58\b0\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super K}{\f1  whitePieceColor}}}{\cs58\f1\super #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  whitePieceColor}}}{\f1  /whitePieceColor }{\i\f1 color
+\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ bpc}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\super #}{ bpc}}}{\f1 /bpc }{\b0\f1 or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  blackPieceColor}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  blackPieceColor}}}{\f1  /blackPieceColor }{\i\f1 color\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ lsc}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ lsc}}}{\f1 /lsc }{\b0\f1 or}{\i\f1  }{\cs58\f1\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  lightSquareColor}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ lightSquareColor}}}{\f1  /lightSquareColor }{\i\f1 color}{\cs58\f1\super  }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ dsc}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ dsc}}}{\f1 /dsc }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super K}{\f1  darkSquareColor}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  darkSquareColor}}}{\f1  /darkSquareColor }{\i\f1 color}{\cs58\f1\super  }{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Color specifications for white pieces, black pieces, light squares, and dark squares. Colors can be specified only by red/green/blue intensity, either in hexadecimal (as }{
+\i\f1 #rrggbb}{\f1 ) or in decimal (as }{\i\f1 rrr,ggg,bbb}{\f1 
 ). In the latter format, you must enclose the string in quotation marks if you leave spaces after the commas. The defaults are respectively #FFFFCC, #202020, #C8C365, and #77A26D. Available on the }{\f1\uldb Board Colors}{\v\f1 BoardColors}{\f1 
  section of the }{\f1\uldb Board Options}{\v\f1 BoardOptions}{\f1  dialog.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If you are using a }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  grayscale}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  grayscale}}}{\f1  grayscale monitor, try setting the colors to:
-\par }\pard\plain \s19\ql \li520\ri0\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin520\itap0 \f6\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 -whitePieceColor:#FFFFFF\line 
--blackPieceColor:#000000\line -lightSquareColor:#CCCCCC\line -darkSquareColor:#999999
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ hsc}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ hsc}}}{\f1 /hsc }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  highlightSquareColor}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  highlightSquareColor}}}{\f1  /highlightSquareColor }{\i\f1 color}{\cs58\f1\super  }{\f1 \line }{\cs58\f1\super K
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super K}{ phc}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\super #}{ phc}}}{\f1 /phc }{\b0\f1 or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  premoveHighlightColor}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  premoveHighlightColor}}}{\f1  /premoveHighlightColor }{\i\f1 color}{\cs58\f1\super  
-}{\f1 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you are using a }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  grayscale}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  grayscale}}}{\f1  grayscale monitor, try setting the colors to:
+\par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\fs20 -whitePieceColor:#FFFFFF\line -blackPieceColor:#000000\line -lightSquareColor:#CCCCCC\line -darkSquareColor:#999999
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ hsc}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ hsc}}}{\f1 /hsc }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super K}{\f1  highlightSquareColor}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  highlightSquareColor}}}{\f1  /highlightSquareColor }{\i\f1 color}{
+\cs58\f1\super  }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ phc}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\super #}{ phc}}}{\f1 /phc }{\b0\f1 or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  premoveHighlightColor}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  premoveHighlightColor}}}{\f1  /premoveHighlightColor }{\i\f1 color}{\cs58\f1\super  }{\f1 
 \par }{\b0\f1 Color specifications for the }{\b0\f1\uldb Highlight Last Move}{\b0\v\f1 HighlightLastMove}{\b0\f1  and }{\b0\f1\uldb Premove}{\b0\v\f1 PremoveCmd}{\b0\f1 
- options, respectively. Colors can be specified only by red/green/blue intensity, either in hexadecimal (as }{\b0\i\f1 #rrggbb}{\b0\f1 ) or in decimal (as }{\b0\i\f1 rrr,ggg,bbb}{\b0\f1 ). In the latter format
-, you must enclose the string in quotation marks if you leave spaces after the commas. The defaults are respectively #FFFF00 and #FF0000, respectively.
-\par }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  mono }}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  mono }}}{\f1  /mono}{\b0\f1  or }{\f1 /xmono}{\b0\f1 ,}{\f1  }{\b0\f1 or
-}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  monoMode}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  monoMode}}}{\f1  /monoMode}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Determines whether WinBoard displays its pieces and squares in black and white (True) or color (False, the default). Available in the }{\f1\uldb Board Colors}{\v\f1 BoardColors}{\f1  section of the }{\f1\uldb Board Options}{\v\f1 BoardOptions}{\f1 
- dialog.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorShout}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorShout}}}{\f1  /colorShout}{\i\f1  \'93effects color\'94\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorSShout}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorSShout}}}{\f1  /colorSShout }{\i\f1 \'93effects color\'94\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorChannel1}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorChannel1}}}{\f1  /colorChannel1 }{\i\f1 \'93effects color\'94}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorChannel}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorChannel}}}{\f1  /colorChannel }{\i\f1 \'93effects color\'94}{\f1 \line }{
-\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorKibitz}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorKibitz}}}{\f1  /colorKibitz }{\i\f1 \'93effects color\'94}{\f1 
-\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorTell}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorTell}}}{\f1  /colorTell }{\i\f1 \'93effects color\'94}{\f1 \line }{
-\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorChallenge}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorChallenge}}}{\f1  /colorChallenge }{\i\f1 \'93effects color\'94}{
-\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorRequest}}#
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorRequest}}}{\f1  /colorRequest }{\i\f1 \'93
-effects color\'94}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1 
- colorSeek}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorSeek}}}{\f1  /colorSeek }{\i\f1 \'93
-effects color\'94}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  color
-Normal}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorNormal}}}{\f1  /colorNormal }{\i\f1 \'93
-effects color\'94
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Select colors and effects to colorize messages in the ICS Interaction window. The effects may be any combination of }{\b\f1 b}{\f1 old, }{\b\f1 i}{\f1 talic, }{\b\f1 u}{\f1 nderline, and }{\b\f1 s}{\f1 
-trikeout. Colors are specified as for squares and pieces. Available on the }{\f1\uldb ICS Interaction Colors}{\v\f1 ICSInteractionColors}{\f1  section of the }{\f1\uldb ICS Options}{\v\f1 ICSOptions}{\f1 
+ options, respectively. Colors can be specified only by red/green/blue intensity, either in hexadecimal (as }{\b0\i\f1 #rrggbb}{\b0\f1 ) or in decimal (as }{\b0\i\f1 rrr,ggg,bbb}{\b0\f1 
+). In the latter format, you must enclose the string in quotation marks if you leave spaces after the commas. The defaults are respectively #FFFF00 and #FF0000, respectively.
+\par }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  mono }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super #}{\f1  mono }}}{\f1  /mono}{\b0\f1  or }{\f1 /xmono}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  monoMode}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  monoMode}}}{\f1  /monoMode}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Determines whether WinBoard displays its pieces and squares in black and white (True) or color (False, the default). Available in the }{\f1\uldb Board Colors}{\v\f1 
+BoardColors}{\f1  section of the }{\f1\uldb Board Options}{\v\f1 BoardOptions}{\f1  dialog.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 flipBlack}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 flipBlack}{\f1  }}}{\f1\cf11  /flipBlack}{\i\f1\cf11  true|false}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Determines whet
+her WinBoard displays the black pieces upside down (or the white pieces in Flip View). Useful with Shogi with the traditional Japanese pieces, which are not distinguished by color but by orientation.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 allWhite}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 allWhite}{\f1  }}}{\f1\cf11  /allWhite}{\i\f1\cf11  true|false}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Determines whether the white pie
+ce bitmaps will be used to display black pieces. The white pieces have a dark outline, which the black pieces lack. This makes the latter look vague if the color you give them is not very dark.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 renderPiecesWithFont}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 renderPiecesWithFont}{\f1  }}}{\f1\cf6  /renderPiecesWithFont }{\i\f1\cf6 fontname}
+{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Uses the named true-type fon
+t to render the pieces, rather than the built-in bitmaps. The font must be installed on your computer. If the name starts with a *  it is ignored, allowing you to easily disable a font temporarily in the whinboard.ini file.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 fontPieceToCharTable}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 fontPieceToCharTable}{\f1  }}}{\f1\cf6  /fontPieceToCharTable }{\i\f1\cf6 charact
+erstring}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 
+If font-based rendering of the pieces is used, this table specifies which character of the font alphabet should be used for which piece. The format of the character strings is the same as that of the argument of /pieceToCharTable.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 fontPieceSize}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 fontPieceSize}{\f1  }}}{\f1\cf6  /fontPieceSize }{\i\f1\cf6 number}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 The number gives the size of the piece, as a percentage of the square size.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{\f1\cf6 
+fontPieceBackColorWhite}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\cf6 fontPieceBackColorWhite}}}{\f1\cf6 /fontPieceBackColorWhite }{\i\f1\cf6 color\line }{
+\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{\f1\cf6 fontPieceForeColorWhite}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\cf6 fontPieceForeColorWhite}}}{\f1\cf6 /fontPieceForeColorWhite }{\i\f1\cf6 color\line }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{\f1\cf6 fontPieceBackColorBlack}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\cf6 fontPieceBackColorBlack}}}{\f1\cf6 
+/fontPieceBackColorBlack }{\i\f1\cf6 color\line }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{\f1\cf6 fontPieceForeColorBlack}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\cf6 fontPieceForeColorBlack}}}{\f1\cf6 /fontPieceForeColorBlack }{\i\f1\cf6 color}{\cs58\f1\cf6\super  }{\f1\cf6 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Color specifications for white pieces, black pieces that are generated with font-based rendering.
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 
+liteBackTextureFile}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 liteBackTextureFile}{\f1  }}}{\f1\cf6  /liteBackTextureFile }{\i\f1\cf6 filename}{\f1\cf6 
+
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 darkBackTextureFile}{\f1 
+ }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 darkBackTextureFile}{\f1  }}}{\f1\cf6  /darkBackTextureFile }{\i\f1\cf6 filename}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 The filename indicates a bitmap file that should be used to display the light or dark squares, allowing you to make boards that lo
+ok like wood, marble, etc. A filename starting with * is ignored.
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 
+liteBackTextureMode}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 liteBackTextureMode}{\f1  }}}{\f1\cf6  /liteBackTextureMode }{\i\f1\cf6 number}{\f1\cf6 
+
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 darkBackTextureMode}{\f1 
+ }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 darkBackTextureMode}{\f1  }}}{\f1\cf6  /darkBackTextureMode }{\i\f1\cf6 number}{\f1\cf6 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf6 The number indicates the way the files given in the background-texture options should be used to fill in the squares.}{\cf6\lang1043\cgrid0  Valid text
+ure modes are 1 (default) and 2. In mode 1 the squares are taken from portions of the texture bitmap and copied without further processing. In mode 2, squares can also be rotated, mirrored and so on in order to provide a little more variety to the texture
+. The operations are selected at random so the board will look slightly different every time the program is run.\line }{\cf6 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 overideLineGap}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 overideLineGap}{\f1  }}}{\f1\cf6  /overideLineGap }{\i\f1\cf6 number}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 The number specifies the width, in pixels, of the grid lines used to separate the squares. If it is very small (like 
+a single pixel), it becomes vey hard to see which squares are highlighted (to indicate the last move), as this highlighting is a color change of these grid lines. Highlighting the moves with an arrow is then recommended.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 highlightMovesWithArrow}{\f1  }} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 highlightMovesWithArrow}{\f1  }}}{\f1\cf6  /highlightMovesWithArrow }{
+\i\f1\cf6 true|false}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If this option is true, a big, fat arrow is drawn to indicate the last move.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 highlightArrowColor}{\f1  }} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 highlightArrowColor}{\f1  }}}{\f1\cf6  /highlightArrowColor }{\i\f1\cf6 color}{
+\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Specifies the color of the arrow that highlights the moves.
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 
+evalHistoColorWhite}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 evalHistoColorWhite}{\f1  }}}{\f1\cf6  /evalHistoColorWhite }{\i\f1\cf6 color}{\f1\cf6 
+
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 evalHistoColorBlack}{\f1 
+ }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 evalHistoColorBlack}{\f1  }}}{\f1\cf6  /evalHistoColorBlack }{\i\f1\cf6 color}{\f1\cf6 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf6 Specifies the colors to be used to plot the white and black scores in the evaluation graph}{\cf6\lang1043\cgrid0 .\line }{
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorShout
+}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorShout}}}{\f1  /colorShout}{\i\f1  \ldblquote effects color\rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorSShout}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorSShout}}}{\f1 
+ /colorSShout }{\i\f1 \ldblquote effects color\rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorChannel1}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorChannel1}}}{\f1  /colorChannel1 }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorChannel}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorChannel}}}{\f1 
+ /colorChannel }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorKibitz}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorKibitz}}}{\f1  /colorKibitz }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorTell}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorTell}}}{\f1 
+ /colorTell }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorChallenge}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorChallenge}}}{\f1  /colorChallenge }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorRequest}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorRequest}}}{\f1 
+ /colorRequest }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorSeek}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorSeek}}}{\f1  /colorSeek }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorNormal}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorNormal}}}{\f1 
+ /colorNormal }{\i\f1 \ldblquote effects color\rdblquote 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Select colors and effects to colorize messages in the ICS Interaction window. The effects may be any combination of }{\b\f1 b}{\f1 old, }{\b\f1 i}{\f1 talic, }{\b\f1 u}{
+\f1 nderline, and }{\b\f1 s}{\f1 trikeout. Colors are specified as for squares and pieces. Available on the }{\f1\uldb ICS Interaction Colors}{\v\f1 ICSInteractionColors}{\f1  section of the }{\f1\uldb ICS Options}{\v\f1 ICSOptions}{\f1 
  dialog. Limitation: On 256 color displays, Windows chooses the nearest solid color from the system palette, which will not always be close to the color you selected.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorBackground}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorBackground}}}{\f1  /colorBackground }{\i\f1 color
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the background color for the ICS Interaction window. Available on the }{\f1\uldb 
-ICS Interaction Colors}{\v\f1 ICSInteractionColors}{\f1  section of the }{\f1\uldb ICS Options}{\v\f1 ICSOptions}{\f1  dialog.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorize}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorize}}}{\f1  /colorize}{\cs58\f1\super  }{\b0\f1 or }{\f1 /xcolorize}{\b0\f1 , or}{\f1  }{\cs58\f1\super K
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  colorizeMessages}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  colorizeMessages}}}{\f1  /colorizeMessages}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If True, WinBoard colorizes messages in the ICS Interaction window with the colors listed above. Default: True. Available in the }{\f1\uldb ICS Interaction Colors}{\v\f1 ICSInteractionColors}{\f1  section of the }{\f1\uldb ICS Options}{\v\f1 ICSOptions}{
-\f1  dialog.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  clockFont}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  clockFont}}}{\f1  /clockFont \'93}{\i\f1 fontname:size effects}{\f1 \'94\line }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  messageFont}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  messageFont}}}{\f1  /messageFont \'93}{\i\f1 fontname:size effects}{\f1 \'94\line }{
-\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  coordFont}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  coordFont}}}{\f1  /coordFont \'93}{\i\f1 fontname:size effects}{\f1 \'94
-\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  tagsFont}}#{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  tagsFont}}}{\f1  /tagsFont \'93}{\i\f1 fontname:size effects}{\f1 \'94
-\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  commentFont}}#
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  commentFont}}}{\f1  /commentFont \'93}{\i\f1 
-fontname:size effects}{\f1 \'94\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1 
- icsFont}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  icsFont}}}{\f1  /icsFont \'93}{\i\f1 
-fontname:size effects}{\f1 \'94
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-The fonts used respectively for the clocks, the message display line, rank and file coordinate labels, the Edit Tags dialog, the Edit Comment dialog, and the ICS Interaction wi
-ndow. These options may be given more than once. Each occurrence affects the fonts for the current board size; that is, the size given in the last preceding /boardSize option, if any, or else the default size. The font size may contain a decimal point, an
-d the effects may be any combination of }{\b\f1 b}{\f1 old, }{\b\f1 i}{\f1 talic, }{\b\f1 u}{\f1 nderline, and }{\b\f1 s}{\f1 trikeout. Example: }{\f2\fs16 /clockFont="Arial:20.0 bi".}{\f1  Available on the }{\f1\uldb Fonts}{\v\f1 Fonts}{\f1  menu.}{
-\f2\fs16 
-\par }\pard\plain \s2\ql \li115\ri0\sb120\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin115\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundShout}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundShout}}}{ /soundShout}{\i  sound\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundSShout}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundSShout}}}{ /soundSShout }{\i sound\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundChannel1}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundChannel1}}}{ /soundChannel1 }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundChannel}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundChannel}}}{ /soundChannel }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundKibitz}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundKibitz}}}{ /soundKibitz }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundTell}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundTell}}}{ /soundTell }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundChallenge}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundChallenge}}}{ /soundChallenge }{\i sound}{\line }{\cs58\f1\super K
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundRequest}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundRequest}}}{ /soundRequest }{\i sound}{\line }{\cs58\f1\super K
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundMove}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundMove}}}{ /soundMove }{\i sound}{\cs58\f1\super  }{\line }{\cs58\f1\super K
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundBell}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundBell}}}{ /soundBell }{\i sound}{\cs58\f1\super  }{
-\par }\pard \s2\ql \li115\ri0\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin115\itap0 {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundIcsWin}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundIcsWin}}}{\f1  /soundIcsWin }{\i\f1 sound}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundIcsLoss}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundIcsLoss}}}{\f1  /soundIcsLoss }{\i\f1 sound}{\cs58\f1\super  }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundIcsDraw}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundIcsDraw}}}{\f1  /soundIcsDraw }{\i\f1 sound}{\cs58\f1\super  }{\f1 \line }{
-\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundIcsUnfinished}}#
-{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundIcsUnfinished}}}{\f1  /soundIcsUnfinished }{
-\i\f1 sound}{\cs58\f1\super  }{\f1 
-\par }\pard \s2\ql \li115\ri0\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin115\itap0 {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  soundIcsAlarm}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 
-\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  soundIcsAlarm}}}{\f1  /soundIcsAlarm }{\i\f1 sound}{\cs58\f1\super  }{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Associate sounds with WinBoard events. Most of the events are the same ones that cause text colorization. In addition, }{\b\f1 soundMove}{\f1  is played if a chess engine or another player makes a move. }{\b\f1 SoundBell}{\f1 
- is played if the chess server sends an ASCII BEL character (Ctrl+G). Available on the }{\f1\uldb Sounds}{\v\f1 Sounds}{\f1  menu.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b SoundIcsWin}{, }{\b soundIcsLoss}{, }{\b soundIcsDraw}{ and }{\b soundIcsUnfinished}{
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ colorBackground}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorBackground}}}{\f1  /colorBackground }{\i\f1 color
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the background color for the ICS Interaction window. Available on the }{\f1\uldb ICS Interaction Colors}{\v\f1 ICSInteractionColors}{\f1  section of the }{\f1\uldb 
+ICS Options}{\v\f1 ICSOptions}{\f1  dialog.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorize}}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  colorize}}}{\f1  /colorize}{\cs58\f1\super  }{\b0\f1 or }{\f1 /xcolorize}{\b0\f1 , or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  colorizeMessages}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 
+ colorizeMessages}}}{\f1  /colorizeMessages}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If True, WinBoard colorizes messages in the ICS Interaction window with the colors listed above. Default: True. Available in the }{\f1\uldb ICS Interaction Colors}{\v\f1 
+ICSInteractionColors}{\f1  section of the }{\f1\uldb ICS Options}{\v\f1 ICSOptions}{\f1  dialog.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  clockFont}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  clockFont}}}{\f1  /clockFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  messageFont}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  messageFont
+}}}{\f1  /messageFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  coordFont}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  coordFont}}}{\f1  /coordFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  tagsFont}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  tagsFont}}}{
+\f1  /tagsFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  commentFont}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  commentFont}}}{\f1  /commentFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  icsFont}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  icsFont}}}{\f1  /icsFont 
+\ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+The fonts used respectively for the clocks, the message display line, rank and file coordinate labels, the Edit Tags dialog, the Edit Comment dialog, and the ICS Interaction window. These options may be given more than once. Each occur
+rence affects the fonts for the current board size; that is, the size given in the last preceding /boardSize option, if any, or else the default size. The font size may contain a decimal point, and the effects may be any combination of }{\b\f1 b}{\f1 
+old, }{\b\f1 i}{\f1 talic, }{\b\f1 u}{\f1 nderline, and }{\b\f1 s}{\f1 trikeout. Example: }{\f2\fs16 /clockFont="Arial:20.0 bi".}{\f1  Available on the }{\f1\uldb Fonts}{\v\f1 Fonts}{\f1  menu.}{\f2\fs16 
+\par }\pard\plain \s2\li115\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundShout}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundShout}}}{ /soundShout}{\i  sound\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundSShout}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundSShout}}}{ /soundSShout }{\i sound\line }{
+\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundChannel1}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundChannel1}}}{ /soundChannel1 }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundChannel}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundChannel}}}{ /soundChannel }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundKibitz}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundKibitz}}}{ /soundKibitz }{\i sound}{\line }{
+\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundTell}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super #}{\f1  soundTell}}}{ /soundTell }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundChallenge}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundChallenge}}}{ /soundChallenge }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundRequest}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundRequest}}}{ /soundRequest }{\i sound}{\line }{\cs58\f1\super K
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundMove}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{
+\f1  soundMove}}}{ /soundMove }{\i sound}{\cs58\f1\super  }{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundBell}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundBell}}}{ /soundBell }{\i sound}{\cs58\f1\super  }{
+\par }\pard \s2\li115\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundIcsWin}}#{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundIcsWin}}}{\f1  /soundIcsWin }{\i\f1 sound}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundIcsLoss}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundIcsLoss}}}{\f1  /soundIcsLoss }{\i\f1 sound}{\cs58\f1\super  }{\f1 
+\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundIcsDraw}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundIcsDraw}}}{\f1  /soundIcsDraw }{\i\f1 sound}{\cs58\f1\super  }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{
+\f1  soundIcsUnfinished}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundIcsUnfinished}}}{\f1  /soundIcsUnfinished }{\i\f1 sound}{\cs58\f1\super  }{\f1 
+\par }\pard \s2\li115\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  soundIcsAlarm}}#{\footnote\ftnalt 
+\pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  soundIcsAlarm}}}{\f1  /soundIcsAlarm }{\i\f1 sound}{\cs58\f1\super  }{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Associate sounds with WinBoard events. Most of the events are the same ones that cause text colorization. In addition, }{\b\f1 soundMove}{\f1 
+ is played if a chess engine or another player makes a move. }{\b\f1 SoundBell}{\f1  is played if the chess server sends an ASCII BEL character (Ctrl+G). Available on the }{\f1\uldb Sounds}{\v\f1 Sounds}{\f1  menu.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\b SoundIcsWin}{, }{\b soundIcsLoss}{, }{\b soundIcsDraw}{ and }{\b soundIcsUnfinished}{
  are played at the conclusion of an ICS game.  The result of the game determines which sound is played.
 \par }{\b SoundIcsAlarm}{ is played when your game clock counts down to }{\uldb icsAlarmTime}{\v\uldb icsAlarmTime}{. 
-\par }\pard \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480\faauto\adjustright\rin0\lin120\itap0 {\f1 The }{\i\f1 sound}{\f1  argument may be one of the following:
-\par {\pntext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li480\ri0\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang{\pntxtb \'b7}}
-\faauto\ls2\adjustright\rin0\lin480\itap0 {\f1 The name of a }{\f2 .wav}{\f1  file. The filename is interpreted relative to WinBoard's installation directory (the directory containing WinBoard.exe).
-\par {\pntext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li480\ri0\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang{\pntxtb \'b7}}
-\faauto\ls2\adjustright\rin0\lin480\itap0 {\f2 $}{\f1 , indicating the default system sound.
-\par {\pntext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li480\ri0\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang{\pntxtb \'b7}}
-\faauto\ls2\adjustright\rin0\lin480\itap0 {\f2 !}{\f1  followed by the name of a built-in WinBoard wave resource.
-\par {\pntext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li480\ri0\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnsp120\pnhang{\pntxtb \'b7}}
-\faauto\ls2\adjustright\rin0\lin480\itap0 {\f2 !}{\f1  alone, or \'93\'94 (empty string), indicating silence.
-\par }\pard \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 {\f1 The default for soundMove and soundBell is }{\f2 $}{\f1 , while the others default to silence.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  icsMenu}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  icsMenu}}}{\f1 /icsMenu=\{}{\i\f1 entries}{\f1 \} }{\b0\f1 or }{\f1 /icsMenu=@}{\i\f1 filename
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 This option lets you customize the right-button }{\f1\uldb context menu}{\v\f1 
-ICSInteractionContextMenu}{\f1  that is available in the upper (output) pane of the ICS Interaction window. It consists of a list of menu entries, one per 
-line. If the option value starts with an @ sign, it is the name of a file that contains the entries. Each entry contains either four fields separated by commas or the single character }{\f2 "-"}{\f1 . The fields are:
-\par {\pntext\pard\plain\f5\fs20 \hich\af5\dbch\af0\loch\f5 1.\tab}}\pard\plain \ql \fi-360\li480\ri0\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang{\pntxta .}}
-\faauto\ls14\adjustright\rin0\lin480\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The menu text. If this field begins with }{\f2 "|"}{, the item begins a new column in the menu and the }{\f2 "|"}{
- is not shown. If this field contains an }{\f2 "&"}{, the character after the ampersand is underlined in the menu and acts as a keyboard shortcut for the item when the menu is displayed. Do not assign the same shortcut key to two different menu items.
-
-\par {\pntext\pard\plain\s26 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard\plain \s26\ql \fi-360\li480\ri0\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang{\pntxta .}}
-\faauto\ls14\adjustright\rin0\lin480\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Text to insert into the input pane. The text cannot include a comma. You can use ICS aliases to get around this limitation.
-\par {\pntext\pard\plain\s26 \f1\fs20 \hich\af1\dbch\af0\loch\f1 3.\tab}}\pard \s26\ql \fi-360\li480\ri0\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang{\pntxta .}}
-\faauto\ls14\adjustright\rin0\lin480\itap0 {\f1 A flag (1 or 0) saying whether to insert a space and }{\i\f1 name }{\f1 (see }{\f1\uldb above}{\v\f1 Tell}{\f1 ) after th
-e text. If you set this flag, you might also want to put "(name)" into the menu text as a memory aid.
-\par {\pntext\pard\plain\s26 \f1\fs20 \hich\af1\dbch\af0\loch\f1 4.\tab}}\pard \s26\ql \fi-360\li480\ri0\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang{\pntxta .}}
-\faauto\ls14\adjustright\rin0\lin480\itap0 {\f1 A flag (1 or 0) saying whether the result should be sent immediately to ICS or left in the input pane for further editing.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {The entry }{\f2 "-"}{ produces a se
-parator line in the menu. The top three menu entries are always }{\b Copy and Paste}{, }{\b Copy}{, and }{\b Paste}{, but you have full control over the rest of the menu.
+\par }\pard \li120\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480\adjustright {\f1 The }{\i\f1 sound}{\f1  argument may be one of the following:
+\par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {\f1 
+The name of a }{\f2 .wav}{\f1  file. The filename is interpreted relative to WinBoard's installation directory (the directory containing WinBoard.exe).
+\par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {\f2 $}{
+\f1 , indicating the default system sound.
+\par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {\f2 !}{
+\f1  followed by the name of a built-in WinBoard wave resource.
+\par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {\f2 !}{
+\f1  alone, or \ldblquote \rdblquote  (empty string), indicating silence.
+\par }\pard \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright {\f1 The default for soundMove and soundBell is }{\f2 $}{\f1 , while the others default to silence.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  icsMenu}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  icsMenu}}}{\f1 /icsMenu=\{}{\i\f1 entries}{\f1 \} }{\b0\f1 or }{\f1 /icsMenu=@}{\i\f1 filename
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option lets you customize the right-button }{\f1\uldb context menu}{\v\f1 ICSInteractionContextMenu}{\f1 
+ that is available in the upper (output) pane of the ICS Interaction window. It consists of a list of menu entries, one per line. If the option value starts with an @ sign, it is the name of a file that contains the entries. Each entry contains e
+ither four fields separated by commas or the single character }{\f2 "-"}{\f1 . The fields are:
+\par {\pntext\pard\plain\f5\fs20\lang1033\cgrid \hich\af5\dbch\af0\loch\f5 1.\tab}}\pard\plain \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\ls14\adjustright 
+\f5\fs20\cgrid {The menu text. If this field begins with }{\f2 "|"}{, the item begins a new column in the menu and the }{\f2 "|"}{ is not shown. If this field contains an }{\f2 "&"}{, the character after the amper
+sand is underlined in the menu and acts as a keyboard shortcut for the item when the menu is displayed. Do not assign the same shortcut key to two different menu items.
+\par {\pntext\pard\plain\s26 \f1\fs20\lang1033\cgrid \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard\plain \s26\fi-360\li480\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\ls14\adjustright 
+\f5\fs20\cgrid {\f1 Text to insert into the input pane. The text cannot include a comma. You can use ICS aliases to get around this limitation.
+\par {\pntext\pard\plain\s26 \f1\fs20\lang1033\cgrid \hich\af1\dbch\af0\loch\f1 3.\tab}}\pard \s26\fi-360\li480\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\ls14\adjustright {\f1 
+A flag (1 or 0) saying whether to insert a space and }{\i\f1 name }{\f1 (see }{\f1\uldb above}{\v\f1 Tell}{\f1 ) after the text. If you set this flag, you might also want to put "(name)" into the menu text as a memory aid.
+\par {\pntext\pard\plain\s26 \f1\fs20\lang1033\cgrid \hich\af1\dbch\af0\loch\f1 4.\tab}}\pard \s26\fi-360\li480\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\ls14\adjustright {\f1 
+A flag (1 or 0) saying whether the result should be sent immediately to ICS or left in the input pane for further editing.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {The entry }{\f2 "-"}{ produces a separator line in the menu. The top three menu entries are always }{\b Copy and Paste}{, }{\b Copy}{, and }{\b Paste}{
+, but you have full control over the rest of the menu.
 \par }{\f1 The default menu is:
-\par }\pard\plain \s19\ql \li520\ri0\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin520\itap0 \f6\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 \endash \line &Who,who,0,1\line 
-Playe&rs,players,0,1\line &Games,games,0,1\line &Sought,sought,0,1\line |&Tell (name),tell,1,0\line M&essage (name),message,1,0\line \endash \line &Finger (name),finger,1,1\line &Vars (name),vars,1,1\line &Observe (name),observe,1,1\line 
-&Match (name),match,1,1\line Pl&ay (name),play,1,1
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 There is no graphical user interface to set this option. To change it, edit your }{\f1\uldb 
-settings}{\v\f1 settings}{\f1  file with a plain text editor such as Notepad.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  icsNames}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  icsNames}}}{\f1 /icsNames=\{}{\i\f1 names}{\f1 \} }{\b0\f1 or }{\f1 /icsNames=@}{\i\f1 filename
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-This option lets you customize the drop-down list of ICS names that appears in the WinBoard startup dialog. It consists of a list of strings
-, one per line. If the option value starts with an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text \'94/ics /icsHost=\'94
- and adds the result to the command-line options. There is no graphical user interface to set this option. To change it, edit your }{\f1\uldb settings}{\v\f1 settings}{\f1  file with a plain text editor such as Notepad.
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  firstChessProgramNames}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  firstChessProgramNames}}}{\f1 /firstChessProgramNames=\{}{\i\f1 names}{\f1 \} }{
-\b0\f1 or }{\f1 /firstChessProgramNames="@}{\i\f1 filename}{\f1 "
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-This option lets you customize the first drop-down list of chess engine names that appears in the WinBoard startup dialog. It consists of a list of strings, one per line. If the option value starts with an @ sign, it is 
-the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text \'94/cp /firstChessProgram=\'94 and adds the result to the command-line options. 
+\par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\fs20 \endash \line &Who,who,0,1\line Playe&rs,players,0,1\line &Games,games,0,1\line &Sought,sought,0,1\line 
+|&Tell (name),tell,1,0\line M&essage (name),message,1,0\line \endash \line &Finger (name),finger,1,1\line &Vars (name),vars,1,1\line &Observe (name),observe,1,1\line &Match (name),match,1,1\line Pl&ay (name),play,1,1
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 There is no graphical user interface to set this option. To change it, edit your }{\f1\uldb settings}{\v\f1 settings}{\f1  file with a plain text editor such as Notepad.
+
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  icsNames}}
+#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  icsNames}}}{\f1 /icsNames=\{}{\i\f1 names}{\f1 \} }{\b0\f1 or }{\f1 /icsNames=@}{\i\f1 filename
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option lets you customize the drop-down li
+st of ICS names that appears in the WinBoard startup dialog. It consists of a list of strings, one per line. If the option value starts with an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, W
+inBoard prepends the text \rdblquote /ics /icsHost=\rdblquote  and adds the result to the command-line options. There is no graphical user interface to set this option. To change it, edit your }{\f1\uldb settings}{\v\f1 settings}{\f1 
+ file with a plain text editor such as Notepad.
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ firstChessProgramNames}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  firstChessProgramNames}}}{\f1 /firstChessProgramNames=\{}{\i\f1 names}{\f1 \} }{\b0\f1 or }{\f1 
+/firstChessProgramNames="@}{\i\f1 filename}{\f1 "
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+This option lets you customize the first drop-down list of chess engine names that appears in the WinBoard startup dialog. It consists of a list of strings, one per line. If the option value starts with
+ an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text \rdblquote /cp /firstChessProgram=\rdblquote  and adds the result to the command-line options. 
 \par 
 \par There is no graphical user interface to set this option. To change it, edit your }{\f1\uldb settings}{\v\f1 settings}{\f1  file with a plain text editor such as Notepad. Example:
-\par }\pard\plain \s19\ql \li520\ri0\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin520\itap0 \f6\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2 /firstChessProgramNames=\{GNUChess\line 
-WCrafty-15_11 /fd="C:\\Program Files\\Crafty"\line ArasanX /fd="C:\\Program Files\\Arasan\\Arasan 4.1"\line "EXchess xb" /fd=C:\\EXchess\line Comet-WB /fd=C:\\Comet\line \}
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  secondChessProgramNames}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  secondChessProgramNames}}}{\f1 /secondChessProgramNames=\{}{\i\f1 names}{\f1 \}}{
-\b0\f1  or }{\f1 /secondChessProgramNames="@}{\i\f1 filename}{\f1 "}{\i\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 This option lets you customize the second drop-down list of chess engine names that appears
- in the WinBoard startup dialog. It consists of a list of strings, one per line. If the option value starts with an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text 
-\'94/cp /secondChessProgram=\'94 and adds the result to the command-line options.
+\par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2 /firstChessProgramNames=\{GNUChess\line WCrafty-15_11 /fd="C:\\Program Files\\Crafty"\line ArasanX /fd="C:\\Program Files\\Arasan
+\\Arasan 4.1"\line "EXchess xb" /fd=C:\\EXchess\line Comet-WB /fd=C:\\Comet\line \}
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ secondChessProgramNames}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  secondChessProgramNames}}}{\f1 /secondChessProgramNames=\{}{\i\f1 names}{\f1 \}}{\b0\f1  or }{\f1 
+/secondChessProgramNames="@}{\i\f1 filename}{\f1 "}{\i\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option lets you customize the second drop-down list of chess engine names that appears in the WinBoard startup dialog. It consists of a l
+ist of strings, one per line. If the option value starts with an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text \rdblquote /cp /secondChessProgram=\rdblquote 
+ and adds the result to the command-line options.
 \par 
 \par There is no graphical user interface to set this option. To change it, edit your }{\f1\uldb settings}{\v\f1 settings}{\f1  file with a plain text editor such as Notepad. Example:
-\par }\pard\plain \s19\ql \li520\ri0\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin520\itap0 \f6\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {/secondChessProgramNames=\{GNUChess\line 
-WCrafty-15_11 /sd="C:\\\\Program Files\\\\Crafty\\"\line ArasanX /sd="C:\\Program Files\\Arasan\\Arasan 4.1"\line "EXchess xb" /sd=C:\\EXchess\line Comet-WB /sd=C:\\Comet\line \}}{\f1 
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  xy coordinates of board}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  xy}}}{\f1 /x=}{\i\f1 xcoord  }{\f1 /y=}{\i\f1 ycoord
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the initial location of the board window, 
-giving the screen coordinates of the upper left-hand corner. Both arguments must be given together.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  xywh coordinates of Analysis window}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  xywh}}}{\f1 /analysisX=}{\i\f1 xcoord  }{\f1 /analysisY=}{\i\f1 ycoord}{\f1 
-  /analysisW=}{\i\f1 width}{\f1   /analysisH=}{\i\f1 height
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Sets the initial location and size 
-of the Analysis window, giving the screen coordinates of the upper left-hand corner, the width, and the height. All four arguments must be given together.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  xywh coordinates of Comment window}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  xywh}}}{\f1 /commentX=}{\i\f1 xcoord  }{\f1 /commentY=}{\i\f1 ycoord}{\f1 
-  /commentW=}{\i\f1 width}{\f1   /commentH=}{\i\f1 height
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Sets the initial location and size of the Comment window, giving the screen coordinates of the upper left-hand corner, the width, and the height. All four arguments must be given together.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  xywh coordinates of Game List window}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  xywh}}}{\f1 /gameListX=}{\i\f1 xcoord  }{\f1 /gameListY=}{\i\f1 ycoord}{\f1 
-  /gameListW=}{\i\f1 width}{\f1   /gameListH=}{\i\f1 height
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Sets the initial location and size of the Game List window, giving the screen coordinates of the upper left-hand corner, the width, and the height. All four arguments must be given together.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  xywh coordinates of ICS Interaction window}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  xywh}}}{\f1 /icsX=}{\i\f1 xcoord  }{\f1 /icsY=}{\i\f1 ycoord}{\f1   /icsW=}{\i\f1 
+\par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {/secondChessProgramNames=\{GNUChess\line WCrafty-15_11 /sd="C:\\\\Program Files\\\\Crafty\\"\line ArasanX /sd="C:\\Program Files\\
+Arasan\\Arasan 4.1"\line "EXchess xb" /sd=C:\\EXchess\line Comet-WB /sd=C:\\Comet\line \}}{\f1 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ xy coordinates of board}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  xy}}}{\f1 /x=}{\i\f1 xcoord  }{\f1 /y=}{\i\f1 ycoord
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location of the board window, giving the screen coordinates of the upper left-hand corner. Both arguments must be given together.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ xywh coordinates of Analysis window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  xywh}}}{\f1 /analysisX=}{\i\f1 xcoord  }{\f1 /analysisY=}{\i\f1 ycoord}{\f1   /analysisW=}{
+\i\f1 width}{\f1   /analysisH=}{\i\f1 height
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location and size of the Analysis window, giving the screen coordinates of the upper left-hand corner, the width, and the height. All four argume
+nts must be given together.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ xywh coordinates of Comment window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  xywh}}}{\f1 /commentX=}{\i\f1 xcoord  }{\f1 /commentY=}{\i\f1 ycoord}{\f1   /commentW=}{
+\i\f1 width}{\f1   /commentH=}{\i\f1 height
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location and size of the Comment window, giving the screen coordinates of the upper left-hand corner, the width, and the height. All four a
+rguments must be given together.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ xywh coordinates of Game List window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  xywh}}}{\f1 /gameListX=}{\i\f1 xcoord  }{\f1 /gameListY=}{\i\f1 ycoord}{\f1   /gameListW=}{
+\i\f1 width}{\f1   /gameListH=}{\i\f1 height
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location and size of the Game List window, giving the screen coordinates of the upper left-hand corner, the width, and the height.
+ All four arguments must be given together.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ xywh coordinates of ICS Interaction window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  xywh}}}{\f1 /icsX=}{\i\f1 xcoord  }{\f1 /icsY=}{\i\f1 ycoord}{\f1   /icsW=}{\i\f1 
 width}{\f1   /icsH=}{\i\f1 height
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Sets the initial location and size of the ICS Interaction window, giving the screen coordinates of the upper left-hand corner, the width, and the height. All four arguments must be given together.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  xywh coordinates of Tags window}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  xywh}}}{\f1 /tagsX=}{\i\f1 xcoord  }{\f1 /tagsY=}{\i\f1 ycoord}{\f1   /tagsW=}{
-\i\f1 width}{\f1   /tagsH=}{\i\f1 height
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Sets the initial location and size of the Tags window, giving the screen coordinates of the upper left-hand corner, the width, and the height. All four arguments must be given together.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Other Options}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Other Options}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  OtherOptions}}}{\b0\f1\fs18\up6  }{\f1\fs20 Other Options
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  ncp }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ncp }}}{\f1  /ncp}{\b0\f1  or }{\f1 /xncp}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  noChessProgram}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  noChessProgram}}}{\f1  /noChessProgram}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-If this option is True, WinBoard acts as a passive chessboard; it does not start a chess program or connect to ICS. This option also sets clockMode to False. Default: False.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  mode}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  mode}}}{\f1  /mode}{\b0\f1  or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  initialMode}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  initialMode}}}{\f1  /initialMode }{\i\f1 modename
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If this option is given, WinBoard selects the given }{\i\f1 modename}{\f1  from the }{\f1\uldb 
-Mode menu}{\v\f1 ModeMenu }{\f1 after starting and (if applicable) processing the }{\f1\uldb loadGameFile}{\v\f1 loadGameFile }{\f1 or }{\f1\uldb loadPositionFile}{\v\f1 loadPositionFile }{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location and size of the ICS Interaction window, giving the screen coordinates of the upper left-hand corner, the width, and the height. Al
+l four arguments must be given together.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ xywh coordinates of Tags window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  xywh}}}{\f1 /tagsX=}{\i\f1 xcoord  }{\f1 /tagsY=}{\i\f1 ycoord}{\f1   /tagsW=}{\i\f1 width}{\f1 
+  /tagsH=}{\i\f1 height
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location and size of the Tags window, giving the screen coordinates of the upper left-hand corner, the width, and the height. All four arg
+uments must be given together.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ xywh coordinates of Move History window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  xywh}}}{\f1\cf6 /moveHistoryX=}{\i\f1\cf6 xcoord  }{\f1\cf6 moveHistoryY=}{\i\f1\cf6 
+ycoord}{\f1\cf6   /moveHistoryW=}{\i\f1\cf6 width}{\f1\cf6   /moveHistoryH=}{\i\f1\cf6 height
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the initial location and size of the move-history window, giving the screen coordinates of the upper left-hand corner, the width, and
+ the height. All four arguments must be given together.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ xywh coordinates of Evaluation Graph window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  xywh}}}{\f1\cf6 /evalGraphX=}{\i\f1\cf6 xcoord  }{\f1\cf6 /evalGraphY=}{\i\f1\cf6 
+ycoord}{\f1\cf6   /evalGraphW=}{\i\f1\cf6 width}{\f1\cf6   /evalGraphH=}{\i\f1\cf6 height
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the initial location and size of the evaluation-graph window, giving the screen coordinates of the upper left-hand 
+corner, the width, and the height. All four arguments must be given together.
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 
+ xywh coordinates of Engine Output window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  xywh}}}{\f1\cf6 /engineOutputX=}{\i\f1\cf6 xcoord  }{\f1\cf6 /engineOutputY=}{
+\i\f1\cf6 ycoord}{\f1\cf6   
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\f1\cf6   /engineOutputW=}{\i\f1\cf6 width}{\f1\cf6   /engineOutputH=}{\i\f1\cf6 height
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the initial location and size of the engine-output window, giving the screen c
+oordinates of the upper left-hand corner, the width, and the height. All four arguments must be given together.
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 
+engineOutputUp}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 Window Up}}}{\f1\cf6 /engineOutputUp }{\i\f1\cf6 true|false 
+\par }\pard \s2\li119\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 evalGraphUp}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 Window Up}}}{\f1\cf6 /evalGraphUp }{\i\f1\cf6 true|false}{\f1\cf6 
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 moveHistoryUp}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 Window Up}}}{\f1\cf6 /moveHistoryUp }{\i\f1\cf6 true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If set to True, the corresponding window is displayed, if False, the window is absent.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 stickyWindows}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 stickyWindows}}}{\f1\cf6 /stickyWindows }{\i\f1\cf6 true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Not an album of the Rolling Stones.
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 
+autoDisplayComments}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 autoDisplayComments}}}{\f1\cf6 /autoDisplayComments }{\i\f1\cf6 true|false
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 autoDisplayTags}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 autoDisplayTags}}}{\f1\cf6 /autoDisplayTags }{\i\f1\cf6 true|false
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If set to True, these options cause the window with the move comments, and the window with PGN tags, 
+respectively, to pop up automatically when such tags or comments are encountered during the replaying a stored or loaded game.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 gameListTags}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 gameListTags}{\f1  }}}{\f1\cf6  /gameListTags }{\i\f1\cf6 string}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 The }{\i\f1\cf6 string}{\f1\cf6  contains single-character codes specifying the PGN tags that have to be listed for each game i
+n the game-list window, and their order. The meaning of the characters is a=out-of-book info, b=black Elo, e=event, d=date, o=round, p=players, r=result, w=white Elo, s=site, t=time control and v=variant, Default: \ldblquote eprd\rdblquote .
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\cf6\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super +}{\f1  main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 Adjudication Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1  }{\f1\cf6 Adjudication Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 AdjudicationOptions}}}{
+\b0\f1\fs18\cf6\up6  }{\f1\fs20\cf6 Adjudication Options
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 adjudicateLossThreshold}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 adjudicateLossThreshold}{\f1  }}}{\f1\cf6  /adjudicateLossThreshold }{\i\f1\cf6 
+scorethreshold}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 
+If the given value is non-zero, WinBoard adjudicates the game as a loss if both engines agree for a duration of 6 consecutive ply that the score is below the given score threshold for that engine. Make sure the score is 
+interpreted properly by WinBoard, using /firstScoreAbs and /secondScoreAbs if needed.}{\cf6 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 adjudicateDrawMoves}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 adjudicateDrawMoves}{\f1  }}}{\f1\cf6  /adjudicateDrawMoves }{\i\f1\cf6 number}{
+\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If the given value is non-zero, WinBoard adjudicates the game as a draw if after the given }{\i\f1\cf6 number}{\f1\cf6  of moves it was not yet decided.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 checkMates}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 checkMates}{\f1  }}}{\f1\cf11  /checkMates}{\i\f1\cf11  true|false}{\f1\cf11 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is True, WinBoard detects all checkmates and stalemates, and ends the game as soon as they occur. Legality-testing must be on for this option to work.}
+{
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 testClaims}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 testClaims}{\f1  }}}{\f1\cf11  /testClaims}{\i\f1\cf11  true|false}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is True, WinBoard verifies all 
+result claims made by engines, and those who send false claims will forfeit the game because of it. Legality-testing must be on for this option to work.}{\cf11 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 materialDraws}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 materialDraws}{\f1  }}}{\f1\cf11  /materialDraws}{\i\f1\cf11  true|false}{\f1\cf11 
+
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is True, WinBoard adjudicates games as draws when there is 
+no sufficient material left to create a checkmate. This applies to KBKB with like bishops, and to KBK, KNK and KK. Legality-testing must be on for this option to work.}{\cf11 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 trivialDraws}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 trivialDraws}{\f1  }}}{\f1\cf11  /trivialDraws}{\i\f1\cf11  true|false}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is True, WinBoard adjudicates games as draws 
+that cannot be usualy won without opponent assistance. This applies to KBKB with unlike bishops, and to KBKN, KNKN, KNNK, KRKR and KQKQ. The draw is called after 6 ply into these end-games, to allow quick mates that can occur in some positions. KQKQ does 
+not really belong in this category, and might be taken out in the future. (When bitbase-based adjudications are implemented.) Legality-testing must be on for this option to work.}{\cf11 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 ruleMoves}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 ruleMoves}{\f1  }}}{\f1\cf11  /ruleMoves }{\i\f1\cf11 number}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If the given value is non-zero, WinBoard adjudicates the game as a draw after the given }{\i\f1\cf11 number}{\f1\cf11 
+ of consecutive reversible moves. Engines can claim draws after 50 moves, irrespective of the value of }{\i\f1\cf11 number}{\f1\cf11 .}{\cf11 
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 repeatsToDraw}{\f1  }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 repeatsToDraw}{\f1  }}}{\f1\cf11  /repeatsToDraw }{\i\f1\cf11 number}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If the given value is non-zero, WinBoard adjudicates the game as a draw if a position is repeated the given }{\i\f1\cf11 number}{\f1\cf11 
+ of times. Engines can claim draws after 3 repeats, (on the 3rd occurrence, actually), irrespective of the value of }{\i\f1\cf11 number}{\f1\cf11 . Beware that positions that have different castling or en-passant rights do not count as repeats, WinB
+oard is fully e.p. and castling aware!}{\cf11 
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20\cf11 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super +}{\f1  main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Other Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super $}{\f1  Other Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  OtherOptions}}}{\b0\f1\fs18\up6  }{\f1\fs20 Other Options
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  ncp }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ncp }}}{\f1  /ncp}{\b0\f1  or }{\f1 /xncp}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
+\s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  noChessProgram}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  noChessProgram}}}{
+\f1  /noChessProgram}{\i\f1  true|false}{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is True, WinBoard acts as a passive chessboard; it does not start a chess program or connect to ICS. This option also sets clockMod
+e to False. Default: False.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  mode}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  mode}}}{\f1  /mode}{\b0\f1  or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  initialMode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  initialMode}}}{\f1  /initialMode }{\i\f1 modename
+
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is given, WinBoard selects the given }{\i\f1 modename}{\f1  from the }{\f1\uldb Mode menu}{\v\f1 ModeMenu }{\f1 
+after starting and (if applicable) processing the }{\f1\uldb loadGameFile}{\v\f1 loadGameFile }{\f1 or }{\f1\uldb loadPositionFile}{\v\f1 loadPositionFile }{\f1 
 option. Default: "". Other supported values are TwoMachines, AnalyzeFile, Analysis, MachineWhite, MachineBlack, EditGame, EditPosition, and Training.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  variant}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  variant}}}{\f1  /variant}{\b0\f1  }{\i\f1  varname}{\f1 
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {
-Activates preliminary, partial support for playing chess variants against a local engine or editing variant games. This flag is not needed in ICS mode. Recognized variant names are:
-\par normal\tab Normal chess\line wildcastle\tab Shuffle chess, king can castle from d file\line nocastle\tab Shuffle chess, no castling allowed\line fischerandom\tab Fischer Random shuffle chess\line bughouse\tab Bughouse, ICC/FICS rules\line crazyhouse\tab 
-Crazyhouse, ICC/FICS rules\line losers  \tab Lose all pieces or get mated (ICC wild 17)\line suicide\tab Lose all pieces including king (FICS)\line giveaway\tab Try to have no legal moves (ICC wild 26)\line twokings\tab Weird ICC wild 9\line kriegspiel
-\tab Opponent's pieces are invisible\line atomic   \tab Capturing piece explodes (ICC wild 27)\line 3check\tab Win by giving check 3 times (ICC wild 25)
-\par In the shuffle variants, WinBoard does not shuffle the pieces, but you can do it by hand using Edit Position. Some variants are supported only in ICS mode, including fischerandom, bughouse, and kriegspiel. The winning/drawing conditions in c
-razyhouse (offboard interposition on mate), losers, suicide, giveaway, atomic, and 3check are not fully understood. In crazyhouse, WinBoard does not yet keep track of offboard pieces.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  debug}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  debug}}}{\f1  /debug}{\b0\f1  or }{\f1 /xdebug}{\b0\f1 ,}{\f1  }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt 
-\pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  debugMode}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  debugMode}}}{\f1  /debugMode}{\i\f1  true|false}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Writes debugging information to the file \'93WinBoard.debug\'94
-, including all commands sent to the chess engine, all output received from it, and all commands sent to ICS. You can press Ctrl+Alt+F12 to turn this option on or off while WinBoard
- is running. Each time you turn it on, any existing debug file is overwritten.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  rsh }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  rsh }}}{\f1  /rsh }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  remoteShell }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  remoteShell }}}{\f1  /remoteShell }{\i\f1 shellname}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Name of the command used to run programs remotely. If this option is not given, WinBoard}{
-\i\f1  }{\f1 uses its own built-in implementation of the Unix }{\i\f1 rcmd}{\f1  protocol (the protocol used by }{\i\f1 rsh}{\f1 ).
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  ruser }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ruser }}}{\f1  /ruser }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  remoteUser }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  remoteUser }}}{\f1  /remoteUser }{\i\f1 username}{\f1 
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-User name on the remote system when running programs with the remoteShell. The default is your local user name.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  ini }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ini }}}{\f1  /ini }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  settingsFile }}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  settingsFile }}}{\f1  /settingsFile }{\i\f1 filename\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1 at sign}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  atsign }}}{\f1 @ }{\i\f1 file-name
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 See }{\f1\uldb Settings}{\v\f1 Settings}{\f1 .
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Initialization files}}K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Files}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Files}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Files}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  INITIALIZATION FILES
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Settings }}}{\f1\fs18\up6  }{\cs58\f1\super #{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Settings }}}{\f1  Settings
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {When WinBoard starts up, it reads option settings from a file named }{\i WinBoard.ini }{
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 variant}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  variant}}}{\f1  /variant}{\b0\f1  }{\i\f1  varname}{\f1 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {Activates preliminary, partial support for playing chess variants against a l
+ocal engine or editing variant games. This flag is not needed in ICS mode. Recognized variant names are:
+\par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {normal\tab \tab Normal chess\line wildcastle\tab Shuffle chess, king can castle from d file\line nocastle\tab Shuffle chess, no castling allowed\line fischerandom\tab 
+Fischer Random shuffle chess\line bughouse\tab Bughouse, ICC/FICS rules\line crazyhouse\tab Crazyhouse, ICC/FICS rules\line losers  \tab Lose all pieces or get mated (ICC wild 17)\line suicide\tab Lose all pieces including king (FICS)\line giveaway\tab 
+Try to have no legal moves (ICC wild 26)\line twokings\tab Weird ICC wild 9\line kriegspiel\tab Opponent's pieces are invisible\line atomic   \tab Capturing piece explodes (ICC wild 27)\line 3check\tab Win by giving check 3 times (ICC wild 25)
+\par }\pard\plain \s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid {xiangqi\tab Chinese Chess (on a 9x10 board)\line shogi\tab \tab Japanese Chess (on a 9x9 board, with piece drops) \line capablanca\tab Capabl
+anca Chess (10x8 board, with Archbishop and Chancellor pieces)\line gothic\tab \tab similar, with a better initial position\line caparandom\tab An FRC-like version of Capablanca Chess (10x8 board) \line janus\tab \tab 
+A game with two Archbishops (10x8 board)\line shatranj\tab Ancient Arabic Chess, with Elephants and General replacing B and Q.\line courier\tab Medieval intermedite between shatranj and modern Chess (on 12x8 board) \line falcon\tab \tab 
+A patented Chess variant with two Falcon pieces (10x8) board \line berolina\tab Pawns capture straight ahead, and move diagonal (legality testing off!)\line cylinder\tab Pieces wrap around the board, as if it were a cylinder (legality testing off!) \line 
+fairy\tab \tab A variant in which all pieces known to WinBoard can participate\line knightmate\tab King moves a Knight, and vice versa
+\par In the shuffle variants, WinBoard does now shuffle the pieces, although you can still do it by hand using Edit Position. }{\cf0 Some variants are supported only in ICS mode, including bughouse, and kriegspiel.}{ }{\cf0 
+The winning/drawing conditions in crazyhouse (offboard interposition on mate), losers, suicide, giveaway, atomic, and 3check are not fully understood. In crazyhouse,}{
+ WinBoard now does keep track of offboard pieces.In shatranj it does implement the baring rule when mate detection is switched on.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 boardHeight}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 boardHeight}}}{\f1\cf11  /boardHeight }{\i\f1\cf11 height}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Allows you to set a non-standard number of board ranks in any variant. If the height is given as \lquote -1\rquote , the default height for the variant is used.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 boardWidth}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 boardWidth}}}{\f1\cf11  /boardWidth }{\i\f1\cf11 width}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Allows you to set a non-standard number of board files in any variant. If the width is given as \lquote -1\rquote , the d
+efault width for the variant is used. Width a non-standard width, the initial position will always be an empty board, as the usual opening array will not fit.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 holdingsSize}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 holdingsSize}}}{\f1\cf11  /holdingsSize }{\i\f1\cf11 size}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Allows you to set a non-standard size for the holdings in any variant. If the size is given as \lquote -1\rquote 
+, the default holdings size for the variant is used. The first }{\i\f1\cf11 size}{\f1\cf11  piece types will go into the holdings on capture, and you will be able to drop them on the board in stead of making a normal move. If }{\i\f1\cf11 size}{\f1\cf11 
+ equals 0, there will be no holdings.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf6 defaultFrcPosition}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 defaultFrcPosition}}}{\f1\cf6  /defaultFrcPosition }{\i\f1\cf6 number}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Specifies the number of the opening position in shuffle games like FRC. A value of \lquote -1\rquote  means the position is randomly generated by WinBoard.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 pieceToSquareTable}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 pieceToSquareTable}}}{\f1\cf11  /pieceToSquareTable }{\i\f1\cf11 characterstring}{
+\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 The characters that are used to r
+epresent the piece types WinBoard knows in FEN diagrams and SAN moves. The string argument has to have an even length (or it will be ignored), as white and black pieces have to be given separately (in that order). The last letter for each color will be th
+e
+ King. The letters before that will be PNBRQ and then a whole host of fairy pieces in an order that has not fully crystallized yet (currently FEACWMOHIJGDVSLU, F=Ferz, Elephant, A=Archbishop, C=Chancellor, W=Wazir, M=Commoner, O=Cannon, H=Nightrider). You
+ 
+should list at least all pieces that occur in the variant you are playing. If you have less than 44 characters in the string, the pieces not mentioned will get assigned a period, and you will not be able to distinguish them in FENs. You can also explicitl
+y assign pieces a period, in which case they will not be counted in deciding which captured pieces can go into the holdings.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf11 A tilde as a piece name does mean this piece is used to represent a promoted Pawn in Crazyhouse-like games, i.e. on capture it turns
+ back onto a Pawn. A + similarly indicate the piece is a Shogi-style promoted piece, that should revert to its non-promoted version on capture (rather than to a Pawn).
+\par Note that promoted pieces are represented by pieces 11 further in the list.
+\par You should not have to use this option often: each variant has its own default setting for the piece representation in FEN, which should be sufficient in normal use.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  rsh }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  rsh }}}{\f1  /rsh }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  remoteShell }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  remoteShell }}}{\f1  /remoteShell }{\i\f1 shellname}
+{\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Name of the command used to run programs remotely. If this option is not given, WinBoard}{\i\f1  }{\f1 uses its own built-in implementation of the Unix }{\i\f1 rcmd}{\f1 
+ protocol (the protocol used by }{\i\f1 rsh}{\f1 ).
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  ruser }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ruser }}}{\f1  /ruser }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  remoteUser }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  remoteUser }}}{\f1  /remoteUser }{\i\f1 username}{
+\f1 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 User name on the remote system when running programs with the remoteShell. The default is your local user name.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{
+\f1\cf11 userName}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf11 userName}}}{\f1\cf11  /userName }{\i\f1\cf11 username}{\f1\cf11 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Name under which the Human player will be listed in the PGN file. (Default is the login name on your local computer.)
+\par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 
+delayBeforeQuit}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 delayBeforeQuit}}}{\f1\cf6  /delayBeforeQuit }{\i\f1\cf6 number}{\f1\cf6 
+\par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  }{\f1\cf6 delayAfterQuit}}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 delayAfterQuit}}}{\f1\cf6  /delayAfterQuit }{\i\f1\cf6 number}{\f1\cf6 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 These options specify how long WinBoard has to wait before sending a termination signal to rogue engine processes, that do not want to react to the \lquote quit\rquote 
+ command. The second one determines the pause after killing the engine, to make sure it dies.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  ini }}#
+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ini }}}{\f1  /ini }{\b0\f1 or}{\f1  }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  settingsFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  settingsFile }}}{\f1  /settingsFile }{\i\f1 
+filename\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 at sign}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super #}{\f1  atsign }}}{\f1 @ }{\i\f1 file-name
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 See }{\f1\uldb Settings}{\v\f1 Settings}{\f1 .
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Initialization files}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Files}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super $}{\f1  Files}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Files}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  INITIALIZATION FILES
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  Settings }
+}}{\f1\fs18\up6  }{\cs58\f1\super #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Settings }}}{\f1  Settings
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {When WinBoard starts up, it reads option settings from a file named }{\i WinBoard.ini }{
 in its installation directory (the directory containing WinBoard.exe). Options in this file have the same format as }{\uldb command line options}{\v Options}{
 , except that they do not all have to be on a single line. You can put a comment in a settings file by preceding it with a semicolon (}{\f2 ;}{).
 \par The WinBoard.ini file is read before the command line is processed, so any options you give on the command line override options in the file.
-\par }{\f1 If WinBoard encounters a /}{\f1\uldb settingsFile}{\v\f1 settingsFile}{\f1  }{\i\f1 filename }{\f1 or }{\f1\uldb @}{\v\f1 atsign}{\i\f1 filename }{\f1 option while reading settings (w
-hether from the command line or a file), it reads more settings from the given file before reading the next option.
+\par }{\f1 If WinBoard encounters a /}{\f1\uldb settingsFile}{\v\f1 settingsFile}{\f1  }{\i\f1 filename }{\f1 or }{\f1\uldb @}{\v\f1 atsign}{\i\f1 filename }{\f1 
+option while reading settings (whether from the command line or a file), it reads more settings from the given file before reading the next option.
 \par The }{\f1\uldb Save Settings Now}{\v\f1 SaveSettings}{\f1  menu command writes the current values of most options to a file. In addition, settings are saved automatically when WinBoard exits if }{\f1\uldb Save Settings on Exit}{\v\f1 SaveSettingsOnExit}{
 \f1  is checked. The settings are written to the last file named in a /settingsFile command, if any; otherwise to WinBoard.ini}{\i\f1 .}{\f1  The @ option does not affect which file settings are saved to.
-\par W
-arning: Because Save Settings overwrites the last settings file (usually WinBoard.ini) and only saves a subset of WinBoard's options, you should not add settings of more options to such a file with a text editor. If you do this, your additional options wi
-l
-l be lost on the next Save Settings. You can change the values of existing settings freely, using Notepad or any plain text editor. Be careful not to do this while WinBoard is running, however, unless you know that Save Settings on Exit is off. Otherwise 
-all your changes will be overwritten and lost when WinBoard exits.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  ICS Logon}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  ICSLogon}}}{\f1  ICS Logon
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Whenever WinBoard connects to the Internet Chess Server, if it finds a file called }{\i\f1 
-ICS.ini }{\f1 in its installation directory}{\i\f1 ,}{\f1  it feeds the file's contents to the ICS as commands. Usually the first two lines of the file should be your ICS user name and password. You can specify a different name instead of }{\i\f1 ICS.ini}
-{\f1  by using the }{\f1\uldb icslogon}{\v\f1 icslogon}{\f1  command line option.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Installing Chess Engines}}${\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Installing Chess Engines}}#{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  InstallingChessEngines}}+{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  INSTALLING CHESS ENGINES
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Introduction
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 WinBoard is capable of operating with many different chess engines. You can play chess agains
-t a compatible engine, set up matches between two engines, or (advanced users only) run an automated computer player on an ICS.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Typically, the main difficulty in installing a new chess engine for use by WinBoard comes in getting the engine itself running and setting its options appropriately. The connection to WinBoard is relatively straightforward.
-\par WinBoard-compatible chess engine
-s are Win32 command line programs that you can run by hand in an MS-DOS Prompt box and type human-readable commands to. WinBoard connects to an engine simply by starting the engine up in the background and communicating with it through a pair of pipes. Th
-erefore the basic procedure for installing an engine is:
-\par }\pard\plain \s20\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 1. Get a copy of the engine and any supporting files it needs.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-2. Install and configure the engine as a command-line program by following the instructions that come with it. Try it out by running it from the command line in an MS-DOS Prompt box and make sure it works.
+\par Warning: Because Save Settings overwrites the last settings file (usually WinBoard.ini) and only saves 
+a subset of WinBoard's options, you should not add settings of more options to such a file with a text editor. If you do this, your additional options will be lost on the next Save Settings. You can change the values of existing settings freely, using Not
+epad or any plain text editor. Be careful not to do this while WinBoard is running, however, unless you know that Save Settings on Exit is off. Otherwise all your changes will be overwritten and lost when WinBoard exits.
+\par }\pard\plain \s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid {\f1 Notice that tournament managers, lik
+e PSWBTM, usually call WinBoard with the option not to save settings on exit, so that the entire tournament uses the same settings. So it does make sense to edit \lquote volatile\rquote  options, such as /variant, into the settings file.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1  ICS Logon}
+}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  ICSLogon}}}{\f1  ICS Logon
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Whenever WinBoard connects to the Internet Chess Server, if it finds a file called }{\i\f1 ICS.ini }{\f1 in its installation directory}{\i\f1 ,}{\f1 
+ it feeds the file's contents to the ICS as commands. Usually the first two lines of the file should be your ICS user name and password. You can specify a different name instead of }{\i\f1 ICS.ini}{\f1  by using the }{\f1\uldb icslogon}{\v\f1 icslogon}{
+\f1  command line option.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Installing Chess Engines}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1  Installing Chess Engines}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
+\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  InstallingChessEngines}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs20  INSTALLING CHESS ENGINES
+
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\f1 Introduction
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard is capable of operating with many different chess engines. You can play chess against a compatible engine, set up mat
+ches between two engines, or (advanced users only) run an automated computer player on an ICS.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Typically, the main difficulty in installing a new chess engine for use by WinBoard comes in getting the engine itself running and setting its options appropriat
+ely. The connection to WinBoard is relatively straightforward.
+\par WinBoard-compatible chess engines are Win32 command line programs that you can run by hand in an MS-DOS Prompt box and type human-readable commands to. WinBoard connects to an engine simply by 
+starting the engine up in the background and communicating with it through a pair of pipes. Therefore the basic procedure for installing an engine is:
+\par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 1. Get a copy of the engine and any supporting files it needs.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 2. Install and configure the engine as a c
+ommand-line program by following the instructions that come with it. Try it out by running it from the command line in an MS-DOS Prompt box and make sure it works.
 \par 3. Optional, but recommended: Try out the WinBoard plus engine combination by running WinBoard with the proper command line arguments in an MS-DOS Prompt box.
 \par 4. Create a shortcut on your desktop or Start menu to run the engine with WinBoard.
 \par 5. Optionally edit your WinBoard.ini file to add the engine to the drop-down lists on WinBoard's startup dialog.
 \par This document cannot explain steps 1 and 2 in detail for all engines, but we will take you through all five steps in outline, using Crafty as an example.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Example: Crafty
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 1. Choose a directory to put Crafty in. We'll use }{\f2 C:\\Program Files\\Crafty}{\f1 
- in this example. Download your copy of Crafty into this directory from its author's FTP site, }{\f2 ftp://ftp.cis.uab.edu/pub/hyatt}{\f1 . At this writing, you will need at least the following files:
-\par }\pard\plain \s19\ql \li520\ri0\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin520\itap0 \f6\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 read.me\line v15/crafty.doc\line v15/crafty.faq
-\line v15/wcrafty-15.*.exe}{\f1\fs20  (where * is replaced by the largest number there)\line }{\f2\fs20 common/start.zip}{\fs20 \line }{\f2\fs20 common/medium.zip}{\fs20  }{\f1\fs20 (or another book).
-\par }\pard\plain \s16\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 2. T
-he first three files are documentation that you can read with a text editor. Read the read.me file first and follow the instructions carefully. This will take some time. Do not write to the author of WinBoard if you have trouble with the instructions in t
-he Crafty read.me. Try running Crafty from an MS-DOS Prompt box and make sure it works before you go on.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 3. Optional, but recommended: In an MS-DOS Prompt box,}{ }{\f2 cd }{\f1 
-to the directory where WinBoard is installed, typically }{\f2 "C:\\Program Files\\WinBoard"}{\f1 . Then type the following command line. Use the actual name of the wcrafty file you downloaded, not an }{\f2 *}{\f1 
-, and if your browser changed the first period to an underscore when you downloaded the file, make that change in the command line too.
-\par }\pard\plain \s63\ql \fi-720\li1440\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin1440\itap0 \f2\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {WinBoard /cp /fcp=WCrafty-15.* /fd="C:\\Program Files\\
-Crafty" /scp=WCrafty-15.* /sd="C:\\Program Files\\Crafty"
-\par }\pard\plain \s16\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-WinBoard should start up, with Crafty running as its chess engine. Check that you can play chess against Crafty.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 4. To make a shortcut or Start menu entry for Crafty: Right-c
-lick on the desktop and select New/Shortcut. Use the Browse button to find your winboard.exe file and get its name into the Command Line box. (It usually will be "C:\\Program Files\\WinBoard\\
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\f1 Example: Crafty
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 1. Choose a directory to put Crafty in. We'll use }{\f2 C:\\Program Files\\Crafty}{\f1  in t
+his example. Download your copy of Crafty into this directory from its author's FTP site, }{\f2 ftp://ftp.cis.uab.edu/pub/hyatt}{\f1 . At this writing, you will need at least the following files:
+\par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\fs20 read.me\line v15/crafty.doc\line v15/crafty.faq\line v15/wcrafty-15.*.exe}{\f1\fs20  (where * is r
+eplaced by the largest number there)\line }{\f2\fs20 common/start.zip}{\fs20 \line }{\f2\fs20 common/medium.zip}{\fs20  }{\f1\fs20 (or another book).
+\par }\pard\plain \s16\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 2. The first three files are documentation that you can read with a text editor. Read the read.me file first and follow the instructions carefully. This will take so
+me time. Do not write to the author of WinBoard if you have trouble with the instructions in the Crafty read.me. Try running Crafty from an MS-DOS Prompt box and make sure it works before you go on.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 3. Optional, but recommended: In an MS-DOS Prompt box,}{ }{\f2 cd }{\f1 to the directory where WinBoard is installed, typically }{\f2 "C:\\Program Files\\WinBoard"}{\f1 
+. Then type the following command line. Use the actual name of the wcrafty file you downloaded, not an }{\f2 *}{\f1 , and if your browser changed the first period to an underscore when you downloaded the file, make that change in the command line too.
+
+\par }\pard\plain \s63\fi-720\li1440\sb80\sl-240\slmult0\nowidctlpar\adjustright \f2\fs20\cgrid {WinBoard /cp /fcp=WCrafty-15.* /fd="C:\\Program Files\\Crafty" /scp=WCrafty-15.* /sd="C:\\Program Files\\Crafty"
+\par }\pard\plain \s16\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard should start up, with Crafty running as its chess engine. Check that you can play chess against Crafty.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
+4. To make a shortcut or Start menu entry for Crafty: Right-click on the desktop and select New/Shortcut. Use the Browse button to find your winboard.exe file and get its name into the Command Line box. (It usually will be "C:\\Program Files\\WinBoard\\
 winboard.exe".) Click in the Command Line box and hit the End key to go to the end. Add the following to the end of the command line, }{\i\f1 after}{\f1  the closing quotation mark. Use the actual name of the wcrafty file you downloaded, not an }{\f2 *}{
 \f1 , and if your browser changed the first period to an underscore when you downloaded the file, make that change in the command line too.
-\par }\pard\plain \s63\ql \fi-720\li1440\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin1440\itap0 \f2\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {/cp /fcp=WCrafty-15.* /fd="C:\\Program Files\\Crafty" \line /scp=WCrafty-15.* /sd="C:
-\\Program Files\\Crafty"
-\par }\pard\plain \s62\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Press Next, choose a name for the shortcut, and press Finish. You can now use this shortcut to run WinBoard with Crafty. Double-click it to check that it works. You can drag or copy the shortcut into your Start menu if you like.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 5. To add Crafty as an option in the WinBoard Startup dialog, edit your }{\f1\uldb 
-WinBoard.ini file}{\v\f1 Settings}{\f1  with Notepad or another plain text editor, carefully following the example shown under }{\f1\uldb /firstChessProgramNames}{\v\f1 firstChessProgramNames}{\f1  above.
-\par }\pard\plain \s2\ql \li120\ri0\sb120\sa60\sl-240\slmult0\nowidctlpar\faauto\outlinelevel1\adjustright\rin0\lin120\itap0 \b\f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 For more information
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 If you would like to run an automated computer player on the ICS, see the separate file }{\f2 
-zippy.README}{\f1 . If you would like to write your own engine to interface to WinBoard, see the separate file }{\f2 engine-intf.html}{\f1 
-, and join the mailing list mentioned there. Both files are included in the WinBoard distribution. You might also want to get the source code for WinBoard. It is available from the author's Web page, http://www.tim-mann.org/chess.html}{\f2 .}{\f1 
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Firewalls}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Firewalls}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Firewalls}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs18\up6  }{\f1\fs20 FIREWALLS
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 By default, "WinBoard /ics"}{\i\f1  }{\f1 
-communicates with an Internet Chess Server by opening a TCP socket directly from the machine it is running on to the ICS. If there is a firewall between your machine and the ICS, this won't work. Here are some recipes for getting around common kinds of fi
-rewalls using special options to WinBoard}{\i\f1 .}{\f1  Important: See the paragraph in the }{\f1\uldb LIMITATIONS}{\v\f1 LIMITATIONS}{\f1  section below about extra echoes.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
+\par }\pard\plain \s63\fi-720\li1440\sb80\sl-240\slmult0\nowidctlpar\adjustright \f2\fs20\cgrid {/cp /fcp=WCrafty-15.* /fd="C:\\Program Files\\Crafty" \line /scp=WCrafty-15.* /sd="C:\\Program Files\\Crafty"
+\par }\pard\plain \s62\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Press Next, cho
+ose a name for the shortcut, and press Finish. You can now use this shortcut to run WinBoard with Crafty. Double-click it to check that it works. You can drag or copy the shortcut into your Start menu if you like.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 5. To add Crafty as an option in the WinBoard Startup dialog, edit your }{\f1\uldb WinBoard.ini file}{\v\f1 Settings}{\f1 
+ with Notepad or another plain text editor, carefully following the example shown under }{\f1\uldb /firstChessProgramNames}{\v\f1 firstChessProgramNames}{\f1  above.
+\par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\f1 For more information
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you would like to run an automated computer player on the ICS, see the separate file }{\f2 zippy.README}{\f1 
+. If you would like to write your own engine to interface to WinBoard, see the separate file }{\f2 engine-intf.html}{\f1 , and join the mailing list mentioned there. Both files are included in the WinBoard d
+istribution. You might also want to get the source code for WinBoard. It is available from the author's Web page, http://www.tim-mann.org/chess.html}{\f2 .}{\f1 
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Firewalls}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Firewalls}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super $}{\f1  Firewalls}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs18\up6  }{\f1\fs20 FIREWALLS
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 By default, "WinBoard /ics"}{\i\f1  }{\f1 communicates with an Internet Chess Server by opening a TCP so
+cket directly from the machine it is running on to the ICS. If there is a firewall between your machine and the ICS, this won't work. Here are some recipes for getting around common kinds of firewalls using special options to WinBoard}{\i\f1 .}{\f1 
+ Important: See the paragraph in the }{\f1\uldb LIMITATIONS}{\v\f1 LIMITATIONS}{\f1  section below about extra echoes.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 
 Suppose that you can't telnet directly to ICS, but you can telnet to a firewall host, log in, and then telnet from there to ICS. Let's say the firewall is called fire.wall.com. Set command-line options as follows: 
-\par }\pard\plain \s19\ql \li520\ri0\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin520\itap0 \f6\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 
-WinBoard -ics -icshost fire.wall.com -icsport 23
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Then when you run WinBoard}{\i\f1  }{\f1 
-in ICS mode, you will be prompted to log in to the firewall host. (This works because 
-port 23 is the standard telnet login service.) Do so, then telnet to ICS, using a command like "telnet chessclub.com 5000", or whatever command the firewall provides for telnetting to port 5000.
-\par If your firewall lets you telnet (or rlogin) to remote hosts,
- but doesn't let you telnet to port 5000, you will have to find some other host outside the firewall that does let you do this, and hop through it. For instance, suppose you have an account at foo.edu. Follow the recipe above, but instead of typing "telne
-t chessclub.com 5000" to the firewall, type "telnet foo.edu" (or "rlogin foo.edu"), log in there, and then type "telnet chessclub.com 5000".
+\par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\fs20 WinBoard -ics -icshost fire.wall.com -icsport 23
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Then when you run WinBoard}{\i\f1  }{\f1 
+in ICS mode, you will be prompted to log in to the firewall host. (This works because port 23 is the standard telnet login service.) Do so, then tel
+net to ICS, using a command like "telnet chessclub.com 5000", or whatever command the firewall provides for telnetting to port 5000.
+\par If your firewall lets you telnet (or rlogin) to remote hosts, but doesn't let you telnet to port 5000, you will have to fin
+d some other host outside the firewall that does let you do this, and hop through it. For instance, suppose you have an account at foo.edu. Follow the recipe above, but instead of typing "telnet chessclub.com 5000" to the firewall, type "telnet foo.edu" (
+or "rlogin foo.edu"), log in there, and then type "telnet chessclub.com 5000".
 \par Exception: chessclub.com itself lets you connect to the chess server on the default telnet port (23), which is what you get if you don\rquote t specify a port to the telnet program. But the other chess servers don\rquote t allow this.
 \par Suppose that you can't telnet directly to ICS, but you can use rsh to run programs on a firewall host, and that host can telnet to ICS. Let's say the firewall is called rsh.wall.com. Set command-line options as follows: 
-\par }\pard\plain \s19\ql \li520\ri0\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\faauto\adjustright\rin0\lin520\itap0 \f6\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 
-WinBoard -ics -gateway rsh.wall.com -icshost chessclub.com
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Then when you run WinBoard}{\i\f1  }{\f1 
-in ICS mode, it will connect to the ICS by using rsh to run the command "telnet chessclub.com 5000" on host rsh.wall.com.
-\par ICC timestamp and FICS timeseal do not work through many}{\b\f1  }{\f1 firewalls. You can use them only if your firewall gives a clean TCP connection with a full 8-bit wide path. If your firewall allows you to get out only by running a special teln
-et program, you can't use timestamp or timeseal across it. But if you have access to a computer just outside your firewall, and you have much lower netlag when talking to that computer than to the ICS, it might be worthwhile running timestamp there. Follo
-w the instructions above for hopping through a host outside the firewall (foo.edu in the example), but run timestamp or timeseal on that host instead of telnet.
-\par }\pard\plain \s20\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Suppose that you have a SOCKS firewall that requires you to go through some extra level of authe
-ntication, but after that will give you a clean 8-bit wide TCP connection to the chess server. In that case, if you are using timestamp or timeseal, you need to somehow socksify it; if not, you need to socksify WinBoard itself. Socksification is beyond th
-e scope of this document, but see the SOCKS Web site at http://www.socks.nec.com/how2socksify.html.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Limitations}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Limitations}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Limitations}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs18\up6  }{\f1\fs20 LIMITATIONS
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 WinBoard}{\i\f1  }{\f1 
+\par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\fs20 WinBoard -ics -gateway rsh.wall.com -icshost chessclub.com
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Then when you run WinBoard}{\i\f1  }{\f1 in ICS mode, it will connect to the ICS by using rsh to run the command "telnet chessclub.com 5000" on host rsh.wall.com.
+\par ICC timestamp and FICS timeseal do not work through many}{\b\f1  }{\f1 
+firewalls. You can use them only if your firewall gives a clean TCP connection with a full 8-bit wide path. If your firewall allows you to get out only by running a special telnet program, you can't use timestamp or timeseal across it. But
+ if you have access to a computer just outside your firewall, and you have much lower netlag when talking to that computer than to the ICS, it might be worthwhile running timestamp there. Follow the instructions above for hopping through a host outside th
+e firewall (foo.edu in the example), but run timestamp or timeseal on that host instead of telnet.
+\par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Suppose that you have a SOCKS firewall that requires you to go through some extra level of authentication, but after that will give you a clean 8-bit wide TCP
+ connection to the chess server. In that case, if you are using timestamp or timeseal, you need to somehow socksify it; if not, you need to socksify WinBoard itself. Socksification is beyond the scope of this document, but see the SOCKS Web site at http:/
+/www.socks.nec.com/how2socksify.html.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Limitations}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Limitations}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super $}{\f1  Limitations}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs18\up6  }{\f1\fs20 LIMITATIONS }{\f1\fs20\cf11 
+AND NON-LIMITATIONS}{\f1\fs20 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard}{\i\f1  }{\f1 
 is a Win32 application. It runs only on Windows NT and Windows 95. It does not work on Windows 3.11 or earlier, even with the Win32s compatibility package.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\i\f1 CMail, }{\f1 
-the companion program to xboard for playing electronic mail correspondence chess, has not been ported to Win32.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\i\f1 CMail, }{\f1 the companion program to xboard for playing electronic mail correspondence chess, has not been ported to Win32.
 \par There is no way for two people running copies of WinBoard}{\i\f1  }{\f1 to play each other without going through the Internet Chess Server.
 \par Under some circumstances, your ICS password may be echoed when you log on.
-\par If you are connecting to the ICS by running telnet, timestamp, or timeseal on an Internet provider host, you may find
- that each line you type is echoed back an extra time after you hit Enter. You can probably turn this echo off. If your Internet provider is a Unix system, type "}{\f2 stty -echo}{\f1 
-" after you log in to the provider but before you run telnet, timestamp, or timeseal. In addition, you may need to type the sequence \'93}{\f2 Ctrl+Q Ctrl+E Enter}{\f1 \'93 after you have finished logging in to ICS. On VMS, type \'93}{\f2 
-set terminal /noecho /nowrap}{\f1 \'94, and after you telnet to the ICS, type \'93}{\f2 Ctrl+Q Ctrl+] Enter set mode char Enter Enter}{\f1 \'94. It is a go
-od idea to turn off the extra remote echo if you can, because otherwise it can get interleaved with output from the ICS and confuse WinBoard's parsing routines. Don\rquote t just turn off }{\f1\uldb Local Line Editing}{\v\f1 localLineEditing}{\f1 
- so that you see only the remote echo and not the local one; that will make the interleaving problem worse.
-\par The game parser recognizes only algebraic notation.
-\par The internal move legality tester does not look at the game history, so in some cases it misses illegal castling or en passant captures. It permits castling with the king on the }{\b\f1 d}{\f1 
- file because this is possible in some "wild 1" games on ICS. It does not check piece drops in bughouse to see if you actually hold the piece you are trying to drop. However, if you attempt an illegal move when usi
-ng a chess engine or the ICS, WinBoard will accept the error message that comes back, undo the move, and let you try another.
-\par FEN positions saved by WinBoard}{\i\f1  }{\f1 do not include correct information about whether castling or en passant are legal.
-\par }\pard\plain \s20\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 The mate detect
-or does not understand that non-contact mate is not really mate in bughouse. The only problem this causes while playing is minor: a "#" (mate indicator) character will show up after a non-contact mating move in the move list. WinBoard will not assume the 
-game is over at that point.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 
-Edit Game mode always uses non-bughouse rules.  Although you can load and edit games that contain piece drops, the piece menus are not active, so you cannot insert piece drops. Also, WinBoard}{\i\f1  }{\f1 
-thinks an edited game is over when a mating move is inserted, even if the mate is non-contact.
-\par Fischer Random castling is not understood.  You can probably play Fischer Random successfully on ICS by typing castling moves into the ICS Interaction window, bu
-t they will not be animated correctly, and saved games will not be loaded correctly if castling occurs.
+\par If you are connecting to the ICS by running telnet, timestamp, or timeseal on an Internet provider host, you may find that each line you type is echoed back an extra time after you hit Enter. You can probably
+ turn this echo off. If your Internet provider is a Unix system, type "}{\f2 stty -echo}{\f1 " after you log in to the provider but before you run telnet, timestamp, or timeseal. In addition, you may need to type the sequence \ldblquote }{\f2 
+Ctrl+Q Ctrl+E Enter}{\f1 \ldblquote  after you have finished logging in to ICS. On VMS, type \ldblquote }{\f2 set terminal /noecho /nowrap}{\f1 \rdblquote , and after you telnet to the ICS, type \ldblquote }{\f2 
+Ctrl+Q Ctrl+] Enter set mode char Enter Enter}{\f1 \rdblquote . It is a good idea to turn off the extra remote echo if you can, because otherwise it can get interleaved with output from the ICS and confuse WinBoard's parsing routines. Don\rquote 
+t just turn off }{\f1\uldb Local Line Editing}{\v\f1 localLineEditing}{\f1  so that you see only the remote echo and not the local one; that will make the interleaving problem worse.
+\par The game parser recognizes only algebraic notation (SAN).
 \par The }{\f1\uldb ICS logon}{\v\f1 ICSLogon}{\f1  file does not work properly when you connect to ICS through a Unix gateway host by setting }{\f1\uldb icsPort}{\v\f1 icsPort}{\f1  to 23. The Unix login process apparently discards type-ahead.
 \par Some WinBoard functions may not work with versions of GNU Chess earlier than 4.0, patchlevel 77. The current version of WinBoard}{\i\f1  }{\f1 works best with Crafty version 15.11 or later.
-\par Also see the ToDo file included with the distribution for many other possible bugs, limitations, and ideas for improvement that have been suggested.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Authors}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Authors}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Authors}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs18\up6  }{\f1\fs20 AUTHORS AND CONTRIBUTORS
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 WinBoard is partly based on }{\i\f1 xboard}{\f1 , a chessboard program
- for Unix and the X Window System. Tim Mann has been responsible for all versions of WinBoard,}{\i\f1  }{\f1 and for xboard versions 1.3 and beyond. 
-\par Mark Williams added many features to WinBoard 4.1.0, including copy/paste, premove, icsAlarm, autoFlipView, training mod
-e, auto raise, and blindfold. Hugh Fischer added piece animation to xboard, and Henrik Gram added it to WinBoard. Frank McIngvale contributed many xboard}{\i\f1  }{\f1 user interface improvements and improved Crafty support. Jochen Wiedmann ported xboard}
-{\i\f1  }{\f1 to the Amiga, creating }{\i\f1 AmyBoard}{\f1 , and converted the documentation to texinfo. Elmar Bartel contributed the new piece bitmaps for version 3.2. Evan Welsh wrote }{\i\f1 CMail. }{\f1 
+\par }{\f1\cf11 Many of the following points used to be limitations in WinBoard 4.2.7 and earlier, but are now fixed:
+\par The internal move legality tester in WinBoard 4.3.xx does look at the game history, and is fully aware of castling or en passant-capture rights. }{\f1 It permits castling with the king on the }{\b\f1 d}{\f1 
+ file because this is possible in some "wild 1" games on ICS. The piece-drop menu does not check piece drops in bughouse to see if you actually hold the piece you are trying to drop.}{\f1\cf11 
+ But this way of dropping pieces should be considered an obsolete feature, now that pieces can be dropped by dragging them from the holdings to the board. }{\f1 Anyway, if you would attempt an illegal move when using a chess engine or the ICS,}{\f1\cf11  
+}{\f1 WinBoard will accept the error message that comes back, undo the move, and let you try another.
+\par }{\f1\cf11 FEN positions saved by WinBoard}{\i\f1\cf11  }{\f1\cf11 do include correct information about whether castling or en passant are legal, and also handle the 50-move counter.
+\par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The mate detector does not understand that non-contact mate is not really mate in bughouse.}{\f1\cf11  }{\f1 
+The only problem this causes while playing is minor: a "#" (mate indicator) character will show up after a non-contact mating move in the move list. WinBoard will not assume the game is over at that point,}{\f1\cf11 
+ not even when the option Detect Mates is on.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Edit Game mode always uses the rules of the selected variant, which can be a variant that uses p
+iece drops.  You can load and edit games that contain piece drops. The (obsolete) piece menus are not active, but you can perform piece drops by dragging pieces from the holdings.
+\par Edit Position mode does not allow you to edit the Crazyhouse holdings proper
+ly. You cannot drag pieces to the holding, and using the popup menu to put pieces there does not adapt the holding counts and leads to an inconsistent state. Set up Crazyhouse positions by loading / pasting a bFEN, from there you can set the holdings.
+
+\par Fischer Random castling is fully understood. You can enter castlings by dragging the King on top of your Rook. You can probably also play Fischer Random successfully on ICS by typing castling moves into the ICS Interaction window.
+\par }{\f1 Also see the ToDo file included with the distribution for many other possible bugs, limitations, and ideas for improvement that have been suggested.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Authors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Authors}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {
+\cs58\f1\super $}{\f1  Authors}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs18\up6  }{\f1\fs20 AUTHORS AND CONTRIBUTORS
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard is partly based on }{\i\f1 xboard}{\f1 , a chessboard program for Unix and the X Window System. Tim Mann has been responsible for all versions of WinBoard,}{
+\i\f1  }{\f1 and for xboard versions 1.3 and beyond. }{\f1\cf11 H.G.Muller is responsible for version 4.3.}{\f1 
+\par Mark Williams added many features to WinBoard 4.1.0, including copy/paste, premove, icsAlarm, autoFlipView, training mode, auto
+ raise, and blindfold. Hugh Fischer added piece animation to xboard, and Henrik Gram added it to WinBoard. Frank McIngvale contributed many xboard}{\i\f1  }{\f1 user interface improvements and improved Crafty support. Jochen Wiedmann ported xboard}{\i\f1 
+ }{\f1 to the Amiga, creating }{\i\f1 AmyBoard}{\f1 , and converted the documentation to texinfo. Elmar Bartel contributed the new piece bitmaps for version 3.2. Evan Welsh wrote }{\i\f1 CMail. }{\f1 
 John Chanak contributed the initial implementation of ICS mode. The default color scheme was adapted from Wayne Christopher's }{\i\f1 XChess }{\f1 program. Chris Sears and Dan Sears wrote the original xboard}{\i\f1 . }{\f1 They were responsible for xboard
-}{\i\f1  }{\f1 versions 1.0 through 1.2.
+}{\i\f1  }{\f1 versions 1.0 through 1.2. }{\f1\cf6 Allessandro Scotti added many elements to the user interface, including the board textures and font-based rendering
+, the evaluation-graph, move-history and engine-output window. He was also responsible for adding the UCI support.}{\f1  }{\f1\cf11 
+H.G. Muller made WinBoard castling- and e.p.-aware, added variant support with adjustable board sizes, the Crazyhouse holdings, and the fairy
+ pieces. In addition he added most of the adjudication options, made WinBoard ore robust in dealing with buggy and crashing engines, and extended time control with a time-odds and node-count-based modes.}{\f1 
 \par Send bug reports to <bug-xboard at gnu.org>. Please run WinBoard with the /debug option and include the output from the resulting WinBoard.debug file in your message.
-\par }\pard\plain \s1\ql \li120\ri0\sb280\sa120\sl-320\slmult0\nowidctlpar\faauto\outlinelevel0\adjustright\rin0\lin120\itap0 \b\f5\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain 
-\s57\ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super K}{\f1  Copyright}}#{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super #}{\f1  Copyright}}${\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super $}{\f1  Copyright}}+{\footnote\ftnalt \pard\plain \s57\ql \li120\ri0\sb80\sl-240\slmult0
-\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs58\f1\super +}{\f1  main}}}{\f1\fs18\up6  }{\f1\fs20 COPYRIGHT
-\par }\pard\plain \s26\ql \li120\ri0\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts. \line 
-Enhancements Copyright 1992-2003 Free Software Foundation, Inc.
-\par }\pard\plain \ql \li120\ri0\sb80\sl-240\slmult0\nowidctlpar\faauto\adjustright\rin0\lin120\itap0 \f5\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1 The following terms apply to Digital Equipment Corporation's copyright interest in WinBoard:
-
+\par }\pard\plain \s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid {\f1 The WinBoard 4.3.xx line is being developed by H.G. Muller independently of the GNU Savannah xboard project. Bug reports on this version, and su
+ggestions for improvements and additions, are best posted in the WinBoard forum, development section (}{\field{\*\fldinst {\f1  HYPERLINK http://www.open-aurec.com/wbforum) }{\f1 {\*\datafield 
+00d0c9ea79f9bace118c8200aa004ba90b02000000170000002300000068007400740070003a002f002f007700770077002e006f00700065006e002d00610075007200650063002e0063006f006d002f007700620066006f00720075006d0029000000e0c9ea79f9bace118c8200aa004ba90b460000006800740074007000
+3a002f002f007700770077002e006f00700065006e002d00610075007200650063002e0063006f006d002f007700620066006f00720075006d0029000000000000000000}}}{\fldrslt {\cs59\ul\cf2 http://www.open-aurec.com/wbforum)}}}{\f1 .
+\par }{\f1\cf2 Michel van den Bergh provided the code for reading Polyglot opening books.
+\par Arun Persaud worked with H.G. Muller to combine all the features of the never-released WinBoard 4.2.8 of the Savannah project (mainly by Daniel Mehrmann), and the never-released 4.3.16 into a unified WinBoard 4.4, which is now available both from th
+e Savannah web site and the WinBoard forum.
+\par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super 
+K}{\f1  Copyright}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  Copyright}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright 
+\f5\fs20\cgrid {\cs58\f1\super $}{\f1  Copyright}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1  main}}}{\f1\fs18\up6  }{\f1\fs20 COPYRIGHT
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts. \line Enhancements Copyright 1992-2003 Free Software Foundation, Inc.
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The following terms apply to Digital Equipment Corporation's copyright interest in WinBoard:
 \par All Rights Reserved
-\par Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided t
-hat 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 s
-oftware without specific, written prior permission.
-\par 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 CONSEQUENTIA
-L 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.
+\par 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.
+
+\par DIGIT
+AL 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.
 \par The following terms apply to the enhanced version of WinBoard distributed by the Free Software Foundation:
 \par 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.
 \par 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.
diff --git a/winboard/wlayout.c b/winboard/wlayout.c
new file mode 100644
index 0000000..0fd28f0
--- /dev/null
+++ b/winboard/wlayout.c
@@ -0,0 +1,158 @@
+/*
+ * Layout management
+ *
+ * Author: Alessandro Scotti (Dec 2005)
+ *
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "config.h"
+
+#include <windows.h> /* required for all Windows applications */
+#include <stdio.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <commdlg.h>
+#include <dlgs.h>
+
+#include "common.h"
+#include "winboard.h"
+
+VOID RestoreWindowPlacement( HWND hWnd, WindowPlacement * wp )
+{
+    if( wp->x != CW_USEDEFAULT || 
+        wp->y != CW_USEDEFAULT ||
+        wp->width != CW_USEDEFAULT || 
+        wp->height != CW_USEDEFAULT )
+    {
+	WINDOWPLACEMENT stWP;
+
+        ZeroMemory( &stWP, sizeof(stWP) );
+
+	EnsureOnScreen( &wp->x, &wp->y);
+
+	stWP.length = sizeof(stWP);
+	stWP.flags = 0;
+	stWP.showCmd = SW_SHOW;
+	stWP.ptMaxPosition.x = 0;
+        stWP.ptMaxPosition.y = 0;
+	stWP.rcNormalPosition.left = wp->x;
+	stWP.rcNormalPosition.right = wp->x + wp->width;
+	stWP.rcNormalPosition.top = wp->y;
+	stWP.rcNormalPosition.bottom = wp->y + wp->height;
+
+	SetWindowPlacement(hWnd, &stWP);
+    }
+}
+
+VOID InitWindowPlacement( WindowPlacement * wp )
+{
+    wp->visible = TRUE;
+    wp->x = CW_USEDEFAULT;
+    wp->y = CW_USEDEFAULT;
+    wp->width = CW_USEDEFAULT;
+    wp->height = CW_USEDEFAULT;
+}
+
+static BOOL IsAttachDistance( int a, int b )
+{
+    BOOL result = FALSE;
+
+    if( a == b ) {
+        result = TRUE;
+    }
+
+    return result;
+}
+
+static BOOL IsDefaultPlacement( WindowPlacement * wp )
+{
+    BOOL result = FALSE;
+
+    if( wp->x == CW_USEDEFAULT || wp->y == CW_USEDEFAULT || wp->width == CW_USEDEFAULT || wp->height == CW_USEDEFAULT ) {
+        result = TRUE;
+    }
+
+    return result;
+}
+
+static BOOL GetActualPlacement( HWND hWnd, WindowPlacement * wp )
+{
+    BOOL result = FALSE;
+
+    if( hWnd != NULL ) {
+        WINDOWPLACEMENT stWP;
+
+        ZeroMemory( &stWP, sizeof(stWP) );
+
+        stWP.length = sizeof(stWP);
+
+        GetWindowPlacement( hWnd, &stWP );
+
+        wp->x = stWP.rcNormalPosition.left;
+        wp->y = stWP.rcNormalPosition.top;
+        wp->width = stWP.rcNormalPosition.right - stWP.rcNormalPosition.left;
+        wp->height = stWP.rcNormalPosition.bottom - stWP.rcNormalPosition.top;
+
+        result = TRUE;
+    }
+
+    return result;
+}
+
+static BOOL IsAttachedByWindowPlacement( LPRECT lprcMain, WindowPlacement * wp )
+{
+    BOOL result = FALSE;
+
+    if( ! IsDefaultPlacement(wp) ) {
+        if( IsAttachDistance( lprcMain->right, wp->x ) ||
+            IsAttachDistance( lprcMain->bottom, wp->y ) ||
+            IsAttachDistance( lprcMain->left, (wp->x + wp->width) ) ||
+            IsAttachDistance( lprcMain->top, (wp->y + wp->height) ) )
+        {
+            result = TRUE;
+        }
+    }
+
+    return result;
+}
+
+VOID ReattachAfterMove( LPRECT lprcOldPos, int new_x, int new_y, HWND hWndChild, WindowPlacement * pwpChild )
+{
+    if( ! IsDefaultPlacement( pwpChild ) ) {
+        GetActualPlacement( hWndChild, pwpChild );
+
+        if( IsAttachedByWindowPlacement( lprcOldPos, pwpChild ) ) {
+            /* Get position delta */
+            int delta_x = pwpChild->x - lprcOldPos->left;
+            int delta_y = pwpChild->y - lprcOldPos->top;
+
+            /* Adjust placement */
+            pwpChild->x = new_x + delta_x;
+            pwpChild->y = new_y + delta_y;
+
+            /* Move window */
+            if( hWndChild != NULL ) {
+                SetWindowPos( hWndChild, HWND_TOP,
+                    pwpChild->x, pwpChild->y,
+                    0, 0,
+                    SWP_NOZORDER | SWP_NOSIZE );
+            }
+        }
+    }
+}
diff --git a/winboard/woptions.c b/winboard/woptions.c
index 73852b4..1e79b6d 100644
--- a/winboard/woptions.c
+++ b/winboard/woptions.c
@@ -1,2432 +1,3003 @@
-/*
- * woptions.c -- Options dialog box routines for WinBoard
- * $Id: woptions.c,v 2.1 2003/10/27 19:21:02 mann Exp $
- *
- * Copyright 2000 Free Software Foundation, Inc.
- *
- * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * ------------------------------------------------------------------------
- */
-
-#include "config.h"
-
-#include <windows.h>   /* required for all Windows applications */
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "common.h"
-#include "winboard.h"
-#include "backend.h"
-#include "woptions.h"
-#include "defaults.h"
-#include "wedittags.h"
-#include <richedit.h>
-
-#if __GNUC__
-#include <errno.h>
-#include <string.h>
-#endif
-
-/* Imports from winboard.c */
-
-extern MyFont *font[NUM_SIZES][NUM_FONTS];
-extern HINSTANCE hInst;          /* current instance */
-extern HWND hwndMain;            /* root window*/
-extern BOOLEAN alwaysOnTop;
-extern RECT boardRect;
-extern COLORREF lightSquareColor, darkSquareColor, whitePieceColor, 
-  blackPieceColor, highlightSquareColor, premoveHighlightColor;
-extern HPALETTE hPal;
-extern BoardSize boardSize;
-extern COLORREF consoleBackgroundColor;
-extern MyColorizeAttribs colorizeAttribs[]; /* do I need the size? */
-extern MyTextAttribs textAttribs[];
-extern MySound sounds[];
-extern ColorClass currentColorClass;
-extern HWND hwndConsole;
-extern char *defaultTextAttribs[];
-extern HWND commentDialog;
-extern char installDir[];
-extern HWND hCommPort;    /* currently open comm port */
-extern DCB dcb;
-extern BOOLEAN chessProgram;
-
-/* types */
-
-typedef struct {
-  char *label;
-  unsigned value;
-} ComboData;
-
-typedef struct {
-  char *label;
-  char *name;
-} SoundComboData;
-
-/* module prototypes */
-
-LRESULT CALLBACK GeneralOptions(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK BoardOptions(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK IcsOptions(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK FontOptions(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK CommPortOptions(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK LoadOptions(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK SaveOptions(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK TimeControl(HWND, UINT, WPARAM, LPARAM);
-VOID ChangeBoardSize(BoardSize newSize);
-VOID PaintSampleSquare(
-    HWND     hwnd, 
-    int      ctrlid, 
-    COLORREF squareColor, 
-    COLORREF pieceColor,
-    COLORREF squareOutlineColor,
-    COLORREF pieceDetailColor,
-    BOOL     isWhitePiece,
-    BOOL     isMono,
-    HBITMAP  pieces[3] 
-    );
-VOID PaintColorBlock(HWND hwnd, int ctrlid, COLORREF color);
-VOID SetBoardOptionEnables(HWND hDlg);
-BoardSize BoardOptionsWhichRadio(HWND hDlg);
-BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font);
-VOID UpdateSampleText(HWND hDlg, int id, MyColorizeAttribs *mca);
-LRESULT CALLBACK ColorizeTextDialog(HWND , UINT, WPARAM, LPARAM);
-VOID ColorizeTextPopup(HWND hwnd, ColorClass cc);
-VOID SetIcsOptionEnables(HWND hDlg);
-VOID SetSampleFontText(HWND hwnd, int id, const MyFont *mf);
-VOID CopyFont(MyFont *dest, const MyFont *src);
-void InitSoundComboData(SoundComboData *scd);
-void ResetSoundComboData(SoundComboData *scd);
-void InitSoundCombo(HWND hwndCombo, SoundComboData *scd);
-int SoundDialogWhichRadio(HWND hDlg);
-VOID SoundDialogSetEnables(HWND hDlg, int radio);
-char * SoundDialogGetName(HWND hDlg, int radio);
-void DisplaySelectedSound(HWND hDlg, HWND hCombo, const char *name);
-VOID ParseCommSettings(char *arg, DCB *dcb);
-VOID PrintCommSettings(FILE *f, char *name, DCB *dcb);
-void InitCombo(HANDLE hwndCombo, ComboData *cd);
-void SelectComboValue(HANDLE hwndCombo, ComboData *cd, unsigned value);
-VOID SetLoadOptionEnables(HWND hDlg);
-VOID SetSaveOptionEnables(HWND hDlg);
-VOID SetTimeControlEnables(HWND hDlg);
-
-/*---------------------------------------------------------------------------*\
- *
- * General Options Dialog functions
- *
-\*---------------------------------------------------------------------------*/
-
-
-LRESULT CALLBACK
-GeneralOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-  static Boolean oldShowCoords;
-  static Boolean oldBlindfold;
-  static Boolean oldShowButtonBar;
-
-  switch (message) {
-  case WM_INITDIALOG: /* message: initialize dialog box */
-    oldShowCoords = appData.showCoords;
-    oldBlindfold  = appData.blindfold;
-    oldShowButtonBar = appData.showButtonBar;
-
-    /* Center the dialog over the application window */
-    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
-
-    /* Initialize the dialog items */
-#define CHECK_BOX(x,y) CheckDlgButton(hDlg, (x), (BOOL)(y))
-
-    CHECK_BOX(OPT_AlwaysOnTop, alwaysOnTop);
-    CHECK_BOX(OPT_AlwaysQueen, appData.alwaysPromoteToQueen);
-    CHECK_BOX(OPT_AnimateDragging, appData.animateDragging);
-    CHECK_BOX(OPT_AnimateMoving, appData.animate);
-    CHECK_BOX(OPT_AutoFlag, appData.autoCallFlag);
-    CHECK_BOX(OPT_AutoFlipView, appData.autoFlipView);
-    CHECK_BOX(OPT_AutoRaiseBoard, appData.autoRaiseBoard);
-    CHECK_BOX(OPT_Blindfold, appData.blindfold);
-    CHECK_BOX(OPT_HighlightDragging, appData.highlightDragging);
-    CHECK_BOX(OPT_HighlightLastMove, appData.highlightLastMove);
-    CHECK_BOX(OPT_PeriodicUpdates, appData.periodicUpdates);
-    CHECK_BOX(OPT_PonderNextMove, appData.ponderNextMove);
-    CHECK_BOX(OPT_PopupExitMessage, appData.popupExitMessage);
-    CHECK_BOX(OPT_PopupMoveErrors, appData.popupMoveErrors);
-    CHECK_BOX(OPT_ShowButtonBar, appData.showButtonBar);
-    CHECK_BOX(OPT_ShowCoordinates, appData.showCoords);
-    CHECK_BOX(OPT_ShowThinking, appData.showThinking);
-    CHECK_BOX(OPT_TestLegality, appData.testLegality);
-
-#undef CHECK_BOX
-
-    EnableWindow(GetDlgItem(hDlg, OPT_AutoFlag),
-		 appData.icsActive || !appData.noChessProgram);
-    EnableWindow(GetDlgItem(hDlg, OPT_AutoFlipView),
-		 appData.icsActive || !appData.noChessProgram);
-    EnableWindow(GetDlgItem(hDlg, OPT_PonderNextMove),
-		 !appData.noChessProgram);
-    EnableWindow(GetDlgItem(hDlg, OPT_PeriodicUpdates), 
-		 !appData.noChessProgram && !appData.icsActive);
-    EnableWindow(GetDlgItem(hDlg, OPT_ShowThinking), 
-		 !appData.noChessProgram);
-    return TRUE;
-
-
-  case WM_COMMAND: /* message: received a command */
-    switch (LOWORD(wParam)) {
-    case IDOK:
-      /* Read changed options from the dialog box */
-      
-#define IS_CHECKED(x) (Boolean)IsDlgButtonChecked(hDlg, (x))
-
-      alwaysOnTop                  = IS_CHECKED(OPT_AlwaysOnTop);
-      appData.alwaysPromoteToQueen = IS_CHECKED(OPT_AlwaysQueen);
-      appData.animateDragging      = IS_CHECKED(OPT_AnimateDragging);
-      appData.animate              = IS_CHECKED(OPT_AnimateMoving);
-      appData.autoCallFlag         = IS_CHECKED(OPT_AutoFlag);
-      appData.autoFlipView         = IS_CHECKED(OPT_AutoFlipView);
-      appData.autoRaiseBoard       = IS_CHECKED(OPT_AutoRaiseBoard);
-      appData.blindfold            = IS_CHECKED(OPT_Blindfold);
-      appData.highlightDragging    = IS_CHECKED(OPT_HighlightDragging);
-      appData.highlightLastMove    = IS_CHECKED(OPT_HighlightLastMove);
-      PeriodicUpdatesEvent(          IS_CHECKED(OPT_PeriodicUpdates));
-      PonderNextMoveEvent(           IS_CHECKED(OPT_PonderNextMove));
-      appData.popupExitMessage     = IS_CHECKED(OPT_PopupExitMessage);
-      appData.popupMoveErrors      = IS_CHECKED(OPT_PopupMoveErrors);
-      appData.showButtonBar        = IS_CHECKED(OPT_ShowButtonBar);
-      appData.showCoords           = IS_CHECKED(OPT_ShowCoordinates);
-      ShowThinkingEvent(             IS_CHECKED(OPT_ShowThinking));
-      appData.testLegality         = IS_CHECKED(OPT_TestLegality);
-
-#undef IS_CHECKED
-
-      SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,
-		   0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
-#if AOT_CONSOLE
-      if (hwndConsole) {
-	SetWindowPos(hwndConsole, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,
-		     0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
-      }
-#endif
-      if (!appData.highlightLastMove) {
-	ClearHighlights();
-	DrawPosition(FALSE, NULL);
-      }
-      /* 
-       * for some reason the redraw seems smoother when we invalidate
-       * the board rect after the call to EndDialog()
-       */
-      EndDialog(hDlg, TRUE);
-
-      if (oldShowButtonBar != appData.showButtonBar) {
-	InitDrawingSizes(boardSize, 0);
-      } else if ((oldShowCoords != appData.showCoords) || 
-		 (oldBlindfold != appData.blindfold)) {
-	InvalidateRect(hwndMain, &boardRect, FALSE);
-      }
-
-      return TRUE;
-
-    case IDCANCEL:
-      EndDialog(hDlg, FALSE);
-      return TRUE;
-
-    }
-    break;
-  }
-  return FALSE;
-}
-
-VOID 
-GeneralOptionsPopup(HWND hwnd)
-{
-  FARPROC lpProc;
-
-  lpProc = MakeProcInstance((FARPROC)GeneralOptionsDialog, hInst);
-  DialogBox(hInst, MAKEINTRESOURCE(DLG_GeneralOptions), hwnd,
-	    (DLGPROC) lpProc);
-  FreeProcInstance(lpProc);
-}
-/*---------------------------------------------------------------------------*\
- *
- * Board Options Dialog functions
- *
-\*---------------------------------------------------------------------------*/
-
-const int SAMPLE_SQ_SIZE = 54;
-
-VOID
-ChangeBoardSize(BoardSize newSize)
-{
-  if (newSize != boardSize) {
-    boardSize = newSize;
-    InitDrawingSizes(boardSize, 0);
-  }
-}
-
-VOID
-PaintSampleSquare(
-    HWND     hwnd, 
-    int      ctrlid, 
-    COLORREF squareColor, 
-    COLORREF pieceColor,
-    COLORREF squareOutlineColor,
-    COLORREF pieceDetailColor,
-    BOOL     isWhitePiece,
-    BOOL     isMono,
-    HBITMAP  pieces[3] 
-    )
-{
-  HBRUSH  brushSquare;
-  HBRUSH  brushSquareOutline;
-  HBRUSH  brushPiece;
-  HBRUSH  brushPieceDetail;
-  HBRUSH  oldBrushPiece;
-  HBRUSH  oldBrushSquare;
-  HBITMAP oldBitmapMem;
-  HBITMAP oldBitmapTemp;
-  HBITMAP bufferBitmap;
-  RECT    rect;
-  HDC     hdcScreen, hdcMem, hdcTemp;
-  HPEN    pen, oldPen;
-  HWND    hCtrl = GetDlgItem(hwnd, ctrlid);
-  int     x, y;
-
-  const int SOLID   = 0;
-  const int WHITE   = 1;
-  const int OUTLINE = 2;
-  const int BORDER  = 4;
-
-  InvalidateRect(hCtrl, NULL, TRUE);
-  UpdateWindow(hCtrl);
-  GetClientRect(hCtrl, &rect);
-  x = rect.left + (BORDER / 2);
-  y = rect.top  + (BORDER / 2);
-  hdcScreen = GetDC(hCtrl);
-  hdcMem  = CreateCompatibleDC(hdcScreen);
-  hdcTemp = CreateCompatibleDC(hdcScreen);
-
-  bufferBitmap = CreateCompatibleBitmap(hdcScreen, rect.right-rect.left+1,
-					rect.bottom-rect.top+1);
-  oldBitmapMem = SelectObject(hdcMem, bufferBitmap);
-  if (!isMono) {
-    SelectPalette(hdcMem, hPal, FALSE);
-  }
-  brushSquare         = CreateSolidBrush(squareColor);
-  brushSquareOutline  = CreateSolidBrush(squareOutlineColor);
-  brushPiece          = CreateSolidBrush(pieceColor);
-  brushPieceDetail    = CreateSolidBrush(pieceDetailColor);
-
-  /* 
-   * first draw the rectangle 
-   */
-  pen      = CreatePen(PS_SOLID, BORDER, squareOutlineColor);
-  oldPen   = (HPEN)  SelectObject(hdcMem, pen);
-  oldBrushSquare = (HBRUSH)SelectObject(hdcMem, brushSquare);
-  Rectangle(hdcMem, rect.left, rect.top, rect.right, rect.bottom);
-
-  /* 
-   * now draw the piece
-   */
-  if (isMono) {
-    oldBitmapTemp = SelectObject(hdcTemp, pieces[OUTLINE]);
-    BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, hdcTemp, 0, 0,
-	   isWhitePiece ? SRCCOPY : NOTSRCCOPY);
-    SelectObject(hdcTemp, oldBitmapTemp);
-  } else {
-    if (isWhitePiece) {
-      oldBitmapTemp = SelectObject(hdcTemp, pieces[WHITE]);
-      oldBrushPiece = SelectObject(hdcMem, brushPiece);
-      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
-	     hdcTemp, 0, 0, 0x00B8074A);
-#if 0
-      /* Use pieceDetailColor for outline of white pieces */
-      SelectObject(hdcTemp, pieces[OUTLINE]);
-      SelectObject(hdcMem, brushPieceDetail);
-      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
-	     hdcTemp, 0, 0, 0x00B8074A);
-#else
-      /* Use black for outline of white pieces */
-      SelectObject(hdcTemp, pieces[OUTLINE]);
-      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
-	     hdcTemp, 0, 0, SRCAND);
-#endif
-    } else {
-#if 0
-      /* Use pieceDetailColor for details of black pieces */
-      /* Requires filled-in solid bitmaps (BLACK_PIECE class); the
-	 WHITE_PIECE ones aren't always the right shape. */
-      oldBitmapTemp = SelectObject(hdcTemp, pieces[BLACK]);
-      oldBrushPiece = SelectObject(hdcMem, brushPieceDetail);
-      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
-	     hdcTemp, 0, 0, 0x00B8074A);
-      SelectObject(hdcTemp, pieces[SOLID]);
-      SelectObject(hdcMem, brushPiece);
-      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
-	     hdcTemp, 0, 0, 0x00B8074A);
-#else
-      /* Use square color for details of black pieces */
-      oldBitmapTemp = SelectObject(hdcTemp, pieces[SOLID]);
-      oldBrushPiece = SelectObject(hdcMem, brushPiece);
-      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
-	     hdcTemp, 0, 0, 0x00B8074A);
-#endif
-    }
-    SelectObject(hdcMem, oldBrushPiece);
-    SelectObject(hdcTemp, oldBitmapTemp);
-  }
-  /* 
-   * copy the memory dc to the screen
-   */
-  SelectObject(hdcMem, bufferBitmap);
-  BitBlt(hdcScreen, rect.left, rect.top,
-	 rect.right - rect.left,
-	 rect.bottom - rect.top,
-	 hdcMem, rect.left, rect.top, SRCCOPY);
-  SelectObject(hdcMem, oldBitmapMem);
-  /* 
-   * clean up
-   */
-  SelectObject(hdcMem, oldBrushPiece);
-  SelectObject(hdcMem, oldPen);
-  DeleteObject(brushPiece);
-  DeleteObject(brushPieceDetail);
-  DeleteObject(brushSquare);
-  DeleteObject(brushSquareOutline);
-  DeleteObject(pen);
-  DeleteDC(hdcTemp);
-  DeleteDC(hdcMem);
-  ReleaseDC(hCtrl, hdcScreen);
-}
-
-
-VOID
-PaintColorBlock(HWND hwnd, int ctrlid, COLORREF color)
-{
-  HDC    hdc;
-  HBRUSH brush, oldBrush;
-  RECT   rect;
-  HWND   hCtrl = GetDlgItem(hwnd, ctrlid);
-
-  hdc = GetDC(hCtrl);
-  InvalidateRect(hCtrl, NULL, TRUE);
-  UpdateWindow(hCtrl);
-  GetClientRect(hCtrl, &rect);
-  brush = CreateSolidBrush(color);
-  oldBrush = (HBRUSH)SelectObject(hdc, brush);
-  Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom);
-  SelectObject(hdc, oldBrush);
-  DeleteObject(brush);
-  ReleaseDC(hCtrl, hdc);
-}
-
-
-VOID
-SetBoardOptionEnables(HWND hDlg)
-{
-  if (IsDlgButtonChecked(hDlg, OPT_Monochrome)) {
-    ShowWindow(GetDlgItem(hDlg, OPT_LightSquareColor), SW_HIDE);
-    ShowWindow(GetDlgItem(hDlg, OPT_DarkSquareColor), SW_HIDE);
-    ShowWindow(GetDlgItem(hDlg, OPT_WhitePieceColor), SW_HIDE);
-    ShowWindow(GetDlgItem(hDlg, OPT_BlackPieceColor), SW_HIDE);
-
-    EnableWindow(GetDlgItem(hDlg, OPT_ChooseLightSquareColor), FALSE);
-    EnableWindow(GetDlgItem(hDlg, OPT_ChooseDarkSquareColor), FALSE);
-    EnableWindow(GetDlgItem(hDlg, OPT_ChooseWhitePieceColor), FALSE);
-    EnableWindow(GetDlgItem(hDlg, OPT_ChooseBlackPieceColor), FALSE);
-  } else {
-    ShowWindow(GetDlgItem(hDlg, OPT_LightSquareColor), SW_SHOW);
-    ShowWindow(GetDlgItem(hDlg, OPT_DarkSquareColor), SW_SHOW);
-    ShowWindow(GetDlgItem(hDlg, OPT_WhitePieceColor), SW_SHOW);
-    ShowWindow(GetDlgItem(hDlg, OPT_BlackPieceColor), SW_SHOW);
-
-    EnableWindow(GetDlgItem(hDlg, OPT_ChooseLightSquareColor), TRUE);
-    EnableWindow(GetDlgItem(hDlg, OPT_ChooseDarkSquareColor), TRUE);
-    EnableWindow(GetDlgItem(hDlg, OPT_ChooseWhitePieceColor), TRUE);
-    EnableWindow(GetDlgItem(hDlg, OPT_ChooseBlackPieceColor), TRUE);
-  }
-}
-
-BoardSize 
-BoardOptionsWhichRadio(HWND hDlg)
-{
-  return (IsDlgButtonChecked(hDlg, OPT_SizeTiny) ? SizeTiny :
-         (IsDlgButtonChecked(hDlg, OPT_SizeTeeny) ? SizeTeeny :
-         (IsDlgButtonChecked(hDlg, OPT_SizeDinky) ? SizeDinky :
-         (IsDlgButtonChecked(hDlg, OPT_SizePetite) ? SizePetite :
-         (IsDlgButtonChecked(hDlg, OPT_SizeSlim) ? SizeSlim :
-         (IsDlgButtonChecked(hDlg, OPT_SizeSmall) ? SizeSmall :
-         (IsDlgButtonChecked(hDlg, OPT_SizeMediocre) ? SizeMediocre :
-         (IsDlgButtonChecked(hDlg, OPT_SizeMiddling) ? SizeMiddling :
-         (IsDlgButtonChecked(hDlg, OPT_SizeAverage) ? SizeAverage :
-         (IsDlgButtonChecked(hDlg, OPT_SizeModerate) ? SizeModerate :
-         (IsDlgButtonChecked(hDlg, OPT_SizeMedium) ? SizeMedium :
-         (IsDlgButtonChecked(hDlg, OPT_SizeBulky) ? SizeBulky :
-         (IsDlgButtonChecked(hDlg, OPT_SizeLarge) ? SizeLarge :
-         (IsDlgButtonChecked(hDlg, OPT_SizeBig) ? SizeBig :
-         (IsDlgButtonChecked(hDlg, OPT_SizeHuge) ? SizeHuge :
-         (IsDlgButtonChecked(hDlg, OPT_SizeGiant) ? SizeGiant :
-         (IsDlgButtonChecked(hDlg, OPT_SizeColossal) ? SizeColossal :
-          SizeTitanic )))))))))))))))));
-}
-
-LRESULT CALLBACK
-BoardOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-  static Boolean  mono;
-  static BoardSize size;
-  static COLORREF lsc, dsc, wpc, bpc, hsc, phc;
-  static HBITMAP pieces[3];
-
-  switch (message) {
-  case WM_INITDIALOG: /* message: initialize dialog box */
-    /* Center the dialog over the application window */
-    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
-    /* Initialize the dialog items */
-    switch (boardSize) {
-    case SizeTiny:
-      CheckDlgButton(hDlg, OPT_SizeTiny, TRUE);
-      break;
-    case SizeTeeny:
-      CheckDlgButton(hDlg, OPT_SizeTeeny, TRUE);
-      break;
-    case SizeDinky:
-      CheckDlgButton(hDlg, OPT_SizeDinky, TRUE);
-      break;
-    case SizePetite:
-      CheckDlgButton(hDlg, OPT_SizePetite, TRUE);
-      break;
-    case SizeSlim:
-      CheckDlgButton(hDlg, OPT_SizeSlim, TRUE);
-      break;
-    case SizeSmall:
-      CheckDlgButton(hDlg, OPT_SizeSmall, TRUE);
-      break;
-    case SizeMediocre:
-      CheckDlgButton(hDlg, OPT_SizeMediocre, TRUE);
-      break;
-    case SizeMiddling:
-      CheckDlgButton(hDlg, OPT_SizeMiddling, TRUE);
-      break;
-    case SizeAverage:
-      CheckDlgButton(hDlg, OPT_SizeAverage, TRUE);
-      break;
-    case SizeModerate:
-      CheckDlgButton(hDlg, OPT_SizeModerate, TRUE);
-      break;
-    case SizeMedium:
-      CheckDlgButton(hDlg, OPT_SizeMedium, TRUE);
-      break;
-    case SizeBulky:
-      CheckDlgButton(hDlg, OPT_SizeBulky, TRUE);
-      break;
-    case SizeLarge:
-      CheckDlgButton(hDlg, OPT_SizeLarge, TRUE);
-      break;
-    case SizeBig:
-      CheckDlgButton(hDlg, OPT_SizeBig, TRUE);
-      break;
-    case SizeHuge:
-      CheckDlgButton(hDlg, OPT_SizeHuge, TRUE);
-      break;
-    case SizeGiant:
-      CheckDlgButton(hDlg, OPT_SizeGiant, TRUE);
-      break;
-    case SizeColossal:
-      CheckDlgButton(hDlg, OPT_SizeColossal, TRUE);
-      break;
-    case SizeTitanic:
-      CheckDlgButton(hDlg, OPT_SizeTitanic, TRUE);
-    }
-
-    if (appData.monoMode)
-      CheckDlgButton(hDlg, OPT_Monochrome, TRUE);
-
-    pieces[0] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "s");
-    pieces[1] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "w");
-    pieces[2] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "o");
-	
-    lsc = lightSquareColor;
-    dsc = darkSquareColor;
-    wpc = whitePieceColor;
-    bpc = blackPieceColor;
-    hsc = highlightSquareColor;
-    phc = premoveHighlightColor;
-    mono = appData.monoMode;
-    size = boardSize;
-
-    SetBoardOptionEnables(hDlg);
-    return TRUE;
-
-  case WM_PAINT:
-    PaintColorBlock(hDlg, OPT_LightSquareColor, lsc);
-    PaintColorBlock(hDlg, OPT_DarkSquareColor,  dsc);
-    PaintColorBlock(hDlg, OPT_WhitePieceColor,  wpc);
-    PaintColorBlock(hDlg, OPT_BlackPieceColor,  bpc);
-    PaintColorBlock(hDlg, OPT_HighlightSquareColor, hsc);
-    PaintColorBlock(hDlg, OPT_PremoveHighlightColor, phc);
-    PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc,
-	TRUE, mono, pieces);
-    PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc,
-	FALSE, mono, pieces);
-
-    return FALSE;
-
-  case WM_COMMAND: /* message: received a command */
-    switch (LOWORD(wParam)) {
-    case IDOK:
-      /* 
-       * if we call EndDialog() after the call to ChangeBoardSize(),
-       * then ChangeBoardSize() does not take effect, although the new
-       * boardSize is saved. Go figure...
-       */
-      EndDialog(hDlg, TRUE);
-
-      size = BoardOptionsWhichRadio(hDlg);
-
-      /*
-       * did any settings change?
-       */
-      if (size != boardSize) {
-	ChangeBoardSize(size);
-      }
-
-      if ((mono != appData.monoMode) ||
-	  (lsc  != lightSquareColor) ||
-	  (dsc  != darkSquareColor) ||
-	  (wpc  != whitePieceColor) ||
-	  (bpc  != blackPieceColor) ||
-	  (hsc  != highlightSquareColor) ||
-	  (phc  != premoveHighlightColor)) {
-
-	  lightSquareColor = lsc;
-	  darkSquareColor = dsc;
-	  whitePieceColor = wpc;
-	  blackPieceColor = bpc;
-	  highlightSquareColor = hsc;
-	  premoveHighlightColor = phc;
-	  appData.monoMode = mono;
-
-	  InitDrawingColors();
-	  InitDrawingSizes(boardSize, 0);
-	  InvalidateRect(hwndMain, &boardRect, FALSE);
-      }
-      DeleteObject(pieces[0]);
-      DeleteObject(pieces[1]);
-      DeleteObject(pieces[2]);
-      return TRUE;
-
-    case IDCANCEL:
-      DeleteObject(pieces[0]);
-      DeleteObject(pieces[1]);
-      DeleteObject(pieces[2]);
-      EndDialog(hDlg, FALSE);
-      return TRUE;
-
-    case OPT_ChooseLightSquareColor:
-      if (ChangeColor(hDlg, &lsc)) 
-	PaintColorBlock(hDlg, OPT_LightSquareColor, lsc);
-	PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc,
-	    TRUE, mono, pieces);
-      break;
-
-    case OPT_ChooseDarkSquareColor:
-      if (ChangeColor(hDlg, &dsc)) 
-	PaintColorBlock(hDlg, OPT_DarkSquareColor, dsc);
-	PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc,
-	    FALSE, mono, pieces);
-      break;
-
-    case OPT_ChooseWhitePieceColor:
-      if (ChangeColor(hDlg, &wpc)) 
-	PaintColorBlock(hDlg, OPT_WhitePieceColor, wpc);
-	PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc,
-	    TRUE, mono, pieces);
-      break;
-
-    case OPT_ChooseBlackPieceColor:
-      if (ChangeColor(hDlg, &bpc)) 
-	PaintColorBlock(hDlg, OPT_BlackPieceColor, bpc);
-	PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc,
-	    FALSE, mono, pieces);
-      break;
-
-    case OPT_ChooseHighlightSquareColor:
-      if (ChangeColor(hDlg, &hsc)) 
-	PaintColorBlock(hDlg, OPT_HighlightSquareColor, hsc);
-	PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc,
-	    TRUE, mono, pieces);
-      break;
-
-    case OPT_ChoosePremoveHighlightColor:
-      if (ChangeColor(hDlg, &phc)) 
-	PaintColorBlock(hDlg, OPT_PremoveHighlightColor, phc);
-	PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc,
-	    FALSE, mono, pieces);
-      break;
-
-    case OPT_DefaultBoardColors:
-      lsc = ParseColorName(LIGHT_SQUARE_COLOR);
-      dsc = ParseColorName(DARK_SQUARE_COLOR);
-      wpc = ParseColorName(WHITE_PIECE_COLOR);
-      bpc = ParseColorName(BLACK_PIECE_COLOR);
-      hsc = ParseColorName(HIGHLIGHT_SQUARE_COLOR);
-      phc = ParseColorName(PREMOVE_HIGHLIGHT_COLOR);
-      mono = FALSE;
-      CheckDlgButton(hDlg, OPT_Monochrome, FALSE);
-      PaintColorBlock(hDlg, OPT_LightSquareColor, lsc);
-      PaintColorBlock(hDlg, OPT_DarkSquareColor,  dsc);
-      PaintColorBlock(hDlg, OPT_WhitePieceColor,  wpc);
-      PaintColorBlock(hDlg, OPT_BlackPieceColor,  bpc);
-      PaintColorBlock(hDlg, OPT_HighlightSquareColor, hsc);
-      PaintColorBlock(hDlg, OPT_PremoveHighlightColor, phc);
-      SetBoardOptionEnables(hDlg);
-      PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc,
-	  TRUE, mono, pieces);
-      PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc,
-	  FALSE, mono, pieces);
-      break;
-
-    case OPT_Monochrome:
-      mono = !mono;
-      SetBoardOptionEnables(hDlg);
-      break;
-    }
-    break;
-  }
-  return FALSE;
-}
-
-
-VOID
-BoardOptionsPopup(HWND hwnd)
-{
-  FARPROC lpProc = MakeProcInstance((FARPROC)BoardOptionsDialog, hInst);
-  DialogBox(hInst, MAKEINTRESOURCE(DLG_BoardOptions), hwnd,
-	  (DLGPROC) lpProc);
-  FreeProcInstance(lpProc);
-}
-
-/*---------------------------------------------------------------------------*\
- *
- * ICS Options Dialog functions
- *
-\*---------------------------------------------------------------------------*/
-
-BOOL APIENTRY
-MyCreateFont(HWND hwnd, MyFont *font)
-{
-  CHOOSEFONT cf;
-  HFONT hf;
-
-  /* Initialize members of the CHOOSEFONT structure. */
-  cf.lStructSize = sizeof(CHOOSEFONT);
-  cf.hwndOwner = hwnd;
-  cf.hDC = (HDC)NULL;
-  cf.lpLogFont = &font->lf;
-  cf.iPointSize = 0;
-  cf.Flags = CF_SCREENFONTS|/*CF_ANSIONLY|*/CF_INITTOLOGFONTSTRUCT;
-  cf.rgbColors = RGB(0,0,0);
-  cf.lCustData = 0L;
-  cf.lpfnHook = (LPCFHOOKPROC)NULL;
-  cf.lpTemplateName = (LPSTR)NULL;
-  cf.hInstance = (HINSTANCE) NULL;
-  cf.lpszStyle = (LPSTR)NULL;
-  cf.nFontType = SCREEN_FONTTYPE;
-  cf.nSizeMin = 0;
-  cf.nSizeMax = 0;
-
-  /* Display the CHOOSEFONT common-dialog box. */
-  if (!ChooseFont(&cf)) {
-    return FALSE;
-  }
-
-  /* Create a logical font based on the user's   */
-  /* selection and return a handle identifying   */
-  /* that font. */
-  hf = CreateFontIndirect(cf.lpLogFont);
-  if (hf == NULL) {
-    return FALSE;
-  }
-
-  font->hf = hf;
-  font->mfp.pointSize = (float) (cf.iPointSize / 10.0);
-  font->mfp.bold = (font->lf.lfWeight >= FW_BOLD);
-  font->mfp.italic = font->lf.lfItalic;
-  font->mfp.underline = font->lf.lfUnderline;
-  font->mfp.strikeout = font->lf.lfStrikeOut;
-  strcpy(font->mfp.faceName, font->lf.lfFaceName);
-  return TRUE;
-}
-
-
-VOID
-UpdateSampleText(HWND hDlg, int id, MyColorizeAttribs *mca)
-{
-  CHARFORMAT cf;
-  cf.cbSize = sizeof(CHARFORMAT);
-  cf.dwMask = 
-    CFM_COLOR|CFM_BOLD|CFM_ITALIC|CFM_UNDERLINE|CFM_STRIKEOUT|CFM_FACE|CFM_SIZE;
-  cf.crTextColor = mca->color;
-  cf.dwEffects = mca->effects;
-  strcpy(cf.szFaceName, font[boardSize][CONSOLE_FONT]->mfp.faceName);
-  /* 
-   * The 20.0 below is in fact documented. yHeight is expressed in twips.
-   * A twip is 1/20 of a font's point size. See documentation of CHARFORMAT.
-   * --msw
-   */
-  cf.yHeight = (int)(font[boardSize][CONSOLE_FONT]->mfp.pointSize * 20.0 + 0.5);
-  cf.bCharSet = DEFAULT_CHARSET; /* should be ignored anyway */
-  cf.bPitchAndFamily = DEFAULT_PITCH|FF_DONTCARE;
-  SendDlgItemMessage(hDlg, id, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf);
-}
-
-LRESULT CALLBACK
-ColorizeTextDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-  static MyColorizeAttribs mca;
-  static ColorClass cc;
-  COLORREF background = (COLORREF)0;
-
-  switch (message) {
-  case WM_INITDIALOG:
-    cc = (ColorClass)lParam;
-    mca = colorizeAttribs[cc];
-    /* Center the dialog over the application window */
-    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
-    /* Initialize the dialog items */
-    CheckDlgButton(hDlg, OPT_Bold, (mca.effects & CFE_BOLD) != 0);
-    CheckDlgButton(hDlg, OPT_Italic, (mca.effects & CFE_ITALIC) != 0);
-    CheckDlgButton(hDlg, OPT_Underline, (mca.effects & CFE_UNDERLINE) != 0);
-    CheckDlgButton(hDlg, OPT_Strikeout, (mca.effects & CFE_STRIKEOUT) != 0);
-
-    /* get the current background color from the parent window */
-    SendMessage(GetWindow(hDlg, GW_OWNER),WM_COMMAND, 
-        	(WPARAM)WM_USER_GetConsoleBackground, 
-	        (LPARAM)&background);
-
-    /* set the background color */
-    SendDlgItemMessage(hDlg, OPT_Sample, EM_SETBKGNDCOLOR, FALSE, background);
-
-    SetDlgItemText(hDlg, OPT_Sample, mca.name);
-    UpdateSampleText(hDlg, OPT_Sample, &mca);
-    return TRUE;
-
-  case WM_COMMAND: /* message: received a command */
-    switch (LOWORD(wParam)) {
-    case IDOK:
-      /* Read changed options from the dialog box */
-      colorizeAttribs[cc] = mca;
-      textAttribs[cc].color = mca.color;
-      textAttribs[cc].effects = mca.effects;
-      Colorize(currentColorClass, TRUE);
-      if (cc == ColorNormal) {
-	CHARFORMAT cf;
-	cf.cbSize = sizeof(CHARFORMAT);
-	cf.dwMask = CFM_COLOR;
-	cf.crTextColor = mca.color;
-	SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, 
-	  EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf);
-      }
-      EndDialog(hDlg, TRUE);
-      return TRUE;
-
-    case IDCANCEL:
-      EndDialog(hDlg, FALSE);
-      return TRUE;
-
-    case OPT_ChooseColor:
-      ChangeColor(hDlg, &mca.color);
-      UpdateSampleText(hDlg, OPT_Sample, &mca);
-      return TRUE;
-
-    default:
-      mca.effects =
-	(IsDlgButtonChecked(hDlg, OPT_Bold) ? CFE_BOLD : 0) |
-	(IsDlgButtonChecked(hDlg, OPT_Italic) ? CFE_ITALIC : 0) |
-	(IsDlgButtonChecked(hDlg, OPT_Underline) ? CFE_UNDERLINE : 0) |
-	(IsDlgButtonChecked(hDlg, OPT_Strikeout) ? CFE_STRIKEOUT : 0);
-      UpdateSampleText(hDlg, OPT_Sample, &mca);
-      break;
-    }
-    break;
-  }
-  return FALSE;
-}
-
-VOID
-ColorizeTextPopup(HWND hwnd, ColorClass cc)
-{
-  FARPROC lpProc;
-
-  lpProc = MakeProcInstance((FARPROC)ColorizeTextDialog, hInst);
-  DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_Colorize),
-    hwnd, (DLGPROC)lpProc, (LPARAM) cc);
-  FreeProcInstance(lpProc);
-}
-
-VOID
-SetIcsOptionEnables(HWND hDlg)
-{
-#define ENABLE_DLG_ITEM(x,y) EnableWindow(GetDlgItem(hDlg,(x)), (y))
-
-  UINT state = IsDlgButtonChecked(hDlg, OPT_Premove);
-  ENABLE_DLG_ITEM(OPT_PremoveWhite, state);
-  ENABLE_DLG_ITEM(OPT_PremoveWhiteText, state);
-  ENABLE_DLG_ITEM(OPT_PremoveBlack, state);
-  ENABLE_DLG_ITEM(OPT_PremoveBlackText, state);
-
-  ENABLE_DLG_ITEM(OPT_IcsAlarmTime, IsDlgButtonChecked(hDlg, OPT_IcsAlarm));
-
-#undef ENABLE_DLG_ITEM
-}
-
-
-LRESULT CALLBACK
-IcsOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-  char buf[MSG_SIZ];
-  int number;
-  int i;
-  static COLORREF cbc;
-  static MyColorizeAttribs *mca;
-  COLORREF *colorref;
-
-  switch (message) {
-  case WM_INITDIALOG: /* message: initialize dialog box */
-
-    mca = colorizeAttribs;
-
-    for (i=0; i < NColorClasses - 1; i++) {
-      mca[i].color   = textAttribs[i].color;
-      mca[i].effects = textAttribs[i].effects;
-    }
-    cbc = consoleBackgroundColor;
-
-    /* Center the dialog over the application window */
-    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
-
-    /* Initialize the dialog items */
-#define CHECK_BOX(x,y) CheckDlgButton(hDlg, (x), (BOOL)(y))
-
-    CHECK_BOX(OPT_AutoComment, appData.autoComment);
-    CHECK_BOX(OPT_AutoObserve, appData.autoObserve);
-    CHECK_BOX(OPT_GetMoveList, appData.getMoveList);
-    CHECK_BOX(OPT_LocalLineEditing, appData.localLineEditing);
-    CHECK_BOX(OPT_QuietPlay, appData.quietPlay);
-    CHECK_BOX(OPT_Premove, appData.premove);
-    CHECK_BOX(OPT_PremoveWhite, appData.premoveWhite);
-    CHECK_BOX(OPT_PremoveBlack, appData.premoveBlack);
-    CHECK_BOX(OPT_IcsAlarm, appData.icsAlarm);
-    CHECK_BOX(OPT_DontColorize, !appData.colorize);
-
-#undef CHECK_BOX
-
-    sprintf(buf, "%d", appData.icsAlarmTime / 1000);
-    SetDlgItemText(hDlg, OPT_IcsAlarmTime, buf);
-    SetDlgItemText(hDlg, OPT_PremoveWhiteText, appData.premoveWhiteText);
-    SetDlgItemText(hDlg, OPT_PremoveBlackText, appData.premoveBlackText);
-
-    SendDlgItemMessage(hDlg, OPT_SampleShout,     EM_SETBKGNDCOLOR, 0, cbc);
-    SendDlgItemMessage(hDlg, OPT_SampleSShout,    EM_SETBKGNDCOLOR, 0, cbc);
-    SendDlgItemMessage(hDlg, OPT_SampleChannel1,  EM_SETBKGNDCOLOR, 0, cbc);
-    SendDlgItemMessage(hDlg, OPT_SampleChannel,   EM_SETBKGNDCOLOR, 0, cbc);
-    SendDlgItemMessage(hDlg, OPT_SampleKibitz,    EM_SETBKGNDCOLOR, 0, cbc);
-    SendDlgItemMessage(hDlg, OPT_SampleTell,      EM_SETBKGNDCOLOR, 0, cbc);
-    SendDlgItemMessage(hDlg, OPT_SampleChallenge, EM_SETBKGNDCOLOR, 0, cbc);
-    SendDlgItemMessage(hDlg, OPT_SampleRequest,   EM_SETBKGNDCOLOR, 0, cbc);
-    SendDlgItemMessage(hDlg, OPT_SampleSeek,      EM_SETBKGNDCOLOR, 0, cbc);
-    SendDlgItemMessage(hDlg, OPT_SampleNormal,    EM_SETBKGNDCOLOR, 0, cbc);
-
-    SetDlgItemText(hDlg, OPT_SampleShout,     mca[ColorShout].name);
-    SetDlgItemText(hDlg, OPT_SampleSShout,    mca[ColorSShout].name);
-    SetDlgItemText(hDlg, OPT_SampleChannel1,  mca[ColorChannel1].name);
-    SetDlgItemText(hDlg, OPT_SampleChannel,   mca[ColorChannel].name);
-    SetDlgItemText(hDlg, OPT_SampleKibitz,    mca[ColorKibitz].name);
-    SetDlgItemText(hDlg, OPT_SampleTell,      mca[ColorTell].name);
-    SetDlgItemText(hDlg, OPT_SampleChallenge, mca[ColorChallenge].name);
-    SetDlgItemText(hDlg, OPT_SampleRequest,   mca[ColorRequest].name);
-    SetDlgItemText(hDlg, OPT_SampleSeek,      mca[ColorSeek].name);
-    SetDlgItemText(hDlg, OPT_SampleNormal,    mca[ColorNormal].name);
-
-    UpdateSampleText(hDlg, OPT_SampleShout,     &mca[ColorShout]);
-    UpdateSampleText(hDlg, OPT_SampleSShout,    &mca[ColorSShout]);
-    UpdateSampleText(hDlg, OPT_SampleChannel1,  &mca[ColorChannel1]);
-    UpdateSampleText(hDlg, OPT_SampleChannel,   &mca[ColorChannel]);
-    UpdateSampleText(hDlg, OPT_SampleKibitz,    &mca[ColorKibitz]);
-    UpdateSampleText(hDlg, OPT_SampleTell,      &mca[ColorTell]);
-    UpdateSampleText(hDlg, OPT_SampleChallenge, &mca[ColorChallenge]);
-    UpdateSampleText(hDlg, OPT_SampleRequest,   &mca[ColorRequest]);
-    UpdateSampleText(hDlg, OPT_SampleSeek,      &mca[ColorSeek]);
-    UpdateSampleText(hDlg, OPT_SampleNormal,    &mca[ColorNormal]);
-
-    SetIcsOptionEnables(hDlg);
-    return TRUE;
-
-  case WM_COMMAND: /* message: received a command */
-    switch (LOWORD(wParam)) {
-
-    case WM_USER_GetConsoleBackground: 
-      /* the ColorizeTextDialog needs the current background color */
-      colorref = (COLORREF *)lParam;
-      *colorref = cbc;
-      return FALSE;
-
-    case IDOK:
-      /* Read changed options from the dialog box */
-      GetDlgItemText(hDlg, OPT_IcsAlarmTime, buf, MSG_SIZ);
-      if (sscanf(buf, "%d", &number) != 1 || (number < 0)){
-	  MessageBox(hDlg, "Invalid ICS Alarm Time",
-		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
-	  return FALSE;
-      }
-
-#define IS_CHECKED(x) (Boolean)IsDlgButtonChecked(hDlg, (x))
-
-      appData.icsAlarm         = IS_CHECKED(OPT_IcsAlarm);
-      appData.premove          = IS_CHECKED(OPT_Premove);
-      appData.premoveWhite     = IS_CHECKED(OPT_PremoveWhite);
-      appData.premoveBlack     = IS_CHECKED(OPT_PremoveBlack);
-      appData.autoComment      = IS_CHECKED(OPT_AutoComment);
-      appData.autoObserve      = IS_CHECKED(OPT_AutoObserve);
-      appData.getMoveList      = IS_CHECKED(OPT_GetMoveList);
-      appData.localLineEditing = IS_CHECKED(OPT_LocalLineEditing);
-      appData.quietPlay        = IS_CHECKED(OPT_QuietPlay);
-
-#undef IS_CHECKED
-
-      appData.icsAlarmTime = number * 1000;
-      GetDlgItemText(hDlg, OPT_PremoveWhiteText, appData.premoveWhiteText, 5);
-      GetDlgItemText(hDlg, OPT_PremoveBlackText, appData.premoveBlackText, 5);
-
-      if (appData.localLineEditing) {
-	DontEcho();
-	EchoOn();
-      } else {
-	DoEcho();
-	EchoOff();
-      }
-
-      appData.colorize =
-	(Boolean)!IsDlgButtonChecked(hDlg, OPT_DontColorize);
-
-      if (!appData.colorize) {
-	CHARFORMAT cf;
-	COLORREF background = ParseColorName(COLOR_BKGD);
-	/*
-	SetDefaultTextAttribs();
-        Colorize(currentColorClass);
-	*/
-	cf.cbSize = sizeof(CHARFORMAT);
-	cf.dwMask = CFM_COLOR;
-	cf.crTextColor = ParseColorName(COLOR_NORMAL);
-
-	SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, 
-	  EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf);
-        SendDlgItemMessage(hwndConsole, OPT_ConsoleText, 
-  	  EM_SETBKGNDCOLOR, FALSE, background);
-	SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, 
-	  EM_SETBKGNDCOLOR, FALSE, background);
-      }
-
-      if (cbc != consoleBackgroundColor) {
-	consoleBackgroundColor = cbc;
-	if (appData.colorize) {
-	  SendDlgItemMessage(hwndConsole, OPT_ConsoleText, 
-	    EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor);
-	  SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, 
-	    EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor);
-	}
-      }
-
-      for (i=0; i < NColorClasses - 1; i++) {
-	textAttribs[i].color   = mca[i].color;
-	textAttribs[i].effects = mca[i].effects;
-      }
-
-      EndDialog(hDlg, TRUE);
-      return TRUE;
-
-    case IDCANCEL:
-      EndDialog(hDlg, FALSE);
-      return TRUE;
-
-    case OPT_ChooseShoutColor:
-      ColorizeTextPopup(hDlg, ColorShout);
-      UpdateSampleText(hDlg, OPT_SampleShout, &mca[ColorShout]);
-      break;
-
-    case OPT_ChooseSShoutColor:
-      ColorizeTextPopup(hDlg, ColorSShout);
-      UpdateSampleText(hDlg, OPT_SampleSShout, &mca[ColorSShout]);
-      break;
-
-    case OPT_ChooseChannel1Color:
-      ColorizeTextPopup(hDlg, ColorChannel1);
-      UpdateSampleText(hDlg, OPT_SampleChannel1, 
-		       &colorizeAttribs[ColorChannel1]);
-      break;
-
-    case OPT_ChooseChannelColor:
-      ColorizeTextPopup(hDlg, ColorChannel);
-      UpdateSampleText(hDlg, OPT_SampleChannel, &mca[ColorChannel]);
-      break;
-
-    case OPT_ChooseKibitzColor:
-      ColorizeTextPopup(hDlg, ColorKibitz);
-      UpdateSampleText(hDlg, OPT_SampleKibitz, &mca[ColorKibitz]);
-      break;
-
-    case OPT_ChooseTellColor:
-      ColorizeTextPopup(hDlg, ColorTell);
-      UpdateSampleText(hDlg, OPT_SampleTell, &mca[ColorTell]);
-      break;
-
-    case OPT_ChooseChallengeColor:
-      ColorizeTextPopup(hDlg, ColorChallenge);
-      UpdateSampleText(hDlg, OPT_SampleChallenge, &mca[ColorChallenge]);
-      break;
-
-    case OPT_ChooseRequestColor:
-      ColorizeTextPopup(hDlg, ColorRequest);
-      UpdateSampleText(hDlg, OPT_SampleRequest, &mca[ColorRequest]);
-      break;
-
-    case OPT_ChooseSeekColor:
-      ColorizeTextPopup(hDlg, ColorSeek);
-      UpdateSampleText(hDlg, OPT_SampleSeek, &mca[ColorSeek]);
-      break;
-
-    case OPT_ChooseNormalColor:
-      ColorizeTextPopup(hDlg, ColorNormal);
-      UpdateSampleText(hDlg, OPT_SampleNormal, &mca[ColorNormal]);
-      break;
-
-    case OPT_ChooseBackgroundColor:
-      if (ChangeColor(hDlg, &cbc)) {
-	SendDlgItemMessage(hDlg, OPT_SampleShout,     EM_SETBKGNDCOLOR, 0, cbc);
-	SendDlgItemMessage(hDlg, OPT_SampleSShout,    EM_SETBKGNDCOLOR, 0, cbc);
-	SendDlgItemMessage(hDlg, OPT_SampleChannel1,  EM_SETBKGNDCOLOR, 0, cbc);
-	SendDlgItemMessage(hDlg, OPT_SampleChannel,   EM_SETBKGNDCOLOR, 0, cbc);
-	SendDlgItemMessage(hDlg, OPT_SampleKibitz,    EM_SETBKGNDCOLOR, 0, cbc);
-	SendDlgItemMessage(hDlg, OPT_SampleTell,      EM_SETBKGNDCOLOR, 0, cbc);
-	SendDlgItemMessage(hDlg, OPT_SampleChallenge, EM_SETBKGNDCOLOR, 0, cbc);
-	SendDlgItemMessage(hDlg, OPT_SampleRequest,   EM_SETBKGNDCOLOR, 0, cbc);
-	SendDlgItemMessage(hDlg, OPT_SampleSeek,      EM_SETBKGNDCOLOR, 0, cbc);
-	SendDlgItemMessage(hDlg, OPT_SampleNormal,    EM_SETBKGNDCOLOR, 0, cbc);
-      }
-      break;
-
-    case OPT_DefaultColors:
-      for (i=0; i < NColorClasses - 1; i++)
-	ParseAttribs(&mca[i].color, 
-		     &mca[i].effects,
-		     defaultTextAttribs[i]);
-
-      cbc = ParseColorName(COLOR_BKGD);
-      SendDlgItemMessage(hDlg, OPT_SampleShout,     EM_SETBKGNDCOLOR, 0, cbc);
-      SendDlgItemMessage(hDlg, OPT_SampleSShout,    EM_SETBKGNDCOLOR, 0, cbc);
-      SendDlgItemMessage(hDlg, OPT_SampleChannel1,  EM_SETBKGNDCOLOR, 0, cbc);
-      SendDlgItemMessage(hDlg, OPT_SampleChannel,   EM_SETBKGNDCOLOR, 0, cbc);
-      SendDlgItemMessage(hDlg, OPT_SampleKibitz,    EM_SETBKGNDCOLOR, 0, cbc);
-      SendDlgItemMessage(hDlg, OPT_SampleTell,      EM_SETBKGNDCOLOR, 0, cbc);
-      SendDlgItemMessage(hDlg, OPT_SampleChallenge, EM_SETBKGNDCOLOR, 0, cbc);
-      SendDlgItemMessage(hDlg, OPT_SampleRequest,   EM_SETBKGNDCOLOR, 0, cbc);
-      SendDlgItemMessage(hDlg, OPT_SampleSeek,      EM_SETBKGNDCOLOR, 0, cbc);
-      SendDlgItemMessage(hDlg, OPT_SampleNormal,    EM_SETBKGNDCOLOR, 0, cbc);
-
-      UpdateSampleText(hDlg, OPT_SampleShout,     &mca[ColorShout]);
-      UpdateSampleText(hDlg, OPT_SampleSShout,    &mca[ColorSShout]);
-      UpdateSampleText(hDlg, OPT_SampleChannel1,  &mca[ColorChannel1]);
-      UpdateSampleText(hDlg, OPT_SampleChannel,   &mca[ColorChannel]);
-      UpdateSampleText(hDlg, OPT_SampleKibitz,    &mca[ColorKibitz]);
-      UpdateSampleText(hDlg, OPT_SampleTell,      &mca[ColorTell]);
-      UpdateSampleText(hDlg, OPT_SampleChallenge, &mca[ColorChallenge]);
-      UpdateSampleText(hDlg, OPT_SampleRequest,   &mca[ColorRequest]);
-      UpdateSampleText(hDlg, OPT_SampleSeek,      &mca[ColorSeek]);
-      UpdateSampleText(hDlg, OPT_SampleNormal,    &mca[ColorNormal]);
-      break;
-
-    default:
-      SetIcsOptionEnables(hDlg);
-      break;
-    }
-    break;
-  }
-  return FALSE;
-}
-
-VOID
-IcsOptionsPopup(HWND hwnd)
-{
-  FARPROC lpProc = MakeProcInstance((FARPROC)IcsOptionsDialog, hInst);
-  DialogBox(hInst, MAKEINTRESOURCE(DLG_IcsOptions), hwnd,
-	    (DLGPROC) lpProc);
-  FreeProcInstance(lpProc);
-}
-
-/*---------------------------------------------------------------------------*\
- *
- * Fonts Dialog functions
- *
-\*---------------------------------------------------------------------------*/
-
-VOID
-SetSampleFontText(HWND hwnd, int id, const MyFont *mf)
-{
-  char buf[MSG_SIZ];
-  HWND hControl;
-  HDC hdc;
-  CHARFORMAT cf;
-  SIZE size;
-  RECT rectClient, rectFormat;
-  HFONT oldFont;
-  POINT center;
-  int len;
-
-  len = sprintf(buf, "%.0f pt. %s%s%s\n",
-		mf->mfp.pointSize, mf->mfp.faceName,
-		mf->mfp.bold ? " bold" : "",
-		mf->mfp.italic ? " italic" : "");
-  SetDlgItemText(hwnd, id, buf);
-
-  hControl = GetDlgItem(hwnd, id);
-  hdc = GetDC(hControl);
-  SetMapMode(hdc, MM_TEXT);	/* 1 pixel == 1 logical unit */
-  oldFont = SelectObject(hdc, mf->hf);
-  
-  /* get number of logical units necessary to display font name */
-  GetTextExtentPoint32(hdc, buf, len, &size);
-
-  /* calculate formatting rectangle in the rich edit control.  
-   * May be larger or smaller than the actual control.
-   */
-  GetClientRect(hControl, &rectClient);
-  center.x = (rectClient.left + rectClient.right) / 2;
-  center.y = (rectClient.top  + rectClient.bottom) / 2;
-  rectFormat.top    = center.y - (size.cy / 2) - 1;
-  rectFormat.bottom = center.y + (size.cy / 2) + 1;
-  rectFormat.left   = center.x - (size.cx / 2) - 1;
-  rectFormat.right  = center.x + (size.cx / 2) + 1;
-
-#if 0
-  fprintf(debugFP, "\nfont: %s\n"
-                   "center.x   %d, centerY %d\n"
-		   "size.cx    %d, size.cy %d\n"
-		   "client.top %d, bottom %d, left %d, right %d\n"
-		   "format.top %d, bottom %d, left %d, right %d\n",
-		   buf,
-		   center.x, center.y,
-		   size.cx, size.cy,
-		   rectClient.top, rectClient.bottom, rectClient.left,
-		   rectClient.right,
-		   rectFormat.top, rectFormat.bottom, rectFormat.left,
-		   rectFormat.right);
-#endif
-
-  cf.cbSize = sizeof(CHARFORMAT);
-  cf.dwMask = CFM_FACE|CFM_SIZE|CFM_CHARSET|CFM_BOLD|CFM_ITALIC;
-  cf.dwEffects = 0;
-  if (mf->lf.lfWeight == FW_BOLD) cf.dwEffects |= CFE_BOLD;
-  if (mf->lf.lfItalic) cf.dwEffects |= CFE_ITALIC;
-  strcpy(cf.szFaceName, mf->mfp.faceName);
-  /*
-   * yHeight is expressed in twips.  A twip is 1/20 of a font's point
-   * size. See documentation of CHARFORMAT.  --msw
-   */
-  cf.yHeight = (int)(mf->mfp.pointSize * 20.0 + 0.5);
-  cf.bCharSet = mf->lf.lfCharSet;
-  cf.bPitchAndFamily = mf->lf.lfPitchAndFamily;
-
-  /* format the text in the rich edit control */
-  SendMessage(hControl, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cf);
-  SendMessage(hControl, EM_SETRECT, (WPARAM)0, (LPARAM) &rectFormat);
-
-  /* clean up */
-  SelectObject(hdc, oldFont);
-  ReleaseDC(hControl, hdc);
-}
-
-VOID
-CopyFont(MyFont *dest, const MyFont *src)
-{
-  dest->mfp.pointSize = src->mfp.pointSize;
-  dest->mfp.bold      = src->mfp.bold;
-  dest->mfp.italic    = src->mfp.italic;
-  dest->mfp.underline = src->mfp.underline;
-  dest->mfp.strikeout = src->mfp.strikeout;
-  lstrcpy(dest->mfp.faceName, src->mfp.faceName);
-  CreateFontInMF(dest);
-}
-
-
-LRESULT CALLBACK
-FontOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-  static MyFont workFont[NUM_FONTS];
-  static BOOL firstPaint;
-  int i;
-  RECT rect;
-
-  switch (message) {
-  case WM_INITDIALOG:
-
-    /* copy the current font settings into a working copy */
-    for (i=0; i < NUM_FONTS; i++)
-      CopyFont(&workFont[i], font[boardSize][i]);
-
-    if (!appData.icsActive)
-      EnableWindow(GetDlgItem(hDlg, OPT_ChooseConsoleFont), FALSE);
-
-    firstPaint = TRUE;	/* see rant below */
-
-    /* If I don't call SetFocus(), the dialog won't respond to the keyboard
-     * when first drawn. Why is this the only dialog that behaves this way? Is
-     * is the WM_PAINT stuff below?? Sigh...
-     */
-    SetFocus(GetDlgItem(hDlg, IDOK));
-    break;
-
-  case WM_PAINT:
-    /* This should not be necessary. However, if SetSampleFontText() is called
-     * in response to WM_INITDIALOG, the strings are not properly centered in
-     * the controls when the dialog first appears. I can't figure out why, so
-     * this is the workaround.  --msw
-     */
-    if (firstPaint) {
-      SetSampleFontText(hDlg, OPT_SampleClockFont, &workFont[CLOCK_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleMessageFont, &workFont[MESSAGE_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleCoordFont, &workFont[COORD_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleTagFont, &workFont[EDITTAGS_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleCommentsFont, &workFont[COMMENT_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleConsoleFont, &workFont[CONSOLE_FONT]);
-      firstPaint = FALSE;
-    }
-    break;
-
-  case WM_COMMAND: /* message: received a command */
-    switch (LOWORD(wParam)) {
-
-    case IDOK:
-      /* again, it seems to avoid redraw problems if we call EndDialog first */
-      EndDialog(hDlg, FALSE);
-
-      /* copy modified settings back to the fonts array */
-      for (i=0; i < NUM_FONTS; i++)
-	CopyFont(font[boardSize][i], &workFont[i]);
-
-      /* a sad necessity due to the original design of having a separate
-       * console font, tags font, and comment font for each board size.  IMHO
-       * these fonts should not be dependent on the current board size.  I'm
-       * running out of time, so I am doing this hack rather than redesign the
-       * data structure. Besides, I think if I redesigned the data structure, I
-       * might break backwards compatibility with old winboard.ini files.
-       * --msw
-       */
-      for (i=0; i < NUM_SIZES; i++) {
-	CopyFont(font[i][EDITTAGS_FONT], &workFont[EDITTAGS_FONT]);
-	CopyFont(font[i][CONSOLE_FONT],  &workFont[CONSOLE_FONT]);
-	CopyFont(font[i][COMMENT_FONT],  &workFont[COMMENT_FONT]);
-      }
-      /* end sad necessity */
-
-      InitDrawingSizes(boardSize, 0);
-      InvalidateRect(hwndMain, NULL, TRUE);
-
-      if (commentDialog) {
-	SendDlgItemMessage(commentDialog, OPT_CommentText,
-	  WM_SETFONT, (WPARAM)font[boardSize][COMMENT_FONT]->hf, 
-	  MAKELPARAM(TRUE, 0));
-	GetClientRect(GetDlgItem(commentDialog, OPT_CommentText), &rect);
-	InvalidateRect(commentDialog, &rect, TRUE);
-      }
-
-      if (editTagsDialog) {
-	SendDlgItemMessage(editTagsDialog, OPT_TagsText,
-  	  WM_SETFONT, (WPARAM)font[boardSize][EDITTAGS_FONT]->hf, 
-	  MAKELPARAM(TRUE, 0));
-	GetClientRect(GetDlgItem(editTagsDialog, OPT_TagsText), &rect);
-	InvalidateRect(editTagsDialog, &rect, TRUE);
-      }
-
-      if (hwndConsole) {
-	ChangedConsoleFont();
-      }
-
-      for (i=0; i<NUM_FONTS; i++)
-	DeleteObject(&workFont[i].hf);
-
-      return TRUE;
-
-    case IDCANCEL:
-      for (i=0; i<NUM_FONTS; i++)
-	DeleteObject(&workFont[i].hf);
-      EndDialog(hDlg, FALSE);
-      return TRUE;
-
-    case OPT_ChooseClockFont:
-      MyCreateFont(hDlg, &workFont[CLOCK_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleClockFont, &workFont[CLOCK_FONT]);
-      break;
-
-    case OPT_ChooseMessageFont:
-      MyCreateFont(hDlg, &workFont[MESSAGE_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleMessageFont, &workFont[MESSAGE_FONT]);
-      break;
-
-    case OPT_ChooseCoordFont:
-      MyCreateFont(hDlg, &workFont[COORD_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleCoordFont, &workFont[COORD_FONT]);
-      break;
-
-    case OPT_ChooseTagFont:
-      MyCreateFont(hDlg, &workFont[EDITTAGS_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleTagFont, &workFont[EDITTAGS_FONT]);
-      break;
-
-    case OPT_ChooseCommentsFont:
-      MyCreateFont(hDlg, &workFont[COMMENT_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleCommentsFont, &workFont[COMMENT_FONT]);
-      break;
-
-    case OPT_ChooseConsoleFont:
-      MyCreateFont(hDlg, &workFont[CONSOLE_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleConsoleFont, &workFont[CONSOLE_FONT]);
-      break;
-
-    case OPT_DefaultFonts:
-      for (i=0; i<NUM_FONTS; i++) {
-	DeleteObject(&workFont[i].hf);
-	ParseFontName(font[boardSize][i]->def, &workFont[i].mfp);
-	CreateFontInMF(&workFont[i]);
-      }
-      SetSampleFontText(hDlg, OPT_SampleClockFont, &workFont[CLOCK_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleMessageFont, &workFont[MESSAGE_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleCoordFont, &workFont[COORD_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleTagFont, &workFont[EDITTAGS_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleCommentsFont, &workFont[COMMENT_FONT]);
-      SetSampleFontText(hDlg, OPT_SampleConsoleFont, &workFont[CONSOLE_FONT]);
-      break;
-    }
-  }
-  return FALSE;
-}
-
-VOID
-FontsOptionsPopup(HWND hwnd)
-{
-  FARPROC lpProc = MakeProcInstance((FARPROC)FontOptionsDialog, hInst);
-  DialogBox(hInst, MAKEINTRESOURCE(DLG_Fonts), hwnd,
-	  (DLGPROC) lpProc);
-  FreeProcInstance(lpProc);
-}
-
-/*---------------------------------------------------------------------------*\
- *
- * Sounds Dialog functions
- *
-\*---------------------------------------------------------------------------*/
-
-
-SoundComboData soundComboData[] = {
-  {"Move", NULL},
-  {"Bell", NULL},
-  {"ICS Alarm", NULL},
-  {"ICS Win", NULL},
-  {"ICS Loss", NULL},
-  {"ICS Draw", NULL},
-  {"ICS Unfinished", NULL},
-  {"Shout", NULL},
-  {"SShout/CShout", NULL},
-  {"Channel 1", NULL},
-  {"Channel", NULL},
-  {"Kibitz", NULL},
-  {"Tell", NULL},
-  {"Challenge", NULL},
-  {"Request", NULL},
-  {"Seek", NULL},
-  {NULL, NULL},
-};
-
-
-void
-InitSoundComboData(SoundComboData *scd)
-{
-  SoundClass sc;
-  ColorClass cc;
-  int index;
-
-  /* copy current sound settings to combo array */
-
-  for ( sc = (SoundClass)0; sc < NSoundClasses; sc++) {
-    scd[sc].name = strdup(sounds[sc].name);
-  }
-  for ( cc = (ColorClass)0; cc < NColorClasses - 2; cc++) {
-    index = (int)cc + (int)NSoundClasses;
-    scd[index].name = strdup(textAttribs[cc].sound.name);
-  }
-}
-
-
-void
-ResetSoundComboData(SoundComboData *scd)
-{
-  while (scd->label) {
-    if (scd->name != NULL) {
-      free (scd->name);
-      scd->name = NULL;
-    }
-    scd++;
-  }
-}
-
-void
-InitSoundCombo(HWND hwndCombo, SoundComboData *scd)
-{
-  char buf[255];
-  DWORD err;
-  DWORD cnt = 0;
-  SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0);
-
-  /* send the labels to the combo box */
-  while (scd->label) {
-    err = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) scd->label);
-    if (err != cnt++) {
-      sprintf(buf, "InitSoundCombo(): err '%d', cnt '%d'\n",
-	  err, cnt);
-      MessageBox(NULL, buf, NULL, MB_OK);
-    }
-    scd++;
-  }
-  SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) 0, (LPARAM) 0);
-}
-
-int
-SoundDialogWhichRadio(HWND hDlg)
-{
-  if (IsDlgButtonChecked(hDlg, OPT_NoSound)) return OPT_NoSound;
-  if (IsDlgButtonChecked(hDlg, OPT_DefaultBeep)) return OPT_DefaultBeep;
-  if (IsDlgButtonChecked(hDlg, OPT_BuiltInSound)) return OPT_BuiltInSound;
-  if (IsDlgButtonChecked(hDlg, OPT_WavFile)) return OPT_WavFile;
-  return -1;
-}
-
-VOID
-SoundDialogSetEnables(HWND hDlg, int radio)
-{
-  EnableWindow(GetDlgItem(hDlg, OPT_BuiltInSoundName),
-	       radio == OPT_BuiltInSound);
-  EnableWindow(GetDlgItem(hDlg, OPT_WavFileName), radio == OPT_WavFile);
-  EnableWindow(GetDlgItem(hDlg, OPT_BrowseSound), radio == OPT_WavFile);
-}
-
-char *
-SoundDialogGetName(HWND hDlg, int radio)
-{
-  static char buf[MSG_SIZ], buf2[MSG_SIZ], buf3[MSG_SIZ];
-  char *dummy, *ret;
-  switch (radio) {
-  case OPT_NoSound:
-  default:
-    return "";
-  case OPT_DefaultBeep:
-    return "$";
-  case OPT_BuiltInSound:
-    buf[0] = '!';
-    GetDlgItemText(hDlg, OPT_BuiltInSoundName, buf + 1, sizeof(buf) - 1);
-    return buf;
-  case OPT_WavFile:
-    GetDlgItemText(hDlg, OPT_WavFileName, buf, sizeof(buf));
-    GetCurrentDirectory(MSG_SIZ, buf3);
-    SetCurrentDirectory(installDir);
-    if (GetFullPathName(buf, MSG_SIZ, buf2, &dummy)) {
-      ret = buf2;
-    } else {
-      ret = buf;
-    }
-    SetCurrentDirectory(buf3);
-    return ret;
-  }
-}
-
-void
-DisplaySelectedSound(HWND hDlg, HWND hCombo, const char *name)
-{
-  int radio;
-  /* 
-   * I think it's best to clear the combo and edit boxes. It looks stupid
-   * to have a value from another sound event sitting there grayed out.
-   */
-  SetDlgItemText(hDlg, OPT_WavFileName, "");
-  SendMessage(hCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0);
-
-  if (appData.debugMode)
-      fprintf(debugFP, "DisplaySelectedSound(,,'%s'):\n", name);
-  switch (name[0]) {
-  case NULLCHAR:
-    radio = OPT_NoSound;
-    break;
-  case '$':
-    if (name[1] == NULLCHAR) {
-      radio = OPT_DefaultBeep;
-    } else {
-      radio = OPT_WavFile;
-      SetDlgItemText(hDlg, OPT_WavFileName, name);
-    }
-    break;
-  case '!':
-    if (name[1] == NULLCHAR) {
-      radio = OPT_NoSound;
-    } else {
-      radio = OPT_BuiltInSound;
-      if (SendMessage(hCombo, CB_SELECTSTRING, (WPARAM) -1, 
-		      (LPARAM) (name + 1)) == CB_ERR) {
-	SendMessage(hCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0);
-	SendMessage(hCombo, WM_SETTEXT, (WPARAM) 0, (LPARAM) (name + 1));
-      }
-    }
-    break;
-  default:
-    radio = OPT_WavFile;
-    SetDlgItemText(hDlg, OPT_WavFileName, name);
-    break;
-  }
-  SoundDialogSetEnables(hDlg, radio);
-  CheckRadioButton(hDlg, OPT_NoSound, OPT_WavFile, radio);
-}
-    
-
-char *builtInSoundNames[] = BUILT_IN_SOUND_NAMES;
-
-LRESULT CALLBACK
-SoundOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-  static HWND hSoundCombo;
-  static DWORD index;
-  static HWND hBISN;
-  int radio;
-  MySound tmp;
-  FILE *f;
-  char buf[MSG_SIZ];
-  char *newName;
-  SoundClass sc;
-  ColorClass cc;
-  SoundComboData *scd;
-
-  switch (message) {
-  case WM_INITDIALOG:
-    /* Center the dialog over the application window */
-    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
-
-    /* Initialize the built-in sounds combo */
-    hBISN = GetDlgItem(hDlg, OPT_BuiltInSoundName);
-     InitComboStrings(hBISN, builtInSoundNames);
-
-    /* Initialize the  sound events combo */
-    index = 0;
-    InitSoundComboData(soundComboData);
-    hSoundCombo = GetDlgItem(hDlg, CBO_Sounds);
-    InitSoundCombo(hSoundCombo, soundComboData);
-
-    /* update the dialog */
-    DisplaySelectedSound(hDlg, hBISN, soundComboData[index].name);
-    return TRUE;
-
-  case WM_COMMAND: /* message: received a command */
-
-    if (((HWND)lParam == hSoundCombo) && 
-	(HIWORD(wParam) == CBN_SELCHANGE)) {
-      /* 
-       * the user has selected a new sound event. We must store the name for
-       * the previously selected event, then retrieve the name for the
-       * newly selected event and update the dialog. 
-       */
-      radio = SoundDialogWhichRadio(hDlg);
-      newName = strdup(SoundDialogGetName(hDlg, radio));
-      
-      if (strcmp(newName, soundComboData[index].name) != 0) {
-	free(soundComboData[index].name);
-	soundComboData[index].name = newName;
-      } else {
-	free(newName);
-	newName = NULL;
-      }
-      /* now get the settings for the newly selected event */
-      index = SendMessage(hSoundCombo, CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
-      DisplaySelectedSound(hDlg, hBISN, soundComboData[index].name);
-      
-      return TRUE;
-    }
-    switch (LOWORD(wParam)) {
-    case IDOK:
-      /* 
-       * save the name for the currently selected sound event 
-       */
-      radio = SoundDialogWhichRadio(hDlg);
-      newName = strdup(SoundDialogGetName(hDlg, radio));
-
-      if (strcmp(soundComboData[index].name, newName) != 0) {
-	free(soundComboData[index].name);
-	soundComboData[index].name = newName;
-      } else {
-	free(newName);
-	newName = NULL;
-      }
-
-      /* save all the sound names that changed and load the sounds */
-
-      for ( sc = (SoundClass)0; sc < NSoundClasses; sc++) {
-	if (strcmp(soundComboData[sc].name, sounds[sc].name) != 0) {
-	  free(sounds[sc].name);
-	  sounds[sc].name = strdup(soundComboData[sc].name);
-	  MyLoadSound(&sounds[sc]);
-	}
-      }
-      for ( cc = (ColorClass)0; cc < NColorClasses - 2; cc++) {
-	index = (int)cc + (int)NSoundClasses;
-	if (strcmp(soundComboData[index].name, 
-		   textAttribs[cc].sound.name) != 0) {
-	  free(textAttribs[cc].sound.name);
-	  textAttribs[cc].sound.name = strdup(soundComboData[index].name);
-	  MyLoadSound(&textAttribs[cc].sound);
-	}
-      }
-
-      ResetSoundComboData(soundComboData);
-      EndDialog(hDlg, TRUE);
-      return TRUE;
-
-    case IDCANCEL:
-      ResetSoundComboData(soundComboData);
-      EndDialog(hDlg, FALSE);
-      return TRUE;
-
-    case OPT_DefaultSounds:
-      /* can't use SetDefaultSounds() because we need to be able to "undo" if
-       * user selects "Cancel" later on. So we do it the hard way here.
-       */
-      scd = &soundComboData[0];
-      while (scd->label != NULL) {
-	if (scd->name != NULL) free(scd->name);
-	scd->name = strdup("");
-	scd++;
-      }
-      free(soundComboData[(int)SoundBell].name);
-      soundComboData[(int)SoundBell].name = strdup(SOUND_BELL);
-      DisplaySelectedSound(hDlg, hBISN, soundComboData[index].name);
-      break;
-
-    case OPT_PlaySound:
-      radio = SoundDialogWhichRadio(hDlg);
-      tmp.name = strdup(SoundDialogGetName(hDlg, radio));
-      tmp.data = NULL;
-      MyLoadSound(&tmp);
-      MyPlaySound(&tmp);
-      if (tmp.data  != NULL) free(tmp.data);
-      if (tmp.name != NULL) free(tmp.name);
-      return TRUE;
-
-    case OPT_BrowseSound:
-      f = OpenFileDialog(hDlg, FALSE, NULL, "wav", SOUND_FILT,
-	"Browse for Sound File", NULL, NULL, buf);
-      if (f != NULL) {
-	fclose(f);
-	SetDlgItemText(hDlg, OPT_WavFileName, buf);
-      }
-      return TRUE;
-
-    default:
-      radio = SoundDialogWhichRadio(hDlg);
-      SoundDialogSetEnables(hDlg, radio);
-      break;
-    }
-    break;
-  }
-  return FALSE;
-}
-
-
-VOID SoundOptionsPopup(HWND hwnd)
-{
-  FARPROC lpProc;
-
-  lpProc = MakeProcInstance((FARPROC)SoundOptionsDialog, hInst);
-  DialogBox(hInst, MAKEINTRESOURCE(DLG_Sound), hwnd, (DLGPROC)lpProc);
-  FreeProcInstance(lpProc);
-}
-
-
-/*---------------------------------------------------------------------------*\
- *
- * Comm Port dialog functions
- *
-\*---------------------------------------------------------------------------*/
-
-
-#define FLOW_NONE   0
-#define FLOW_XOFF   1
-#define FLOW_CTS    2
-#define FLOW_DSR    3
-
-#define PORT_NONE
-
-ComboData cdPort[]     = { {"None", PORT_NONE}, {"COM1", 1}, {"COM2", 2},
-			   {"COM3", 3}, {"COM4", 4}, {NULL, 0} };
-ComboData cdDataRate[] = { {"110", 110}, {"300", 300}, {"600", 600}, {"1200", 1200},
-			   {"2400", 2400}, {"4800", 4800}, {"9600", 9600}, {"19200", 19200},
-			   {"38400", 38400}, {NULL, 0} };
-ComboData cdDataBits[] = { {"5", 5}, {"6", 6}, {"7", 7}, {"8", 8}, {NULL, 0} };
-ComboData cdParity[]   = { {"None", NOPARITY}, {"Odd", ODDPARITY}, {"Even", EVENPARITY},
-			   {"Mark", MARKPARITY}, {"Space", SPACEPARITY}, {NULL, 0} };
-ComboData cdStopBits[] = { {"1", ONESTOPBIT}, {"1.5", ONE5STOPBITS},
-			   {"2", TWOSTOPBITS}, {NULL, 0} };
-ComboData cdFlow[]     = { {"None", FLOW_NONE}, {"Xoff/Xon", FLOW_XOFF}, {"CTS", FLOW_CTS},
-			   {"DSR", FLOW_DSR}, {NULL, 0} };
-
-
-VOID
-ParseCommSettings(char *arg, DCB *dcb)
-{
-  int dataRate, count;
-  char bits[MSG_SIZ], parity[MSG_SIZ], stopBits[MSG_SIZ], flow[MSG_SIZ];
-  ComboData *cd;
-  count = sscanf(arg, "%d%*[, ]%[^, ]%*[, ]%[^, ]%*[, ]%[^, ]%*[, ]%[^, ]",
-    &dataRate, bits, parity, stopBits, flow);
-  if (count != 5) goto cant_parse;
-  dcb->BaudRate = dataRate;
-  cd = cdDataBits;
-  while (cd->label != NULL) {
-    if (StrCaseCmp(cd->label, bits) == 0) {
-      dcb->ByteSize = cd->value;
-      break;
-    }
-    cd++;
-  }
-  if (cd->label == NULL) goto cant_parse;
-  cd = cdParity;
-  while (cd->label != NULL) {
-    if (StrCaseCmp(cd->label, parity) == 0) {
-      dcb->Parity = cd->value;
-      break;
-    }
-    cd++;
-  }
-  if (cd->label == NULL) goto cant_parse;
-  cd = cdStopBits;
-  while (cd->label != NULL) {
-    if (StrCaseCmp(cd->label, stopBits) == 0) {
-      dcb->StopBits = cd->value;
-      break;
-    }
-    cd++;
-  }
-  cd = cdFlow;
-  if (cd->label == NULL) goto cant_parse;
-  while (cd->label != NULL) {
-    if (StrCaseCmp(cd->label, flow) == 0) {
-      switch (cd->value) {
-      case FLOW_NONE:
-  	dcb->fOutX = FALSE;
-	dcb->fOutxCtsFlow = FALSE;
-	dcb->fOutxDsrFlow = FALSE;
-	break;
-      case FLOW_CTS:
-	dcb->fOutX = FALSE;
-	dcb->fOutxCtsFlow = TRUE;
-	dcb->fOutxDsrFlow = FALSE;
-	break;
-      case FLOW_DSR:
-	dcb->fOutX = FALSE;
-	dcb->fOutxCtsFlow = FALSE;
-	dcb->fOutxDsrFlow = TRUE;
-	break;
-      case FLOW_XOFF:
-	dcb->fOutX = TRUE;
-	dcb->fOutxCtsFlow = FALSE;
-	dcb->fOutxDsrFlow = FALSE;
-	break;
-      }
-      break;
-    }
-    cd++;
-  }
-  if (cd->label == NULL) goto cant_parse;
-  return;
-cant_parse:
-    ExitArgError("Can't parse com port settings", arg);
-}
-
-
-VOID PrintCommSettings(FILE *f, char *name, DCB *dcb)
-{
-  char *flow = "??", *parity = "??", *stopBits = "??";
-  ComboData *cd;
-  
-  cd = cdParity;
-  while (cd->label != NULL) {
-    if (dcb->Parity == cd->value) {
-      parity = cd->label;
-      break;
-    }
-    cd++;
-  }
-  cd = cdStopBits;
-  while (cd->label != NULL) {
-    if (dcb->StopBits == cd->value) {
-      stopBits = cd->label;
-      break;
-    }
-    cd++;
-  }
-  if (dcb->fOutX) {
-    flow = cdFlow[FLOW_XOFF].label;
-  } else if (dcb->fOutxCtsFlow) {
-    flow = cdFlow[FLOW_CTS].label;
-  } else if (dcb->fOutxDsrFlow) {
-    flow = cdFlow[FLOW_DSR].label;
-  } else {
-    flow = cdFlow[FLOW_NONE].label;
-  }
-  fprintf(f, "/%s=%d,%d,%s,%s,%s\n", name,
-    dcb->BaudRate, dcb->ByteSize, parity, stopBits, flow);
-}
-
-
-void
-InitCombo(HANDLE hwndCombo, ComboData *cd)
-{
-  SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0);
-
-  while (cd->label != NULL) {
-    SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) cd->label);
-    cd++;
-  }
-}
-
-void
-SelectComboValue(HANDLE hwndCombo, ComboData *cd, unsigned value)
-{
-  int i;
-
-  i = 0;
-  while (cd->label != NULL) {
-    if (cd->value == value) {
-      SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) i, (LPARAM) 0);
-      return;
-    }
-    cd++;
-    i++;
-  }
-}
-
-LRESULT CALLBACK
-CommPortOptionsDialog(HWND hDlg, UINT message, WPARAM wParam,	LPARAM lParam)
-{
-  char buf[MSG_SIZ];
-  HANDLE hwndCombo;
-  char *p;
-  LRESULT index;
-  unsigned value;
-  int err;
-
-  switch (message) {
-  case WM_INITDIALOG: /* message: initialize dialog box */
-    /* Center the dialog over the application window */
-    CenterWindow (hDlg, GetWindow(hDlg, GW_OWNER));
-    /* Initialize the dialog items */
-    /* !! There should probably be some synchronization
-       in accessing hCommPort and dcb.  Or does modal nature
-       of this dialog box do it for us?
-       */
-    hwndCombo = GetDlgItem(hDlg, OPT_Port);
-    InitCombo(hwndCombo, cdPort);
-    p = strrchr(appData.icsCommPort, '\\');
-    if (p++ == NULL) p = appData.icsCommPort;
-    if ((*p == '\0') ||
-	(SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) p) == CB_ERR)) {
-      SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) "None");
-    }
-    EnableWindow(hwndCombo, hCommPort == NULL); /*!! don't allow change for now*/
-
-    hwndCombo = GetDlgItem(hDlg, OPT_DataRate);
-    InitCombo(hwndCombo, cdDataRate);
-    sprintf(buf, "%u", dcb.BaudRate);
-    if (SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) buf) == CB_ERR) {
-      SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0);
-      SendMessage(hwndCombo, WM_SETTEXT, (WPARAM) 0, (LPARAM) buf);
-    }
-
-    hwndCombo = GetDlgItem(hDlg, OPT_Bits);
-    InitCombo(hwndCombo, cdDataBits);
-    SelectComboValue(hwndCombo, cdDataBits, dcb.ByteSize);
-
-    hwndCombo = GetDlgItem(hDlg, OPT_Parity);
-    InitCombo(hwndCombo, cdParity);
-    SelectComboValue(hwndCombo, cdParity, dcb.Parity);
-
-    hwndCombo = GetDlgItem(hDlg, OPT_StopBits);
-    InitCombo(hwndCombo, cdStopBits);
-    SelectComboValue(hwndCombo, cdStopBits, dcb.StopBits);
-
-    hwndCombo = GetDlgItem(hDlg, OPT_Flow);
-    InitCombo(hwndCombo, cdFlow);
-    if (dcb.fOutX) {
-      SelectComboValue(hwndCombo, cdFlow, FLOW_XOFF);
-    } else if (dcb.fOutxCtsFlow) {
-      SelectComboValue(hwndCombo, cdFlow, FLOW_CTS);
-    } else if (dcb.fOutxDsrFlow) {
-      SelectComboValue(hwndCombo, cdFlow, FLOW_DSR);
-    } else {
-      SelectComboValue(hwndCombo, cdFlow, FLOW_NONE);
-    }
-    return TRUE;
-
-  case WM_COMMAND: /* message: received a command */
-    switch (LOWORD(wParam)) {
-    case IDOK:
-      /* Read changed options from the dialog box */
-#ifdef NOTDEF
-      /* !! Currently we can't change comm ports in midstream */
-      hwndCombo = GetDlgItem(hDlg, OPT_Port);
-      index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
-      if (index == PORT_NONE) {
-	appData.icsCommPort = "";
-	if (hCommPort != NULL) {
-	  CloseHandle(hCommPort);
-	  hCommPort = NULL;
-	}
-	EndDialog(hDlg, TRUE);
-	return TRUE;
-      }
-      SendMessage(hwndCombo, WM_GETTEXT, (WPARAM) MSG_SIZ, (LPARAM) buf);
-      appData.icsCommPort = strdup(buf);
-      if (hCommPort != NULL) {
-	CloseHandle(hCommPort);
-	hCommPort = NULL;
-      }
-      /* now what?? can't really do this; have to fix up the ChildProc
-	 and InputSource records for the comm port that we gave to the
-	 back end. */
-#endif /*NOTDEF*/
-
-      hwndCombo = GetDlgItem(hDlg, OPT_DataRate);
-      SendMessage(hwndCombo, WM_GETTEXT, (WPARAM) MSG_SIZ, (LPARAM) buf);
-      if (sscanf(buf, "%u", &value) != 1) {
-	MessageBox(hDlg, "Invalid data rate",
-		   "Option Error", MB_OK|MB_ICONEXCLAMATION);
-	return TRUE;
-      }
-      dcb.BaudRate = value;
-
-      hwndCombo = GetDlgItem(hDlg, OPT_Bits);
-      index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
-      dcb.ByteSize = cdDataBits[index].value;
-
-      hwndCombo = GetDlgItem(hDlg, OPT_Parity);
-      index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
-      dcb.Parity = cdParity[index].value;
-
-      hwndCombo = GetDlgItem(hDlg, OPT_StopBits);
-      index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
-      dcb.StopBits = cdStopBits[index].value;
-
-      hwndCombo = GetDlgItem(hDlg, OPT_Flow);
-      index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
-      switch (cdFlow[index].value) {
-      case FLOW_NONE:
-	dcb.fOutX = FALSE;
-	dcb.fOutxCtsFlow = FALSE;
-	dcb.fOutxDsrFlow = FALSE;
-	break;
-      case FLOW_CTS:
-	dcb.fOutX = FALSE;
-	dcb.fOutxCtsFlow = TRUE;
-	dcb.fOutxDsrFlow = FALSE;
-	break;
-      case FLOW_DSR:
-	dcb.fOutX = FALSE;
-	dcb.fOutxCtsFlow = FALSE;
-	dcb.fOutxDsrFlow = TRUE;
-	break;
-      case FLOW_XOFF:
-	dcb.fOutX = TRUE;
-	dcb.fOutxCtsFlow = FALSE;
-	dcb.fOutxDsrFlow = FALSE;
-	break;
-      }
-      if (!SetCommState(hCommPort, (LPDCB) &dcb)) {
-	err = GetLastError();
-	switch(MessageBox(hDlg, 
-	                 "Failed to set comm port state;\r\ninvalid options?",
-			 "Option Error", MB_ABORTRETRYIGNORE|MB_ICONQUESTION)) {
-	case IDABORT:
-	  DisplayFatalError("Failed to set comm port state", err, 1);
-	  exit(1);  /*is it ok to do this from here?*/
-
-	case IDRETRY:
-	  return TRUE;
-
-	case IDIGNORE:
-	  EndDialog(hDlg, TRUE);
-	  return TRUE;
-	}
-      }
-
-      EndDialog(hDlg, TRUE);
-      return TRUE;
-
-    case IDCANCEL:
-      EndDialog(hDlg, FALSE);
-      return TRUE;
-
-    default:
-      break;
-    }
-    break;
-  }
-  return FALSE;
-}
-
-VOID
-CommPortOptionsPopup(HWND hwnd)
-{
-  FARPROC lpProc = MakeProcInstance((FARPROC)CommPortOptionsDialog, hInst);
-  DialogBox(hInst, MAKEINTRESOURCE(DLG_CommPort), hwnd, (DLGPROC) lpProc);
-  FreeProcInstance(lpProc);
-}
-
-/*---------------------------------------------------------------------------*\
- *
- * Load Options dialog functions
- *
-\*---------------------------------------------------------------------------*/
-
-VOID
-SetLoadOptionEnables(HWND hDlg)
-{
-  UINT state;
-
-  state = IsDlgButtonChecked(hDlg, OPT_Autostep);
-  EnableWindow(GetDlgItem(hDlg, OPT_ASTimeDelay), state);
-  EnableWindow(GetDlgItem(hDlg, OPT_AStext1), state);
-}
-
-LRESULT CALLBACK
-LoadOptions(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-  char buf[MSG_SIZ];
-  float fnumber;
-
-  switch (message) {
-  case WM_INITDIALOG: /* message: initialize dialog box */
-    /* Center the dialog over the application window */
-    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
-    /* Initialize the dialog items */
-    if (appData.timeDelay >= 0.0) {
-      CheckDlgButton(hDlg, OPT_Autostep, TRUE);
-      sprintf(buf, "%.2g", appData.timeDelay);
-      SetDlgItemText(hDlg, OPT_ASTimeDelay, buf);
-    } else {
-      CheckDlgButton(hDlg, OPT_Autostep, FALSE);
-    }
-    SetLoadOptionEnables(hDlg);
-    return TRUE;
-
-  case WM_COMMAND: /* message: received a command */
-    switch (LOWORD(wParam)) {
-    case IDOK:
-      /* Read changed options from the dialog box */
-      if (IsDlgButtonChecked(hDlg, OPT_Autostep)) {
-	GetDlgItemText(hDlg, OPT_ASTimeDelay, buf, MSG_SIZ);
-	if (sscanf(buf, "%f", &fnumber) != 1) {
-	  MessageBox(hDlg, "Invalid load game step rate",
-		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
-	  return FALSE;
-	}
-	appData.timeDelay = fnumber;
-      } else {
-	appData.timeDelay = (float) -1.0;
-      }
-      EndDialog(hDlg, TRUE);
-      return TRUE;
-
-    case IDCANCEL:
-      EndDialog(hDlg, FALSE);
-      return TRUE;
-
-    default:
-      SetLoadOptionEnables(hDlg);
-      break;
-    }
-    break;
-  }
-  return FALSE;
-}
-
-
-VOID 
-LoadOptionsPopup(HWND hwnd)
-{
-  FARPROC lpProc = MakeProcInstance((FARPROC)LoadOptions, hInst);
-  DialogBox(hInst, MAKEINTRESOURCE(DLG_LoadOptions), hwnd, (DLGPROC) lpProc);
-  FreeProcInstance(lpProc);
-}
-
-/*---------------------------------------------------------------------------*\
- *
- * Save Options dialog functions
- *
-\*---------------------------------------------------------------------------*/
-
-VOID
-SetSaveOptionEnables(HWND hDlg)
-{
-  UINT state;
-
-  state = IsDlgButtonChecked(hDlg, OPT_Autosave);
-  EnableWindow(GetDlgItem(hDlg, OPT_AVPrompt), state);
-  EnableWindow(GetDlgItem(hDlg, OPT_AVToFile), state);
-  if (state && !IsDlgButtonChecked(hDlg, OPT_AVPrompt) &&
-      !IsDlgButtonChecked(hDlg, OPT_AVToFile)) {
-    CheckRadioButton(hDlg, OPT_AVPrompt, OPT_AVToFile, OPT_AVPrompt);
-  }
-
-  state = state && IsDlgButtonChecked(hDlg, OPT_AVToFile);
-  EnableWindow(GetDlgItem(hDlg, OPT_AVFilename), state);
-  EnableWindow(GetDlgItem(hDlg, OPT_AVBrowse), state);
-}
-
-LRESULT CALLBACK
-SaveOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-  char buf[MSG_SIZ];
-  FILE *f;
-
-  switch (message) {
-  case WM_INITDIALOG: /* message: initialize dialog box */
-    /* Center the dialog over the application window */
-    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
-    /* Initialize the dialog items */
-    if (*appData.saveGameFile != NULLCHAR) {
-      CheckDlgButton(hDlg, OPT_Autosave, (UINT) TRUE);
-      CheckRadioButton(hDlg, OPT_AVPrompt, OPT_AVToFile, OPT_AVToFile);
-      SetDlgItemText(hDlg, OPT_AVFilename, appData.saveGameFile);
-    } else if (appData.autoSaveGames) {
-      CheckDlgButton(hDlg, OPT_Autosave, (UINT) TRUE);
-      CheckRadioButton(hDlg, OPT_AVPrompt, OPT_AVToFile, OPT_AVPrompt);
-    } else {
-      CheckDlgButton(hDlg, OPT_Autosave, (UINT) FALSE);
-    }
-    if (appData.oldSaveStyle) {
-      CheckRadioButton(hDlg, OPT_PGN, OPT_Old, OPT_Old);
-    } else {
-      CheckRadioButton(hDlg, OPT_PGN, OPT_Old, OPT_PGN);
-    }
-    SetSaveOptionEnables(hDlg);
-    return TRUE;
-
-  case WM_COMMAND: /* message: received a command */
-    switch (LOWORD(wParam)) {
-    case IDOK:
-      /* Read changed options from the dialog box */
-      if (IsDlgButtonChecked(hDlg, OPT_Autosave)) {
-	appData.autoSaveGames = TRUE;
-	if (IsDlgButtonChecked(hDlg, OPT_AVPrompt)) {
-	  appData.saveGameFile = "";
-	} else /*if (IsDlgButtonChecked(hDlg, OPT_AVToFile))*/ {
-	  GetDlgItemText(hDlg, OPT_AVFilename, buf, MSG_SIZ);
-	  if (*buf == NULLCHAR) {
-	    MessageBox(hDlg, "Invalid save game file name",
-		       "Option Error", MB_OK|MB_ICONEXCLAMATION);
-	    return FALSE;
-	  }
-	  if ((isalpha(buf[0]) && buf[1] == ':') ||
-	    (buf[0] == '\\' && buf[1] == '\\')) {
-	    appData.saveGameFile = strdup(buf);
-	  } else {
-	    char buf2[MSG_SIZ], buf3[MSG_SIZ];
-	    char *dummy;
-	    GetCurrentDirectory(MSG_SIZ, buf3);
-	    SetCurrentDirectory(installDir);
-	    if (GetFullPathName(buf, MSG_SIZ, buf2, &dummy)) {
-	      appData.saveGameFile = strdup(buf2);
-	    } else {
-	      appData.saveGameFile = strdup(buf);
-	    }
-	    SetCurrentDirectory(buf3);
-	  }
-	}
-      } else {
-	appData.autoSaveGames = FALSE;
-	appData.saveGameFile = "";
-      }
-      appData.oldSaveStyle = IsDlgButtonChecked(hDlg, OPT_Old);
-      EndDialog(hDlg, TRUE);
-      return TRUE;
-
-    case IDCANCEL:
-      EndDialog(hDlg, FALSE);
-      return TRUE;
-
-    case OPT_AVBrowse:
-      f = OpenFileDialog(hDlg, TRUE, NULL, 
-	                 appData.oldSaveStyle ? "gam" : "pgn", 
-   	                 GAME_FILT, "Browse for Auto Save File", 
-			 NULL, NULL, buf);
-      if (f != NULL) {
-	fclose(f);
-	SetDlgItemText(hDlg, OPT_AVFilename, buf);
-      }
-      break;
-
-    default:
-      SetSaveOptionEnables(hDlg);
-      break;
-    }
-    break;
-  }
-  return FALSE;
-}
-
-VOID
-SaveOptionsPopup(HWND hwnd)
-{
-  FARPROC lpProc = MakeProcInstance((FARPROC)SaveOptionsDialog, hInst);
-  DialogBox(hInst, MAKEINTRESOURCE(DLG_SaveOptions), hwnd, (DLGPROC) lpProc);
-  FreeProcInstance(lpProc);
-}
-
-/*---------------------------------------------------------------------------*\
- *
- * Time Control Options dialog functions
- *
-\*---------------------------------------------------------------------------*/
-
-VOID
-SetTimeControlEnables(HWND hDlg)
-{
-  UINT state;
-
-  state = IsDlgButtonChecked(hDlg, OPT_TCUseMoves);
-  EnableWindow(GetDlgItem(hDlg, OPT_TCTime), state);
-  EnableWindow(GetDlgItem(hDlg, OPT_TCMoves), state);
-  EnableWindow(GetDlgItem(hDlg, OPT_TCtext1), state);
-  EnableWindow(GetDlgItem(hDlg, OPT_TCtext2), state);
-  EnableWindow(GetDlgItem(hDlg, OPT_TCTime2), !state);
-  EnableWindow(GetDlgItem(hDlg, OPT_TCInc), !state);
-  EnableWindow(GetDlgItem(hDlg, OPT_TCitext1), !state);
-  EnableWindow(GetDlgItem(hDlg, OPT_TCitext2), !state);
-  EnableWindow(GetDlgItem(hDlg, OPT_TCitext3), !state);
-}
-
-
-LRESULT CALLBACK
-TimeControl(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-  char buf[MSG_SIZ];
-  int mps, increment;
-  BOOL ok;
-
-  switch (message) {
-  case WM_INITDIALOG: /* message: initialize dialog box */
-    /* Center the dialog over the application window */
-    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
-    /* Initialize the dialog items */
-    if (appData.clockMode && !appData.icsActive) {
-      if (appData.timeIncrement == -1) {
-	CheckRadioButton(hDlg, OPT_TCUseMoves, OPT_TCUseInc,
-			 OPT_TCUseMoves);
-	SetDlgItemText(hDlg, OPT_TCTime, appData.timeControl);
-	SetDlgItemInt(hDlg, OPT_TCMoves, appData.movesPerSession,
-		      FALSE);
-	SetDlgItemText(hDlg, OPT_TCTime2, "");
-	SetDlgItemText(hDlg, OPT_TCInc, "");
-      } else {
-	CheckRadioButton(hDlg, OPT_TCUseMoves, OPT_TCUseInc,
-			 OPT_TCUseInc);
-	SetDlgItemText(hDlg, OPT_TCTime, "");
-	SetDlgItemText(hDlg, OPT_TCMoves, "");
-	SetDlgItemText(hDlg, OPT_TCTime2, appData.timeControl);
-	SetDlgItemInt(hDlg, OPT_TCInc, appData.timeIncrement, FALSE);
-      }
-      SetTimeControlEnables(hDlg);
-    }
-    return TRUE;
-
-  case WM_COMMAND: /* message: received a command */
-    switch (LOWORD(wParam)) {
-    case IDOK:
-      /* Read changed options from the dialog box */
-      if (IsDlgButtonChecked(hDlg, OPT_TCUseMoves)) {
-	increment = -1;
-	mps = GetDlgItemInt(hDlg, OPT_TCMoves, &ok, FALSE);
-	if (!ok || mps <= 0) {
-	  MessageBox(hDlg, "Invalid moves per time control",
-		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
-	  return FALSE;
-	}
-	GetDlgItemText(hDlg, OPT_TCTime, buf, MSG_SIZ);
-	if (!ParseTimeControl(buf, increment, mps)) {
-	  MessageBox(hDlg, "Invalid minutes per time control",
-		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
-	  return FALSE;
-	}
-      } else {
-	increment = GetDlgItemInt(hDlg, OPT_TCInc, &ok, FALSE);
-	mps = appData.movesPerSession;
-	if (!ok || increment < 0) {
-	  MessageBox(hDlg, "Invalid increment",
-		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
-	  return FALSE;
-	}
-	GetDlgItemText(hDlg, OPT_TCTime2, buf, MSG_SIZ);
-	if (!ParseTimeControl(buf, increment, mps)) {
-	  MessageBox(hDlg, "Invalid initial time",
-		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
-	  return FALSE;
-	}
-      }
-      appData.timeControl = strdup(buf);
-      appData.movesPerSession = mps;
-      appData.timeIncrement = increment;
-      Reset(TRUE, TRUE);
-      EndDialog(hDlg, TRUE);
-      return TRUE;
-
-    case IDCANCEL:
-      EndDialog(hDlg, FALSE);
-      return TRUE;
-
-    default:
-      SetTimeControlEnables(hDlg);
-      break;
-    }
-    break;
-  }
-  return FALSE;
-}
-
-VOID
-TimeControlOptionsPopup(HWND hwnd)
-{
-  if (gameMode != BeginningOfGame) {
-    DisplayError("Changing time control during a game is not implemented", 0);
-  } else {
-    FARPROC lpProc = MakeProcInstance((FARPROC)TimeControl, hInst);
-    DialogBox(hInst, MAKEINTRESOURCE(DLG_TimeControl), hwnd, (DLGPROC) lpProc);
-    FreeProcInstance(lpProc);
-  }
-}
-
-
+/*
+ * woptions.c -- Options dialog box routines for WinBoard
+ * $Id: woptions.c,v 2.1 2003/10/27 19:21:02 mann Exp $
+ *
+ * Copyright 2000,2009 Free Software Foundation, Inc.
+ *
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "config.h"
+
+#include <windows.h>   /* required for all Windows applications */
+#include <stdio.h>
+#include <stdlib.h>
+#include <shlobj.h>    /* [AS] Requires NT 4.0 or Win95 */
+#include <ctype.h>
+
+#include "common.h"
+#include "winboard.h"
+#include "backend.h"
+#include "woptions.h"
+#include "defaults.h"
+#include "wedittags.h"
+#include <richedit.h>
+
+#if __GNUC__
+#include <errno.h>
+#include <string.h>
+#endif
+
+/* Imports from winboard.c */
+
+extern MyFont *font[NUM_SIZES][NUM_FONTS];
+extern HINSTANCE hInst;          /* current instance */
+extern HWND hwndMain;            /* root window*/
+extern BOOLEAN alwaysOnTop;
+extern RECT boardRect;
+extern COLORREF lightSquareColor, darkSquareColor, whitePieceColor, 
+  blackPieceColor, highlightSquareColor, premoveHighlightColor;
+extern HPALETTE hPal;
+extern BoardSize boardSize;
+extern COLORREF consoleBackgroundColor;
+extern MyColorizeAttribs colorizeAttribs[]; /* do I need the size? */
+extern MyTextAttribs textAttribs[];
+extern MySound sounds[];
+extern ColorClass currentColorClass;
+extern HWND hwndConsole;
+extern char *defaultTextAttribs[];
+extern HWND commentDialog;
+extern HWND moveHistoryDialog;
+extern char installDir[];
+extern HWND hCommPort;    /* currently open comm port */
+extern DCB dcb;
+extern BOOLEAN chessProgram;
+extern int startedFromPositionFile; /* [HGM] loadPos */
+
+/* types */
+
+typedef struct {
+  char *label;
+  unsigned value;
+} ComboData;
+
+typedef struct {
+  char *label;
+  char *name;
+} SoundComboData;
+
+/* module prototypes */
+
+LRESULT CALLBACK GeneralOptions(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK BoardOptions(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK NewVariant(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK IcsOptions(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK FontOptions(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK CommPortOptions(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK LoadOptions(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK SaveOptions(HWND, UINT, WPARAM, LPARAM);
+LRESULT CALLBACK TimeControl(HWND, UINT, WPARAM, LPARAM);
+VOID ChangeBoardSize(BoardSize newSize);
+VOID PaintSampleSquare(
+    HWND     hwnd, 
+    int      ctrlid, 
+    COLORREF squareColor, 
+    COLORREF pieceColor,
+    COLORREF squareOutlineColor,
+    COLORREF pieceDetailColor,
+    BOOL     isWhitePiece,
+    BOOL     isMono,
+    HBITMAP  pieces[3] 
+    );
+VOID PaintColorBlock(HWND hwnd, int ctrlid, COLORREF color);
+VOID SetBoardOptionEnables(HWND hDlg);
+BoardSize BoardOptionsWhichRadio(HWND hDlg);
+BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font);
+VOID UpdateSampleText(HWND hDlg, int id, MyColorizeAttribs *mca);
+LRESULT CALLBACK ColorizeTextDialog(HWND , UINT, WPARAM, LPARAM);
+VOID ColorizeTextPopup(HWND hwnd, ColorClass cc);
+VOID SetIcsOptionEnables(HWND hDlg);
+VOID SetSampleFontText(HWND hwnd, int id, const MyFont *mf);
+VOID CopyFont(MyFont *dest, const MyFont *src);
+void InitSoundComboData(SoundComboData *scd);
+void ResetSoundComboData(SoundComboData *scd);
+void InitSoundCombo(HWND hwndCombo, SoundComboData *scd);
+int SoundDialogWhichRadio(HWND hDlg);
+VOID SoundDialogSetEnables(HWND hDlg, int radio);
+char * SoundDialogGetName(HWND hDlg, int radio);
+void DisplaySelectedSound(HWND hDlg, HWND hCombo, const char *name);
+VOID ParseCommSettings(char *arg, DCB *dcb);
+VOID PrintCommSettings(FILE *f, char *name, DCB *dcb);
+void InitCombo(HANDLE hwndCombo, ComboData *cd);
+void SelectComboValue(HANDLE hwndCombo, ComboData *cd, unsigned value);
+VOID SetLoadOptionEnables(HWND hDlg);
+VOID SetSaveOptionEnables(HWND hDlg);
+VOID SetTimeControlEnables(HWND hDlg);
+void NewSettingEvent(int option, char *command, int value);
+
+/*---------------------------------------------------------------------------*\
+ *
+ * General Options Dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+
+
+LRESULT CALLBACK
+GeneralOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  static Boolean oldShowCoords;
+  static Boolean oldBlindfold;
+  static Boolean oldShowButtonBar;
+
+  switch (message) {
+  case WM_INITDIALOG: /* message: initialize dialog box */
+    oldShowCoords = appData.showCoords;
+    oldBlindfold  = appData.blindfold;
+    oldShowButtonBar = appData.showButtonBar;
+
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+
+    /* Initialize the dialog items */
+#define CHECK_BOX(x,y) CheckDlgButton(hDlg, (x), (BOOL)(y))
+
+    CHECK_BOX(OPT_AlwaysOnTop, alwaysOnTop);
+    CHECK_BOX(OPT_AlwaysQueen, appData.alwaysPromoteToQueen);
+    CHECK_BOX(OPT_AnimateDragging, appData.animateDragging);
+    CHECK_BOX(OPT_AnimateMoving, appData.animate);
+    CHECK_BOX(OPT_AutoFlag, appData.autoCallFlag);
+    CHECK_BOX(OPT_AutoFlipView, appData.autoFlipView);
+    CHECK_BOX(OPT_AutoRaiseBoard, appData.autoRaiseBoard);
+    CHECK_BOX(OPT_Blindfold, appData.blindfold);
+    CHECK_BOX(OPT_HighlightDragging, appData.highlightDragging);
+    CHECK_BOX(OPT_HighlightLastMove, appData.highlightLastMove);
+    CHECK_BOX(OPT_PeriodicUpdates, appData.periodicUpdates);
+    CHECK_BOX(OPT_PonderNextMove, appData.ponderNextMove);
+    CHECK_BOX(OPT_PopupExitMessage, appData.popupExitMessage);
+    CHECK_BOX(OPT_PopupMoveErrors, appData.popupMoveErrors);
+    CHECK_BOX(OPT_ShowButtonBar, appData.showButtonBar);
+    CHECK_BOX(OPT_ShowCoordinates, appData.showCoords);
+    CHECK_BOX(OPT_ShowThinking, appData.showThinking);
+    CHECK_BOX(OPT_TestLegality, appData.testLegality);
+    CHECK_BOX(OPT_HideThinkFromHuman, appData.hideThinkingFromHuman);
+    CHECK_BOX(OPT_SaveExtPGN, appData.saveExtendedInfoInPGN);
+    CHECK_BOX(OPT_ExtraInfoInMoveHistory, appData.showEvalInMoveHistory);
+    CHECK_BOX(OPT_HighlightMoveArrow, appData.highlightMoveWithArrow);
+
+#undef CHECK_BOX
+
+    EnableWindow(GetDlgItem(hDlg, OPT_AutoFlag),
+		 appData.icsActive || !appData.noChessProgram);
+    EnableWindow(GetDlgItem(hDlg, OPT_AutoFlipView),
+		 appData.icsActive || !appData.noChessProgram);
+    EnableWindow(GetDlgItem(hDlg, OPT_PonderNextMove),
+		 !appData.noChessProgram);
+    EnableWindow(GetDlgItem(hDlg, OPT_PeriodicUpdates), 
+		 !appData.noChessProgram && !appData.icsActive);
+    EnableWindow(GetDlgItem(hDlg, OPT_ShowThinking), 
+		 !appData.noChessProgram);
+    return TRUE;
+
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      /* Read changed options from the dialog box */
+      
+#define IS_CHECKED(x) (Boolean)IsDlgButtonChecked(hDlg, (x))
+
+      alwaysOnTop                  = IS_CHECKED(OPT_AlwaysOnTop);
+      appData.alwaysPromoteToQueen = IS_CHECKED(OPT_AlwaysQueen);
+      appData.animateDragging      = IS_CHECKED(OPT_AnimateDragging);
+      appData.animate              = IS_CHECKED(OPT_AnimateMoving);
+      appData.autoCallFlag         = IS_CHECKED(OPT_AutoFlag);
+      appData.autoFlipView         = IS_CHECKED(OPT_AutoFlipView);
+      appData.autoRaiseBoard       = IS_CHECKED(OPT_AutoRaiseBoard);
+      appData.blindfold            = IS_CHECKED(OPT_Blindfold);
+      appData.highlightDragging    = IS_CHECKED(OPT_HighlightDragging);
+      appData.highlightLastMove    = IS_CHECKED(OPT_HighlightLastMove);
+      PeriodicUpdatesEvent(          IS_CHECKED(OPT_PeriodicUpdates));
+      PonderNextMoveEvent(           IS_CHECKED(OPT_PonderNextMove));
+      appData.popupExitMessage     = IS_CHECKED(OPT_PopupExitMessage);
+      appData.popupMoveErrors      = IS_CHECKED(OPT_PopupMoveErrors);
+      appData.showButtonBar        = IS_CHECKED(OPT_ShowButtonBar);
+      appData.showCoords           = IS_CHECKED(OPT_ShowCoordinates);
+      // [HGM] thinking: next three moved up
+      appData.saveExtendedInfoInPGN= IS_CHECKED(OPT_SaveExtPGN);
+      appData.hideThinkingFromHuman= IS_CHECKED(OPT_HideThinkFromHuman);
+      appData.showEvalInMoveHistory= IS_CHECKED(OPT_ExtraInfoInMoveHistory);
+#if 0
+      ShowThinkingEvent(             IS_CHECKED(OPT_ShowThinking));
+#else
+      appData.showThinking         = IS_CHECKED(OPT_ShowThinking);
+      ShowThinkingEvent(); // [HGM] thinking: tests four options
+#endif
+      appData.testLegality         = IS_CHECKED(OPT_TestLegality);
+      appData.highlightMoveWithArrow=IS_CHECKED(OPT_HighlightMoveArrow);
+
+#undef IS_CHECKED
+
+      SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,
+		   0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
+#if AOT_CONSOLE
+      if (hwndConsole) {
+	SetWindowPos(hwndConsole, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,
+		     0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
+      }
+#endif
+      if (!appData.highlightLastMove) {
+	ClearHighlights();
+	DrawPosition(FALSE, NULL);
+      }
+      /* 
+       * for some reason the redraw seems smoother when we invalidate
+       * the board rect after the call to EndDialog()
+       */
+      EndDialog(hDlg, TRUE);
+
+      if (oldShowButtonBar != appData.showButtonBar) {
+	InitDrawingSizes(boardSize, 0);
+      } else if ((oldShowCoords != appData.showCoords) || 
+		 (oldBlindfold != appData.blindfold)) {
+	InvalidateRect(hwndMain, &boardRect, FALSE);
+      }
+
+      return TRUE;
+
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    }
+    break;
+  }
+  return FALSE;
+}
+
+VOID 
+GeneralOptionsPopup(HWND hwnd)
+{
+  FARPROC lpProc;
+
+  lpProc = MakeProcInstance((FARPROC)GeneralOptionsDialog, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_GeneralOptions), hwnd,
+	    (DLGPROC) lpProc);
+  FreeProcInstance(lpProc);
+}
+/*---------------------------------------------------------------------------*\
+ *
+ * Board Options Dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+
+const int SAMPLE_SQ_SIZE = 54;
+
+VOID
+ChangeBoardSize(BoardSize newSize)
+{
+  if (newSize != boardSize) {
+    boardSize = newSize;
+    InitDrawingSizes(boardSize, 0);
+  }
+}
+
+VOID
+PaintSampleSquare(
+    HWND     hwnd, 
+    int      ctrlid, 
+    COLORREF squareColor, 
+    COLORREF pieceColor,
+    COLORREF squareOutlineColor,
+    COLORREF pieceDetailColor,
+    BOOL     isWhitePiece,
+    BOOL     isMono,
+    HBITMAP  pieces[3] 
+    )
+{
+  HBRUSH  brushSquare;
+  HBRUSH  brushSquareOutline;
+  HBRUSH  brushPiece;
+  HBRUSH  brushPieceDetail;
+  HBRUSH  oldBrushPiece = NULL;
+  HBRUSH  oldBrushSquare;
+  HBITMAP oldBitmapMem;
+  HBITMAP oldBitmapTemp;
+  HBITMAP bufferBitmap;
+  RECT    rect;
+  HDC     hdcScreen, hdcMem, hdcTemp;
+  HPEN    pen, oldPen;
+  HWND    hCtrl = GetDlgItem(hwnd, ctrlid);
+  int     x, y;
+
+  const int SOLID   = 0;
+  const int WHITE   = 1;
+  const int OUTLINE = 2;
+  const int BORDER  = 4;
+
+  InvalidateRect(hCtrl, NULL, TRUE);
+  UpdateWindow(hCtrl);
+  GetClientRect(hCtrl, &rect);
+  x = rect.left + (BORDER / 2);
+  y = rect.top  + (BORDER / 2);
+  hdcScreen = GetDC(hCtrl);
+  hdcMem  = CreateCompatibleDC(hdcScreen);
+  hdcTemp = CreateCompatibleDC(hdcScreen);
+
+  bufferBitmap = CreateCompatibleBitmap(hdcScreen, rect.right-rect.left+1,
+					rect.bottom-rect.top+1);
+  oldBitmapMem = SelectObject(hdcMem, bufferBitmap);
+  if (!isMono) {
+    SelectPalette(hdcMem, hPal, FALSE);
+  }
+  brushSquare         = CreateSolidBrush(squareColor);
+  brushSquareOutline  = CreateSolidBrush(squareOutlineColor);
+  brushPiece          = CreateSolidBrush(pieceColor);
+  brushPieceDetail    = CreateSolidBrush(pieceDetailColor);
+
+  /* 
+   * first draw the rectangle 
+   */
+  pen      = CreatePen(PS_SOLID, BORDER, squareOutlineColor);
+  oldPen   = (HPEN)  SelectObject(hdcMem, pen);
+  oldBrushSquare = (HBRUSH)SelectObject(hdcMem, brushSquare);
+  Rectangle(hdcMem, rect.left, rect.top, rect.right, rect.bottom);
+
+  /* 
+   * now draw the piece
+   */
+  if (isMono) {
+    oldBitmapTemp = SelectObject(hdcTemp, pieces[OUTLINE]);
+    BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, hdcTemp, 0, 0,
+	   isWhitePiece ? SRCCOPY : NOTSRCCOPY);
+    SelectObject(hdcTemp, oldBitmapTemp);
+  } else {
+    if (isWhitePiece) {
+      oldBitmapTemp = SelectObject(hdcTemp, pieces[WHITE]);
+      oldBrushPiece = SelectObject(hdcMem, brushPiece);
+      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
+	     hdcTemp, 0, 0, 0x00B8074A);
+#if 0
+      /* Use pieceDetailColor for outline of white pieces */
+      SelectObject(hdcTemp, pieces[OUTLINE]);
+      SelectObject(hdcMem, brushPieceDetail);
+      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
+	     hdcTemp, 0, 0, 0x00B8074A);
+#else
+      /* Use black for outline of white pieces */
+      SelectObject(hdcTemp, pieces[OUTLINE]);
+      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
+	     hdcTemp, 0, 0, SRCAND);
+#endif
+    } else {
+#if 0
+      /* Use pieceDetailColor for details of black pieces */
+      /* Requires filled-in solid bitmaps (BLACK_PIECE class); the
+	 WHITE_PIECE ones aren't always the right shape. */
+      oldBitmapTemp = SelectObject(hdcTemp, pieces[BLACK]);
+      oldBrushPiece = SelectObject(hdcMem, brushPieceDetail);
+      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
+	     hdcTemp, 0, 0, 0x00B8074A);
+      SelectObject(hdcTemp, pieces[SOLID]);
+      SelectObject(hdcMem, brushPiece);
+      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
+	     hdcTemp, 0, 0, 0x00B8074A);
+#else
+      /* Use square color for details of black pieces */
+      oldBitmapTemp = SelectObject(hdcTemp, pieces[SOLID]);
+      oldBrushPiece = SelectObject(hdcMem, brushPiece);
+      BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, 
+	     hdcTemp, 0, 0, 0x00B8074A);
+#endif
+    }
+    SelectObject(hdcMem, oldBrushPiece);
+    SelectObject(hdcTemp, oldBitmapTemp);
+  }
+  /* 
+   * copy the memory dc to the screen
+   */
+  SelectObject(hdcMem, bufferBitmap);
+  BitBlt(hdcScreen, rect.left, rect.top,
+	 rect.right - rect.left,
+	 rect.bottom - rect.top,
+	 hdcMem, rect.left, rect.top, SRCCOPY);
+  SelectObject(hdcMem, oldBitmapMem);
+  /* 
+   * clean up
+   */
+  SelectObject(hdcMem, oldBrushPiece);
+  SelectObject(hdcMem, oldPen);
+  DeleteObject(brushPiece);
+  DeleteObject(brushPieceDetail);
+  DeleteObject(brushSquare);
+  DeleteObject(brushSquareOutline);
+  DeleteObject(pen);
+  DeleteDC(hdcTemp);
+  DeleteDC(hdcMem);
+  ReleaseDC(hCtrl, hdcScreen);
+}
+
+
+VOID
+PaintColorBlock(HWND hwnd, int ctrlid, COLORREF color)
+{
+  HDC    hdc;
+  HBRUSH brush, oldBrush;
+  RECT   rect;
+  HWND   hCtrl = GetDlgItem(hwnd, ctrlid);
+
+  hdc = GetDC(hCtrl);
+  InvalidateRect(hCtrl, NULL, TRUE);
+  UpdateWindow(hCtrl);
+  GetClientRect(hCtrl, &rect);
+  brush = CreateSolidBrush(color);
+  oldBrush = (HBRUSH)SelectObject(hdc, brush);
+  Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom);
+  SelectObject(hdc, oldBrush);
+  DeleteObject(brush);
+  ReleaseDC(hCtrl, hdc);
+}
+
+
+VOID
+SetBoardOptionEnables(HWND hDlg)
+{
+  if (IsDlgButtonChecked(hDlg, OPT_Monochrome)) {
+    ShowWindow(GetDlgItem(hDlg, OPT_LightSquareColor), SW_HIDE);
+    ShowWindow(GetDlgItem(hDlg, OPT_DarkSquareColor), SW_HIDE);
+    ShowWindow(GetDlgItem(hDlg, OPT_WhitePieceColor), SW_HIDE);
+    ShowWindow(GetDlgItem(hDlg, OPT_BlackPieceColor), SW_HIDE);
+
+    EnableWindow(GetDlgItem(hDlg, OPT_ChooseLightSquareColor), FALSE);
+    EnableWindow(GetDlgItem(hDlg, OPT_ChooseDarkSquareColor), FALSE);
+    EnableWindow(GetDlgItem(hDlg, OPT_ChooseWhitePieceColor), FALSE);
+    EnableWindow(GetDlgItem(hDlg, OPT_ChooseBlackPieceColor), FALSE);
+  } else {
+    ShowWindow(GetDlgItem(hDlg, OPT_LightSquareColor), SW_SHOW);
+    ShowWindow(GetDlgItem(hDlg, OPT_DarkSquareColor), SW_SHOW);
+    ShowWindow(GetDlgItem(hDlg, OPT_WhitePieceColor), SW_SHOW);
+    ShowWindow(GetDlgItem(hDlg, OPT_BlackPieceColor), SW_SHOW);
+
+    EnableWindow(GetDlgItem(hDlg, OPT_ChooseLightSquareColor), TRUE);
+    EnableWindow(GetDlgItem(hDlg, OPT_ChooseDarkSquareColor), TRUE);
+    EnableWindow(GetDlgItem(hDlg, OPT_ChooseWhitePieceColor), TRUE);
+    EnableWindow(GetDlgItem(hDlg, OPT_ChooseBlackPieceColor), TRUE);
+  }
+}
+
+BoardSize 
+BoardOptionsWhichRadio(HWND hDlg)
+{
+  return (IsDlgButtonChecked(hDlg, OPT_SizeTiny) ? SizeTiny :
+         (IsDlgButtonChecked(hDlg, OPT_SizeTeeny) ? SizeTeeny :
+         (IsDlgButtonChecked(hDlg, OPT_SizeDinky) ? SizeDinky :
+         (IsDlgButtonChecked(hDlg, OPT_SizePetite) ? SizePetite :
+         (IsDlgButtonChecked(hDlg, OPT_SizeSlim) ? SizeSlim :
+         (IsDlgButtonChecked(hDlg, OPT_SizeSmall) ? SizeSmall :
+         (IsDlgButtonChecked(hDlg, OPT_SizeMediocre) ? SizeMediocre :
+         (IsDlgButtonChecked(hDlg, OPT_SizeMiddling) ? SizeMiddling :
+         (IsDlgButtonChecked(hDlg, OPT_SizeAverage) ? SizeAverage :
+         (IsDlgButtonChecked(hDlg, OPT_SizeModerate) ? SizeModerate :
+         (IsDlgButtonChecked(hDlg, OPT_SizeMedium) ? SizeMedium :
+         (IsDlgButtonChecked(hDlg, OPT_SizeBulky) ? SizeBulky :
+         (IsDlgButtonChecked(hDlg, OPT_SizeLarge) ? SizeLarge :
+         (IsDlgButtonChecked(hDlg, OPT_SizeBig) ? SizeBig :
+         (IsDlgButtonChecked(hDlg, OPT_SizeHuge) ? SizeHuge :
+         (IsDlgButtonChecked(hDlg, OPT_SizeGiant) ? SizeGiant :
+         (IsDlgButtonChecked(hDlg, OPT_SizeColossal) ? SizeColossal :
+          SizeTitanic )))))))))))))))));
+}
+
+LRESULT CALLBACK
+BoardOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  static Boolean  mono, white, flip;
+  static BoardSize size;
+  static COLORREF lsc, dsc, wpc, bpc, hsc, phc;
+  static HBITMAP pieces[3];
+
+  switch (message) {
+  case WM_INITDIALOG: /* message: initialize dialog box */
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+    /* Initialize the dialog items */
+    switch (boardSize) {
+    case SizeTiny:
+      CheckDlgButton(hDlg, OPT_SizeTiny, TRUE);
+      break;
+    case SizeTeeny:
+      CheckDlgButton(hDlg, OPT_SizeTeeny, TRUE);
+      break;
+    case SizeDinky:
+      CheckDlgButton(hDlg, OPT_SizeDinky, TRUE);
+      break;
+    case SizePetite:
+      CheckDlgButton(hDlg, OPT_SizePetite, TRUE);
+      break;
+    case SizeSlim:
+      CheckDlgButton(hDlg, OPT_SizeSlim, TRUE);
+      break;
+    case SizeSmall:
+      CheckDlgButton(hDlg, OPT_SizeSmall, TRUE);
+      break;
+    case SizeMediocre:
+      CheckDlgButton(hDlg, OPT_SizeMediocre, TRUE);
+      break;
+    case SizeMiddling:
+      CheckDlgButton(hDlg, OPT_SizeMiddling, TRUE);
+      break;
+    case SizeAverage:
+      CheckDlgButton(hDlg, OPT_SizeAverage, TRUE);
+      break;
+    case SizeModerate:
+      CheckDlgButton(hDlg, OPT_SizeModerate, TRUE);
+      break;
+    case SizeMedium:
+      CheckDlgButton(hDlg, OPT_SizeMedium, TRUE);
+      break;
+    case SizeBulky:
+      CheckDlgButton(hDlg, OPT_SizeBulky, TRUE);
+      break;
+    case SizeLarge:
+      CheckDlgButton(hDlg, OPT_SizeLarge, TRUE);
+      break;
+    case SizeBig:
+      CheckDlgButton(hDlg, OPT_SizeBig, TRUE);
+      break;
+    case SizeHuge:
+      CheckDlgButton(hDlg, OPT_SizeHuge, TRUE);
+      break;
+    case SizeGiant:
+      CheckDlgButton(hDlg, OPT_SizeGiant, TRUE);
+      break;
+    case SizeColossal:
+      CheckDlgButton(hDlg, OPT_SizeColossal, TRUE);
+      break;
+    case SizeTitanic:
+      CheckDlgButton(hDlg, OPT_SizeTitanic, TRUE);
+    default: ; // should not happen, but suppresses warning on pedantic compilers
+    }
+
+    if (appData.monoMode)
+      CheckDlgButton(hDlg, OPT_Monochrome, TRUE);
+
+    if (appData.allWhite)
+      CheckDlgButton(hDlg, OPT_AllWhite, TRUE);
+
+    if (appData.upsideDown)
+      CheckDlgButton(hDlg, OPT_UpsideDown, TRUE);
+
+    pieces[0] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "s");
+    pieces[1] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "w");
+    pieces[2] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "o");
+	
+    lsc = lightSquareColor;
+    dsc = darkSquareColor;
+    wpc = whitePieceColor;
+    bpc = blackPieceColor;
+    hsc = highlightSquareColor;
+    phc = premoveHighlightColor;
+    mono = appData.monoMode;
+    white= appData.allWhite;
+    flip = appData.upsideDown;
+    size = boardSize;
+
+    SetBoardOptionEnables(hDlg);
+    return TRUE;
+
+  case WM_PAINT:
+    PaintColorBlock(hDlg, OPT_LightSquareColor, lsc);
+    PaintColorBlock(hDlg, OPT_DarkSquareColor,  dsc);
+    PaintColorBlock(hDlg, OPT_WhitePieceColor,  wpc);
+    PaintColorBlock(hDlg, OPT_BlackPieceColor,  bpc);
+    PaintColorBlock(hDlg, OPT_HighlightSquareColor, hsc);
+    PaintColorBlock(hDlg, OPT_PremoveHighlightColor, phc);
+    PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc,
+	TRUE, mono, pieces);
+    PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc,
+	FALSE, mono, pieces);
+
+    return FALSE;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      /* 
+       * if we call EndDialog() after the call to ChangeBoardSize(),
+       * then ChangeBoardSize() does not take effect, although the new
+       * boardSize is saved. Go figure...
+       */
+      EndDialog(hDlg, TRUE);
+
+      size = BoardOptionsWhichRadio(hDlg);
+
+      /*
+       * did any settings change?
+       */
+      if (size != boardSize) {
+	ChangeBoardSize(size);
+      }
+
+      if ((mono != appData.monoMode) ||
+	  (lsc  != lightSquareColor) ||
+	  (dsc  != darkSquareColor) ||
+	  (wpc  != whitePieceColor) ||
+	  (bpc  != blackPieceColor) ||
+	  (hsc  != highlightSquareColor) ||
+          (flip != appData.upsideDown) ||
+          (white != appData.allWhite) ||
+	  (phc  != premoveHighlightColor)) {
+
+	  lightSquareColor = lsc;
+	  darkSquareColor = dsc;
+	  whitePieceColor = wpc;
+	  blackPieceColor = bpc;
+	  highlightSquareColor = hsc;
+	  premoveHighlightColor = phc;
+	  appData.monoMode = mono;
+          appData.allWhite = white;
+          appData.upsideDown = flip;
+
+	  InitDrawingColors();
+	  InitDrawingSizes(boardSize, 0);
+	  InvalidateRect(hwndMain, &boardRect, FALSE);
+      }
+      DeleteObject(pieces[0]);
+      DeleteObject(pieces[1]);
+      DeleteObject(pieces[2]);
+      return TRUE;
+
+    case IDCANCEL:
+      DeleteObject(pieces[0]);
+      DeleteObject(pieces[1]);
+      DeleteObject(pieces[2]);
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    case OPT_ChooseLightSquareColor:
+      if (ChangeColor(hDlg, &lsc)) 
+	PaintColorBlock(hDlg, OPT_LightSquareColor, lsc);
+	PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc,
+	    TRUE, mono, pieces);
+      break;
+
+    case OPT_ChooseDarkSquareColor:
+      if (ChangeColor(hDlg, &dsc)) 
+	PaintColorBlock(hDlg, OPT_DarkSquareColor, dsc);
+	PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc,
+	    FALSE, mono, pieces);
+      break;
+
+    case OPT_ChooseWhitePieceColor:
+      if (ChangeColor(hDlg, &wpc)) 
+	PaintColorBlock(hDlg, OPT_WhitePieceColor, wpc);
+	PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc,
+	    TRUE, mono, pieces);
+      break;
+
+    case OPT_ChooseBlackPieceColor:
+      if (ChangeColor(hDlg, &bpc)) 
+	PaintColorBlock(hDlg, OPT_BlackPieceColor, bpc);
+	PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc,
+	    FALSE, mono, pieces);
+      break;
+
+    case OPT_ChooseHighlightSquareColor:
+      if (ChangeColor(hDlg, &hsc)) 
+	PaintColorBlock(hDlg, OPT_HighlightSquareColor, hsc);
+	PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc,
+	    TRUE, mono, pieces);
+      break;
+
+    case OPT_ChoosePremoveHighlightColor:
+      if (ChangeColor(hDlg, &phc)) 
+	PaintColorBlock(hDlg, OPT_PremoveHighlightColor, phc);
+	PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc,
+	    FALSE, mono, pieces);
+      break;
+
+    case OPT_DefaultBoardColors:
+      lsc = ParseColorName(LIGHT_SQUARE_COLOR);
+      dsc = ParseColorName(DARK_SQUARE_COLOR);
+      wpc = ParseColorName(WHITE_PIECE_COLOR);
+      bpc = ParseColorName(BLACK_PIECE_COLOR);
+      hsc = ParseColorName(HIGHLIGHT_SQUARE_COLOR);
+      phc = ParseColorName(PREMOVE_HIGHLIGHT_COLOR);
+      mono = FALSE;
+      white= FALSE;
+      flip = FALSE;
+      CheckDlgButton(hDlg, OPT_Monochrome, FALSE);
+      CheckDlgButton(hDlg, OPT_AllWhite,   FALSE);
+      CheckDlgButton(hDlg, OPT_UpsideDown, FALSE);
+      PaintColorBlock(hDlg, OPT_LightSquareColor, lsc);
+      PaintColorBlock(hDlg, OPT_DarkSquareColor,  dsc);
+      PaintColorBlock(hDlg, OPT_WhitePieceColor,  wpc);
+      PaintColorBlock(hDlg, OPT_BlackPieceColor,  bpc);
+      PaintColorBlock(hDlg, OPT_HighlightSquareColor, hsc);
+      PaintColorBlock(hDlg, OPT_PremoveHighlightColor, phc);
+      SetBoardOptionEnables(hDlg);
+      PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc,
+	  TRUE, mono, pieces);
+      PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc,
+	  FALSE, mono, pieces);
+      break;
+
+    case OPT_Monochrome:
+      mono = !mono;
+      SetBoardOptionEnables(hDlg);
+      break;
+
+    case OPT_AllWhite:
+      white = !white;
+      SetBoardOptionEnables(hDlg);
+      break;
+
+    case OPT_UpsideDown:
+      flip = !flip;
+      SetBoardOptionEnables(hDlg);
+      break;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+
+VOID
+BoardOptionsPopup(HWND hwnd)
+{
+  FARPROC lpProc = MakeProcInstance((FARPROC)BoardOptionsDialog, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_BoardOptions), hwnd,
+	  (DLGPROC) lpProc);
+  FreeProcInstance(lpProc);
+}
+
+VariantClass
+VariantWhichRadio(HWND hDlg)
+{
+  return (IsDlgButtonChecked(hDlg, OPT_VariantFairy) ? VariantFairy :
+         (IsDlgButtonChecked(hDlg, OPT_VariantGothic) ? VariantGothic :
+         (IsDlgButtonChecked(hDlg, OPT_VariantCrazyhouse) ? VariantCrazyhouse :
+         (IsDlgButtonChecked(hDlg, OPT_VariantBughouse) ? VariantBughouse :
+         (IsDlgButtonChecked(hDlg, OPT_VariantCourier) ? VariantCourier :
+         (IsDlgButtonChecked(hDlg, OPT_VariantShatranj) ? VariantShatranj :
+         (IsDlgButtonChecked(hDlg, OPT_VariantShogi) ? VariantShogi :
+         (IsDlgButtonChecked(hDlg, OPT_VariantXiangqi) ? VariantXiangqi :
+         (IsDlgButtonChecked(hDlg, OPT_VariantCapablanca) ? VariantCapablanca :
+         (IsDlgButtonChecked(hDlg, OPT_VariantTwoKings) ? VariantTwoKings :
+         (IsDlgButtonChecked(hDlg, OPT_VariantKnightmate) ? VariantKnightmate :
+         (IsDlgButtonChecked(hDlg, OPT_VariantLosers) ? VariantLosers :
+         (IsDlgButtonChecked(hDlg, OPT_VariantSuicide) ? VariantSuicide :
+         (IsDlgButtonChecked(hDlg, OPT_VariantAtomic) ? VariantAtomic :
+         (IsDlgButtonChecked(hDlg, OPT_VariantShatranj) ? VariantShatranj :
+         (IsDlgButtonChecked(hDlg, OPT_VariantFRC) ? VariantFischeRandom :
+         (IsDlgButtonChecked(hDlg, OPT_VariantCylinder) ? VariantCylinder :
+         (IsDlgButtonChecked(hDlg, OPT_VariantFalcon) ? VariantFalcon :
+         (IsDlgButtonChecked(hDlg, OPT_VariantCRC) ? VariantCapaRandom :
+         (IsDlgButtonChecked(hDlg, OPT_VariantSuper) ? VariantSuper :
+         (IsDlgButtonChecked(hDlg, OPT_VariantBerolina) ? VariantBerolina :
+         (IsDlgButtonChecked(hDlg, OPT_VariantJanus) ? VariantJanus :
+         (IsDlgButtonChecked(hDlg, OPT_VariantWildcastle) ? VariantWildCastle :
+         (IsDlgButtonChecked(hDlg, OPT_VariantNocastle) ? VariantNoCastle :
+         (IsDlgButtonChecked(hDlg, OPT_Variant3Check) ? Variant3Check :
+         (IsDlgButtonChecked(hDlg, OPT_VariantGreat) ? VariantGreat :
+         (IsDlgButtonChecked(hDlg, OPT_VariantGiveaway) ? VariantGiveaway :
+         (IsDlgButtonChecked(hDlg, OPT_VariantTwilight) ? VariantTwilight :
+          VariantNormal ))))))))))))))))))))))))))));
+}
+
+LRESULT CALLBACK
+NewVariantDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  static VariantClass v;
+  static int n1_ok, n2_ok, n3_ok;
+
+  switch (message) {
+  case WM_INITDIALOG: /* message: initialize dialog box */
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+    /* Initialize the dialog items */
+    switch (gameInfo.variant) {
+    case VariantNormal:
+      CheckDlgButton(hDlg, OPT_VariantNormal, TRUE);
+      break;
+    case VariantCrazyhouse:
+      CheckDlgButton(hDlg, OPT_VariantCrazyhouse, TRUE);
+      break;
+    case VariantBughouse:
+      CheckDlgButton(hDlg, OPT_VariantBughouse, TRUE);
+      break;
+    case VariantShogi:
+      CheckDlgButton(hDlg, OPT_VariantShogi, TRUE);
+      break;
+    case VariantXiangqi:
+      CheckDlgButton(hDlg, OPT_VariantXiangqi, TRUE);
+      break;
+    case VariantCapablanca:
+      CheckDlgButton(hDlg, OPT_VariantCapablanca, TRUE);
+      break;
+    case VariantGothic:
+      CheckDlgButton(hDlg, OPT_VariantGothic, TRUE);
+      break;
+    case VariantCourier:
+      CheckDlgButton(hDlg, OPT_VariantCourier, TRUE);
+      break;
+    case VariantKnightmate:
+      CheckDlgButton(hDlg, OPT_VariantKnightmate, TRUE);
+      break;
+    case VariantTwoKings:
+      CheckDlgButton(hDlg, OPT_VariantTwoKings, TRUE);
+      break;
+    case VariantFairy:
+      CheckDlgButton(hDlg, OPT_VariantFairy, TRUE);
+      break;
+    case VariantAtomic:
+      CheckDlgButton(hDlg, OPT_VariantAtomic, TRUE);
+      break;
+    case VariantSuicide:
+      CheckDlgButton(hDlg, OPT_VariantSuicide, TRUE);
+      break;
+    case VariantLosers:
+      CheckDlgButton(hDlg, OPT_VariantLosers, TRUE);
+      break;
+    case VariantShatranj:
+      CheckDlgButton(hDlg, OPT_VariantShatranj, TRUE);
+      break;
+    case VariantFischeRandom:
+      CheckDlgButton(hDlg, OPT_VariantFRC, TRUE);
+      break;
+    case VariantCapaRandom:
+      CheckDlgButton(hDlg, OPT_VariantCRC, TRUE);
+      break;
+    case VariantFalcon:
+      CheckDlgButton(hDlg, OPT_VariantFalcon, TRUE);
+      break;
+    case VariantCylinder:
+      CheckDlgButton(hDlg, OPT_VariantCylinder, TRUE);
+      break;
+    case Variant3Check:
+      CheckDlgButton(hDlg, OPT_Variant3Check, TRUE);
+      break;
+    case VariantSuper:
+      CheckDlgButton(hDlg, OPT_VariantSuper, TRUE);
+      break;
+    case VariantBerolina:
+      CheckDlgButton(hDlg, OPT_VariantBerolina, TRUE);
+      break;
+    case VariantJanus:
+      CheckDlgButton(hDlg, OPT_VariantJanus, TRUE);
+      break;
+    case VariantWildCastle:
+      CheckDlgButton(hDlg, OPT_VariantWildcastle, TRUE);
+      break;
+    case VariantNoCastle:
+      CheckDlgButton(hDlg, OPT_VariantNocastle, TRUE);
+      break;
+    case VariantGreat:
+      CheckDlgButton(hDlg, OPT_VariantGreat, TRUE);
+      break;
+    case VariantGiveaway:
+      CheckDlgButton(hDlg, OPT_VariantGiveaway, TRUE);
+      break;
+    case VariantTwilight:
+      CheckDlgButton(hDlg, OPT_VariantTwilight, TRUE);
+      break;
+    default: ;
+    }
+
+    SetDlgItemInt( hDlg, IDC_Files, -1, TRUE );
+    SendDlgItemMessage( hDlg, IDC_Files, EM_SETSEL, 0, -1 );
+
+    SetDlgItemInt( hDlg, IDC_Ranks, -1, TRUE );
+    SendDlgItemMessage( hDlg, IDC_Ranks, EM_SETSEL, 0, -1 );
+
+    SetDlgItemInt( hDlg, IDC_Holdings, -1, TRUE );
+    SendDlgItemMessage( hDlg, IDC_Ranks, EM_SETSEL, 0, -1 );
+
+    n1_ok = n2_ok = n3_ok = FALSE;
+
+    return TRUE;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      /* 
+       * if we call EndDialog() after the call to ChangeBoardSize(),
+       * then ChangeBoardSize() does not take effect, although the new
+       * boardSize is saved. Go figure...
+       */
+      EndDialog(hDlg, TRUE);
+
+      v = VariantWhichRadio(hDlg);
+      if(!appData.noChessProgram) { char *name = VariantName(v), buf[MSG_SIZ];
+	if (first.protocolVersion > 1 && StrStr(first.variants, name) == NULL) {
+	    /* [HGM] in protocol 2 we check if variant is suported by engine */
+	    sprintf(buf, "Variant %s not supported by %s", name, first.tidy);
+	    DisplayError(buf, 0);
+	    return TRUE; /* treat as "Cancel" if first engine does not support it */
+	} else
+	if (second.initDone && second.protocolVersion > 1 && StrStr(second.variants, name) == NULL) {
+	    sprintf(buf, "Warning: second engine (%s) does not support this!", second.tidy);
+	    DisplayError(buf, 0);   /* use of second engine is optional; only warn user */
+	}
+      }
+
+      gameInfo.variant = v;
+      appData.variant = VariantName(v);
+
+      appData.NrFiles = (int) GetDlgItemInt(hDlg, IDC_Files, NULL, FALSE );
+      appData.NrRanks = (int) GetDlgItemInt(hDlg, IDC_Ranks, NULL, FALSE );
+      appData.holdingsSize = (int) GetDlgItemInt(hDlg, IDC_Holdings, NULL, FALSE );
+
+      if(!n1_ok) appData.NrFiles = -1;
+      if(!n2_ok) appData.NrRanks = -1;
+      if(!n3_ok) appData.holdingsSize = -1;
+
+      shuffleOpenings = FALSE; /* [HGM] shuffle: possible shuffle reset when we switch */
+      startedFromPositionFile = FALSE; /* [HGM] loadPos: no longer valid in new variant */
+      appData.pieceToCharTable = NULL;
+      Reset(TRUE, TRUE);
+
+      return TRUE;
+
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    case IDC_Ranks:
+    case IDC_Files:
+    case IDC_Holdings:
+        if( HIWORD(wParam) == EN_CHANGE ) {
+
+            GetDlgItemInt(hDlg, IDC_Files, &n1_ok, FALSE );
+            GetDlgItemInt(hDlg, IDC_Ranks, &n2_ok, FALSE );
+            GetDlgItemInt(hDlg, IDC_Holdings, &n3_ok, FALSE );
+
+            /*EnableWindow( GetDlgItem(hDlg, IDOK), n1_ok && n2_ok && n3_ok ? TRUE : FALSE );*/
+        }
+        return TRUE;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+
+VOID
+NewVariantPopup(HWND hwnd)
+{
+  FARPROC lpProc = MakeProcInstance((FARPROC)NewVariantDialog, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_NewVariant), hwnd,
+	  (DLGPROC) lpProc);
+  FreeProcInstance(lpProc);
+}
+
+/*---------------------------------------------------------------------------*\
+ *
+ * ICS Options Dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+
+BOOL APIENTRY
+MyCreateFont(HWND hwnd, MyFont *font)
+{
+  CHOOSEFONT cf;
+  HFONT hf;
+
+  /* Initialize members of the CHOOSEFONT structure. */
+  cf.lStructSize = sizeof(CHOOSEFONT);
+  cf.hwndOwner = hwnd;
+  cf.hDC = (HDC)NULL;
+  cf.lpLogFont = &font->lf;
+  cf.iPointSize = 0;
+  cf.Flags = CF_SCREENFONTS|/*CF_ANSIONLY|*/CF_INITTOLOGFONTSTRUCT;
+  cf.rgbColors = RGB(0,0,0);
+  cf.lCustData = 0L;
+  cf.lpfnHook = (LPCFHOOKPROC)NULL;
+  cf.lpTemplateName = (LPSTR)NULL;
+  cf.hInstance = (HINSTANCE) NULL;
+  cf.lpszStyle = (LPSTR)NULL;
+  cf.nFontType = SCREEN_FONTTYPE;
+  cf.nSizeMin = 0;
+  cf.nSizeMax = 0;
+
+  /* Display the CHOOSEFONT common-dialog box. */
+  if (!ChooseFont(&cf)) {
+    return FALSE;
+  }
+
+  /* Create a logical font based on the user's   */
+  /* selection and return a handle identifying   */
+  /* that font. */
+  hf = CreateFontIndirect(cf.lpLogFont);
+  if (hf == NULL) {
+    return FALSE;
+  }
+
+  font->hf = hf;
+  font->mfp.pointSize = (float) (cf.iPointSize / 10.0);
+  font->mfp.bold = (font->lf.lfWeight >= FW_BOLD);
+  font->mfp.italic = font->lf.lfItalic;
+  font->mfp.underline = font->lf.lfUnderline;
+  font->mfp.strikeout = font->lf.lfStrikeOut;
+  strcpy(font->mfp.faceName, font->lf.lfFaceName);
+  return TRUE;
+}
+
+
+VOID
+UpdateSampleText(HWND hDlg, int id, MyColorizeAttribs *mca)
+{
+  CHARFORMAT cf;
+  cf.cbSize = sizeof(CHARFORMAT);
+  cf.dwMask = 
+    CFM_COLOR|CFM_BOLD|CFM_ITALIC|CFM_UNDERLINE|CFM_STRIKEOUT|CFM_FACE|CFM_SIZE;
+  cf.crTextColor = mca->color;
+  cf.dwEffects = mca->effects;
+  strcpy(cf.szFaceName, font[boardSize][CONSOLE_FONT]->mfp.faceName);
+  /* 
+   * The 20.0 below is in fact documented. yHeight is expressed in twips.
+   * A twip is 1/20 of a font's point size. See documentation of CHARFORMAT.
+   * --msw
+   */
+  cf.yHeight = (int)(font[boardSize][CONSOLE_FONT]->mfp.pointSize * 20.0 + 0.5);
+  cf.bCharSet = DEFAULT_CHARSET; /* should be ignored anyway */
+  cf.bPitchAndFamily = DEFAULT_PITCH|FF_DONTCARE;
+  SendDlgItemMessage(hDlg, id, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf);
+}
+
+LRESULT CALLBACK
+ColorizeTextDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  static MyColorizeAttribs mca;
+  static ColorClass cc;
+  COLORREF background = (COLORREF)0;
+
+  switch (message) {
+  case WM_INITDIALOG:
+    cc = (ColorClass)lParam;
+    mca = colorizeAttribs[cc];
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+    /* Initialize the dialog items */
+    CheckDlgButton(hDlg, OPT_Bold, (mca.effects & CFE_BOLD) != 0);
+    CheckDlgButton(hDlg, OPT_Italic, (mca.effects & CFE_ITALIC) != 0);
+    CheckDlgButton(hDlg, OPT_Underline, (mca.effects & CFE_UNDERLINE) != 0);
+    CheckDlgButton(hDlg, OPT_Strikeout, (mca.effects & CFE_STRIKEOUT) != 0);
+
+    /* get the current background color from the parent window */
+    SendMessage(GetWindow(hDlg, GW_OWNER),WM_COMMAND, 
+        	(WPARAM)WM_USER_GetConsoleBackground, 
+	        (LPARAM)&background);
+
+    /* set the background color */
+    SendDlgItemMessage(hDlg, OPT_Sample, EM_SETBKGNDCOLOR, FALSE, background);
+
+    SetDlgItemText(hDlg, OPT_Sample, mca.name);
+    UpdateSampleText(hDlg, OPT_Sample, &mca);
+    return TRUE;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      /* Read changed options from the dialog box */
+      colorizeAttribs[cc] = mca;
+      textAttribs[cc].color = mca.color;
+      textAttribs[cc].effects = mca.effects;
+      Colorize(currentColorClass, TRUE);
+      if (cc == ColorNormal) {
+	CHARFORMAT cf;
+	cf.cbSize = sizeof(CHARFORMAT);
+	cf.dwMask = CFM_COLOR;
+	cf.crTextColor = mca.color;
+	SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, 
+	  EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf);
+      }
+      EndDialog(hDlg, TRUE);
+      return TRUE;
+
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    case OPT_ChooseColor:
+      ChangeColor(hDlg, &mca.color);
+      UpdateSampleText(hDlg, OPT_Sample, &mca);
+      return TRUE;
+
+    default:
+      mca.effects =
+	(IsDlgButtonChecked(hDlg, OPT_Bold) ? CFE_BOLD : 0) |
+	(IsDlgButtonChecked(hDlg, OPT_Italic) ? CFE_ITALIC : 0) |
+	(IsDlgButtonChecked(hDlg, OPT_Underline) ? CFE_UNDERLINE : 0) |
+	(IsDlgButtonChecked(hDlg, OPT_Strikeout) ? CFE_STRIKEOUT : 0);
+      UpdateSampleText(hDlg, OPT_Sample, &mca);
+      break;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+VOID
+ColorizeTextPopup(HWND hwnd, ColorClass cc)
+{
+  FARPROC lpProc;
+
+  lpProc = MakeProcInstance((FARPROC)ColorizeTextDialog, hInst);
+  DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_Colorize),
+    hwnd, (DLGPROC)lpProc, (LPARAM) cc);
+  FreeProcInstance(lpProc);
+}
+
+VOID
+SetIcsOptionEnables(HWND hDlg)
+{
+#define ENABLE_DLG_ITEM(x,y) EnableWindow(GetDlgItem(hDlg,(x)), (y))
+
+  UINT state = IsDlgButtonChecked(hDlg, OPT_Premove);
+  ENABLE_DLG_ITEM(OPT_PremoveWhite, state);
+  ENABLE_DLG_ITEM(OPT_PremoveWhiteText, state);
+  ENABLE_DLG_ITEM(OPT_PremoveBlack, state);
+  ENABLE_DLG_ITEM(OPT_PremoveBlackText, state);
+
+  ENABLE_DLG_ITEM(OPT_IcsAlarmTime, IsDlgButtonChecked(hDlg, OPT_IcsAlarm));
+
+#undef ENABLE_DLG_ITEM
+}
+
+
+LRESULT CALLBACK
+IcsOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  char buf[MSG_SIZ];
+  int number;
+  int i;
+  static COLORREF cbc;
+  static MyColorizeAttribs *mca;
+  COLORREF *colorref;
+
+  switch (message) {
+  case WM_INITDIALOG: /* message: initialize dialog box */
+
+    mca = colorizeAttribs;
+
+    for (i=0; i < NColorClasses - 1; i++) {
+      mca[i].color   = textAttribs[i].color;
+      mca[i].effects = textAttribs[i].effects;
+    }
+    cbc = consoleBackgroundColor;
+
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+
+    /* Initialize the dialog items */
+#define CHECK_BOX(x,y) CheckDlgButton(hDlg, (x), (BOOL)(y))
+
+    CHECK_BOX(OPT_AutoComment, appData.autoComment);
+    CHECK_BOX(OPT_AutoObserve, appData.autoObserve);
+    CHECK_BOX(OPT_GetMoveList, appData.getMoveList);
+    CHECK_BOX(OPT_LocalLineEditing, appData.localLineEditing);
+    CHECK_BOX(OPT_QuietPlay, appData.quietPlay);
+    CHECK_BOX(OPT_Premove, appData.premove);
+    CHECK_BOX(OPT_PremoveWhite, appData.premoveWhite);
+    CHECK_BOX(OPT_PremoveBlack, appData.premoveBlack);
+    CHECK_BOX(OPT_IcsAlarm, appData.icsAlarm);
+    CHECK_BOX(OPT_DontColorize, !appData.colorize);
+
+#undef CHECK_BOX
+
+    sprintf(buf, "%d", appData.icsAlarmTime / 1000);
+    SetDlgItemText(hDlg, OPT_IcsAlarmTime, buf);
+    SetDlgItemText(hDlg, OPT_PremoveWhiteText, appData.premoveWhiteText);
+    SetDlgItemText(hDlg, OPT_PremoveBlackText, appData.premoveBlackText);
+
+    SendDlgItemMessage(hDlg, OPT_SampleShout,     EM_SETBKGNDCOLOR, 0, cbc);
+    SendDlgItemMessage(hDlg, OPT_SampleSShout,    EM_SETBKGNDCOLOR, 0, cbc);
+    SendDlgItemMessage(hDlg, OPT_SampleChannel1,  EM_SETBKGNDCOLOR, 0, cbc);
+    SendDlgItemMessage(hDlg, OPT_SampleChannel,   EM_SETBKGNDCOLOR, 0, cbc);
+    SendDlgItemMessage(hDlg, OPT_SampleKibitz,    EM_SETBKGNDCOLOR, 0, cbc);
+    SendDlgItemMessage(hDlg, OPT_SampleTell,      EM_SETBKGNDCOLOR, 0, cbc);
+    SendDlgItemMessage(hDlg, OPT_SampleChallenge, EM_SETBKGNDCOLOR, 0, cbc);
+    SendDlgItemMessage(hDlg, OPT_SampleRequest,   EM_SETBKGNDCOLOR, 0, cbc);
+    SendDlgItemMessage(hDlg, OPT_SampleSeek,      EM_SETBKGNDCOLOR, 0, cbc);
+    SendDlgItemMessage(hDlg, OPT_SampleNormal,    EM_SETBKGNDCOLOR, 0, cbc);
+
+    SetDlgItemText(hDlg, OPT_SampleShout,     mca[ColorShout].name);
+    SetDlgItemText(hDlg, OPT_SampleSShout,    mca[ColorSShout].name);
+    SetDlgItemText(hDlg, OPT_SampleChannel1,  mca[ColorChannel1].name);
+    SetDlgItemText(hDlg, OPT_SampleChannel,   mca[ColorChannel].name);
+    SetDlgItemText(hDlg, OPT_SampleKibitz,    mca[ColorKibitz].name);
+    SetDlgItemText(hDlg, OPT_SampleTell,      mca[ColorTell].name);
+    SetDlgItemText(hDlg, OPT_SampleChallenge, mca[ColorChallenge].name);
+    SetDlgItemText(hDlg, OPT_SampleRequest,   mca[ColorRequest].name);
+    SetDlgItemText(hDlg, OPT_SampleSeek,      mca[ColorSeek].name);
+    SetDlgItemText(hDlg, OPT_SampleNormal,    mca[ColorNormal].name);
+
+    UpdateSampleText(hDlg, OPT_SampleShout,     &mca[ColorShout]);
+    UpdateSampleText(hDlg, OPT_SampleSShout,    &mca[ColorSShout]);
+    UpdateSampleText(hDlg, OPT_SampleChannel1,  &mca[ColorChannel1]);
+    UpdateSampleText(hDlg, OPT_SampleChannel,   &mca[ColorChannel]);
+    UpdateSampleText(hDlg, OPT_SampleKibitz,    &mca[ColorKibitz]);
+    UpdateSampleText(hDlg, OPT_SampleTell,      &mca[ColorTell]);
+    UpdateSampleText(hDlg, OPT_SampleChallenge, &mca[ColorChallenge]);
+    UpdateSampleText(hDlg, OPT_SampleRequest,   &mca[ColorRequest]);
+    UpdateSampleText(hDlg, OPT_SampleSeek,      &mca[ColorSeek]);
+    UpdateSampleText(hDlg, OPT_SampleNormal,    &mca[ColorNormal]);
+
+    SetIcsOptionEnables(hDlg);
+    return TRUE;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+
+    case WM_USER_GetConsoleBackground: 
+      /* the ColorizeTextDialog needs the current background color */
+      colorref = (COLORREF *)lParam;
+      *colorref = cbc;
+      return FALSE;
+
+    case IDOK:
+      /* Read changed options from the dialog box */
+      GetDlgItemText(hDlg, OPT_IcsAlarmTime, buf, MSG_SIZ);
+      if (sscanf(buf, "%d", &number) != 1 || (number < 0)){
+	  MessageBox(hDlg, "Invalid ICS Alarm Time",
+		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
+	  return FALSE;
+      }
+
+#define IS_CHECKED(x) (Boolean)IsDlgButtonChecked(hDlg, (x))
+
+      appData.icsAlarm         = IS_CHECKED(OPT_IcsAlarm);
+      appData.premove          = IS_CHECKED(OPT_Premove);
+      appData.premoveWhite     = IS_CHECKED(OPT_PremoveWhite);
+      appData.premoveBlack     = IS_CHECKED(OPT_PremoveBlack);
+      appData.autoComment      = IS_CHECKED(OPT_AutoComment);
+      appData.autoObserve      = IS_CHECKED(OPT_AutoObserve);
+      appData.getMoveList      = IS_CHECKED(OPT_GetMoveList);
+      appData.localLineEditing = IS_CHECKED(OPT_LocalLineEditing);
+      appData.quietPlay        = IS_CHECKED(OPT_QuietPlay);
+
+#undef IS_CHECKED
+
+      appData.icsAlarmTime = number * 1000;
+      GetDlgItemText(hDlg, OPT_PremoveWhiteText, appData.premoveWhiteText, 5);
+      GetDlgItemText(hDlg, OPT_PremoveBlackText, appData.premoveBlackText, 5);
+
+      if (appData.localLineEditing) {
+	DontEcho();
+	EchoOn();
+      } else {
+	DoEcho();
+	EchoOff();
+      }
+
+      appData.colorize =
+	(Boolean)!IsDlgButtonChecked(hDlg, OPT_DontColorize);
+
+      if (!appData.colorize) {
+	CHARFORMAT cf;
+	COLORREF background = ParseColorName(COLOR_BKGD);
+	/*
+	SetDefaultTextAttribs();
+        Colorize(currentColorClass);
+	*/
+	cf.cbSize = sizeof(CHARFORMAT);
+	cf.dwMask = CFM_COLOR;
+	cf.crTextColor = ParseColorName(COLOR_NORMAL);
+
+	SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, 
+	  EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf);
+        SendDlgItemMessage(hwndConsole, OPT_ConsoleText, 
+  	  EM_SETBKGNDCOLOR, FALSE, background);
+	SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, 
+	  EM_SETBKGNDCOLOR, FALSE, background);
+      }
+
+      if (cbc != consoleBackgroundColor) {
+	consoleBackgroundColor = cbc;
+	if (appData.colorize) {
+	  SendDlgItemMessage(hwndConsole, OPT_ConsoleText, 
+	    EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor);
+	  SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, 
+	    EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor);
+	}
+      }
+
+      for (i=0; i < NColorClasses - 1; i++) {
+	textAttribs[i].color   = mca[i].color;
+	textAttribs[i].effects = mca[i].effects;
+      }
+
+      EndDialog(hDlg, TRUE);
+      return TRUE;
+
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    case OPT_ChooseShoutColor:
+      ColorizeTextPopup(hDlg, ColorShout);
+      UpdateSampleText(hDlg, OPT_SampleShout, &mca[ColorShout]);
+      break;
+
+    case OPT_ChooseSShoutColor:
+      ColorizeTextPopup(hDlg, ColorSShout);
+      UpdateSampleText(hDlg, OPT_SampleSShout, &mca[ColorSShout]);
+      break;
+
+    case OPT_ChooseChannel1Color:
+      ColorizeTextPopup(hDlg, ColorChannel1);
+      UpdateSampleText(hDlg, OPT_SampleChannel1, 
+		       &colorizeAttribs[ColorChannel1]);
+      break;
+
+    case OPT_ChooseChannelColor:
+      ColorizeTextPopup(hDlg, ColorChannel);
+      UpdateSampleText(hDlg, OPT_SampleChannel, &mca[ColorChannel]);
+      break;
+
+    case OPT_ChooseKibitzColor:
+      ColorizeTextPopup(hDlg, ColorKibitz);
+      UpdateSampleText(hDlg, OPT_SampleKibitz, &mca[ColorKibitz]);
+      break;
+
+    case OPT_ChooseTellColor:
+      ColorizeTextPopup(hDlg, ColorTell);
+      UpdateSampleText(hDlg, OPT_SampleTell, &mca[ColorTell]);
+      break;
+
+    case OPT_ChooseChallengeColor:
+      ColorizeTextPopup(hDlg, ColorChallenge);
+      UpdateSampleText(hDlg, OPT_SampleChallenge, &mca[ColorChallenge]);
+      break;
+
+    case OPT_ChooseRequestColor:
+      ColorizeTextPopup(hDlg, ColorRequest);
+      UpdateSampleText(hDlg, OPT_SampleRequest, &mca[ColorRequest]);
+      break;
+
+    case OPT_ChooseSeekColor:
+      ColorizeTextPopup(hDlg, ColorSeek);
+      UpdateSampleText(hDlg, OPT_SampleSeek, &mca[ColorSeek]);
+      break;
+
+    case OPT_ChooseNormalColor:
+      ColorizeTextPopup(hDlg, ColorNormal);
+      UpdateSampleText(hDlg, OPT_SampleNormal, &mca[ColorNormal]);
+      break;
+
+    case OPT_ChooseBackgroundColor:
+      if (ChangeColor(hDlg, &cbc)) {
+	SendDlgItemMessage(hDlg, OPT_SampleShout,     EM_SETBKGNDCOLOR, 0, cbc);
+	SendDlgItemMessage(hDlg, OPT_SampleSShout,    EM_SETBKGNDCOLOR, 0, cbc);
+	SendDlgItemMessage(hDlg, OPT_SampleChannel1,  EM_SETBKGNDCOLOR, 0, cbc);
+	SendDlgItemMessage(hDlg, OPT_SampleChannel,   EM_SETBKGNDCOLOR, 0, cbc);
+	SendDlgItemMessage(hDlg, OPT_SampleKibitz,    EM_SETBKGNDCOLOR, 0, cbc);
+	SendDlgItemMessage(hDlg, OPT_SampleTell,      EM_SETBKGNDCOLOR, 0, cbc);
+	SendDlgItemMessage(hDlg, OPT_SampleChallenge, EM_SETBKGNDCOLOR, 0, cbc);
+	SendDlgItemMessage(hDlg, OPT_SampleRequest,   EM_SETBKGNDCOLOR, 0, cbc);
+	SendDlgItemMessage(hDlg, OPT_SampleSeek,      EM_SETBKGNDCOLOR, 0, cbc);
+	SendDlgItemMessage(hDlg, OPT_SampleNormal,    EM_SETBKGNDCOLOR, 0, cbc);
+      }
+      break;
+
+    case OPT_DefaultColors:
+      for (i=0; i < NColorClasses - 1; i++)
+	ParseAttribs(&mca[i].color, 
+		     &mca[i].effects,
+		     defaultTextAttribs[i]);
+
+      cbc = ParseColorName(COLOR_BKGD);
+      SendDlgItemMessage(hDlg, OPT_SampleShout,     EM_SETBKGNDCOLOR, 0, cbc);
+      SendDlgItemMessage(hDlg, OPT_SampleSShout,    EM_SETBKGNDCOLOR, 0, cbc);
+      SendDlgItemMessage(hDlg, OPT_SampleChannel1,  EM_SETBKGNDCOLOR, 0, cbc);
+      SendDlgItemMessage(hDlg, OPT_SampleChannel,   EM_SETBKGNDCOLOR, 0, cbc);
+      SendDlgItemMessage(hDlg, OPT_SampleKibitz,    EM_SETBKGNDCOLOR, 0, cbc);
+      SendDlgItemMessage(hDlg, OPT_SampleTell,      EM_SETBKGNDCOLOR, 0, cbc);
+      SendDlgItemMessage(hDlg, OPT_SampleChallenge, EM_SETBKGNDCOLOR, 0, cbc);
+      SendDlgItemMessage(hDlg, OPT_SampleRequest,   EM_SETBKGNDCOLOR, 0, cbc);
+      SendDlgItemMessage(hDlg, OPT_SampleSeek,      EM_SETBKGNDCOLOR, 0, cbc);
+      SendDlgItemMessage(hDlg, OPT_SampleNormal,    EM_SETBKGNDCOLOR, 0, cbc);
+
+      UpdateSampleText(hDlg, OPT_SampleShout,     &mca[ColorShout]);
+      UpdateSampleText(hDlg, OPT_SampleSShout,    &mca[ColorSShout]);
+      UpdateSampleText(hDlg, OPT_SampleChannel1,  &mca[ColorChannel1]);
+      UpdateSampleText(hDlg, OPT_SampleChannel,   &mca[ColorChannel]);
+      UpdateSampleText(hDlg, OPT_SampleKibitz,    &mca[ColorKibitz]);
+      UpdateSampleText(hDlg, OPT_SampleTell,      &mca[ColorTell]);
+      UpdateSampleText(hDlg, OPT_SampleChallenge, &mca[ColorChallenge]);
+      UpdateSampleText(hDlg, OPT_SampleRequest,   &mca[ColorRequest]);
+      UpdateSampleText(hDlg, OPT_SampleSeek,      &mca[ColorSeek]);
+      UpdateSampleText(hDlg, OPT_SampleNormal,    &mca[ColorNormal]);
+      break;
+
+    default:
+      SetIcsOptionEnables(hDlg);
+      break;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+VOID
+IcsOptionsPopup(HWND hwnd)
+{
+  FARPROC lpProc = MakeProcInstance((FARPROC)IcsOptionsDialog, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_IcsOptions), hwnd,
+	    (DLGPROC) lpProc);
+  FreeProcInstance(lpProc);
+}
+
+/*---------------------------------------------------------------------------*\
+ *
+ * Fonts Dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+
+VOID
+SetSampleFontText(HWND hwnd, int id, const MyFont *mf)
+{
+  char buf[MSG_SIZ];
+  HWND hControl;
+  HDC hdc;
+  CHARFORMAT cf;
+  SIZE size;
+  RECT rectClient, rectFormat;
+  HFONT oldFont;
+  POINT center;
+  int len;
+
+  len = sprintf(buf, "%.0f pt. %s%s%s\n",
+		mf->mfp.pointSize, mf->mfp.faceName,
+		mf->mfp.bold ? " bold" : "",
+		mf->mfp.italic ? " italic" : "");
+  SetDlgItemText(hwnd, id, buf);
+
+  hControl = GetDlgItem(hwnd, id);
+  hdc = GetDC(hControl);
+  SetMapMode(hdc, MM_TEXT);	/* 1 pixel == 1 logical unit */
+  oldFont = SelectObject(hdc, mf->hf);
+  
+  /* get number of logical units necessary to display font name */
+  GetTextExtentPoint32(hdc, buf, len, &size);
+
+  /* calculate formatting rectangle in the rich edit control.  
+   * May be larger or smaller than the actual control.
+   */
+  GetClientRect(hControl, &rectClient);
+  center.x = (rectClient.left + rectClient.right) / 2;
+  center.y = (rectClient.top  + rectClient.bottom) / 2;
+  rectFormat.top    = center.y - (size.cy / 2) - 1;
+  rectFormat.bottom = center.y + (size.cy / 2) + 1;
+  rectFormat.left   = center.x - (size.cx / 2) - 1;
+  rectFormat.right  = center.x + (size.cx / 2) + 1;
+
+#if 0
+  fprintf(debugFP, "\nfont: %s\n"
+                   "center.x   %d, centerY %d\n"
+		   "size.cx    %d, size.cy %d\n"
+		   "client.top %d, bottom %d, left %d, right %d\n"
+		   "format.top %d, bottom %d, left %d, right %d\n",
+		   buf,
+		   center.x, center.y,
+		   size.cx, size.cy,
+		   rectClient.top, rectClient.bottom, rectClient.left,
+		   rectClient.right,
+		   rectFormat.top, rectFormat.bottom, rectFormat.left,
+		   rectFormat.right);
+#endif
+
+  cf.cbSize = sizeof(CHARFORMAT);
+  cf.dwMask = CFM_FACE|CFM_SIZE|CFM_CHARSET|CFM_BOLD|CFM_ITALIC;
+  cf.dwEffects = 0;
+  if (mf->lf.lfWeight == FW_BOLD) cf.dwEffects |= CFE_BOLD;
+  if (mf->lf.lfItalic) cf.dwEffects |= CFE_ITALIC;
+  strcpy(cf.szFaceName, mf->mfp.faceName);
+  /*
+   * yHeight is expressed in twips.  A twip is 1/20 of a font's point
+   * size. See documentation of CHARFORMAT.  --msw
+   */
+  cf.yHeight = (int)(mf->mfp.pointSize * 20.0 + 0.5);
+  cf.bCharSet = mf->lf.lfCharSet;
+  cf.bPitchAndFamily = mf->lf.lfPitchAndFamily;
+
+  /* format the text in the rich edit control */
+  SendMessage(hControl, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cf);
+  SendMessage(hControl, EM_SETRECT, (WPARAM)0, (LPARAM) &rectFormat);
+
+  /* clean up */
+  SelectObject(hdc, oldFont);
+  ReleaseDC(hControl, hdc);
+}
+
+VOID
+CopyFont(MyFont *dest, const MyFont *src)
+{
+  dest->mfp.pointSize = src->mfp.pointSize;
+  dest->mfp.bold      = src->mfp.bold;
+  dest->mfp.italic    = src->mfp.italic;
+  dest->mfp.underline = src->mfp.underline;
+  dest->mfp.strikeout = src->mfp.strikeout;
+  lstrcpy(dest->mfp.faceName, src->mfp.faceName);
+  CreateFontInMF(dest);
+}
+
+
+LRESULT CALLBACK
+FontOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  static MyFont workFont[NUM_FONTS];
+  static BOOL firstPaint;
+  int i;
+  RECT rect;
+
+  switch (message) {
+  case WM_INITDIALOG:
+
+    /* copy the current font settings into a working copy */
+    for (i=0; i < NUM_FONTS; i++)
+      CopyFont(&workFont[i], font[boardSize][i]);
+
+    if (!appData.icsActive)
+      EnableWindow(GetDlgItem(hDlg, OPT_ChooseConsoleFont), FALSE);
+
+    firstPaint = TRUE;	/* see rant below */
+
+    /* If I don't call SetFocus(), the dialog won't respond to the keyboard
+     * when first drawn. Why is this the only dialog that behaves this way? Is
+     * is the WM_PAINT stuff below?? Sigh...
+     */
+    SetFocus(GetDlgItem(hDlg, IDOK));
+    break;
+
+  case WM_PAINT:
+    /* This should not be necessary. However, if SetSampleFontText() is called
+     * in response to WM_INITDIALOG, the strings are not properly centered in
+     * the controls when the dialog first appears. I can't figure out why, so
+     * this is the workaround.  --msw
+     */
+    if (firstPaint) {
+      SetSampleFontText(hDlg, OPT_SampleClockFont, &workFont[CLOCK_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleMessageFont, &workFont[MESSAGE_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleCoordFont, &workFont[COORD_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleTagFont, &workFont[EDITTAGS_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleCommentsFont, &workFont[COMMENT_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleConsoleFont, &workFont[CONSOLE_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleMoveHistoryFont, &workFont[MOVEHISTORY_FONT]);
+      firstPaint = FALSE;
+    }
+    break;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+
+    case IDOK:
+      /* again, it seems to avoid redraw problems if we call EndDialog first */
+      EndDialog(hDlg, FALSE);
+
+      /* copy modified settings back to the fonts array */
+      for (i=0; i < NUM_FONTS; i++)
+	CopyFont(font[boardSize][i], &workFont[i]);
+
+      /* a sad necessity due to the original design of having a separate
+       * console font, tags font, and comment font for each board size.  IMHO
+       * these fonts should not be dependent on the current board size.  I'm
+       * running out of time, so I am doing this hack rather than redesign the
+       * data structure. Besides, I think if I redesigned the data structure, I
+       * might break backwards compatibility with old winboard.ini files.
+       * --msw
+       */
+      for (i=0; i < NUM_SIZES; i++) {
+	CopyFont(font[i][EDITTAGS_FONT], &workFont[EDITTAGS_FONT]);
+	CopyFont(font[i][CONSOLE_FONT],  &workFont[CONSOLE_FONT]);
+	CopyFont(font[i][COMMENT_FONT],  &workFont[COMMENT_FONT]);
+	CopyFont(font[i][MOVEHISTORY_FONT],  &workFont[MOVEHISTORY_FONT]);
+      }
+      /* end sad necessity */
+
+      InitDrawingSizes(boardSize, 0);
+      InvalidateRect(hwndMain, NULL, TRUE);
+
+      if (commentDialog) {
+	SendDlgItemMessage(commentDialog, OPT_CommentText,
+	  WM_SETFONT, (WPARAM)font[boardSize][COMMENT_FONT]->hf, 
+	  MAKELPARAM(TRUE, 0));
+	GetClientRect(GetDlgItem(commentDialog, OPT_CommentText), &rect);
+	InvalidateRect(commentDialog, &rect, TRUE);
+      }
+
+      if (editTagsDialog) {
+	SendDlgItemMessage(editTagsDialog, OPT_TagsText,
+  	  WM_SETFONT, (WPARAM)font[boardSize][EDITTAGS_FONT]->hf, 
+	  MAKELPARAM(TRUE, 0));
+	GetClientRect(GetDlgItem(editTagsDialog, OPT_TagsText), &rect);
+	InvalidateRect(editTagsDialog, &rect, TRUE);
+      }
+
+      if( moveHistoryDialog != NULL ) {
+	SendDlgItemMessage(moveHistoryDialog, IDC_MoveHistory,
+  	  WM_SETFONT, (WPARAM)font[boardSize][MOVEHISTORY_FONT]->hf, 
+	  MAKELPARAM(TRUE, 0));
+	InvalidateRect(editTagsDialog, NULL, TRUE);
+      }
+
+      if (hwndConsole) {
+	ChangedConsoleFont();
+      }
+
+      for (i=0; i<NUM_FONTS; i++)
+	DeleteObject(&workFont[i].hf);
+
+      return TRUE;
+
+    case IDCANCEL:
+      for (i=0; i<NUM_FONTS; i++)
+	DeleteObject(&workFont[i].hf);
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    case OPT_ChooseClockFont:
+      MyCreateFont(hDlg, &workFont[CLOCK_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleClockFont, &workFont[CLOCK_FONT]);
+      break;
+
+    case OPT_ChooseMessageFont:
+      MyCreateFont(hDlg, &workFont[MESSAGE_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleMessageFont, &workFont[MESSAGE_FONT]);
+      break;
+
+    case OPT_ChooseCoordFont:
+      MyCreateFont(hDlg, &workFont[COORD_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleCoordFont, &workFont[COORD_FONT]);
+      break;
+
+    case OPT_ChooseTagFont:
+      MyCreateFont(hDlg, &workFont[EDITTAGS_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleTagFont, &workFont[EDITTAGS_FONT]);
+      break;
+
+    case OPT_ChooseCommentsFont:
+      MyCreateFont(hDlg, &workFont[COMMENT_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleCommentsFont, &workFont[COMMENT_FONT]);
+      break;
+
+    case OPT_ChooseConsoleFont:
+      MyCreateFont(hDlg, &workFont[CONSOLE_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleConsoleFont, &workFont[CONSOLE_FONT]);
+      break;
+
+    case OPT_ChooseMoveHistoryFont:
+      MyCreateFont(hDlg, &workFont[MOVEHISTORY_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleMoveHistoryFont, &workFont[MOVEHISTORY_FONT]);
+      break;
+
+    case OPT_DefaultFonts:
+      for (i=0; i<NUM_FONTS; i++) {
+	DeleteObject(&workFont[i].hf);
+	ParseFontName(font[boardSize][i]->def, &workFont[i].mfp);
+	CreateFontInMF(&workFont[i]);
+      }
+      SetSampleFontText(hDlg, OPT_SampleClockFont, &workFont[CLOCK_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleMessageFont, &workFont[MESSAGE_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleCoordFont, &workFont[COORD_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleTagFont, &workFont[EDITTAGS_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleCommentsFont, &workFont[COMMENT_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleConsoleFont, &workFont[CONSOLE_FONT]);
+      SetSampleFontText(hDlg, OPT_SampleMoveHistoryFont, &workFont[MOVEHISTORY_FONT]);
+      break;
+    }
+  }
+  return FALSE;
+}
+
+VOID
+FontsOptionsPopup(HWND hwnd)
+{
+  FARPROC lpProc = MakeProcInstance((FARPROC)FontOptionsDialog, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_Fonts), hwnd,
+	  (DLGPROC) lpProc);
+  FreeProcInstance(lpProc);
+}
+
+/*---------------------------------------------------------------------------*\
+ *
+ * Sounds Dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+
+
+SoundComboData soundComboData[] = {
+  {"Move", NULL},
+  {"Bell", NULL},
+  {"ICS Alarm", NULL},
+  {"ICS Win", NULL},
+  {"ICS Loss", NULL},
+  {"ICS Draw", NULL},
+  {"ICS Unfinished", NULL},
+  {"Shout", NULL},
+  {"SShout/CShout", NULL},
+  {"Channel 1", NULL},
+  {"Channel", NULL},
+  {"Kibitz", NULL},
+  {"Tell", NULL},
+  {"Challenge", NULL},
+  {"Request", NULL},
+  {"Seek", NULL},
+  {NULL, NULL},
+};
+
+
+void
+InitSoundComboData(SoundComboData *scd)
+{
+  SoundClass sc;
+  ColorClass cc;
+  int index;
+
+  /* copy current sound settings to combo array */
+
+  for ( sc = (SoundClass)0; sc < NSoundClasses; sc++) {
+    scd[sc].name = strdup(sounds[sc].name);
+  }
+  for ( cc = (ColorClass)0; cc < NColorClasses - 2; cc++) {
+    index = (int)cc + (int)NSoundClasses;
+    scd[index].name = strdup(textAttribs[cc].sound.name);
+  }
+}
+
+
+void
+ResetSoundComboData(SoundComboData *scd)
+{
+  while (scd->label) {
+    if (scd->name != NULL) {
+      free (scd->name);
+      scd->name = NULL;
+    }
+    scd++;
+  }
+}
+
+void
+InitSoundCombo(HWND hwndCombo, SoundComboData *scd)
+{
+  char buf[255];
+  DWORD err;
+  DWORD cnt = 0;
+  SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0);
+
+  /* send the labels to the combo box */
+  while (scd->label) {
+    err = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) scd->label);
+    if (err != cnt++) {
+      sprintf(buf, "InitSoundCombo(): err '%d', cnt '%d'\n",
+	  (int)err, (int)cnt);
+      MessageBox(NULL, buf, NULL, MB_OK);
+    }
+    scd++;
+  }
+  SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) 0, (LPARAM) 0);
+}
+
+int
+SoundDialogWhichRadio(HWND hDlg)
+{
+  if (IsDlgButtonChecked(hDlg, OPT_NoSound)) return OPT_NoSound;
+  if (IsDlgButtonChecked(hDlg, OPT_DefaultBeep)) return OPT_DefaultBeep;
+  if (IsDlgButtonChecked(hDlg, OPT_BuiltInSound)) return OPT_BuiltInSound;
+  if (IsDlgButtonChecked(hDlg, OPT_WavFile)) return OPT_WavFile;
+  return -1;
+}
+
+VOID
+SoundDialogSetEnables(HWND hDlg, int radio)
+{
+  EnableWindow(GetDlgItem(hDlg, OPT_BuiltInSoundName),
+	       radio == OPT_BuiltInSound);
+  EnableWindow(GetDlgItem(hDlg, OPT_WavFileName), radio == OPT_WavFile);
+  EnableWindow(GetDlgItem(hDlg, OPT_BrowseSound), radio == OPT_WavFile);
+}
+
+char *
+SoundDialogGetName(HWND hDlg, int radio)
+{
+  static char buf[MSG_SIZ], buf2[MSG_SIZ], buf3[MSG_SIZ];
+  char *dummy, *ret;
+  switch (radio) {
+  case OPT_NoSound:
+  default:
+    return "";
+  case OPT_DefaultBeep:
+    return "$";
+  case OPT_BuiltInSound:
+    buf[0] = '!';
+    GetDlgItemText(hDlg, OPT_BuiltInSoundName, buf + 1, sizeof(buf) - 1);
+    return buf;
+  case OPT_WavFile:
+    GetDlgItemText(hDlg, OPT_WavFileName, buf, sizeof(buf));
+    GetCurrentDirectory(MSG_SIZ, buf3);
+    SetCurrentDirectory(installDir);
+    if (GetFullPathName(buf, MSG_SIZ, buf2, &dummy)) {
+      ret = buf2;
+    } else {
+      ret = buf;
+    }
+    SetCurrentDirectory(buf3);
+    return ret;
+  }
+}
+
+void
+DisplaySelectedSound(HWND hDlg, HWND hCombo, const char *name)
+{
+  int radio;
+  /* 
+   * I think it's best to clear the combo and edit boxes. It looks stupid
+   * to have a value from another sound event sitting there grayed out.
+   */
+  SetDlgItemText(hDlg, OPT_WavFileName, "");
+  SendMessage(hCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0);
+
+  if (appData.debugMode)
+      fprintf(debugFP, "DisplaySelectedSound(,,'%s'):\n", name);
+  switch (name[0]) {
+  case NULLCHAR:
+    radio = OPT_NoSound;
+    break;
+  case '$':
+    if (name[1] == NULLCHAR) {
+      radio = OPT_DefaultBeep;
+    } else {
+      radio = OPT_WavFile;
+      SetDlgItemText(hDlg, OPT_WavFileName, name);
+    }
+    break;
+  case '!':
+    if (name[1] == NULLCHAR) {
+      radio = OPT_NoSound;
+    } else {
+      radio = OPT_BuiltInSound;
+      if (SendMessage(hCombo, CB_SELECTSTRING, (WPARAM) -1, 
+		      (LPARAM) (name + 1)) == CB_ERR) {
+	SendMessage(hCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0);
+	SendMessage(hCombo, WM_SETTEXT, (WPARAM) 0, (LPARAM) (name + 1));
+      }
+    }
+    break;
+  default:
+    radio = OPT_WavFile;
+    SetDlgItemText(hDlg, OPT_WavFileName, name);
+    break;
+  }
+  SoundDialogSetEnables(hDlg, radio);
+  CheckRadioButton(hDlg, OPT_NoSound, OPT_WavFile, radio);
+}
+    
+
+char *builtInSoundNames[] = BUILT_IN_SOUND_NAMES;
+
+LRESULT CALLBACK
+SoundOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  static HWND hSoundCombo;
+  static DWORD index;
+  static HWND hBISN;
+  int radio;
+  MySound tmp;
+  FILE *f;
+  char buf[MSG_SIZ];
+  char *newName;
+  SoundClass sc;
+  ColorClass cc;
+  SoundComboData *scd;
+
+  switch (message) {
+  case WM_INITDIALOG:
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+
+    /* Initialize the built-in sounds combo */
+    hBISN = GetDlgItem(hDlg, OPT_BuiltInSoundName);
+     InitComboStrings(hBISN, builtInSoundNames);
+
+    /* Initialize the  sound events combo */
+    index = 0;
+    InitSoundComboData(soundComboData);
+    hSoundCombo = GetDlgItem(hDlg, CBO_Sounds);
+    InitSoundCombo(hSoundCombo, soundComboData);
+
+    /* update the dialog */
+    DisplaySelectedSound(hDlg, hBISN, soundComboData[index].name);
+    return TRUE;
+
+  case WM_COMMAND: /* message: received a command */
+
+    if (((HWND)lParam == hSoundCombo) && 
+	(HIWORD(wParam) == CBN_SELCHANGE)) {
+      /* 
+       * the user has selected a new sound event. We must store the name for
+       * the previously selected event, then retrieve the name for the
+       * newly selected event and update the dialog. 
+       */
+      radio = SoundDialogWhichRadio(hDlg);
+      newName = strdup(SoundDialogGetName(hDlg, radio));
+      
+      if (strcmp(newName, soundComboData[index].name) != 0) {
+	free(soundComboData[index].name);
+	soundComboData[index].name = newName;
+      } else {
+	free(newName);
+	newName = NULL;
+      }
+      /* now get the settings for the newly selected event */
+      index = SendMessage(hSoundCombo, CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
+      DisplaySelectedSound(hDlg, hBISN, soundComboData[index].name);
+      
+      return TRUE;
+    }
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      /* 
+       * save the name for the currently selected sound event 
+       */
+      radio = SoundDialogWhichRadio(hDlg);
+      newName = strdup(SoundDialogGetName(hDlg, radio));
+
+      if (strcmp(soundComboData[index].name, newName) != 0) {
+	free(soundComboData[index].name);
+	soundComboData[index].name = newName;
+      } else {
+	free(newName);
+	newName = NULL;
+      }
+
+      /* save all the sound names that changed and load the sounds */
+
+      for ( sc = (SoundClass)0; sc < NSoundClasses; sc++) {
+	if (strcmp(soundComboData[sc].name, sounds[sc].name) != 0) {
+	  free(sounds[sc].name);
+	  sounds[sc].name = strdup(soundComboData[sc].name);
+	  MyLoadSound(&sounds[sc]);
+	}
+      }
+      for ( cc = (ColorClass)0; cc < NColorClasses - 2; cc++) {
+	index = (int)cc + (int)NSoundClasses;
+	if (strcmp(soundComboData[index].name, 
+		   textAttribs[cc].sound.name) != 0) {
+	  free(textAttribs[cc].sound.name);
+	  textAttribs[cc].sound.name = strdup(soundComboData[index].name);
+	  MyLoadSound(&textAttribs[cc].sound);
+	}
+      }
+
+      ResetSoundComboData(soundComboData);
+      EndDialog(hDlg, TRUE);
+      return TRUE;
+
+    case IDCANCEL:
+      ResetSoundComboData(soundComboData);
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    case OPT_DefaultSounds:
+      /* can't use SetDefaultSounds() because we need to be able to "undo" if
+       * user selects "Cancel" later on. So we do it the hard way here.
+       */
+      scd = &soundComboData[0];
+      while (scd->label != NULL) {
+	if (scd->name != NULL) free(scd->name);
+	scd->name = strdup("");
+	scd++;
+      }
+      free(soundComboData[(int)SoundBell].name);
+      soundComboData[(int)SoundBell].name = strdup(SOUND_BELL);
+      DisplaySelectedSound(hDlg, hBISN, soundComboData[index].name);
+      break;
+
+    case OPT_PlaySound:
+      radio = SoundDialogWhichRadio(hDlg);
+      tmp.name = strdup(SoundDialogGetName(hDlg, radio));
+      tmp.data = NULL;
+      MyLoadSound(&tmp);
+      MyPlaySound(&tmp);
+      if (tmp.data  != NULL) FreeResource(tmp.data); // technically obsolete fn, but tmp.data is NOT malloc'd mem
+      if (tmp.name != NULL) free(tmp.name);
+      return TRUE;
+
+    case OPT_BrowseSound:
+      f = OpenFileDialog(hDlg, "rb", NULL, "wav", SOUND_FILT,
+	"Browse for Sound File", NULL, NULL, buf);
+      if (f != NULL) {
+	fclose(f);
+	SetDlgItemText(hDlg, OPT_WavFileName, buf);
+      }
+      return TRUE;
+
+    default:
+      radio = SoundDialogWhichRadio(hDlg);
+      SoundDialogSetEnables(hDlg, radio);
+      break;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+
+VOID SoundOptionsPopup(HWND hwnd)
+{
+  FARPROC lpProc;
+
+  lpProc = MakeProcInstance((FARPROC)SoundOptionsDialog, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_Sound), hwnd, (DLGPROC)lpProc);
+  FreeProcInstance(lpProc);
+}
+
+
+/*---------------------------------------------------------------------------*\
+ *
+ * Comm Port dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+
+
+#define FLOW_NONE   0
+#define FLOW_XOFF   1
+#define FLOW_CTS    2
+#define FLOW_DSR    3
+
+#define PORT_NONE
+
+ComboData cdPort[]     = { {"None", PORT_NONE}, {"COM1", 1}, {"COM2", 2},
+			   {"COM3", 3}, {"COM4", 4}, {NULL, 0} };
+ComboData cdDataRate[] = { {"110", 110}, {"300", 300}, {"600", 600}, {"1200", 1200},
+			   {"2400", 2400}, {"4800", 4800}, {"9600", 9600}, {"19200", 19200},
+			   {"38400", 38400}, {NULL, 0} };
+ComboData cdDataBits[] = { {"5", 5}, {"6", 6}, {"7", 7}, {"8", 8}, {NULL, 0} };
+ComboData cdParity[]   = { {"None", NOPARITY}, {"Odd", ODDPARITY}, {"Even", EVENPARITY},
+			   {"Mark", MARKPARITY}, {"Space", SPACEPARITY}, {NULL, 0} };
+ComboData cdStopBits[] = { {"1", ONESTOPBIT}, {"1.5", ONE5STOPBITS},
+			   {"2", TWOSTOPBITS}, {NULL, 0} };
+ComboData cdFlow[]     = { {"None", FLOW_NONE}, {"Xoff/Xon", FLOW_XOFF}, {"CTS", FLOW_CTS},
+			   {"DSR", FLOW_DSR}, {NULL, 0} };
+
+
+VOID
+ParseCommSettings(char *arg, DCB *dcb)
+{
+  int dataRate, count;
+  char bits[MSG_SIZ], parity[MSG_SIZ], stopBits[MSG_SIZ], flow[MSG_SIZ];
+  ComboData *cd;
+  count = sscanf(arg, "%d%*[, ]%[^, ]%*[, ]%[^, ]%*[, ]%[^, ]%*[, ]%[^, ]",
+    &dataRate, bits, parity, stopBits, flow);
+  if (count != 5) goto cant_parse;
+  dcb->BaudRate = dataRate;
+  cd = cdDataBits;
+  while (cd->label != NULL) {
+    if (StrCaseCmp(cd->label, bits) == 0) {
+      dcb->ByteSize = cd->value;
+      break;
+    }
+    cd++;
+  }
+  if (cd->label == NULL) goto cant_parse;
+  cd = cdParity;
+  while (cd->label != NULL) {
+    if (StrCaseCmp(cd->label, parity) == 0) {
+      dcb->Parity = cd->value;
+      break;
+    }
+    cd++;
+  }
+  if (cd->label == NULL) goto cant_parse;
+  cd = cdStopBits;
+  while (cd->label != NULL) {
+    if (StrCaseCmp(cd->label, stopBits) == 0) {
+      dcb->StopBits = cd->value;
+      break;
+    }
+    cd++;
+  }
+  cd = cdFlow;
+  if (cd->label == NULL) goto cant_parse;
+  while (cd->label != NULL) {
+    if (StrCaseCmp(cd->label, flow) == 0) {
+      switch (cd->value) {
+      case FLOW_NONE:
+  	dcb->fOutX = FALSE;
+	dcb->fOutxCtsFlow = FALSE;
+	dcb->fOutxDsrFlow = FALSE;
+	break;
+      case FLOW_CTS:
+	dcb->fOutX = FALSE;
+	dcb->fOutxCtsFlow = TRUE;
+	dcb->fOutxDsrFlow = FALSE;
+	break;
+      case FLOW_DSR:
+	dcb->fOutX = FALSE;
+	dcb->fOutxCtsFlow = FALSE;
+	dcb->fOutxDsrFlow = TRUE;
+	break;
+      case FLOW_XOFF:
+	dcb->fOutX = TRUE;
+	dcb->fOutxCtsFlow = FALSE;
+	dcb->fOutxDsrFlow = FALSE;
+	break;
+      }
+      break;
+    }
+    cd++;
+  }
+  if (cd->label == NULL) goto cant_parse;
+  return;
+cant_parse:
+    ExitArgError("Can't parse com port settings", arg);
+}
+
+
+VOID PrintCommSettings(FILE *f, char *name, DCB *dcb)
+{
+  char *flow = "??", *parity = "??", *stopBits = "??";
+  ComboData *cd;
+  
+  cd = cdParity;
+  while (cd->label != NULL) {
+    if (dcb->Parity == cd->value) {
+      parity = cd->label;
+      break;
+    }
+    cd++;
+  }
+  cd = cdStopBits;
+  while (cd->label != NULL) {
+    if (dcb->StopBits == cd->value) {
+      stopBits = cd->label;
+      break;
+    }
+    cd++;
+  }
+  if (dcb->fOutX) {
+    flow = cdFlow[FLOW_XOFF].label;
+  } else if (dcb->fOutxCtsFlow) {
+    flow = cdFlow[FLOW_CTS].label;
+  } else if (dcb->fOutxDsrFlow) {
+    flow = cdFlow[FLOW_DSR].label;
+  } else {
+    flow = cdFlow[FLOW_NONE].label;
+  }
+  fprintf(f, "/%s=%d,%d,%s,%s,%s\n", name,
+    (int)dcb->BaudRate, dcb->ByteSize, parity, stopBits, flow);
+}
+
+
+void
+InitCombo(HANDLE hwndCombo, ComboData *cd)
+{
+  SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0);
+
+  while (cd->label != NULL) {
+    SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) cd->label);
+    cd++;
+  }
+}
+
+void
+SelectComboValue(HANDLE hwndCombo, ComboData *cd, unsigned value)
+{
+  int i;
+
+  i = 0;
+  while (cd->label != NULL) {
+    if (cd->value == value) {
+      SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) i, (LPARAM) 0);
+      return;
+    }
+    cd++;
+    i++;
+  }
+}
+
+LRESULT CALLBACK
+CommPortOptionsDialog(HWND hDlg, UINT message, WPARAM wParam,	LPARAM lParam)
+{
+  char buf[MSG_SIZ];
+  HANDLE hwndCombo;
+  char *p;
+  LRESULT index;
+  unsigned value;
+  int err;
+
+  switch (message) {
+  case WM_INITDIALOG: /* message: initialize dialog box */
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow(hDlg, GW_OWNER));
+    /* Initialize the dialog items */
+    /* !! There should probably be some synchronization
+       in accessing hCommPort and dcb.  Or does modal nature
+       of this dialog box do it for us?
+       */
+    hwndCombo = GetDlgItem(hDlg, OPT_Port);
+    InitCombo(hwndCombo, cdPort);
+    p = strrchr(appData.icsCommPort, '\\');
+    if (p++ == NULL) p = appData.icsCommPort;
+    if ((*p == '\0') ||
+	(SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) p) == CB_ERR)) {
+      SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) "None");
+    }
+    EnableWindow(hwndCombo, hCommPort == NULL); /*!! don't allow change for now*/
+
+    hwndCombo = GetDlgItem(hDlg, OPT_DataRate);
+    InitCombo(hwndCombo, cdDataRate);
+    sprintf(buf, "%u", (int)dcb.BaudRate);
+    if (SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) buf) == CB_ERR) {
+      SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0);
+      SendMessage(hwndCombo, WM_SETTEXT, (WPARAM) 0, (LPARAM) buf);
+    }
+
+    hwndCombo = GetDlgItem(hDlg, OPT_Bits);
+    InitCombo(hwndCombo, cdDataBits);
+    SelectComboValue(hwndCombo, cdDataBits, dcb.ByteSize);
+
+    hwndCombo = GetDlgItem(hDlg, OPT_Parity);
+    InitCombo(hwndCombo, cdParity);
+    SelectComboValue(hwndCombo, cdParity, dcb.Parity);
+
+    hwndCombo = GetDlgItem(hDlg, OPT_StopBits);
+    InitCombo(hwndCombo, cdStopBits);
+    SelectComboValue(hwndCombo, cdStopBits, dcb.StopBits);
+
+    hwndCombo = GetDlgItem(hDlg, OPT_Flow);
+    InitCombo(hwndCombo, cdFlow);
+    if (dcb.fOutX) {
+      SelectComboValue(hwndCombo, cdFlow, FLOW_XOFF);
+    } else if (dcb.fOutxCtsFlow) {
+      SelectComboValue(hwndCombo, cdFlow, FLOW_CTS);
+    } else if (dcb.fOutxDsrFlow) {
+      SelectComboValue(hwndCombo, cdFlow, FLOW_DSR);
+    } else {
+      SelectComboValue(hwndCombo, cdFlow, FLOW_NONE);
+    }
+    return TRUE;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      /* Read changed options from the dialog box */
+#ifdef NOTDEF
+      /* !! Currently we can't change comm ports in midstream */
+      hwndCombo = GetDlgItem(hDlg, OPT_Port);
+      index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
+      if (index == PORT_NONE) {
+	appData.icsCommPort = "";
+	if (hCommPort != NULL) {
+	  CloseHandle(hCommPort);
+	  hCommPort = NULL;
+	}
+	EndDialog(hDlg, TRUE);
+	return TRUE;
+      }
+      SendMessage(hwndCombo, WM_GETTEXT, (WPARAM) MSG_SIZ, (LPARAM) buf);
+      appData.icsCommPort = strdup(buf);
+      if (hCommPort != NULL) {
+	CloseHandle(hCommPort);
+	hCommPort = NULL;
+      }
+      /* now what?? can't really do this; have to fix up the ChildProc
+	 and InputSource records for the comm port that we gave to the
+	 back end. */
+#endif /*NOTDEF*/
+
+      hwndCombo = GetDlgItem(hDlg, OPT_DataRate);
+      SendMessage(hwndCombo, WM_GETTEXT, (WPARAM) MSG_SIZ, (LPARAM) buf);
+      if (sscanf(buf, "%u", &value) != 1) {
+	MessageBox(hDlg, "Invalid data rate",
+		   "Option Error", MB_OK|MB_ICONEXCLAMATION);
+	return TRUE;
+      }
+      dcb.BaudRate = value;
+
+      hwndCombo = GetDlgItem(hDlg, OPT_Bits);
+      index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
+      dcb.ByteSize = cdDataBits[index].value;
+
+      hwndCombo = GetDlgItem(hDlg, OPT_Parity);
+      index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
+      dcb.Parity = cdParity[index].value;
+
+      hwndCombo = GetDlgItem(hDlg, OPT_StopBits);
+      index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
+      dcb.StopBits = cdStopBits[index].value;
+
+      hwndCombo = GetDlgItem(hDlg, OPT_Flow);
+      index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
+      switch (cdFlow[index].value) {
+      case FLOW_NONE:
+	dcb.fOutX = FALSE;
+	dcb.fOutxCtsFlow = FALSE;
+	dcb.fOutxDsrFlow = FALSE;
+	break;
+      case FLOW_CTS:
+	dcb.fOutX = FALSE;
+	dcb.fOutxCtsFlow = TRUE;
+	dcb.fOutxDsrFlow = FALSE;
+	break;
+      case FLOW_DSR:
+	dcb.fOutX = FALSE;
+	dcb.fOutxCtsFlow = FALSE;
+	dcb.fOutxDsrFlow = TRUE;
+	break;
+      case FLOW_XOFF:
+	dcb.fOutX = TRUE;
+	dcb.fOutxCtsFlow = FALSE;
+	dcb.fOutxDsrFlow = FALSE;
+	break;
+      }
+      if (!SetCommState(hCommPort, (LPDCB) &dcb)) {
+	err = GetLastError();
+	switch(MessageBox(hDlg, 
+	                 "Failed to set comm port state;\r\ninvalid options?",
+			 "Option Error", MB_ABORTRETRYIGNORE|MB_ICONQUESTION)) {
+	case IDABORT:
+	  DisplayFatalError("Failed to set comm port state", err, 1);
+	  exit(1);  /*is it ok to do this from here?*/
+
+	case IDRETRY:
+	  return TRUE;
+
+	case IDIGNORE:
+	  EndDialog(hDlg, TRUE);
+	  return TRUE;
+	}
+      }
+
+      EndDialog(hDlg, TRUE);
+      return TRUE;
+
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    default:
+      break;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+VOID
+CommPortOptionsPopup(HWND hwnd)
+{
+  FARPROC lpProc = MakeProcInstance((FARPROC)CommPortOptionsDialog, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_CommPort), hwnd, (DLGPROC) lpProc);
+  FreeProcInstance(lpProc);
+}
+
+/*---------------------------------------------------------------------------*\
+ *
+ * Load Options dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+
+VOID
+SetLoadOptionEnables(HWND hDlg)
+{
+  UINT state;
+
+  state = IsDlgButtonChecked(hDlg, OPT_Autostep);
+  EnableWindow(GetDlgItem(hDlg, OPT_ASTimeDelay), state);
+  EnableWindow(GetDlgItem(hDlg, OPT_AStext1), state);
+}
+
+LRESULT CALLBACK
+LoadOptions(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  char buf[MSG_SIZ];
+  float fnumber;
+
+  switch (message) {
+  case WM_INITDIALOG: /* message: initialize dialog box */
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+    /* Initialize the dialog items */
+    if (appData.timeDelay >= 0.0) {
+      CheckDlgButton(hDlg, OPT_Autostep, TRUE);
+      sprintf(buf, "%.2g", appData.timeDelay);
+      SetDlgItemText(hDlg, OPT_ASTimeDelay, buf);
+    } else {
+      CheckDlgButton(hDlg, OPT_Autostep, FALSE);
+    }
+    SetLoadOptionEnables(hDlg);
+    return TRUE;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      /* Read changed options from the dialog box */
+      if (IsDlgButtonChecked(hDlg, OPT_Autostep)) {
+	GetDlgItemText(hDlg, OPT_ASTimeDelay, buf, MSG_SIZ);
+	if (sscanf(buf, "%f", &fnumber) != 1) {
+	  MessageBox(hDlg, "Invalid load game step rate",
+		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
+	  return FALSE;
+	}
+	appData.timeDelay = fnumber;
+      } else {
+	appData.timeDelay = (float) -1.0;
+      }
+      EndDialog(hDlg, TRUE);
+      return TRUE;
+
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    default:
+      SetLoadOptionEnables(hDlg);
+      break;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+
+VOID 
+LoadOptionsPopup(HWND hwnd)
+{
+  FARPROC lpProc = MakeProcInstance((FARPROC)LoadOptions, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_LoadOptions), hwnd, (DLGPROC) lpProc);
+  FreeProcInstance(lpProc);
+}
+
+/*---------------------------------------------------------------------------*\
+ *
+ * Save Options dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+
+VOID
+SetSaveOptionEnables(HWND hDlg)
+{
+  UINT state;
+
+  state = IsDlgButtonChecked(hDlg, OPT_Autosave);
+  EnableWindow(GetDlgItem(hDlg, OPT_AVPrompt), state);
+  EnableWindow(GetDlgItem(hDlg, OPT_AVToFile), state);
+  if (state && !IsDlgButtonChecked(hDlg, OPT_AVPrompt) &&
+      !IsDlgButtonChecked(hDlg, OPT_AVToFile)) {
+    CheckRadioButton(hDlg, OPT_AVPrompt, OPT_AVToFile, OPT_AVPrompt);
+  }
+
+  state = state && IsDlgButtonChecked(hDlg, OPT_AVToFile);
+  EnableWindow(GetDlgItem(hDlg, OPT_AVFilename), state);
+  EnableWindow(GetDlgItem(hDlg, OPT_AVBrowse), state);
+}
+
+LRESULT CALLBACK
+SaveOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  char buf[MSG_SIZ];
+  FILE *f;
+
+  switch (message) {
+  case WM_INITDIALOG: /* message: initialize dialog box */
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+    /* Initialize the dialog items */
+    if (*appData.saveGameFile != NULLCHAR) {
+      CheckDlgButton(hDlg, OPT_Autosave, (UINT) TRUE);
+      CheckRadioButton(hDlg, OPT_AVPrompt, OPT_AVToFile, OPT_AVToFile);
+      SetDlgItemText(hDlg, OPT_AVFilename, appData.saveGameFile);
+    } else if (appData.autoSaveGames) {
+      CheckDlgButton(hDlg, OPT_Autosave, (UINT) TRUE);
+      CheckRadioButton(hDlg, OPT_AVPrompt, OPT_AVToFile, OPT_AVPrompt);
+    } else {
+      CheckDlgButton(hDlg, OPT_Autosave, (UINT) FALSE);
+    }
+    if (appData.oldSaveStyle) {
+      CheckRadioButton(hDlg, OPT_PGN, OPT_Old, OPT_Old);
+    } else {
+      CheckRadioButton(hDlg, OPT_PGN, OPT_Old, OPT_PGN);
+    }
+    CheckDlgButton( hDlg, OPT_OutOfBookInfo, appData.saveOutOfBookInfo );
+    SetSaveOptionEnables(hDlg);
+    return TRUE;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      /* Read changed options from the dialog box */
+      if (IsDlgButtonChecked(hDlg, OPT_Autosave)) {
+	appData.autoSaveGames = TRUE;
+	if (IsDlgButtonChecked(hDlg, OPT_AVPrompt)) {
+	  appData.saveGameFile = "";
+	} else /*if (IsDlgButtonChecked(hDlg, OPT_AVToFile))*/ {
+	  GetDlgItemText(hDlg, OPT_AVFilename, buf, MSG_SIZ);
+	  if (*buf == NULLCHAR) {
+	    MessageBox(hDlg, "Invalid save game file name",
+		       "Option Error", MB_OK|MB_ICONEXCLAMATION);
+	    return FALSE;
+	  }
+	  if ((isalpha(buf[0]) && buf[1] == ':') ||
+	    (buf[0] == '\\' && buf[1] == '\\')) {
+	    appData.saveGameFile = strdup(buf);
+	  } else {
+	    char buf2[MSG_SIZ], buf3[MSG_SIZ];
+	    char *dummy;
+	    GetCurrentDirectory(MSG_SIZ, buf3);
+	    SetCurrentDirectory(installDir);
+	    if (GetFullPathName(buf, MSG_SIZ, buf2, &dummy)) {
+	      appData.saveGameFile = strdup(buf2);
+	    } else {
+	      appData.saveGameFile = strdup(buf);
+	    }
+	    SetCurrentDirectory(buf3);
+	  }
+	}
+      } else {
+	appData.autoSaveGames = FALSE;
+	appData.saveGameFile = "";
+      }
+      appData.oldSaveStyle = IsDlgButtonChecked(hDlg, OPT_Old);
+      appData.saveOutOfBookInfo = IsDlgButtonChecked( hDlg, OPT_OutOfBookInfo );
+      EndDialog(hDlg, TRUE);
+      return TRUE;
+
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    case OPT_AVBrowse:
+      f = OpenFileDialog(hDlg, "a", NULL, 
+	                 appData.oldSaveStyle ? "gam" : "pgn", 
+   	                 GAME_FILT, "Browse for Auto Save File", 
+			 NULL, NULL, buf);
+      if (f != NULL) {
+	fclose(f);
+	SetDlgItemText(hDlg, OPT_AVFilename, buf);
+      }
+      break;
+
+    default:
+      SetSaveOptionEnables(hDlg);
+      break;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+VOID
+SaveOptionsPopup(HWND hwnd)
+{
+  FARPROC lpProc = MakeProcInstance((FARPROC)SaveOptionsDialog, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_SaveOptions), hwnd, (DLGPROC) lpProc);
+  FreeProcInstance(lpProc);
+}
+
+/*---------------------------------------------------------------------------*\
+ *
+ * Time Control Options dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+
+VOID
+SetTimeControlEnables(HWND hDlg)
+{
+  UINT state;
+
+  state = IsDlgButtonChecked(hDlg, OPT_TCUseMoves);
+  EnableWindow(GetDlgItem(hDlg, OPT_TCTime), state);
+  EnableWindow(GetDlgItem(hDlg, OPT_TCMoves), state);
+  EnableWindow(GetDlgItem(hDlg, OPT_TCtext1), state);
+  EnableWindow(GetDlgItem(hDlg, OPT_TCtext2), state);
+  EnableWindow(GetDlgItem(hDlg, OPT_TCTime2), !state);
+  EnableWindow(GetDlgItem(hDlg, OPT_TCInc), !state);
+  EnableWindow(GetDlgItem(hDlg, OPT_TCitext1), !state);
+  EnableWindow(GetDlgItem(hDlg, OPT_TCitext2), !state);
+  EnableWindow(GetDlgItem(hDlg, OPT_TCitext3), !state);
+}
+
+
+LRESULT CALLBACK
+TimeControl(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  char buf[MSG_SIZ];
+  int mps, increment, odds1, odds2;
+  BOOL ok, ok2;
+
+  switch (message) {
+  case WM_INITDIALOG: /* message: initialize dialog box */
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+    /* Initialize the dialog items */
+    if (appData.clockMode && !appData.icsActive) {
+      if (appData.timeIncrement == -1) {
+	CheckRadioButton(hDlg, OPT_TCUseMoves, OPT_TCUseInc,
+			 OPT_TCUseMoves);
+	SetDlgItemText(hDlg, OPT_TCTime, appData.timeControl);
+	SetDlgItemInt(hDlg, OPT_TCMoves, appData.movesPerSession,
+		      FALSE);
+	SetDlgItemText(hDlg, OPT_TCTime2, "");
+	SetDlgItemText(hDlg, OPT_TCInc, "");
+      } else {
+	CheckRadioButton(hDlg, OPT_TCUseMoves, OPT_TCUseInc,
+			 OPT_TCUseInc);
+	SetDlgItemText(hDlg, OPT_TCTime, "");
+	SetDlgItemText(hDlg, OPT_TCMoves, "");
+	SetDlgItemText(hDlg, OPT_TCTime2, appData.timeControl);
+	SetDlgItemInt(hDlg, OPT_TCInc, appData.timeIncrement, FALSE);
+      }
+      SetDlgItemInt(hDlg, OPT_TCOdds1, 1, FALSE);
+      SetDlgItemInt(hDlg, OPT_TCOdds2, 1, FALSE);
+      SetTimeControlEnables(hDlg);
+    }
+    return TRUE;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      /* Read changed options from the dialog box */
+      if (IsDlgButtonChecked(hDlg, OPT_TCUseMoves)) {
+	increment = -1;
+	mps = GetDlgItemInt(hDlg, OPT_TCMoves, &ok, FALSE);
+	if (!ok || mps <= 0) {
+	  MessageBox(hDlg, "Invalid moves per time control",
+		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
+	  return FALSE;
+	}
+	GetDlgItemText(hDlg, OPT_TCTime, buf, MSG_SIZ);
+	if (!ParseTimeControl(buf, increment, mps)) {
+	  MessageBox(hDlg, "Invalid minutes per time control",
+		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
+	  return FALSE;
+	}
+      } else {
+	increment = GetDlgItemInt(hDlg, OPT_TCInc, &ok, FALSE);
+	mps = appData.movesPerSession;
+	if (!ok || increment < 0) {
+	  MessageBox(hDlg, "Invalid increment",
+		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
+	  return FALSE;
+	}
+	GetDlgItemText(hDlg, OPT_TCTime2, buf, MSG_SIZ);
+	if (!ParseTimeControl(buf, increment, mps)) {
+	  MessageBox(hDlg, "Invalid initial time",
+		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
+	  return FALSE;
+	}
+      }
+      odds1 = GetDlgItemInt(hDlg, OPT_TCOdds1, &ok, FALSE);
+      odds2 = GetDlgItemInt(hDlg, OPT_TCOdds2, &ok2, FALSE);
+      if (!ok || !ok2 || odds1 <= 0 || odds2 <= 0) {
+	  MessageBox(hDlg, "Invalid time-odds factor",
+		     "Option Error", MB_OK|MB_ICONEXCLAMATION);
+	  return FALSE;
+      }
+      appData.timeControl = strdup(buf);
+      appData.movesPerSession = mps;
+      appData.timeIncrement = increment;
+      appData.firstTimeOdds  = first.timeOdds  = odds1;
+      appData.secondTimeOdds = second.timeOdds = odds2;
+      Reset(TRUE, TRUE);
+      EndDialog(hDlg, TRUE);
+      return TRUE;
+
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    default:
+      SetTimeControlEnables(hDlg);
+      break;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+VOID
+TimeControlOptionsPopup(HWND hwnd)
+{
+  if (gameMode != BeginningOfGame) {
+    DisplayError("Changing time control during a game is not implemented", 0);
+  } else {
+    FARPROC lpProc = MakeProcInstance((FARPROC)TimeControl, hInst);
+    DialogBox(hInst, MAKEINTRESOURCE(DLG_TimeControl), hwnd, (DLGPROC) lpProc);
+    FreeProcInstance(lpProc);
+  }
+}
+
+/*---------------------------------------------------------------------------*\
+ *
+ * Engine Options Dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+#define CHECK_BOX(x,y) CheckDlgButton(hDlg, (x), (BOOL)(y))
+#define IS_CHECKED(x) (Boolean)IsDlgButtonChecked(hDlg, (x))
+
+#define INT_ABS( n )    ((n) >= 0 ? (n) : -(n))
+
+LRESULT CALLBACK EnginePlayOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  switch (message) {
+  case WM_INITDIALOG: /* message: initialize dialog box */
+
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+
+    /* Initialize the dialog items */
+    CHECK_BOX(IDC_EpPeriodicUpdates, appData.periodicUpdates);
+    CHECK_BOX(IDC_EpPonder, appData.ponderNextMove);
+    CHECK_BOX(IDC_EpShowThinking, appData.showThinking);
+    CHECK_BOX(IDC_EpHideThinkingHuman, appData.hideThinkingFromHuman);
+
+    CHECK_BOX(IDC_TestClaims, appData.testClaims);
+    CHECK_BOX(IDC_DetectMates, appData.checkMates);
+    CHECK_BOX(IDC_MaterialDraws, appData.materialDraws);
+    CHECK_BOX(IDC_TrivialDraws, appData.trivialDraws);
+
+    CHECK_BOX(IDC_ScoreAbs1, appData.firstScoreIsAbsolute);
+    CHECK_BOX(IDC_ScoreAbs2, appData.secondScoreIsAbsolute);
+
+    SetDlgItemInt( hDlg, IDC_EpDrawMoveCount, appData.adjudicateDrawMoves, TRUE );
+    SendDlgItemMessage( hDlg, IDC_EpDrawMoveCount, EM_SETSEL, 0, -1 );
+
+    SetDlgItemInt( hDlg, IDC_EpAdjudicationThreshold, INT_ABS(appData.adjudicateLossThreshold), TRUE );
+    SendDlgItemMessage( hDlg, IDC_EpAdjudicationThreshold, EM_SETSEL, 0, -1 );
+
+    SetDlgItemInt( hDlg, IDC_RuleMoves, appData.ruleMoves, TRUE );
+    SendDlgItemMessage( hDlg, IDC_RuleMoves, EM_SETSEL, 0, -1 );
+
+    SetDlgItemInt( hDlg, IDC_DrawRepeats, INT_ABS(appData.drawRepeats), TRUE );
+    SendDlgItemMessage( hDlg, IDC_DrawRepeats, EM_SETSEL, 0, -1 );
+
+    return TRUE;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      /* Read changed options from the dialog box */
+      PeriodicUpdatesEvent(          IS_CHECKED(IDC_EpPeriodicUpdates));
+      PonderNextMoveEvent(           IS_CHECKED(IDC_EpPonder));
+      appData.hideThinkingFromHuman= IS_CHECKED(IDC_EpHideThinkingHuman); // [HGM] thinking: moved up
+#if 0
+      ShowThinkingEvent(             IS_CHECKED(IDC_EpShowThinking));
+#else
+      appData.showThinking   = IS_CHECKED(IDC_EpShowThinking);
+      ShowThinkingEvent(); // [HGM] thinking: tests all options that need thinking output
+#endif
+      appData.testClaims    = IS_CHECKED(IDC_TestClaims);
+      appData.checkMates    = IS_CHECKED(IDC_DetectMates);
+      appData.materialDraws = IS_CHECKED(IDC_MaterialDraws);
+      appData.trivialDraws  = IS_CHECKED(IDC_TrivialDraws);
+
+      appData.adjudicateDrawMoves = GetDlgItemInt(hDlg, IDC_EpDrawMoveCount, NULL, FALSE );
+      appData.adjudicateLossThreshold = - (int) GetDlgItemInt(hDlg, IDC_EpAdjudicationThreshold, NULL, FALSE );
+      appData.ruleMoves = GetDlgItemInt(hDlg, IDC_RuleMoves, NULL, FALSE );
+      appData.drawRepeats = (int) GetDlgItemInt(hDlg, IDC_DrawRepeats, NULL, FALSE );
+
+      appData.firstScoreIsAbsolute  = IS_CHECKED(IDC_ScoreAbs1);
+      appData.secondScoreIsAbsolute = IS_CHECKED(IDC_ScoreAbs2);
+
+      EndDialog(hDlg, TRUE);
+      return TRUE;
+
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    case IDC_EpDrawMoveCount:
+    case IDC_EpAdjudicationThreshold:
+    case IDC_DrawRepeats:
+    case IDC_RuleMoves:
+        if( HIWORD(wParam) == EN_CHANGE ) {
+            int n1_ok;
+            int n2_ok;
+            int n3_ok;
+            int n4_ok;
+
+            GetDlgItemInt(hDlg, IDC_EpDrawMoveCount, &n1_ok, FALSE );
+            GetDlgItemInt(hDlg, IDC_EpAdjudicationThreshold, &n2_ok, FALSE );
+            GetDlgItemInt(hDlg, IDC_RuleMoves, &n3_ok, FALSE );
+            GetDlgItemInt(hDlg, IDC_DrawRepeats, &n4_ok, FALSE );
+
+            EnableWindow( GetDlgItem(hDlg, IDOK), n1_ok && n2_ok && n3_ok && n4_ok ? TRUE : FALSE );
+        }
+        return TRUE;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+VOID EnginePlayOptionsPopup(HWND hwnd)
+{
+  FARPROC lpProc;
+
+  lpProc = MakeProcInstance((FARPROC)EnginePlayOptionsDialog, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_EnginePlayOptions), hwnd, (DLGPROC) lpProc);
+  FreeProcInstance(lpProc);
+}
+
+/*---------------------------------------------------------------------------*\
+ *
+ * UCI Options Dialog functions
+ *
+\*---------------------------------------------------------------------------*/
+static BOOL BrowseForFolder( const char * title, char * path )
+{
+    BOOL result = FALSE;
+    BROWSEINFO bi;
+    LPITEMIDLIST pidl;
+
+    ZeroMemory( &bi, sizeof(bi) );
+
+    bi.lpszTitle = title == 0 ? "Choose Folder" : title;
+    bi.ulFlags = BIF_RETURNONLYFSDIRS;
+
+    pidl = SHBrowseForFolder( &bi );
+
+    if( pidl != 0 ) {
+        IMalloc * imalloc = 0;
+
+        if( SHGetPathFromIDList( pidl, path ) ) {
+            result = TRUE;
+        }
+
+        if( SUCCEEDED( SHGetMalloc ( &imalloc ) ) ) {
+            imalloc->lpVtbl->Free(imalloc,pidl);
+            imalloc->lpVtbl->Release(imalloc);
+        }
+    }
+
+    return result;
+}
+
+LRESULT CALLBACK UciOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+  char buf[MAX_PATH];
+  int oldCores;
+
+  switch (message) {
+  case WM_INITDIALOG: /* message: initialize dialog box */
+
+    /* Center the dialog over the application window */
+    CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+
+    /* Initialize the dialog items */
+    SetDlgItemText( hDlg, IDC_PolyglotDir, appData.polyglotDir );
+    SetDlgItemInt( hDlg, IDC_HashSize, appData.defaultHashSize, TRUE );
+    SetDlgItemText( hDlg, IDC_PathToEGTB, appData.defaultPathEGTB );
+    SetDlgItemInt( hDlg, IDC_SizeOfEGTB, appData.defaultCacheSizeEGTB, TRUE );
+    CheckDlgButton( hDlg, IDC_UseBook, (BOOL) appData.usePolyglotBook );
+    SetDlgItemText( hDlg, IDC_BookFile, appData.polyglotBook );
+    // [HGM] smp: input field for nr of cores:
+    SetDlgItemInt( hDlg, IDC_Cores, appData.smpCores, TRUE );
+    // [HGM] book: tick boxes for own book use
+    CheckDlgButton( hDlg, IDC_OwnBook1, (BOOL) appData.firstHasOwnBookUCI );
+    CheckDlgButton( hDlg, IDC_OwnBook2, (BOOL) appData.secondHasOwnBookUCI );
+
+    SendDlgItemMessage( hDlg, IDC_PolyglotDir, EM_SETSEL, 0, -1 );
+
+    return TRUE;
+
+  case WM_COMMAND: /* message: received a command */
+    switch (LOWORD(wParam)) {
+    case IDOK:
+      GetDlgItemText( hDlg, IDC_PolyglotDir, buf, sizeof(buf) );
+      appData.polyglotDir = strdup(buf);
+      appData.defaultHashSize = GetDlgItemInt(hDlg, IDC_HashSize, NULL, FALSE );
+      appData.defaultCacheSizeEGTB = GetDlgItemInt(hDlg, IDC_SizeOfEGTB, NULL, FALSE );
+      GetDlgItemText( hDlg, IDC_PathToEGTB, buf, sizeof(buf) );
+      appData.defaultPathEGTB = strdup(buf);
+      GetDlgItemText( hDlg, IDC_BookFile, buf, sizeof(buf) );
+      appData.polyglotBook = strdup(buf);
+      appData.usePolyglotBook = (Boolean) IsDlgButtonChecked( hDlg, IDC_UseBook );
+      // [HGM] smp: get nr of cores:
+      oldCores = appData.smpCores;
+      appData.smpCores = GetDlgItemInt(hDlg, IDC_Cores, NULL, FALSE );
+      if(appData.smpCores != oldCores) NewSettingEvent(FALSE, "cores", appData.smpCores);
+      // [HGM] book: read tick boxes for own book use
+      appData.firstHasOwnBookUCI  = (Boolean) IsDlgButtonChecked( hDlg, IDC_OwnBook1 );
+      appData.secondHasOwnBookUCI = (Boolean) IsDlgButtonChecked( hDlg, IDC_OwnBook2 );
+
+      if(gameMode == BeginningOfGame) Reset(TRUE, TRUE);
+      EndDialog(hDlg, TRUE);
+      return TRUE;
+
+    case IDCANCEL:
+      EndDialog(hDlg, FALSE);
+      return TRUE;
+
+    case IDC_BrowseForBook:
+      {
+          char filter[] = { 
+              'A','l','l',' ','F','i','l','e','s', 0,
+              '*','.','*', 0,
+              'B','I','N',' ','F','i','l','e','s', 0,
+              '*','.','b','i','n', 0,
+              0 };
+
+          OPENFILENAME ofn;
+
+          strcpy( buf, "" );
+
+          ZeroMemory( &ofn, sizeof(ofn) );
+
+          ofn.lStructSize = sizeof(ofn);
+          ofn.hwndOwner = hDlg;
+          ofn.hInstance = hInst;
+          ofn.lpstrFilter = filter;
+          ofn.lpstrFile = buf;
+          ofn.nMaxFile = sizeof(buf);
+          ofn.lpstrTitle = "Choose Book";
+          ofn.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_HIDEREADONLY;
+
+          if( GetOpenFileName( &ofn ) ) {
+              SetDlgItemText( hDlg, IDC_BookFile, buf );
+          }
+      }
+      return TRUE;
+
+    case IDC_BrowseForPolyglotDir:
+      if( BrowseForFolder( "Choose Polyglot Directory", buf ) ) {
+        SetDlgItemText( hDlg, IDC_PolyglotDir, buf );
+
+        strcat( buf, "\\polyglot.exe" );
+
+        if( GetFileAttributes(buf) == 0xFFFFFFFF ) {
+            MessageBox( hDlg, "Polyglot was not found in the specified folder!", "Warning", MB_OK | MB_ICONWARNING );
+        }
+      }
+      return TRUE;
+
+    case IDC_BrowseForEGTB:
+      if( BrowseForFolder( "Choose EGTB Directory:", buf ) ) {
+        SetDlgItemText( hDlg, IDC_PathToEGTB, buf );
+      }
+      return TRUE;
+
+    case IDC_HashSize:
+    case IDC_SizeOfEGTB:
+        if( HIWORD(wParam) == EN_CHANGE ) {
+            int n1_ok;
+            int n2_ok;
+
+            GetDlgItemInt(hDlg, IDC_HashSize, &n1_ok, FALSE );
+            GetDlgItemInt(hDlg, IDC_SizeOfEGTB, &n2_ok, FALSE );
+
+            EnableWindow( GetDlgItem(hDlg, IDOK), n1_ok && n2_ok ? TRUE : FALSE );
+        }
+        return TRUE;
+    }
+    break;
+  }
+  return FALSE;
+}
+
+VOID UciOptionsPopup(HWND hwnd)
+{
+  FARPROC lpProc;
+
+  lpProc = MakeProcInstance((FARPROC)UciOptionsDialog, hInst);
+  DialogBox(hInst, MAKEINTRESOURCE(DLG_OptionsUCI), hwnd, (DLGPROC) lpProc);
+  FreeProcInstance(lpProc);
+}
diff --git a/winboard/woptions.h b/winboard/woptions.h
index a35d6a6..59ec82c 100644
--- a/winboard/woptions.h
+++ b/winboard/woptions.h
@@ -2,24 +2,25 @@
  * woptions.h -- Options dialog box routines for WinBoard
  * $Id: 
  *
- * Copyright 2000 Free Software Foundation, Inc.
+ * Copyright 2000,2009 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include <windows.h>
 
@@ -32,3 +33,7 @@ VOID CommPortOptionsPopup(HWND hwnd);
 VOID LoadOptionsPopup(HWND hwnd);
 VOID SaveOptionsPopup(HWND hwnd);
 VOID TimeControlOptionsPopup(HWND hwnd);
+VOID EnginePlayOptionsPopup(HWND hwnd);
+VOID UciOptionsPopup(HWND hwnd);
+
+
diff --git a/winboard/wsnap.c b/winboard/wsnap.c
new file mode 100644
index 0000000..df57d4a
--- /dev/null
+++ b/winboard/wsnap.c
@@ -0,0 +1,206 @@
+/*
+ * Smart "snapping" for window moving and sizing
+ *
+ * Author: Alessandro Scotti (Dec 2005)
+ *
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "wsnap.h"
+
+/* Imports from winboard.c */
+extern HINSTANCE hInst;
+
+extern HWND hwndMain;
+extern HWND moveHistoryDialog;
+extern HWND evalGraphDialog;
+extern HWND engineOutputDialog;
+extern HWND gameListDialog;
+
+static BOOL SnappingEnabled = TRUE;
+
+static void AddSnapPoint( int * grid, int * grid_len, int value )
+{
+    int len = *grid_len;
+
+    if( len < MAX_SNAP_POINTS ) {
+        int i;
+
+        for( i=0; i<len; i++ ) {
+            if( grid[i] == value ) {
+                return;
+            }
+        }
+
+        grid[ len++ ] = value;
+
+        *grid_len = len;
+    }
+}
+
+static void AddSnapRectangle( SnapData * sd, RECT * rc )
+{
+    AddSnapPoint( sd->x_grid, &sd->x_grid_len, rc->left );
+    AddSnapPoint( sd->x_grid, &sd->x_grid_len, rc->right );
+
+    AddSnapPoint( sd->y_grid, &sd->y_grid_len, rc->top );
+    AddSnapPoint( sd->y_grid, &sd->y_grid_len, rc->bottom );
+}
+
+static void AddSnapWindow( HWND hWndCaller, SnapData * sd, HWND hWndSnapWindow )
+{
+    if( hWndSnapWindow != NULL && hWndCaller != hWndSnapWindow && IsWindowVisible(hWndSnapWindow) ) {
+        RECT rc;
+
+        GetWindowRect( hWndSnapWindow, &rc );
+
+        AddSnapRectangle( sd, &rc );
+    }
+}
+
+static BOOL AdjustToSnapPoint( int * grid, int grid_len, int value, int * snap_size, int * delta )
+{
+    BOOL result = FALSE;
+    int i;
+
+    for( i=0; i<grid_len; i++ ) {
+        int distance = value - grid[i];
+
+        if( distance < 0 ) distance = -distance;
+
+        if( distance < *snap_size ) {
+            result = TRUE;
+            *snap_size = distance;
+            *delta = grid[i] - value;
+        }
+    }
+
+    return result;
+}
+
+LRESULT OnEnterSizeMove( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam )
+{
+    RECT rc;
+
+    snapData->x_grid_len = 0;
+    snapData->y_grid_len = 0;
+
+    /* Add desktop area */
+    if( SystemParametersInfo( SPI_GETWORKAREA, 0, &rc, 0 ) ) {
+        AddSnapRectangle( snapData, &rc );
+    }
+
+    if( hWnd != hwndMain ) {
+        /* Add other windows */
+        AddSnapWindow( hWnd, snapData, hwndMain );
+        AddSnapWindow( hWnd, snapData, moveHistoryDialog );
+        AddSnapWindow( hWnd, snapData, evalGraphDialog );
+        AddSnapWindow( hWnd, snapData, engineOutputDialog );
+        AddSnapWindow( hWnd, snapData, gameListDialog );
+    }
+
+    return 0;
+}
+
+LRESULT OnMoving( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam )
+{
+    LPRECT lprc = (LPRECT) lParam;
+    int delta_x = 0;
+    int delta_y = 0;
+    int snap_size_x = SNAP_DISTANCE;
+    int snap_size_y = SNAP_DISTANCE;
+
+    if( ! SnappingEnabled ) {
+        return FALSE;
+    }
+
+    AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->left, &snap_size_x, &delta_x );
+    AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->right, &snap_size_x, &delta_x );
+
+    AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->top, &snap_size_y, &delta_y );
+    AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->bottom, &snap_size_y, &delta_y );
+
+    OffsetRect( lprc, delta_x, delta_y );
+
+    return TRUE;
+}
+
+LRESULT OnSizing( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam )
+{
+    LPRECT lprc = (LPRECT) lParam;
+    int delta_x = 0;
+    int delta_y = 0;
+    int snap_size_x = SNAP_DISTANCE;
+    int snap_size_y = SNAP_DISTANCE;
+
+    if( ! SnappingEnabled ) {
+        return FALSE;
+    }
+
+    switch( wParam ) {
+    case WMSZ_BOTTOM:
+        AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->bottom, &snap_size_y, &delta_y );
+        lprc->bottom += delta_y;
+        break;
+    case WMSZ_BOTTOMLEFT:
+        AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->bottom, &snap_size_y, &delta_y );
+        lprc->bottom += delta_y;
+        AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->left, &snap_size_x, &delta_x );
+        lprc->left += delta_x;
+        break;
+    case WMSZ_BOTTOMRIGHT:
+        AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->bottom, &snap_size_y, &delta_y );
+        lprc->bottom += delta_y;
+        AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->right, &snap_size_x, &delta_x );
+        lprc->right += delta_x;
+        break;
+    case WMSZ_LEFT:
+        AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->left, &snap_size_x, &delta_x );
+        lprc->left += delta_x;
+        break;
+    case WMSZ_RIGHT:
+        AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->right, &snap_size_x, &delta_x );
+        lprc->right += delta_x;
+        break;
+    case WMSZ_TOP:
+        AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->top, &snap_size_y, &delta_y );
+        lprc->top += delta_y;
+        break;
+    case WMSZ_TOPLEFT:
+        AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->top, &snap_size_y, &delta_y );
+        lprc->top += delta_y;
+        AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->left, &snap_size_x, &delta_x );
+        lprc->left += delta_x;
+        break;
+    case WMSZ_TOPRIGHT:
+        AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->top, &snap_size_y, &delta_y );
+        lprc->top += delta_y;
+        AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->right, &snap_size_x, &delta_x );
+        lprc->right += delta_x;
+        break;
+    default:
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+LRESULT OnExitSizeMove( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam )
+{
+    return 0;
+}
diff --git a/winboard/wsnap.h b/winboard/wsnap.h
new file mode 100644
index 0000000..aabfb51
--- /dev/null
+++ b/winboard/wsnap.h
@@ -0,0 +1,44 @@
+/*
+ * Smart "snapping" for window moving and sizing
+ *
+ * Author: Alessandro Scotti (Dec 2005)
+ *
+ * ------------------------------------------------------------------------
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#ifndef WSNAP_H_
+#define WSNAP_H_
+
+#include <windows.h>
+
+#define MAX_SNAP_POINTS     12
+
+#define SNAP_DISTANCE       4
+
+typedef struct {
+    int x_grid[ MAX_SNAP_POINTS ];
+    int x_grid_len;
+    int y_grid[ MAX_SNAP_POINTS ];
+    int y_grid_len;
+} SnapData;
+
+LRESULT OnEnterSizeMove( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam );
+LRESULT OnMoving( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam );
+LRESULT OnSizing( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam );
+LRESULT OnExitSizeMove( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam );
+
+#endif // WSNAP_H_
diff --git a/winboard/wsockerr.c b/winboard/wsockerr.c
index f83ef71..7c964eb 100644
--- a/winboard/wsockerr.c
+++ b/winboard/wsockerr.c
@@ -1,3 +1,25 @@
+/*
+ * wsockerr.c
+ *
+ * Copyright 2009 Free Software Foundation, Inc.
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
 /* Windows sockets error map */
 /* These messages ought to be in the Windows message catalog! */
 
@@ -5,7 +27,7 @@
 #include <winsock.h>
 #include "wsockerr.h"
 
-ErrorMap errmap[] = 
+ErrorMap errmap[] =
 { {WSAEINTR, "Interrupted system call"},
   {WSAEBADF, "Bad file number"},
   {WSAEACCES, "Permission denied"},
diff --git a/winboard/wsockerr.h b/winboard/wsockerr.h
index d83eb94..93069d8 100644
--- a/winboard/wsockerr.h
+++ b/winboard/wsockerr.h
@@ -1,3 +1,25 @@
+/*
+ * wsockerr.h
+ *
+ * Copyright 2009 Free Software Foundation, Inc.
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
 /* Windows sockets error map */
 /* These messages ought to be in the Windows message catalog! */
 
diff --git a/xboard.c b/xboard.c
index aa11b92..c4360fc 100644
--- a/xboard.c
+++ b/xboard.c
@@ -2,8 +2,10 @@
  * xboard.c -- X front end for XBoard
  * $Id: xboard.c,v 2.2 2003/11/06 07:22:14 mann Exp $
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-2001 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
@@ -27,26 +29,25 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
  *
- * See the file ChangeLog for a revision history.
- */
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include "config.h"
 
@@ -169,6 +170,9 @@ extern char *getenv();
 #include <X11/Xaw/AsciiText.h>
 #endif
 
+// [HGM] bitmaps: put before incuding the bitmaps / pixmaps, to know how many piece types there are.
+#include "common.h"
+
 #if HAVE_LIBXPM
 #include <X11/xpm.h>
 #include "pixmaps/pixmaps.h"
@@ -182,7 +186,6 @@ extern char *getenv();
 #include "bitmaps/icon_black.bm"
 #include "bitmaps/checkmark.bm"
 
-#include "common.h"
 #include "frontend.h"
 #include "backend.h"
 #include "moves.h"
@@ -191,6 +194,15 @@ extern char *getenv();
 #include "xgamelist.h"
 #include "xhistory.h"
 #include "xedittags.h"
+#include "gettext.h"
+
+// must be moved to xengineoutput.h
+
+void EngineOutputProc P((Widget w, XEvent *event,
+ String *prms, Cardinal *nprms));
+
+void EngineOutputPopDown();
+
 
 #ifdef __EMX__
 #ifndef HAVE_USLEEP
@@ -199,6 +211,14 @@ extern char *getenv();
 #define usleep(t)   _sleep2(((t)+500)/1000)
 #endif
 
+#ifdef ENABLE_NLS
+# define  _(s) gettext (s)
+# define N_(s) gettext_noop (s)
+#else
+# define  _(s) (s)
+# define N_(s)  s
+#endif
+
 typedef struct {
     String string;
     XtActionProc proc;
@@ -240,7 +260,7 @@ void BlackClock P((Widget w, XEvent *event,
 		   String *prms, Cardinal *nprms));
 void DrawPositionProc P((Widget w, XEvent *event,
 		     String *prms, Cardinal *nprms));
-void XDrawPosition P((Widget w, /*Boolean*/int repaint, 
+void XDrawPosition P((Widget w, /*Boolean*/int repaint,
 		     Board board));
 void CommentPopUp P((char *title, char *label));
 void CommentPopDown P((void));
@@ -326,6 +346,9 @@ void DrawProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void AbortProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void AdjournProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void ResignProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void AdjuWhiteProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void AdjuBlackProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void AdjuDrawProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void EnterKeyProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void StopObservingProc P((Widget w, XEvent *event, String *prms,
 			  Cardinal *nprms));
@@ -383,6 +406,8 @@ void ShowCoordsProc P((Widget w, XEvent *event, String *prms,
 		       Cardinal *nprms));
 void ShowThinkingProc P((Widget w, XEvent *event, String *prms,
 			 Cardinal *nprms));
+void HideThinkingProc P((Widget w, XEvent *event, String *prms,
+			 Cardinal *nprms));
 void TestLegalityProc P((Widget w, XEvent *event, String *prms,
 			  Cardinal *nprms));
 void InfoProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
@@ -407,7 +432,20 @@ static void DragPieceMove P((int x, int y));
 static void DragPieceEnd P((int x, int y));
 static void DrawDragPiece P((void));
 char *ModeToWidgetName P((GameMode mode));
-
+void EngineOutputUpdate( FrontEndProgramStats * stats );
+void ShuffleMenuProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void EngineMenuProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void UciMenuProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void TimeControlProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void NewVariantProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void FirstSettingsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void SecondSettingsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void ShufflePopDown P(());
+void EnginePopDown P(());
+void UciPopDown P(());
+void TimeControlPopDown P(());
+void NewVariantPopDown P(());
+void SettingsPopDown P(());
 /*
 * XBoard depends on Xt R4 or higher
 */
@@ -420,28 +458,30 @@ Pixel lightSquareColor, darkSquareColor, whitePieceColor, blackPieceColor,
   jailSquareColor, highlightSquareColor, premoveHighlightColor;
 GC lightSquareGC, darkSquareGC, jailSquareGC, lineGC, wdPieceGC, wlPieceGC,
   bdPieceGC, blPieceGC, wbPieceGC, bwPieceGC, coordGC, highlineGC,
-  wjPieceGC, bjPieceGC, prelineGC;
+  wjPieceGC, bjPieceGC, prelineGC, countGC;
 Pixmap iconPixmap, wIconPixmap, bIconPixmap, xMarkPixmap;
-Widget shellWidget, layoutWidget, formWidget, boardWidget, messageWidget, 
-  whiteTimerWidget, blackTimerWidget, titleWidget, widgetList[16], 
+Widget shellWidget, layoutWidget, formWidget, boardWidget, messageWidget,
+  whiteTimerWidget, blackTimerWidget, titleWidget, widgetList[16],
   commentShell, promotionShell, whitePieceMenu, blackPieceMenu, dropMenu,
   menuBarWidget, buttonBarWidget, editShell, errorShell, analysisShell,
   ICSInputShell, fileNameShell, askQuestionShell;
 XSegment gridSegments[(BOARD_SIZE + 1) * 2];
 XSegment jailGridSegments[(BOARD_SIZE + 3) * 2];
-Font clockFontID, coordFontID;
-XFontStruct *clockFontStruct, *coordFontStruct;
+Font clockFontID, coordFontID, countFontID;
+XFontStruct *clockFontStruct, *coordFontStruct, *countFontStruct;
 XtAppContext appContext;
 char *layoutName;
 char *oldICSInteractionTitle;
 
 FileProc fileProc;
 char *fileOpenMode;
+char installDir[] = "."; // [HGM] UCI: needed for UCI; probably needs run-time initializtion
 
 Position commentX = -1, commentY = -1;
 Dimension commentW, commentH;
 
 int squareSize, smallLayout = 0, tinyLayout = 0,
+  marginW, marginH, // [HGM] for run-time resizing
   fromX = -1, fromY = -1, toX, toY, commentUp = False, analysisUp = False,
   ICSInputBoxUp = False, askQuestionUp = False,
   filenameUp = False, promotionUp = False, pmFromX = -1, pmFromY = -1,
@@ -453,17 +493,17 @@ char *chessDir, *programName, *programVersion,
 
 #define SOLID 0
 #define OUTLINE 1
-Pixmap pieceBitmap[2][6];
-Pixmap xpmPieceBitmap[4][6];	/* LL, LD, DL, DD */
+Pixmap pieceBitmap[2][(int)BlackPawn];
+Pixmap xpmPieceBitmap[4][(int)BlackPawn];	/* LL, LD, DL, DD */
 Pixmap xpmLightSquare, xpmDarkSquare, xpmJailSquare;
 int useImages, useImageSqs;
-XImage *ximPieceBitmap[4][6];	/* LL, LD, DL, DD */
-Pixmap ximMaskPm[6];            /* clipmasks, used for XIM pieces */
+XImage *ximPieceBitmap[4][(int)BlackPawn];	/* LL, LD, DL, DD */
+Pixmap ximMaskPm[(int)BlackPawn];            /* clipmasks, used for XIM pieces */
 XImage *ximLightSquare, *ximDarkSquare;
 XImage *xim_Cross;
 
-#define pieceToSolid(piece) &pieceBitmap[SOLID][((int)(piece)) % 6]
-#define pieceToOutline(piece) &pieceBitmap[OUTLINE][((int)(piece)) % 6]
+#define pieceToSolid(piece) &pieceBitmap[SOLID][((int)(piece)) % (int)BlackPawn]
+#define pieceToOutline(piece) &pieceBitmap[OUTLINE][((int)(piece)) % (int)BlackPawn]
 
 #define White(piece) ((int)(piece) < (int)BlackPawn)
 
@@ -499,137 +539,153 @@ static Pixmap xpmMask[BlackKing + 1];
 SizeDefaults sizeDefaults[] = SIZE_DEFAULTS;
 
 MenuItem fileMenu[] = {
-    {"Reset Game", ResetProc},
+    {N_("New Game"), ResetProc},
+    {N_("New Shuffle Game ..."), ShuffleMenuProc},
+    {N_("New Variant ..."), NewVariantProc},      // [HGM] variant: not functional yet
     {"----", NothingProc},
-    {"Load Game", LoadGameProc},
-    {"Load Next Game", LoadNextGameProc},
-    {"Load Previous Game", LoadPrevGameProc},
-    {"Reload Same Game", ReloadGameProc},
-    {"Save Game", SaveGameProc},
+    {N_("Load Game"), LoadGameProc},
+    {N_("Load Next Game"), LoadNextGameProc},
+    {N_("Load Previous Game"), LoadPrevGameProc},
+    {N_("Reload Same Game"), ReloadGameProc},
+    {N_("Save Game"), SaveGameProc},
     {"----", NothingProc},
-    {"Copy Game", CopyGameProc},
-    {"Paste Game", PasteGameProc},
+    {N_("Copy Game"), CopyGameProc},
+    {N_("Paste Game"), PasteGameProc},
     {"----", NothingProc},
-    {"Load Position", LoadPositionProc},
-    {"Load Next Position", LoadNextPositionProc},
-    {"Load Previous Position", LoadPrevPositionProc},
-    {"Reload Same Position", ReloadPositionProc},
-    {"Save Position", SavePositionProc},
+    {N_("Load Position"), LoadPositionProc},
+    {N_("Load Next Position"), LoadNextPositionProc},
+    {N_("Load Previous Position"), LoadPrevPositionProc},
+    {N_("Reload Same Position"), ReloadPositionProc},
+    {N_("Save Position"), SavePositionProc},
     {"----", NothingProc},
-    {"Copy Position", CopyPositionProc},
-    {"Paste Position", PastePositionProc},
+    {N_("Copy Position"), CopyPositionProc},
+    {N_("Paste Position"), PastePositionProc},
     {"----", NothingProc},
-    {"Mail Move", MailMoveProc},
-    {"Reload CMail Message", ReloadCmailMsgProc},
+    {N_("Mail Move"), MailMoveProc},
+    {N_("Reload CMail Message"), ReloadCmailMsgProc},
     {"----", NothingProc},
-    {"Exit", QuitProc},
+    {N_("Exit"), QuitProc},
     {NULL, NULL}
 };
 
 MenuItem modeMenu[] = {
-    {"Machine White", MachineWhiteProc},
-    {"Machine Black", MachineBlackProc},
-    {"Two Machines", TwoMachinesProc},
-    {"Analysis Mode", AnalyzeModeProc},
-    {"Analyze File", AnalyzeFileProc },
-    {"ICS Client", IcsClientProc},
-    {"Edit Game", EditGameProc},
-    {"Edit Position", EditPositionProc},
-    {"Training", TrainingProc},
+    {N_("Machine White"), MachineWhiteProc},
+    {N_("Machine Black"), MachineBlackProc},
+    {N_("Two Machines"), TwoMachinesProc},
+    {N_("Analysis Mode"), AnalyzeModeProc},
+    {N_("Analyze File"), AnalyzeFileProc },
+    {N_("ICS Client"), IcsClientProc},
+    {N_("Edit Game"), EditGameProc},
+    {N_("Edit Position"), EditPositionProc},
+    {N_("Training"), TrainingProc},
+    {"----", NothingProc},
+    {N_("Show Engine Output"), EngineOutputProc},
+    {N_("Show Evaluation Graph"), NothingProc}, // [HGM] evalgr: not functional yet
+    {N_("Show Game List"), ShowGameListProc},
+    {"Show Move History", HistoryShowProc}, // [HGM] hist: activate 4.2.7 code
     {"----", NothingProc},
-    {"Show Game List", ShowGameListProc},
-    {"Show Move List", HistoryShowProc},
-    {"Edit Tags", EditTagsProc},
-    {"Edit Comment", EditCommentProc},
-    {"ICS Input Box", IcsInputBoxProc},
-    {"Pause", PauseProc},
+    {N_("Edit Tags"), EditTagsProc},
+    {N_("Edit Comment"), EditCommentProc},
+    {N_("ICS Input Box"), IcsInputBoxProc},
+    {N_("Pause"), PauseProc},
     {NULL, NULL}
 };
 
 MenuItem actionMenu[] = {
-    {"Accept", AcceptProc},
-    {"Decline", DeclineProc},
-    {"Rematch", RematchProc},
-    {"----", NothingProc},    
-    {"Call Flag", CallFlagProc},
-    {"Draw", DrawProc},
-    {"Adjourn", AdjournProc},
-    {"Abort", AbortProc},
-    {"Resign", ResignProc},
-    {"----", NothingProc},    
-    {"Stop Observing", StopObservingProc},
-    {"Stop Examining", StopExaminingProc},
+    {N_("Accept"), AcceptProc},
+    {N_("Decline"), DeclineProc},
+    {N_("Rematch"), RematchProc},
+    {"----", NothingProc},
+    {N_("Call Flag"), CallFlagProc},
+    {N_("Draw"), DrawProc},
+    {N_("Adjourn"), AdjournProc},
+    {N_("Abort"), AbortProc},
+    {N_("Resign"), ResignProc},
+    {"----", NothingProc},
+    {N_("Stop Observing"), StopObservingProc},
+    {N_("Stop Examining"), StopExaminingProc},
+    {"----", NothingProc},
+    {N_("Adjudicate to White"), AdjuWhiteProc},
+    {N_("Adjudicate to Black"), AdjuBlackProc},
+    {N_("Adjudicate Draw"), AdjuDrawProc},
     {NULL, NULL}
 };
 
 MenuItem stepMenu[] = {
-    {"Backward", BackwardProc},
-    {"Forward", ForwardProc},
-    {"Back to Start", ToStartProc},
-    {"Forward to End", ToEndProc},
-    {"Revert", RevertProc},
-    {"Truncate Game", TruncateGameProc},
-    {"----", NothingProc},    
-    {"Move Now", MoveNowProc},
-    {"Retract Move", RetractMoveProc},
+    {N_("Backward"), BackwardProc},
+    {N_("Forward"), ForwardProc},
+    {N_("Back to Start"), ToStartProc},
+    {N_("Forward to End"), ToEndProc},
+    {N_("Revert"), RevertProc},
+    {N_("Truncate Game"), TruncateGameProc},
+    {"----", NothingProc},
+    {N_("Move Now"), MoveNowProc},
+    {N_("Retract Move"), RetractMoveProc},
     {NULL, NULL}
-};    
+};
 
 MenuItem optionsMenu[] = {
-    {"Always Queen", AlwaysQueenProc},
-    {"Animate Dragging", AnimateDraggingProc},
-    {"Animate Moving", AnimateMovingProc},
-    {"Auto Comment", AutocommProc},
-    {"Auto Flag", AutoflagProc},
-    {"Auto Flip View", AutoflipProc},
-    {"Auto Observe", AutobsProc},
-    {"Auto Raise Board", AutoraiseProc},
-    {"Auto Save", AutosaveProc},
-    {"Blindfold", BlindfoldProc},
-    {"Flash Moves", FlashMovesProc},
-    {"Flip View", FlipViewProc},
-    {"Get Move List", GetMoveListProc},
+    {N_("Flip View"), FlipViewProc},
+    {"----", NothingProc},
+    {N_("Adjudications ..."), EngineMenuProc},
+    {N_("General Settings ..."), UciMenuProc},
+    {N_("Engine #1 Settings ..."), FirstSettingsProc},
+    {N_("Engine #2 Settings ..."), SecondSettingsProc},
+    {N_("Time Control ..."), TimeControlProc},
+    {"----", NothingProc},
+    {N_("Always Queen"), AlwaysQueenProc},
+    {N_("Animate Dragging"), AnimateDraggingProc},
+    {N_("Animate Moving"), AnimateMovingProc},
+    {N_("Auto Comment"), AutocommProc},
+    {N_("Auto Flag"), AutoflagProc},
+    {N_("Auto Flip View"), AutoflipProc},
+    {N_("Auto Observe"), AutobsProc},
+    {N_("Auto Raise Board"), AutoraiseProc},
+    {N_("Auto Save"), AutosaveProc},
+    {N_("Blindfold"), BlindfoldProc},
+    {N_("Flash Moves"), FlashMovesProc},
+    {N_("Get Move List"), GetMoveListProc},
 #if HIGHDRAG
-    {"Highlight Dragging", HighlightDraggingProc},
+    {N_("Highlight Dragging"), HighlightDraggingProc},
 #endif
-    {"Highlight Last Move", HighlightLastMoveProc},
-    {"Move Sound", MoveSoundProc},
-    {"ICS Alarm", IcsAlarmProc},
-    {"Old Save Style", OldSaveStyleProc},
-    {"Periodic Updates", PeriodicUpdatesProc},	
-    {"Ponder Next Move", PonderNextMoveProc},
-    {"Popup Exit Message", PopupExitMessageProc},	
-    {"Popup Move Errors", PopupMoveErrorsProc},	
-    {"Premove", PremoveProc},
-    {"Quiet Play", QuietPlayProc},
-    {"Show Coords", ShowCoordsProc},
-    {"Show Thinking", ShowThinkingProc},
-    {"Test Legality", TestLegalityProc},
+    {N_("Highlight Last Move"), HighlightLastMoveProc},
+    {N_("Move Sound"), MoveSoundProc},
+    {N_("ICS Alarm"), IcsAlarmProc},
+    {N_("Old Save Style"), OldSaveStyleProc},
+    {N_("Periodic Updates"), PeriodicUpdatesProc},
+    {N_("Ponder Next Move"), PonderNextMoveProc},
+    {N_("Popup Exit Message"), PopupExitMessageProc},
+    {N_("Popup Move Errors"), PopupMoveErrorsProc},
+    {N_("Premove"), PremoveProc},
+    {N_("Quiet Play"), QuietPlayProc},
+    {N_("Show Coords"), ShowCoordsProc},
+    {N_("Hide Thinking"), HideThinkingProc},
+    {N_("Test Legality"), TestLegalityProc},
     {NULL, NULL}
 };
 
 MenuItem helpMenu[] = {
-    {"Info XBoard", InfoProc},
-    {"Man XBoard", ManProc},
+    {N_("Info XBoard"), InfoProc},
+    {N_("Man XBoard"), ManProc},
     {"----", NothingProc},
-    {"Hint", HintProc},
-    {"Book", BookProc},
+    {N_("Hint"), HintProc},
+    {N_("Book"), BookProc},
     {"----", NothingProc},
-    {"About XBoard", AboutProc},
+    {N_("About XBoard"), AboutProc},
     {NULL, NULL}
 };
 
 Menu menuBar[] = {
-    {"File", fileMenu},
-    {"Mode", modeMenu},
-    {"Action", actionMenu},
-    {"Step", stepMenu},
-    {"Options", optionsMenu},
-    {"Help", helpMenu},
+    {N_("File"), fileMenu},
+    {N_("Mode"), modeMenu},
+    {N_("Action"), actionMenu},
+    {N_("Step"), stepMenu},
+    {N_("Options"), optionsMenu},
+    {N_("Help"), helpMenu},
     {NULL, NULL}
 };
 
-#define PAUSE_BUTTON "P"
+#define PAUSE_BUTTON N_("P")
 MenuItem buttonBar[] = {
     {"<<", ToStartProc},
     {"<", BackwardProc},
@@ -641,11 +697,11 @@ MenuItem buttonBar[] = {
 
 #define PIECE_MENU_SIZE 11
 String pieceMenuStrings[2][PIECE_MENU_SIZE] = {
-    { "White", "----", "Pawn", "Knight", "Bishop", "Rook", "Queen", "King",
-      "----", "Empty square", "Clear board" },
-    { "Black", "----", "Pawn", "Knight", "Bishop", "Rook", "Queen", "King",
-      "----", "Empty square", "Clear board" },
-  };
+    { N_("White"), "----", N_("Pawn"), N_("Knight"), N_("Bishop"), N_("Rook"),
+      N_("Queen"), N_("King"), "----", N_("Empty square"), N_("Clear board") },
+    { N_("Black"), "----", N_("Pawn"), N_("Knight"), N_("Bishop"), N_("Rook"),
+      N_("Queen"), N_("King"), "----", N_("Empty square"), N_("Clear board") },
+};
 /* must be in same order as PieceMenuStrings! */
 ChessSquare pieceMenuTranslation[2][PIECE_MENU_SIZE] = {
     { WhitePlay, (ChessSquare) 0, WhitePawn, WhiteKnight, WhiteBishop,
@@ -658,7 +714,7 @@ ChessSquare pieceMenuTranslation[2][PIECE_MENU_SIZE] = {
 
 #define DROP_MENU_SIZE 6
 String dropMenuStrings[DROP_MENU_SIZE] = {
-    "----", "Pawn", "Knight", "Bishop", "Rook", "Queen"
+    "----", N_("Pawn"), N_("Knight"), N_("Bishop"), N_("Rook"), N_("Queen")
   };
 /* must be in same order as PieceMenuStrings! */
 ChessSquare dropMenuTranslation[DROP_MENU_SIZE] = {
@@ -732,7 +788,7 @@ XtResource clientResources[] = {
 	BLACK_PIECE_COLOR },
     { "lightSquareColor", "lightSquareColor", XtRString,
 	sizeof(String), XtOffset(AppDataPtr, lightSquareColor),
-	XtRString, LIGHT_SQUARE_COLOR }, 
+	XtRString, LIGHT_SQUARE_COLOR },
     { "darkSquareColor", "darkSquareColor", XtRString, sizeof(String),
 	XtOffset(AppDataPtr, darkSquareColor), XtRString,
 	DARK_SQUARE_COLOR },
@@ -775,9 +831,9 @@ XtResource clientResources[] = {
     { "secondHost", "secondHost", XtRString, sizeof(String),
 	XtOffset(AppDataPtr, secondHost), XtRString, SECOND_HOST },
     { "firstDirectory", "firstDirectory", XtRString, sizeof(String),
-	XtOffset(AppDataPtr, firstDirectory), XtRString, "" },
+	XtOffset(AppDataPtr, firstDirectory), XtRString, "." },
     { "secondDirectory", "secondDirectory", XtRString, sizeof(String),
-	XtOffset(AppDataPtr, secondDirectory), XtRString, "" },
+	XtOffset(AppDataPtr, secondDirectory), XtRString, "." },
     { "bitmapDirectory", "bitmapDirectory", XtRString,
 	sizeof(String), XtOffset(AppDataPtr, bitmapDirectory),
 	XtRString, "" },
@@ -880,7 +936,7 @@ XtResource clientResources[] = {
 	XtOffset(AppDataPtr, searchTime), XtRString,
 	(XtPointer) "" },
     { "searchDepth", "searchDepth", XtRInt, sizeof(int),
-	XtOffset(AppDataPtr, searchDepth), XtRImmediate, 
+	XtOffset(AppDataPtr, searchDepth), XtRImmediate,
 	(XtPointer) 0 },
     { "showCoords", "showCoords", XtRBoolean, sizeof(Boolean),
 	XtOffset(AppDataPtr, showCoords), XtRImmediate,
@@ -890,7 +946,7 @@ XtResource clientResources[] = {
 	(XtPointer) 0 },
     { "showThinking", "showThinking", XtRBoolean, sizeof(Boolean),
 	XtOffset(AppDataPtr, showThinking), XtRImmediate,
-	(XtPointer) False },
+	(XtPointer) True },
     { "ponderNextMove", "ponderNextMove", XtRBoolean, sizeof(Boolean),
 	XtOffset(AppDataPtr, ponderNextMove), XtRImmediate,
 	(XtPointer) True },
@@ -1018,7 +1074,7 @@ XtResource clientResources[] = {
 	(XtPointer) MS_LOGIN_DELAY },
     { "colorizeMessages", "colorizeMessages", XtRBoolean,
 	sizeof(Boolean), XtOffset(AppDataPtr, colorize),
-	XtRImmediate, (XtPointer) False },	
+	XtRImmediate, (XtPointer) False },
     { "colorShout", "colorShout", XtRString,
 	sizeof(String), XtOffset(AppDataPtr, colorShout),
 	XtRString, COLOR_SHOUT },
@@ -1048,7 +1104,7 @@ XtResource clientResources[] = {
 	XtRString, COLOR_SEEK },
     { "colorNormal", "colorNormal", XtRString,
 	sizeof(String), XtOffset(AppDataPtr, colorNormal),
-	XtRString, COLOR_NORMAL },	
+	XtRString, COLOR_NORMAL },
     { "soundProgram", "soundProgram", XtRString,
       sizeof(String), XtOffset(AppDataPtr, soundProgram),
       XtRString, "play" },
@@ -1136,6 +1192,193 @@ XtResource clientResources[] = {
     { "showButtonBar", "showButtonBar", XtRBoolean,
 	sizeof(Boolean), XtOffset(AppDataPtr, showButtonBar),
 	XtRImmediate, (XtPointer) True },
+    {"icsEngineAnalyze", "icsEngineAnalyze", XtRBoolean,        /* [DM] icsEngineAnalyze */
+        sizeof(Boolean), XtOffset(AppDataPtr, icsEngineAnalyze),
+        XtRImmediate, (XtPointer) False },
+    { "firstScoreAbs", "firstScoreAbs", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, firstScoreIsAbsolute),
+	XtRImmediate, (XtPointer) False },
+    { "secondScoreAbs", "secondScoreAbs", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, secondScoreIsAbsolute),
+	XtRImmediate, (XtPointer) False },
+    { "pgnExtendedInfo", "pgnExtendedInfo", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, saveExtendedInfoInPGN),
+	XtRImmediate, (XtPointer) False },
+    { "hideThinkingFromHuman", "hideThinkingFromHuman", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, hideThinkingFromHuman),
+	XtRImmediate, (XtPointer) True },
+    { "adjudicateLossThreshold", "adjudicateLossThreshold", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, adjudicateLossThreshold),
+	XtRImmediate, (XtPointer) 0},
+    { "pgnEventHeader", "pgnEventHeader", XtRString,
+        sizeof(String), XtOffset(AppDataPtr, pgnEventHeader),
+	XtRImmediate, (XtPointer) "Computer Chess Game" },
+    { "defaultFrcPosition", "defaultFrcPositon", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, defaultFrcPosition),
+	XtRImmediate, (XtPointer) -1},
+    { "gameListTags", "gameListTags", XtRString,
+        sizeof(String), XtOffset(AppDataPtr, gameListTags),
+	XtRImmediate, (XtPointer) GLT_DEFAULT_TAGS },
+
+    // [HGM] 4.3.xx options
+    { "boardWidth", "boardWidth", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, NrFiles),
+	XtRImmediate, (XtPointer) -1},
+    { "boardHeight", "boardHeight", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, NrRanks),
+	XtRImmediate, (XtPointer) -1},
+    { "matchPause", "matchPause", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, matchPause),
+	XtRImmediate, (XtPointer) 10000},
+    { "holdingsSize", "holdingsSize", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, holdingsSize),
+	XtRImmediate, (XtPointer) -1},
+    { "flipBlack", "flipBlack", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, upsideDown),
+	XtRImmediate, (XtPointer) False},
+    { "allWhite", "allWhite", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, allWhite),
+	XtRImmediate, (XtPointer) False},
+    { "pieceToCharTable", "pieceToCharTable", XtRString,
+	sizeof(String), XtOffset(AppDataPtr, pieceToCharTable),
+	XtRImmediate, (XtPointer) 0},
+    { "alphaRank", "alphaRank", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, alphaRank),
+	XtRImmediate, (XtPointer) False},
+    { "testClaims", "testClaims", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, testClaims),
+	XtRImmediate, (XtPointer) True},
+    { "checkMates", "checkMates", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, checkMates),
+	XtRImmediate, (XtPointer) True},
+    { "materialDraws", "materialDraws", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, materialDraws),
+	XtRImmediate, (XtPointer) True},
+    { "trivialDraws", "trivialDraws", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, trivialDraws),
+	XtRImmediate, (XtPointer) False},
+    { "ruleMoves", "ruleMoves", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, ruleMoves),
+	XtRImmediate, (XtPointer) 51},
+    { "repeatsToDraw", "repeatsToDraw", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, drawRepeats),
+	XtRImmediate, (XtPointer) 6},
+    { "engineDebugOutput", "engineDebugOutput", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, engineComments),
+	XtRImmediate, (XtPointer) 1},
+    { "userName", "userName", XtRString,
+	sizeof(int), XtOffset(AppDataPtr, userName),
+	XtRImmediate, (XtPointer) 0},
+    { "autoKibitz", "autoKibitz", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, autoKibitz),
+	XtRImmediate, (XtPointer) False},
+    { "firstTimeOdds", "firstTimeOdds", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, firstTimeOdds),
+	XtRImmediate, (XtPointer) 1},
+    { "secondTimeOdds", "secondTimeOdds", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, secondTimeOdds),
+	XtRImmediate, (XtPointer) 1},
+    { "timeOddsMode", "timeOddsMode", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, timeOddsMode),
+	XtRImmediate, (XtPointer) 0},
+    { "firstAccumulateTC", "firstAccumulateTC", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, firstAccumulateTC),
+	XtRImmediate, (XtPointer) 1},
+    { "secondAccumulateTC", "secondAccumulateTC", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, secondAccumulateTC),
+	XtRImmediate, (XtPointer) 1},
+    { "firstNPS", "firstNPS", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, firstNPS),
+	XtRImmediate, (XtPointer) -1},
+    { "secondNPS", "secondNPS", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, secondNPS),
+	XtRImmediate, (XtPointer) -1},
+    { "serverMoves", "serverMoves", XtRString,
+	sizeof(String), XtOffset(AppDataPtr, serverMovesName),
+	XtRImmediate, (XtPointer) 0},
+    { "serverPause", "serverPause", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, serverPause),
+	XtRImmediate, (XtPointer) 0},
+    { "suppressLoadMoves", "suppressLoadMoves", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, suppressLoadMoves),
+	XtRImmediate, (XtPointer) False},
+    { "userName", "userName", XtRString,
+	sizeof(String), XtOffset(AppDataPtr, userName),
+	XtRImmediate, (XtPointer) 0},
+    { "egtFormats", "egtFormats", XtRString,
+	sizeof(String), XtOffset(AppDataPtr, egtFormats),
+	XtRImmediate, (XtPointer) 0},
+    { "rewindIndex", "rewindIndex", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, rewindIndex),
+	XtRImmediate, (XtPointer) 0},
+    { "sameColorGames", "sameColorGames", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, sameColorGames),
+	XtRImmediate, (XtPointer) 0},
+    { "smpCores", "smpCores", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, smpCores),
+	XtRImmediate, (XtPointer) 1},
+    { "niceEngines", "niceEngines", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, niceEngines),
+	XtRImmediate, (XtPointer) 0},
+    { "nameOfDebugFile", "nameOfDebugFile", XtRString,
+	sizeof(String), XtOffset(AppDataPtr, nameOfDebugFile),
+	XtRImmediate, (XtPointer) "xboard.debug"},
+    { "engineDebugOutput", "engineDebugOutput", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, engineComments),
+	XtRImmediate, (XtPointer) 0},
+    { "noGUI", "noGUI", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, noGUI),
+	XtRImmediate, (XtPointer) 0},
+    { "firstOptions", "firstOptions", XtRString,
+        sizeof(String), XtOffset(AppDataPtr, firstOptions),
+	XtRImmediate, (XtPointer) "" },
+    { "secondOptions", "secondOptions", XtRString,
+        sizeof(String), XtOffset(AppDataPtr, secondOptions),
+	XtRImmediate, (XtPointer) "" },
+    { "firstNeedsNoncompliantFEN", "firstNeedsNoncompliantFEN", XtRString,
+        sizeof(String), XtOffset(AppDataPtr, fenOverride1),
+	XtRImmediate, (XtPointer) 0 },
+    { "secondNeedsNoncompliantFEN", "secondNeedsNoncompliantFEN", XtRString,
+        sizeof(String), XtOffset(AppDataPtr, fenOverride2),
+	XtRImmediate, (XtPointer) 0 },
+
+    // [HGM] Winboard_x UCI options
+    { "firstIsUCI", "firstIsUCI", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, firstIsUCI),
+	XtRImmediate, (XtPointer) False},
+    { "secondIsUCI", "secondIsUCI", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, secondIsUCI),
+	XtRImmediate, (XtPointer) False},
+    { "firstHasOwnBookUCI", "firstHasOwnBookUCI", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, firstHasOwnBookUCI),
+	XtRImmediate, (XtPointer) True},
+    { "secondHasOwnBookUCI", "secondHasOwnBookUCI", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, secondHasOwnBookUCI),
+	XtRImmediate, (XtPointer) True},
+    { "usePolyglotBook", "usePolyglotBook", XtRBoolean,
+	sizeof(Boolean), XtOffset(AppDataPtr, usePolyglotBook),
+	XtRImmediate, (XtPointer) False},
+    { "defaultHashSize", "defaultHashSize", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, defaultHashSize),
+	XtRImmediate, (XtPointer) 64},
+    { "defaultCacheSizeEGTB", "defaultCacheSizeEGTB", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, defaultCacheSizeEGTB),
+	XtRImmediate, (XtPointer) 4},
+    { "polyglotDir", "polyglotDir", XtRString,
+        sizeof(String), XtOffset(AppDataPtr, polyglotDir),
+	XtRImmediate, (XtPointer) "." },
+    { "polyglotBook", "polyglotBook", XtRString,
+        sizeof(String), XtOffset(AppDataPtr, polyglotBook),
+	XtRImmediate, (XtPointer) "" },
+    { "defaultPathEGTB", "defaultPathEGTB", XtRString,
+	sizeof(String), XtOffset(AppDataPtr, defaultPathEGTB),
+	XtRImmediate, (XtPointer) "/usr/local/share/egtb"},
+    { "delayBeforeQuit", "delayBeforeQuit", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, delayBeforeQuit),
+	XtRImmediate, (XtPointer) 0},
+    { "delayAfterQuit", "delayAfterQuit", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, delayAfterQuit),
+	XtRImmediate, (XtPointer) 0},
 };
 
 XrmOptionDescRec shellOptions[] = {
@@ -1426,6 +1669,79 @@ XrmOptionDescRec shellOptions[] = {
     { "-showButtonBar", "showButtonBar", XrmoptionSepArg, NULL },
     { "-buttons", "showButtonBar", XrmoptionNoArg, "True" },
     { "-xbuttons", "showButtonBar", XrmoptionNoArg, "False" },
+    /* [AS,HR] New features */
+    { "-firstScoreAbs", "firstScoreAbs", XrmoptionSepArg, NULL },
+    { "-secondScoreAbs", "secondScoreAbs", XrmoptionSepArg, NULL },
+    { "-pgnExtendedInfo", "pgnExtendedInfo", XrmoptionSepArg, NULL },
+    { "-hideThinkingFromHuman", "hideThinkingFromHuman", XrmoptionSepArg, NULL },
+    { "-adjudicateLossThreshold", "adjudicateLossThreshold", XrmoptionSepArg, NULL },
+    { "-pgnEventHeader", "pgnEventHeader", XrmoptionSepArg, NULL },
+    { "-firstIsUCI", "firstIsUCI", XrmoptionSepArg, NULL },
+    { "-secondIsUCI", "secondIsUCI", XrmoptionSepArg, NULL },
+    { "-fUCI", "firstIsUCI", XrmoptionNoArg, "True" },
+    { "-sUCI", "secondIsUCI", XrmoptionNoArg, "True" },
+    { "-firstHasOwnBookUCI", "firstHasOwnBookUCI", XrmoptionSepArg, NULL },
+    { "-secondHasOwnBookUCI", "secondHasOwnBookUCI", XrmoptionSepArg, NULL },
+    { "-fNoOwnBookUCI", "firstHasOwnBookUCI", XrmoptionNoArg, "False" },
+    { "-sNoOwnBookUCI", "secondHasOwnBookUCI", XrmoptionNoArg, "False" },
+    { "-firstXBook", "firstHasOwnBookUCI", XrmoptionNoArg, "False" },
+    { "-secondXBook", "secondHasOwnBookUCI", XrmoptionNoArg, "False" },
+    { "-polyglotDir", "polyglotDir", XrmoptionSepArg, NULL },
+    { "-usePolyglotBook", "usePolyglotBook", XrmoptionSepArg, NULL },
+    { "-polyglotBook", "polyglotBook", XrmoptionSepArg, NULL },
+    { "-defaultHashSize", "defaultHashSize", XrmoptionSepArg, NULL },
+    { "-defaultCacheSizeEGTB", "defaultCacheSizeEGTB", XrmoptionSepArg, NULL },
+    { "-defaultPathEGTB", "defaultPathEGTB", XrmoptionSepArg, NULL },
+    { "-defaultFrcPosition", "defaultFrcPosition", XrmoptionSepArg, NULL },
+    { "-gameListTags", "gameListTags", XrmoptionSepArg, NULL },
+    // [HGM] I am sure AS added many more options, but we have to fish them out, from the list in winboard.c
+
+    /* [HGM,HR] User-selectable board size */
+    { "-boardWidth", "boardWidth", XrmoptionSepArg, NULL },
+    { "-boardHeight", "boardHeight", XrmoptionSepArg, NULL },
+    { "-matchPause", "matchPause", XrmoptionSepArg, NULL },
+
+    /* [HGM] new arguments of 4.3.xx. All except first three are back-end options, which should work immediately */
+    { "-holdingsSize", "holdingsSize", XrmoptionSepArg, NULL }, // requires extensive front-end changes to work
+    { "-flipBlack", "flipBlack", XrmoptionSepArg, NULL },       // requires front-end changes to work
+    { "-allWhite", "allWhite", XrmoptionSepArg, NULL },         // requires front-end changes to work
+    { "-pieceToCharTable", "pieceToCharTable", XrmoptionSepArg, NULL },
+    { "-alphaRank", "alphaRank", XrmoptionSepArg, NULL },
+    { "-testClaims", "testClaims", XrmoptionSepArg, NULL },
+    { "-checkMates", "checkMates", XrmoptionSepArg, NULL },
+    { "-materialDraws", "materialDraws", XrmoptionSepArg, NULL },
+    { "-trivialDraws", "trivialDraws", XrmoptionSepArg, NULL },
+    { "-ruleMoves", "ruleMoves", XrmoptionSepArg, NULL },
+    { "-repeatsToDraw", "repeatsToDraw", XrmoptionSepArg, NULL },
+    { "-engineDebugOutput", "engineDebugOutput", XrmoptionSepArg, NULL },
+    { "-userName", "userName", XrmoptionSepArg, NULL },
+    { "-autoKibitz", "autoKibitz", XrmoptionNoArg, "True" },
+    { "-firstTimeOdds", "firstTimeOdds", XrmoptionSepArg, NULL },
+    { "-secondTimeOdds", "secondTimeOdds", XrmoptionSepArg, NULL },
+    { "-timeOddsMode", "timeOddsMode", XrmoptionSepArg, NULL },
+    { "-firstAccumulateTC", "firstAccumulateTC", XrmoptionSepArg, NULL },
+    { "-secondAccumulateTC", "secondAccumulateTC", XrmoptionSepArg, NULL },
+    { "-firstNPS", "firstNPS", XrmoptionSepArg, NULL },
+    { "-secondNPS", "secondNPS", XrmoptionSepArg, NULL },
+    { "-serverMoves", "serverMoves", XrmoptionSepArg, NULL },
+    { "-serverPause", "serverPause", XrmoptionSepArg, NULL },
+    { "-suppressLoadMoves", "suppressLoadMoves", XrmoptionSepArg, NULL },
+    { "-egtFormats", "egtFormats", XrmoptionSepArg, NULL },
+    { "-userName", "userName", XrmoptionSepArg, NULL },
+    { "-smpCores", "smpCores", XrmoptionSepArg, NULL },
+    { "-sameColorGames", "sameColorGames", XrmoptionSepArg, NULL },
+    { "-rewindIndex", "rewindIndex", XrmoptionSepArg, NULL },
+    { "-niceEngines", "niceEngines", XrmoptionSepArg, NULL },
+    { "-delayBeforeQuit", "delayBeforeQuit", XrmoptionSepArg, NULL },
+    { "-delayAfterQuit", "delayAfterQuit", XrmoptionSepArg, NULL },
+    { "-nameOfDebugFile", "nameOfDebugFile", XrmoptionSepArg, NULL },
+    { "-debugFile", "nameOfDebugFile", XrmoptionSepArg, NULL },
+    { "-engineDebugOutput", "engineDebugOutput", XrmoptionSepArg, NULL },
+    { "-noGUI", "noGUI", XrmoptionNoArg, "True" },
+    { "-firstOptions", "firstOptions", XrmoptionSepArg, NULL },
+    { "-secondOptions", "secondOptions", XrmoptionSepArg, NULL },
+    { "-firstNeedsNoncompliantFEN", "firstNeedsNoncompliantFEN", XrmoptionSepArg, NULL },
+    { "-secondNeedsNoncompliantFEN", "secondNeedsNoncompliantFEN", XrmoptionSepArg, NULL },
 };
 
 
@@ -1468,6 +1784,7 @@ XtActionsRec boardActions[] = {
     { "EditGameProc", EditGameProc },
     { "EditPositionProc", EditPositionProc },
     { "TrainingProc", EditPositionProc },
+    { "EngineOutputProc", EngineOutputProc}, // [HGM] Winboard_x engine-output window
     { "ShowGameListProc", ShowGameListProc },
     { "ShowMoveListProc", HistoryShowProc},
     { "EditTagsProc", EditCommentProc },
@@ -1483,6 +1800,9 @@ XtActionsRec boardActions[] = {
     { "AdjournProc", AdjournProc },
     { "AbortProc", AbortProc },
     { "ResignProc", ResignProc },
+    { "AdjuWhiteProc", AdjuWhiteProc },
+    { "AdjuBlackProc", AdjuBlackProc },
+    { "AdjuDrawProc", AdjuDrawProc },
     { "EnterKeyProc", EnterKeyProc },
     { "StopObservingProc", StopObservingProc },
     { "StopExaminingProc", StopExaminingProc },
@@ -1513,14 +1833,15 @@ XtActionsRec boardActions[] = {
     { "IcsAlarmProc", IcsAlarmProc },
     { "MoveSoundProc", MoveSoundProc },
     { "OldSaveStyleProc", OldSaveStyleProc },
-    { "PeriodicUpdatesProc", PeriodicUpdatesProc },	
+    { "PeriodicUpdatesProc", PeriodicUpdatesProc },
     { "PonderNextMoveProc", PonderNextMoveProc },
-    { "PopupExitMessageProc", PopupExitMessageProc },	
-    { "PopupMoveErrorsProc", PopupMoveErrorsProc },	
+    { "PopupExitMessageProc", PopupExitMessageProc },
+    { "PopupMoveErrorsProc", PopupMoveErrorsProc },
     { "PremoveProc", PremoveProc },
     { "QuietPlayProc", QuietPlayProc },
     { "ShowCoordsProc", ShowCoordsProc },
     { "ShowThinkingProc", ShowThinkingProc },
+    { "HideThinkingProc", HideThinkingProc },
     { "TestLegalityProc", TestLegalityProc },
     { "InfoProc", InfoProc },
     { "ManProc", ManProc },
@@ -1541,8 +1862,15 @@ XtActionsRec boardActions[] = {
     { "GameListPopDown", (XtActionProc) GameListPopDown },
     { "PromotionPopDown", (XtActionProc) PromotionPopDown },
     { "HistoryPopDown", (XtActionProc) HistoryPopDown },
+    { "EngineOutputPopDown", (XtActionProc) EngineOutputPopDown },
+    { "ShufflePopDown", (XtActionProc) ShufflePopDown },
+    { "EnginePopDown", (XtActionProc) EnginePopDown },
+    { "UciPopDown", (XtActionProc) UciPopDown },
+    { "TimeControlPopDown", (XtActionProc) TimeControlPopDown },
+    { "NewVariantPopDown", (XtActionProc) NewVariantPopDown },
+    { "SettingsPopDown", (XtActionProc) SettingsPopDown },
 };
-     
+
 char globalTranslations[] =
   ":<Key>R: ResignProc() \n \
    :<Key>r: ResetProc() \n \
@@ -1581,10 +1909,10 @@ char boardTranslations[] =
                  PieceMenuPopup(menuW) \n \
    Any<Btn3Down>: XawPositionSimpleMenu(menuB) XawPositionSimpleMenu(menuD) \
                  PieceMenuPopup(menuB) \n";
-     
+
 char whiteTranslations[] = "<BtnDown>: WhiteClock()\n";
 char blackTranslations[] = "<BtnDown>: BlackClock()\n";
-     
+
 char ICSInputTranslations[] =
     "<Key>Return: EnterKeyProc() \n";
 
@@ -1594,7 +1922,7 @@ String xboardResources[] = {
     "*errorpopup*translations: #override\\n <Key>Return: ErrorPopDown()",
     NULL
   };
-     
+
 
 /* Max possible square size */
 #define MAXSQSIZE 256
@@ -1612,14 +1940,14 @@ xpm_getsize(name, len, ext)
 {
     char *p, *d;
     char buf[10];
-  
+
     if (len < 4)
       return 0;
 
     if ((p=strchr(name, '.')) == NULL ||
 	StrCaseCmp(p+1, ext) != 0)
       return 0;
-  
+
     p = name + 3;
     d = buf;
 
@@ -1645,15 +1973,15 @@ xpm_getavail(dirname, ext)
 
     if (appData.debugMode)
       fprintf(stderr, "XPM dir:%s:ext:%s:\n", dirname, ext);
-  
+
     dir = opendir(dirname);
     if (!dir)
       {
-	  fprintf(stderr, "%s: Can't access XPM directory %s\n", 
+	  fprintf(stderr, _("%s: Can't access XPM directory %s\n"),
 		  programName, dirname);
 	  exit(1);
       }
-  
+
     while ((ent=readdir(dir)) != NULL) {
 	i = xpm_getsize(ent->d_name, NAMLEN(ent), ext);
 	if (i > 0 && i < MAXSQSIZE)
@@ -1672,7 +2000,7 @@ xpm_print_avail(fp, ext)
 {
     int i;
 
-    fprintf(fp, "Available `%s' sizes:\n", ext);
+    fprintf(fp, _("Available `%s' sizes:\n"), ext);
     for (i=1; i<MAXSQSIZE; ++i) {
 	if (xpm_avail[i])
 	  printf("%d\n", i);
@@ -1690,12 +2018,12 @@ xpm_closest_to(dirname, size, ext)
     int sm_diff = MAXSQSIZE;
     int sm_index = 0;
     int diff;
-  
+
     xpm_getavail(dirname, ext);
 
     if (appData.debugMode)
       xpm_print_avail(stderr, ext);
-  
+
     for (i=1; i<MAXSQSIZE; ++i) {
 	if (xpm_avail[i]) {
 	    diff = size - i;
@@ -1708,7 +2036,7 @@ xpm_closest_to(dirname, size, ext)
     }
 
     if (!sm_index) {
-	fprintf(stderr, "Error: No `%s' files!\n", ext);
+	fprintf(stderr, _("Error: No `%s' files!\n"), ext);
 	exit(1);
     }
 
@@ -1724,10 +2052,11 @@ xpm_closest_to(dirname, size, ext)
      int size;
      char *ext;
 {
-    fprintf(stderr, "Warning: No DIR structure found on this system --\n");
-    fprintf(stderr, "         Unable to autosize for XPM/XIM pieces.\n");
-    fprintf(stderr, "   Please report this error to frankm at hiwaay.net.\n");
-    fprintf(stderr, "   Include system type & operating system in message.\n");
+    fprintf(stderr, _("\
+Warning: No DIR structure found on this system --\n\
+         Unable to autosize for XPM/XIM pieces.\n\
+   Please report this error to frankm at hiwaay.net.\n\
+   Include system type & operating system in message.\n"));
     return size;
 }
 #endif /* HAVE_DIR_STRUCT */
@@ -1747,7 +2076,7 @@ parse_color(str, which)
 {
     char *p, buf[100], *d;
     int i;
-  
+
     if (strlen(str) > 99)	/* watch bounds on buf */
       return -1;
 
@@ -1769,10 +2098,10 @@ parse_color(str, which)
     if (*p == ',') {
 	return -1;		/* Use default for empty field */
     }
-    
+
     if (which == 2 || isdigit(*p))
       return atoi(p);
- 
+
     while (*p && isalpha(*p))
       *(d++) = *(p++);
 
@@ -1784,7 +2113,7 @@ parse_color(str, which)
     }
     if (!StrCaseCmp(buf, "default")) return -1;
 
-    fprintf(stderr, "%s: unrecognized color %s\n", programName, buf);
+    fprintf(stderr, _("%s: unrecognized color %s\n"), programName, buf);
     return -2;
 }
 
@@ -1794,7 +2123,7 @@ parse_cpair(cc, str)
      char *str;
 {
     if ((textColors[(int)cc].fg=parse_color(str, 0)) == -2) {
-	fprintf(stderr, "%s: can't parse foreground color in `%s'\n",
+	fprintf(stderr, _("%s: can't parse foreground color in `%s'\n"),
 		programName, str);
 	return -1;
     }
@@ -1829,6 +2158,82 @@ BoardToTop()
   XtPopup(shellWidget, XtGrabNone); /* Raise if lowered  */
 }
 
+#ifdef IDSIZES
+  // eventually, all layout determining code should go into a subroutine, but until then IDSIZE remains undefined
+#else
+#define BoardSize int
+void InitDrawingSizes(BoardSize boardSize, int flags)
+{   // [HGM] resize is functional now, but for board format changes only (nr of ranks, files)
+    Dimension timerWidth, boardWidth, boardHeight, w, h, sep, bor, wr, hr;
+    Arg args[16];
+    XtGeometryResult gres;
+    int i;
+
+    if(!formWidget) return;
+
+    /*
+     * Enable shell resizing.
+     */
+    shellArgs[0].value = (XtArgVal) &w;
+    shellArgs[1].value = (XtArgVal) &h;
+    XtGetValues(shellWidget, shellArgs, 2);
+
+    shellArgs[4].value = 2*w; shellArgs[2].value = 10;
+    shellArgs[5].value = 2*h; shellArgs[3].value = 10;
+    XtSetValues(shellWidget, &shellArgs[2], 4);
+
+    XtSetArg(args[0], XtNdefaultDistance, &sep);
+    XtGetValues(formWidget, args, 1);
+
+    boardWidth = lineGap + BOARD_WIDTH * (squareSize + lineGap);
+    boardHeight = lineGap + BOARD_HEIGHT * (squareSize + lineGap);
+    CreateGrid();
+
+    XtSetArg(args[0], XtNwidth, boardWidth);
+    XtSetArg(args[1], XtNheight, boardHeight);
+    XtSetValues(boardWidget, args, 2);
+
+    timerWidth = (boardWidth - sep) / 2;
+    XtSetArg(args[0], XtNwidth, timerWidth);
+    XtSetValues(whiteTimerWidget, args, 1);
+    XtSetValues(blackTimerWidget, args, 1);
+
+    XawFormDoLayout(formWidget, False);
+
+    if (appData.titleInWindow) {
+	i = 0;
+	XtSetArg(args[i], XtNborderWidth, &bor); i++;
+	XtSetArg(args[i], XtNheight, &h);  i++;
+	XtGetValues(titleWidget, args, i);
+	if (smallLayout) {
+	    w = boardWidth - 2*bor;
+	} else {
+	    XtSetArg(args[0], XtNwidth, &w);
+	    XtGetValues(menuBarWidget, args, 1);
+	    w = boardWidth - w - sep - 2*bor - 2; // WIDTH_FUDGE
+	}
+
+	gres = XtMakeResizeRequest(titleWidget, w, h, &wr, &hr);
+	if (gres != XtGeometryYes && appData.debugMode) {
+	    fprintf(stderr,
+		    _("%s: titleWidget geometry error %d %d %d %d %d\n"),
+		    programName, gres, w, h, wr, hr);
+	}
+    }
+
+    XawFormDoLayout(formWidget, True);
+
+    /*
+     * Inhibit shell resizing.
+     */
+    shellArgs[0].value = w = (XtArgVal) boardWidth + marginW;
+    shellArgs[1].value = h = (XtArgVal) boardHeight + marginH;
+    shellArgs[4].value = shellArgs[2].value = w;
+    shellArgs[5].value = shellArgs[3].value = h;
+    XtSetValues(shellWidget, &shellArgs[0], 6);
+}
+#endif
+
 int
 main(argc, argv)
      int argc;
@@ -1837,43 +2242,93 @@ main(argc, argv)
     int i, j, clockFontPxlSize, coordFontPxlSize, fontPxlSize;
     XSetWindowAttributes window_attributes;
     Arg args[16];
-    Dimension timerWidth, boardWidth, w, h, sep, bor, wr, hr;
+    Dimension timerWidth, boardWidth, boardHeight, w, h, sep, bor, wr, hr;
     XrmValue vFrom, vTo;
     XtGeometryResult gres;
     char *p;
     XrmDatabase xdb;
     int forceMono = False;
+#define INDIRECTION
+#ifdef INDIRECTION
+    // [HGM] before anything else, expand any indirection files amongst options
+    char *argvCopy[1000]; // 1000 seems enough
+    char newArgs[10000];  // holds actual characters
+    int k = 0;
+
+    srandom(time(0)); // [HGM] book: make random truly random
+
+    j = 0;
+    for(i=0; i<argc; i++) {
+	if(j >= 1000-2) { printf(_("too many arguments\n")); exit(-1); }
+//fprintf(stderr, "arg %s\n", argv[i]);
+	if(argv[i][0] != '@') argvCopy[j++] = argv[i]; else {
+	    char c;
+	    FILE *f = fopen(argv[i]+1, "rb");
+	    if(f == NULL) { fprintf(stderr, _("ignore %s\n"), argv[i]); continue; } // do not expand non-existing
+	    argvCopy[j++] = newArgs + k; // get ready for first argument from file
+	    while((c = fgetc(f)) != EOF) { // each line of file inserts 1 argument in the list
+		if(c == '\n') {
+		    if(j >= 1000-2) { printf(_("too many arguments\n")); exit(-1); }
+		    newArgs[k++] = 0;  // terminate current arg
+		    if(k >= 10000-1) { printf(_("too long arguments\n")); exit(-1); }
+		    argvCopy[j++] = newArgs + k; // get ready for next
+		} else {
+		    if(k >= 10000-1) { printf(_("too long arguments\n")); exit(-1); }
+		    newArgs[k++] = c;
+		}
+	    }
+	    newArgs[k] = 0;
+	    j--;
+	    fclose(f);
+	}
+    }
+    argvCopy[j] = NULL;
+    argv = argvCopy;
+    argc = j;
+#if 0
+    if(appData.debugMode,1) { // OK, appData is not initialized here yet...
+	for(i=0; i<argc; i++) fprintf(stderr, "argv[%2d] = '%s'\n", i, argv[i]);
+    }
+#endif
+#endif
+
 
     setbuf(stdout, NULL);
     setbuf(stderr, NULL);
     debugFP = stderr;
-    
+
     programName = strrchr(argv[0], '/');
     if (programName == NULL)
       programName = argv[0];
     else
       programName++;
 
+#ifdef ENABLE_NLS
+    XtSetLanguageProc(NULL, NULL, NULL);
+    bindtextdomain(PRODUCT, LOCALEDIR);
+    textdomain(PRODUCT);
+#endif
+
     shellWidget =
       XtAppInitialize(&appContext, "XBoard", shellOptions,
 		      XtNumber(shellOptions),
 		      &argc, argv, xboardResources, NULL, 0);
     if (argc > 1) {
-	fprintf(stderr, "%s: unrecognized argument %s\n",
+	fprintf(stderr, _("%s: unrecognized argument %s\n"),
 		programName, argv[1]);
 	exit(2);
     }
-    
+
     if ((chessDir = (char *) getenv("CHESSDIR")) == NULL) {
 	chessDir = ".";
     } else {
 	if (chdir(chessDir) != 0) {
-	    fprintf(stderr, "%s: can't cd to CHESSDIR: ", programName);
+	    fprintf(stderr, _("%s: can't cd to CHESSDIR: "), programName);
 	    perror(chessDir);
 	    exit(1);
 	}
     }
-    
+
     p = getenv("HOME");
     if (p == NULL) p = "/tmp";
     i = strlen(p) + strlen("/.xboardXXXXXx.pgn") + 1;
@@ -1886,6 +2341,20 @@ main(argc, argv)
 			      clientResources, XtNumber(clientResources),
 			      NULL, 0);
 
+    if (appData.debugMode && appData.nameOfDebugFile && strcmp(appData.nameOfDebugFile, "stderr")) {
+	/* [DM] debug info to file [HGM] make the filename a command-line option, and allow it to remain stderr */
+        if ((debugFP = fopen(appData.nameOfDebugFile, "w")) == NULL)  {
+           printf(_("Failed to open file '%s'\n"), appData.nameOfDebugFile);
+           exit(errno);
+        }
+        setbuf(debugFP, NULL);
+    }
+
+    /* [HGM,HR] make sure board size is acceptable */
+    if(appData.NrFiles > BOARD_SIZE ||
+       appData.NrRanks > BOARD_SIZE   )
+	 DisplayFatalError(_("Recompile with BOARD_SIZE > 12, to support this size"), 0, 2);
+
 #if !HIGHDRAG
     /* This feature does not work; animation needs a rewrite */
     appData.highlightDragging = FALSE;
@@ -1896,15 +2365,31 @@ main(argc, argv)
     xScreen = DefaultScreen(xDisplay);
     wm_delete_window = XInternAtom(xDisplay, "WM_DELETE_WINDOW", True);
 
+	gameInfo.variant = StringToVariant(appData.variant);
+	InitPosition(FALSE);
+#if 0
     /*
      * Determine boardSize
      */
+    gameInfo.boardWidth = gameInfo.boardHeight = 8; // [HGM] boardsize: make sure we start as 8x8
+
+//#ifndef IDSIZE
+    // [HGM] as long as we have not created the possibility to change size while running, start with requested size
+    gameInfo.boardWidth    = appData.NrFiles > 0 ? appData.NrFiles : 8;
+    gameInfo.boardHeight   = appData.NrRanks > 0 ? appData.NrRanks : 8;
+    gameInfo.holdingsWidth = appData.holdingsSize > 0 ? 2 : 0;
+#endif
+
+
+#ifdef IDSIZE
+    InitDrawingSizes(-1, 0); // [HGM] initsize: make this into a subroutine
+#else
     if (isdigit(appData.boardSize[0])) {
         i = sscanf(appData.boardSize, "%d,%d,%d,%d,%d,%d,%d", &squareSize,
 		   &lineGap, &clockFontPxlSize, &coordFontPxlSize,
 		   &fontPxlSize, &smallLayout, &tinyLayout);
         if (i == 0) {
-	    fprintf(stderr, "%s: bad boardSize syntax %s\n",
+	    fprintf(stderr, _("%s: bad boardSize syntax %s\n"),
 		    programName, appData.boardSize);
 	    exit(2);
 	}
@@ -1940,7 +2425,7 @@ main(argc, argv)
 	    while (szd->name != NULL &&
 		   StrCaseCmp(szd->name, appData.boardSize) != 0) szd++;
 	    if (szd->name == NULL) {
-		fprintf(stderr, "%s: unrecognized boardSize name %s\n",
+		fprintf(stderr, _("%s: unrecognized boardSize name %s\n"),
 			programName, appData.boardSize);
 		exit(2);
 	    }
@@ -1958,35 +2443,38 @@ main(argc, argv)
     if (strlen(appData.pixmapDirectory) > 0) {
 	p = ExpandPathName(appData.pixmapDirectory);
 	if (!p) {
-	    fprintf(stderr, "Error expanding path name \"%s\"\n",
+	    fprintf(stderr, _("Error expanding path name \"%s\"\n"),
 		   appData.pixmapDirectory);
 	    exit(1);
 	}
 	if (appData.debugMode) {
-	    fprintf(stderr, "XBoard square size (hint): %d\n", squareSize);
-	    fprintf(stderr, "%s fulldir:%s:\n", IMAGE_EXT, p);
+          fprintf(stderr, _("\
+XBoard square size (hint): %d\n\
+%s fulldir:%s:\n"), squareSize, IMAGE_EXT, p);
 	}
 	squareSize = xpm_closest_to(p, squareSize, IMAGE_EXT);
 	if (appData.debugMode) {
-	    fprintf(stderr, "Closest %s size: %d\n", IMAGE_EXT, squareSize);
+	    fprintf(stderr, _("Closest %s size: %d\n"), IMAGE_EXT, squareSize);
 	}
     }
-		
-    boardWidth = lineGap + BOARD_SIZE * (squareSize + lineGap);
+
+    /* [HR] height treated separately (hacked) */
+    boardWidth = lineGap + BOARD_WIDTH * (squareSize + lineGap);
+    boardHeight = lineGap + BOARD_HEIGHT * (squareSize + lineGap);
     if (appData.showJail == 1) {
 	/* Jail on top and bottom */
 	XtSetArg(boardArgs[1], XtNwidth, boardWidth);
 	XtSetArg(boardArgs[2], XtNheight,
-		 boardWidth + 2*(lineGap + squareSize));
+		 boardHeight + 2*(lineGap + squareSize));
     } else if (appData.showJail == 2) {
 	/* Jail on sides */
 	XtSetArg(boardArgs[1], XtNwidth,
 		 boardWidth + 2*(lineGap + squareSize));
-	XtSetArg(boardArgs[2], XtNheight, boardWidth);
+	XtSetArg(boardArgs[2], XtNheight, boardHeight);
     } else {
 	/* No jail */
 	XtSetArg(boardArgs[1], XtNwidth, boardWidth);
-	XtSetArg(boardArgs[2], XtNheight, boardWidth);
+	XtSetArg(boardArgs[2], XtNheight, boardHeight);
     }
 
     /*
@@ -1999,6 +2487,9 @@ main(argc, argv)
     coordFontID = XLoadFont(xDisplay, appData.coordFont);
     coordFontStruct = XQueryFont(xDisplay, coordFontID);
     appData.font = FindFont(appData.font, fontPxlSize);
+    countFontID = XLoadFont(xDisplay, appData.coordFont); // [HGM] holdings
+    countFontStruct = XQueryFont(xDisplay, countFontID);
+//    appData.font = FindFont(appData.font, fontPxlSize);
 
     xdb = XtDatabase(xDisplay);
     XrmPutStringResource(&xdb, "*font", appData.font);
@@ -2080,16 +2571,16 @@ main(argc, argv)
     }
 
     if (forceMono) {
-      fprintf(stderr, "%s: too few colors available; trying monochrome mode\n",
+      fprintf(stderr, _("%s: too few colors available; trying monochrome mode\n"),
 	      programName);
     }
 
     if (appData.monoMode && appData.debugMode) {
-	fprintf(stderr, "white pixel = 0x%lx, black pixel = 0x%lx\n",
+	fprintf(stderr, _("white pixel = 0x%lx, black pixel = 0x%lx\n"),
 		(unsigned long) XWhitePixel(xDisplay, xScreen),
 		(unsigned long) XBlackPixel(xDisplay, xScreen));
     }
-    
+
     if (parse_cpair(ColorShout, appData.colorShout) < 0 ||
 	parse_cpair(ColorSShout, appData.colorSShout) < 0 ||
 	parse_cpair(ColorChannel1, appData.colorChannel1) < 0  ||
@@ -2103,16 +2594,16 @@ main(argc, argv)
       {
 	  if (appData.colorize) {
 	      fprintf(stderr,
-		      "%s: can't parse color names; disabling colorization\n",
+		      _("%s: can't parse color names; disabling colorization\n"),
 		      programName);
 	  }
 	  appData.colorize = FALSE;
       }
     textColors[ColorNone].fg = textColors[ColorNone].bg = -1;
     textColors[ColorNone].attr = 0;
-    
+
     XtAppAddActions(appContext, boardActions, XtNumber(boardActions));
-    
+
     /*
      * widget hierarchy
      */
@@ -2133,51 +2624,69 @@ main(argc, argv)
 			    formArgs, XtNumber(formArgs));
     XtSetArg(args[0], XtNdefaultDistance, &sep);
     XtGetValues(formWidget, args, 1);
-    
+
     j = 0;
     widgetList[j++] = menuBarWidget = CreateMenuBar(menuBar);
+    XtSetArg(args[0], XtNtop,    XtChainTop);
+    XtSetArg(args[1], XtNbottom, XtChainTop);
+    XtSetValues(menuBarWidget, args, 2);
 
     widgetList[j++] = whiteTimerWidget =
       XtCreateWidget("whiteTime", labelWidgetClass,
 		     formWidget, timerArgs, XtNumber(timerArgs));
     XtSetArg(args[0], XtNfont, clockFontStruct);
-    XtSetValues(whiteTimerWidget, args, 1);
-    
+    XtSetArg(args[1], XtNtop,    XtChainTop);
+    XtSetArg(args[2], XtNbottom, XtChainTop);
+    XtSetValues(whiteTimerWidget, args, 3);
+
     widgetList[j++] = blackTimerWidget =
       XtCreateWidget("blackTime", labelWidgetClass,
 		     formWidget, timerArgs, XtNumber(timerArgs));
     XtSetArg(args[0], XtNfont, clockFontStruct);
-    XtSetValues(blackTimerWidget, args, 1);
-    
+    XtSetArg(args[1], XtNtop,    XtChainTop);
+    XtSetArg(args[2], XtNbottom, XtChainTop);
+    XtSetValues(blackTimerWidget, args, 3);
+
     if (appData.titleInWindow) {
-	widgetList[j++] = titleWidget = 
+	widgetList[j++] = titleWidget =
 	  XtCreateWidget("title", labelWidgetClass, formWidget,
 			 titleArgs, XtNumber(titleArgs));
+	XtSetArg(args[0], XtNtop,    XtChainTop);
+	XtSetArg(args[1], XtNbottom, XtChainTop);
+	XtSetValues(titleWidget, args, 2);
     }
 
     if (appData.showButtonBar) {
       widgetList[j++] = buttonBarWidget = CreateButtonBar(buttonBar);
+      XtSetArg(args[0], XtNleft,  XtChainRight); // [HGM] glue to right window edge
+      XtSetArg(args[1], XtNright, XtChainRight); //       for good run-time sizing
+      XtSetArg(args[2], XtNtop,    XtChainTop);
+      XtSetArg(args[3], XtNbottom, XtChainTop);
+      XtSetValues(buttonBarWidget, args, 4);
     }
 
     widgetList[j++] = messageWidget =
       XtCreateWidget("message", labelWidgetClass, formWidget,
 		     messageArgs, XtNumber(messageArgs));
-    
+    XtSetArg(args[0], XtNtop,    XtChainTop);
+    XtSetArg(args[1], XtNbottom, XtChainTop);
+    XtSetValues(messageWidget, args, 2);
+
     widgetList[j++] = boardWidget =
       XtCreateWidget("board", widgetClass, formWidget, boardArgs,
 		     XtNumber(boardArgs));
 
     XtManageChildren(widgetList, j);
-    
+
     timerWidth = (boardWidth - sep) / 2;
     XtSetArg(args[0], XtNwidth, timerWidth);
     XtSetValues(whiteTimerWidget, args, 1);
     XtSetValues(blackTimerWidget, args, 1);
-    
+
     XtSetArg(args[0], XtNbackground, &timerBackgroundPixel);
     XtSetArg(args[1], XtNforeground, &timerForegroundPixel);
     XtGetValues(whiteTimerWidget, args, 2);
-    
+
     if (appData.showButtonBar) {
       XtSetArg(args[0], XtNbackground, &buttonBackgroundPixel);
       XtSetArg(args[1], XtNforeground, &buttonForegroundPixel);
@@ -2257,7 +2766,11 @@ main(argc, argv)
     }
     i = 0;
     XtSetArg(args[0], XtNfromVert, messageWidget);
-    XtSetValues(boardWidget, args, 1);
+    XtSetArg(args[1], XtNtop,    XtChainTop);
+    XtSetArg(args[2], XtNbottom, XtChainBottom);
+    XtSetArg(args[3], XtNleft,   XtChainLeft);
+    XtSetArg(args[4], XtNright,  XtChainRight);
+    XtSetValues(boardWidget, args, 5);
 
     XtRealizeWidget(shellWidget);
 
@@ -2267,6 +2780,7 @@ main(argc, argv)
      * The value "2" is probably larger than needed.
      */
     XawFormDoLayout(formWidget, False);
+
 #define WIDTH_FUDGE 2
     i = 0;
     XtSetArg(args[i], XtNborderWidth, &bor);  i++;
@@ -2283,20 +2797,23 @@ main(argc, argv)
 
     gres = XtMakeResizeRequest(messageWidget, w, h, &wr, &hr);
     if (gres != XtGeometryYes && appData.debugMode) {
-      fprintf(stderr, "%s: messageWidget geometry error %d %d %d %d %d\n",
+      fprintf(stderr, _("%s: messageWidget geometry error %d %d %d %d %d\n"),
 	      programName, gres, w, h, wr, hr);
     }
-    
+
     /* !! Horrible hack to work around bug in XFree86 4.0.1 (X11R6.4.3) */
     /* The size used for the child widget in layout lags one resize behind
        its true size, so we resize a second time, 1 pixel smaller.  Yeech! */
     w--;
     gres = XtMakeResizeRequest(messageWidget, w, h, &wr, &hr);
     if (gres != XtGeometryYes && appData.debugMode) {
-      fprintf(stderr, "%s: messageWidget geometry error %d %d %d %d %d\n",
+      fprintf(stderr, _("%s: messageWidget geometry error %d %d %d %d %d\n"),
 	      programName, gres, w, h, wr, hr);
     }
     /* !! end hack */
+    XtSetArg(args[0], XtNleft,  XtChainLeft);  // [HGM] glue ends for good run-time sizing
+    XtSetArg(args[1], XtNright, XtChainRight);
+    XtSetValues(messageWidget, args, 2);
 
     if (appData.titleInWindow) {
 	i = 0;
@@ -2314,15 +2831,19 @@ main(argc, argv)
 	gres = XtMakeResizeRequest(titleWidget, w, h, &wr, &hr);
 	if (gres != XtGeometryYes && appData.debugMode) {
 	    fprintf(stderr,
-		    "%s: titleWidget geometry error %d %d %d %d %d\n",
+		    _("%s: titleWidget geometry error %d %d %d %d %d\n"),
 		    programName, gres, w, h, wr, hr);
 	}
     }
     XawFormDoLayout(formWidget, True);
 
     xBoardWindow = XtWindow(boardWidget);
-    
-    /* 
+
+    // [HGM] it seems the layout code ends here, but perhaps the color stuff is size independent and would
+    //       not need to go into InitDrawingSizes().
+#endif
+
+    /*
      * Create X checkmark bitmap and initialize option menu checks.
      */
     ReadBitmap(&xMarkPixmap, "checkmark.bm",
@@ -2413,19 +2934,19 @@ main(argc, argv)
     if (appData.periodicUpdates) {
 	XtSetValues(XtNameToWidget(menuBarWidget,
 				   "menuOptions.Periodic Updates"), args, 1);
-    }	
+    }
     if (appData.ponderNextMove) {
 	XtSetValues(XtNameToWidget(menuBarWidget,
 				   "menuOptions.Ponder Next Move"), args, 1);
-    }	
+    }
     if (appData.popupExitMessage) {
 	XtSetValues(XtNameToWidget(menuBarWidget,
 				   "menuOptions.Popup Exit Message"), args, 1);
-    }	
+    }
     if (appData.popupMoveErrors) {
 	XtSetValues(XtNameToWidget(menuBarWidget,
 				   "menuOptions.Popup Move Errors"), args, 1);
-    }	
+    }
     if (appData.premove) {
 	XtSetValues(XtNameToWidget(menuBarWidget,
 				   "menuOptions.Premove"), args, 1);
@@ -2438,8 +2959,8 @@ main(argc, argv)
 	XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Show Coords"),
 		    args, 1);
     }
-    if (appData.showThinking) {
-	XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Show Thinking"),
+    if (appData.hideThinkingFromHuman) {
+	XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Hide Thinking"),
 		    args, 1);
     }
     if (appData.testLegality) {
@@ -2458,14 +2979,14 @@ main(argc, argv)
     i = 0;
     XtSetArg(args[i], XtNiconPixmap, iconPixmap);  i++;
     XtSetValues(shellWidget, args, i);
-    
+
     /*
      * Create a cursor for the board widget.
      */
     window_attributes.cursor = XCreateFontCursor(xDisplay, XC_hand2);
     XChangeWindowAttributes(xDisplay, xBoardWindow,
 			    CWCursor, &window_attributes);
-    
+
     /*
      * Inhibit shell resizing.
      */
@@ -2475,7 +2996,9 @@ main(argc, argv)
     shellArgs[4].value = shellArgs[2].value = w;
     shellArgs[5].value = shellArgs[3].value = h;
     XtSetValues(shellWidget, &shellArgs[2], 4);
-    
+    marginW =  w - boardWidth; // [HGM] needed to set new shellWidget size when we resize board
+    marginH =  h - boardHeight;
+
     CatchDeleteWindow(shellWidget, "QuitProc");
 
     CreateGCs();
@@ -2490,13 +3013,13 @@ main(argc, argv)
     CreateXIMPieces();
     /* Create regular pieces */
     if (!useImages) CreatePieces();
-#endif  
+#endif
 
     CreatePieceMenus();
 
     if (appData.animate || appData.animateDragging)
       CreateAnimVars();
-    
+
     XtAugmentTranslations(formWidget,
 			  XtParseTranslationTable(globalTranslations));
     XtAugmentTranslations(boardWidget,
@@ -2513,7 +3036,7 @@ main(argc, argv)
     /* end why */
 
     InitBackEnd2();
-    
+
     if (errorExitStatus == -1) {
 	if (appData.icsActive) {
 	    /* We now wait until we see "login:" from the ICS before
@@ -2528,8 +3051,10 @@ main(argc, argv)
 	    signal(SIGUSR1, CmailSigHandler);
 	}
     }
+	InitPosition(TRUE);
 
     XtAppMainLoop(appContext);
+    if (appData.debugMode) fclose(debugFP); // [DM] debug
     return 0;
 }
 
@@ -2643,14 +3168,14 @@ Enables icsEnables[] = {
     { "menuHelp.Hint", False },
     { "menuHelp.Book", False },
     { "menuStep.Move Now", False },
-    { "menuOptions.Periodic Updates", False },	
-    { "menuOptions.Show Thinking", False },
+    { "menuOptions.Periodic Updates", False },
+    { "menuOptions.Hide Thinking", False },
     { "menuOptions.Ponder Next Move", False },
 #endif
     { NULL, False }
 };
 
-Enables ncpEnables[] = {    
+Enables ncpEnables[] = {
     { "menuFile.Mail Move", False },
     { "menuFile.Reload CMail Message", False },
     { "menuMode.Machine White", False },
@@ -2673,15 +3198,15 @@ Enables ncpEnables[] = {
     { "menuOptions.ICS Alarm", False },
     { "menuOptions.Move Sound", False },
     { "menuOptions.Quiet Play", False },
-    { "menuOptions.Show Thinking", False },
-    { "menuOptions.Periodic Updates", False },	
+    { "menuOptions.Hide Thinking", False },
+    { "menuOptions.Periodic Updates", False },
     { "menuOptions.Ponder Next Move", False },
     { "menuHelp.Hint", False },
     { "menuHelp.Book", False },
     { NULL, False }
 };
 
-Enables gnuEnables[] = {    
+Enables gnuEnables[] = {
     { "menuMode.ICS Client", False },
     { "menuMode.ICS Input Box", False },
     { "menuAction.Accept", False },
@@ -2707,7 +3232,7 @@ Enables gnuEnables[] = {
     { NULL, False }
 };
 
-Enables cmailEnables[] = {    
+Enables cmailEnables[] = {
     { "Action", True },
     { "menuAction.Call Flag", False },
     { "menuAction.Draw", True },
@@ -2720,7 +3245,7 @@ Enables cmailEnables[] = {
     { NULL, False }
 };
 
-Enables trainingOnEnables[] = {    
+Enables trainingOnEnables[] = {
   { "menuMode.Edit Comment", False },
   { "menuMode.Pause", False },
   { "menuStep.Forward", False },
@@ -2732,7 +3257,7 @@ Enables trainingOnEnables[] = {
   { NULL, False }
 };
 
-Enables trainingOffEnables[] = {    
+Enables trainingOffEnables[] = {
   { "menuMode.Edit Comment", True },
   { "menuMode.Pause", True },
   { "menuStep.Forward", True },
@@ -2783,6 +3308,11 @@ Enables userThinkingEnables[] = {
 void SetICSMode()
 {
   SetMenuEnables(icsEnables);
+
+#ifdef ZIPPY
+  if (appData.zippyPlay && !appData.noChessProgram)   /* [DM] icsEngineAnalyze */
+     XtSetSensitive(XtNameToWidget(menuBarWidget, "menuMode.Analysis Mode"), True);
+#endif
 }
 
 void
@@ -2852,7 +3382,7 @@ SetMachineThinkingEnables()
  * Find a font that matches "pattern" that is as close as
  * possible to the targetPxlSize.  Prefer fonts that are k
  * pixels smaller to fonts that are k pixels larger.  The
- * pattern must be in the X Consortium standard format, 
+ * pattern must be in the X Consortium standard format,
  * e.g. "-*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*".
  * The return value should be freed with XtFree when no
  * longer needed.
@@ -2864,12 +3394,40 @@ char *FindFont(pattern, targetPxlSize)
     char **fonts, *p, *best, *scalable, *scalableTail;
     int i, j, nfonts, minerr, err, pxlSize;
 
+#ifdef ENABLE_NLS
+    char **missing_list;
+    int missing_count;
+    char *def_string, *base_fnt_lst, strInt[3];
+    XFontSet fntSet;
+    XFontStruct **fnt_list;
+
+    base_fnt_lst = calloc(1, strlen(pattern) + 3);
+    sprintf(strInt, "%d", targetPxlSize);
+    p = strstr(pattern, "--");
+    strncpy(base_fnt_lst, pattern, p - pattern + 2);
+    strcat(base_fnt_lst, strInt);
+    strcat(base_fnt_lst, strchr(p + 2, '-'));
+
+    if ((fntSet = XCreateFontSet(xDisplay,
+                                 base_fnt_lst,
+                                 &missing_list,
+                                 &missing_count,
+                                 &def_string)) == NULL) {
+
+       fprintf(stderr, _("Unable to create font set.\n"));
+       exit (2);
+    }
+
+    nfonts = XFontsOfFontSet(fntSet, &fnt_list, &fonts);
+#else
     fonts = XListFonts(xDisplay, pattern, 999999, &nfonts);
     if (nfonts < 1) {
-	fprintf(stderr, "%s: no fonts match pattern %s\n",
+	fprintf(stderr, _("%s: no fonts match pattern %s\n"),
 		programName, pattern);
 	exit(2);
     }
+#endif
+
     best = fonts[0];
     scalable = NULL;
     minerr = 999999;
@@ -2907,10 +3465,16 @@ char *FindFont(pattern, targetPxlSize)
         strcpy(p, best);
     }
     if (appData.debugMode) {
-        fprintf(debugFP, "resolved %s at pixel size %d\n  to %s\n",
+        fprintf(debugFP, _("resolved %s at pixel size %d\n  to %s\n"),
 		pattern, targetPxlSize, p);
     }
-    XFreeFontNames(fonts);
+#ifdef ENABLE_NLS
+    if (missing_count > 0)
+       XFreeStringList(missing_list);
+    XFreeFontSet(xDisplay, fntSet);
+#else
+     XFreeFontNames(fonts);
+#endif
     return p;
 }
 
@@ -2920,29 +3484,35 @@ void CreateGCs()
       | GCBackground | GCFunction | GCPlaneMask;
     XGCValues gc_values;
     GC copyInvertedGC;
-    
+
     gc_values.plane_mask = AllPlanes;
     gc_values.line_width = lineGap;
     gc_values.line_style = LineSolid;
     gc_values.function = GXcopy;
-    
+
     gc_values.foreground = XBlackPixel(xDisplay, xScreen);
     gc_values.background = XBlackPixel(xDisplay, xScreen);
     lineGC = XtGetGC(shellWidget, value_mask, &gc_values);
-    
+
     gc_values.foreground = XBlackPixel(xDisplay, xScreen);
     gc_values.background = XWhitePixel(xDisplay, xScreen);
     coordGC = XtGetGC(shellWidget, value_mask, &gc_values);
     XSetFont(xDisplay, coordGC, coordFontID);
-    
+
+    // [HGM] make font for holdings counts (white on black0
+    gc_values.foreground = XWhitePixel(xDisplay, xScreen);
+    gc_values.background = XBlackPixel(xDisplay, xScreen);
+    countGC = XtGetGC(shellWidget, value_mask, &gc_values);
+    XSetFont(xDisplay, countGC, countFontID);
+
     if (appData.monoMode) {
 	gc_values.foreground = XWhitePixel(xDisplay, xScreen);
 	gc_values.background = XWhitePixel(xDisplay, xScreen);
-	highlineGC = XtGetGC(shellWidget, value_mask, &gc_values);	
+	highlineGC = XtGetGC(shellWidget, value_mask, &gc_values);
 
 	gc_values.foreground = XWhitePixel(xDisplay, xScreen);
 	gc_values.background = XBlackPixel(xDisplay, xScreen);
-	lightSquareGC = wbPieceGC 
+	lightSquareGC = wbPieceGC
 	  = XtGetGC(shellWidget, value_mask, &gc_values);
 
 	gc_values.foreground = XBlackPixel(xDisplay, xScreen);
@@ -2966,16 +3536,16 @@ void CreateGCs()
     } else {
 	gc_values.foreground = highlightSquareColor;
 	gc_values.background = highlightSquareColor;
-	highlineGC = XtGetGC(shellWidget, value_mask, &gc_values);	
+	highlineGC = XtGetGC(shellWidget, value_mask, &gc_values);
 
 	gc_values.foreground = premoveHighlightColor;
 	gc_values.background = premoveHighlightColor;
-	prelineGC = XtGetGC(shellWidget, value_mask, &gc_values);	
+	prelineGC = XtGetGC(shellWidget, value_mask, &gc_values);
 
 	gc_values.foreground = lightSquareColor;
 	gc_values.background = darkSquareColor;
 	lightSquareGC = XtGetGC(shellWidget, value_mask, &gc_values);
-	
+
 	gc_values.foreground = darkSquareColor;
 	gc_values.background = lightSquareColor;
 	darkSquareGC = XtGetGC(shellWidget, value_mask, &gc_values);
@@ -2987,19 +3557,19 @@ void CreateGCs()
 	gc_values.foreground = whitePieceColor;
 	gc_values.background = darkSquareColor;
 	wdPieceGC = XtGetGC(shellWidget, value_mask, &gc_values);
-	
+
 	gc_values.foreground = whitePieceColor;
 	gc_values.background = lightSquareColor;
 	wlPieceGC = XtGetGC(shellWidget, value_mask, &gc_values);
-	
+
 	gc_values.foreground = whitePieceColor;
 	gc_values.background = jailSquareColor;
 	wjPieceGC = XtGetGC(shellWidget, value_mask, &gc_values);
-	
+
 	gc_values.foreground = blackPieceColor;
 	gc_values.background = darkSquareColor;
 	bdPieceGC = XtGetGC(shellWidget, value_mask, &gc_values);
-	
+
 	gc_values.foreground = blackPieceColor;
 	gc_values.background = lightSquareColor;
 	blPieceGC = XtGetGC(shellWidget, value_mask, &gc_values);
@@ -3025,34 +3595,34 @@ void loadXIM(xim, xmask, filename, dest, mask)
 
     fp = fopen(filename, "rb");
     if (!fp) {
-	fprintf(stderr, "%s: error loading XIM!\n", programName);
+	fprintf(stderr, _("%s: error loading XIM!\n"), programName);
 	exit(1);
     }
-	  
+
     w = fgetc(fp);
     h = fgetc(fp);
-  
+
     for (y=0; y<h; ++y) {
 	for (x=0; x<h; ++x) {
 	    p = fgetc(fp);
 
 	    switch (p) {
-	      case 0:	
-		XPutPixel(xim, x, y, blackPieceColor); 
+	      case 0:
+		XPutPixel(xim, x, y, blackPieceColor);
 		if (xmask)
 		  XPutPixel(xmask, x, y, WhitePixel(xDisplay,xScreen));
 		break;
-	      case 1:	
-		XPutPixel(xim, x, y, darkSquareColor); 
+	      case 1:
+		XPutPixel(xim, x, y, darkSquareColor);
 		if (xmask)
 		  XPutPixel(xmask, x, y, BlackPixel(xDisplay,xScreen));
 		break;
-	      case 2:	
-		XPutPixel(xim, x, y, whitePieceColor); 
+	      case 2:
+		XPutPixel(xim, x, y, whitePieceColor);
 		if (xmask)
 		  XPutPixel(xmask, x, y, WhitePixel(xDisplay,xScreen));
 		break;
-	      case 3:	
+	      case 3:
 		XPutPixel(xim, x, y, lightSquareColor);
 		if (xmask)
 		  XPutPixel(xmask, x, y, BlackPixel(xDisplay,xScreen));
@@ -3065,9 +3635,9 @@ void loadXIM(xim, xmask, filename, dest, mask)
     *dest = XCreatePixmap(xDisplay, DefaultRootWindow(xDisplay),
 			  w, h, xim->depth);
     XPutImage(xDisplay, *dest, lightSquareGC, xim,
-	      0, 0, 0, 0, w, h);  
+	      0, 0, 0, 0, w, h);
 
-    /* create Pixmap of clipmask 
+    /* create Pixmap of clipmask
        Note: We assume the white/black pieces have the same
              outline, so we make only 6 masks. This is okay
              since the XPM clipmask routines do the same. */
@@ -3075,7 +3645,7 @@ void loadXIM(xim, xmask, filename, dest, mask)
       temp = XCreatePixmap(xDisplay, DefaultRootWindow(xDisplay),
 			    w, h, xim->depth);
       XPutImage(xDisplay, temp, lightSquareGC, xmask,
-	      0, 0, 0, 0, w, h);  
+	      0, 0, 0, 0, w, h);
 
       /* now create the 1-bit version */
       *mask = XCreatePixmap(xDisplay, DefaultRootWindow(xDisplay),
@@ -3085,9 +3655,9 @@ void loadXIM(xim, xmask, filename, dest, mask)
       values.background = 0;
 
       /* Don't use XtGetGC, not read only */
-      maskGC = XCreateGC(xDisplay, *mask, 
+      maskGC = XCreateGC(xDisplay, *mask,
 		    GCForeground | GCBackground, &values);
-      XCopyPlane(xDisplay, temp, *mask, maskGC, 
+      XCopyPlane(xDisplay, temp, *mask, maskGC,
 		  0, 0, squareSize, squareSize, 0, 0, 1);
       XFreePixmap(xDisplay, temp);
     }
@@ -3107,7 +3677,7 @@ void CreateXIMPieces()
        Not sure if needed, but can't hurt */
     XSynchronize(xDisplay, True); /* Work-around for xlib/xt
 				     buffering bug */
-  
+
     /* temp needed by loadXIM() */
     ximtemp = XGetImage(xDisplay, DefaultRootWindow(xDisplay),
 		 0, 0, ss, ss, AllPlanes, XYPixmap);
@@ -3117,11 +3687,11 @@ void CreateXIMPieces()
     } else {
 	useImages = 1;
 	if (appData.monoMode) {
-	  DisplayFatalError("XIM pieces cannot be used in monochrome mode",
+	  DisplayFatalError(_("XIM pieces cannot be used in monochrome mode"),
 			    0, 2);
 	  ExitEvent(2);
 	}
-	fprintf(stderr, "\nLoading XIMs...\n");
+	fprintf(stderr, _("\nLoading XIMs...\n"));
 	/* Load pieces */
 	for (piece = (int) WhitePawn; piece <= (int) WhiteKing; piece++) {
 	    fprintf(stderr, "%d", piece+1);
@@ -3135,42 +3705,42 @@ void CreateXIMPieces()
 		  XGetImage(xDisplay, DefaultRootWindow(xDisplay),
 			    0, 0, ss, ss, AllPlanes, XYPixmap);
 		if (appData.debugMode)
-		  fprintf(stderr, "(File:%s:) ", buf);
-		loadXIM(ximPieceBitmap[kind][piece], 
+		  fprintf(stderr, _("(File:%s:) "), buf);
+		loadXIM(ximPieceBitmap[kind][piece],
 			ximtemp, buf,
 			&(xpmPieceBitmap[kind][piece]),
-			&(ximMaskPm[piece%6]));
+			&(ximMaskPm[piece%(int)BlackPawn]));
 	    }
 	    fprintf(stderr," ");
 	}
 	/* Load light and dark squares */
-	/* If the LSQ and DSQ pieces don't exist, we will 
+	/* If the LSQ and DSQ pieces don't exist, we will
 	   draw them with solid squares. */
 	sprintf(buf, "%s/lsq%u.xim", ExpandPathName(appData.pixmapDirectory), ss);
 	if (access(buf, 0) != 0) {
 	    useImageSqs = 0;
 	} else {
 	    useImageSqs = 1;
-	    fprintf(stderr, "light square ");
-	    ximLightSquare= 
+	    fprintf(stderr, _("light square "));
+	    ximLightSquare=
 	      XGetImage(xDisplay, DefaultRootWindow(xDisplay),
 			0, 0, ss, ss, AllPlanes, XYPixmap);
 	    if (appData.debugMode)
-	      fprintf(stderr, "(File:%s:) ", buf);
+	      fprintf(stderr, _("(File:%s:) "), buf);
 
 	    loadXIM(ximLightSquare, NULL, buf, &xpmLightSquare, NULL);
-	    fprintf(stderr, "dark square ");
+	    fprintf(stderr, _("dark square "));
 	    sprintf(buf, "%s/dsq%u.xim",
 		    ExpandPathName(appData.pixmapDirectory), ss);
 	    if (appData.debugMode)
-	      fprintf(stderr, "(File:%s:) ", buf);
-	    ximDarkSquare= 
+	      fprintf(stderr, _("(File:%s:) "), buf);
+	    ximDarkSquare=
 	      XGetImage(xDisplay, DefaultRootWindow(xDisplay),
 			0, 0, ss, ss, AllPlanes, XYPixmap);
 	    loadXIM(ximDarkSquare, NULL, buf, &xpmDarkSquare, NULL);
 	    xpmJailSquare = xpmLightSquare;
 	}
-	fprintf(stderr, "Done.\n");
+	fprintf(stderr, _("Done.\n"));
     }
     XSynchronize(xDisplay, False); /* Work-around for xlib/xt buffering bug */
 }
@@ -3188,15 +3758,15 @@ void CreateXPMPieces()
 #if 0
     /* Apparently some versions of Xpm don't define XpmFormat at all --tpm */
     if (appData.debugMode) {
-	fprintf(stderr, "XPM Library Version: %d.%d%c\n", 
+	fprintf(stderr, "XPM Library Version: %d.%d%c\n",
 		XpmFormat, XpmVersion, (char)('a' + XpmRevision - 1));
     }
 #endif
-  
+
     /* The XSynchronize calls were copied from CreatePieces.
        Not sure if needed, but can't hurt */
     XSynchronize(xDisplay, True); /* Work-around for xlib/xt buffering bug */
-  
+
     /* Setup translations so piece colors match square colors */
     symbols[0].name = "light_piece";
     symbols[0].value = appData.whitePieceColor;
@@ -3212,7 +3782,7 @@ void CreateXPMPieces()
     attr.numsymbols = 4;
 
     if (appData.monoMode) {
-      DisplayFatalError("XPM pieces cannot be used in monochrome mode",
+      DisplayFatalError(_("XPM pieces cannot be used in monochrome mode"),
 			0, 2);
       ExitEvent(2);
     }
@@ -3222,7 +3792,7 @@ void CreateXPMPieces()
 	/* Load pieces */
 	while (pieces->size != squareSize && pieces->size) pieces++;
 	if (!pieces->size) {
-	  fprintf(stderr, "No builtin XPM pieces of size %d\n", squareSize);
+	  fprintf(stderr, _("No builtin XPM pieces of size %d\n"), squareSize);
 	  exit(1);
 	}
 	for (piece = (int) WhitePawn; piece <= (int) WhiteKing; piece++) {
@@ -3232,18 +3802,18 @@ void CreateXPMPieces()
 					       pieces->xpm[piece][kind],
 					       &(xpmPieceBitmap[kind][piece]),
 					       NULL, &attr)) != 0) {
-		  fprintf(stderr, "Error %d loading XPM image \"%s\"\n",
+		  fprintf(stderr, _("Error %d loading XPM image \"%s\"\n"),
 			  r, buf);
-		  exit(1); 
-		}	
-	    }	
+		  exit(1);
+		}
+	    }
 	}
 	useImageSqs = 0;
 	xpmJailSquare = xpmLightSquare;
     } else {
 	useImages = 1;
-	
-	fprintf(stderr, "\nLoading XPMs...\n");
+
+	fprintf(stderr, _("\nLoading XPMs...\n"));
 
 	/* Load pieces */
 	for (piece = (int) WhitePawn; piece <= (int) WhiteKing; piece++) {
@@ -3254,51 +3824,51 @@ void CreateXPMPieces()
 			ToLower(PieceToChar((ChessSquare)piece)),
 			xpmkind[kind], ss);
 		if (appData.debugMode) {
-		    fprintf(stderr, "(File:%s:) ", buf);
+		    fprintf(stderr, _("(File:%s:) "), buf);
 		}
 		if ((r=XpmReadFileToPixmap(xDisplay, xBoardWindow, buf,
 					   &(xpmPieceBitmap[kind][piece]),
 					   NULL, &attr)) != 0) {
-		    fprintf(stderr, "Error %d loading XPM file \"%s\"\n",
+		    fprintf(stderr, _("Error %d loading XPM file \"%s\"\n"),
 			    r, buf);
-		    exit(1); 
-		}	
-	    }	
+		    exit(1);
+		}
+	    }
 	}
 	/* Load light and dark squares */
-	/* If the LSQ and DSQ pieces don't exist, we will 
+	/* If the LSQ and DSQ pieces don't exist, we will
 	   draw them with solid squares. */
-	fprintf(stderr, "light square ");
+	fprintf(stderr, _("light square "));
 	sprintf(buf, "%s/lsq%u.xpm", ExpandPathName(appData.pixmapDirectory), ss);
 	if (access(buf, 0) != 0) {
 	    useImageSqs = 0;
 	} else {
 	    useImageSqs = 1;
 	    if (appData.debugMode)
-	      fprintf(stderr, "(File:%s:) ", buf);
+	      fprintf(stderr, _("(File:%s:) "), buf);
 
 	    if ((r=XpmReadFileToPixmap(xDisplay, xBoardWindow, buf,
 				       &xpmLightSquare, NULL, &attr)) != 0) {
-		fprintf(stderr, "Error %d loading XPM file \"%s\"\n", r, buf);
+		fprintf(stderr, _("Error %d loading XPM file \"%s\"\n"), r, buf);
 		exit(1);
 	    }
-	    fprintf(stderr, "dark square ");
+	    fprintf(stderr, _("dark square "));
 	    sprintf(buf, "%s/dsq%u.xpm",
 		    ExpandPathName(appData.pixmapDirectory), ss);
 	    if (appData.debugMode) {
-		fprintf(stderr, "(File:%s:) ", buf);
+		fprintf(stderr, _("(File:%s:) "), buf);
 	    }
 	    if ((r=XpmReadFileToPixmap(xDisplay, xBoardWindow, buf,
 				       &xpmDarkSquare, NULL, &attr)) != 0) {
-		fprintf(stderr, "Error %d loading XPM file \"%s\"\n", r, buf);
+		fprintf(stderr, _("Error %d loading XPM file \"%s\"\n"), r, buf);
 		exit(1);
 	    }
 	}
 	xpmJailSquare = xpmLightSquare;
-	fprintf(stderr, "Done.\n");
+	fprintf(stderr, _("Done.\n"));
     }
     XSynchronize(xDisplay, False); /* Work-around for xlib/xt
-				      buffering bug */  
+				      buffering bug */
 }
 #endif /* HAVE_LIBXPM */
 
@@ -3309,7 +3879,7 @@ void CreatePieces()
     int piece, kind;
     char buf[MSG_SIZ];
     u_int ss = squareSize;
-	
+
     XSynchronize(xDisplay, True); /* Work-around for xlib/xt
 				     buffering bug */
 
@@ -3320,7 +3890,7 @@ void CreatePieces()
 	    ReadBitmap(&pieceBitmap[kind][piece], buf, NULL, ss, ss);
 	}
     }
-    
+
     XSynchronize(xDisplay, False); /* Work-around for xlib/xt
 				      buffering bug */
 }
@@ -3332,7 +3902,7 @@ void CreatePieces()
     int piece, kind;
     char buf[MSG_SIZ];
     u_int ss = squareSize;
-	
+
     XSynchronize(xDisplay, True); /* Work-around for xlib/xt
 				     buffering bug */
 
@@ -3346,7 +3916,7 @@ void CreatePieces()
 		       bib->bits[kind][piece], ss, ss);
 	}
     }
-    
+
     XSynchronize(xDisplay, False); /* Work-around for xlib/xt
 				      buffering bug */
 }
@@ -3362,7 +3932,7 @@ void ReadBitmap(pm, name, bits, wreq, hreq)
     u_int w, h;
     int errcode;
     char msg[MSG_SIZ], fullname[MSG_SIZ];
-    
+
     if (*appData.bitmapDirectory != NULLCHAR) {
         strcpy(fullname, appData.bitmapDirectory);
 	strcat(fullname, "/");
@@ -3372,34 +3942,37 @@ void ReadBitmap(pm, name, bits, wreq, hreq)
 	if (errcode != BitmapSuccess) {
 	    switch (errcode) {
 	      case BitmapOpenFailed:
-		sprintf(msg, "Can't open bitmap file %s", fullname);
+		sprintf(msg, _("Can't open bitmap file %s"), fullname);
 		break;
 	      case BitmapFileInvalid:
-		sprintf(msg, "Invalid bitmap in file %s", fullname);
+		sprintf(msg, _("Invalid bitmap in file %s"), fullname);
 		break;
 	      case BitmapNoMemory:
-		sprintf(msg, "Ran out of memory reading bitmap file %s",
+		sprintf(msg, _("Ran out of memory reading bitmap file %s"),
 			fullname);
 		break;
 	      default:
-		sprintf(msg, "Unknown XReadBitmapFile error %d on file %s",
+		sprintf(msg, _("Unknown XReadBitmapFile error %d on file %s"),
 			errcode, fullname);
 		break;
 	    }
-	    fprintf(stderr, "%s: %s...using built-in\n",
+	    fprintf(stderr, _("%s: %s...using built-in\n"),
 		    programName, msg);
 	} else if (w != wreq || h != hreq) {
 	    fprintf(stderr,
-		    "%s: Bitmap %s is %dx%d, not %dx%d...using built-in\n",
+		    _("%s: Bitmap %s is %dx%d, not %dx%d...using built-in\n"),
 		    programName, fullname, w, h, wreq, hreq);
 	} else {
 	    return;
 	}
     }
     if (bits == NULL) {
-	fprintf(stderr, "%s: No built-in bitmap for %s; giving up\n",
+#if 0
+	fprintf(stderr, _("%s: No built-in bitmap for %s; giving up\n"),
 		programName, name);
 	exit(1);
+#endif
+	; // [HGM] bitmaps: make it non-fatal if we have no bitmap;
     } else {
 	*pm = XCreateBitmapFromData(xDisplay, xBoardWindow, (char *) bits,
 				    wreq, hreq);
@@ -3408,22 +3981,26 @@ void ReadBitmap(pm, name, bits, wreq, hreq)
 
 void CreateGrid()
 {
-    int i;
-    
+    int i, j;
+
     if (lineGap == 0) return;
-    for (i = 0; i < BOARD_SIZE + 1; i++) {
-	gridSegments[i].x1 = 0;
-	gridSegments[i].x2 =
-	  lineGap + BOARD_SIZE * (squareSize + lineGap);
-	gridSegments[i].y1 = gridSegments[i].y2
-	  = lineGap / 2 + (i * (squareSize + lineGap));
 
-	gridSegments[i + BOARD_SIZE + 1].y1 = 0;
-	gridSegments[i + BOARD_SIZE + 1].y2 =
-	  BOARD_SIZE * (squareSize + lineGap);
-	gridSegments[i + BOARD_SIZE + 1].x1 =
-	  gridSegments[i + BOARD_SIZE + 1].x2
-	    = lineGap / 2 + (i * (squareSize + lineGap));
+    /* [HR] Split this into 2 loops for non-square boards. */
+
+    for (i = 0; i < BOARD_HEIGHT + 1; i++) {
+        gridSegments[i].x1 = 0;
+        gridSegments[i].x2 =
+          lineGap + BOARD_WIDTH * (squareSize + lineGap);
+        gridSegments[i].y1 = gridSegments[i].y2
+          = lineGap / 2 + (i * (squareSize + lineGap));
+    }
+
+    for (j = 0; j < BOARD_WIDTH + 1; j++) {
+        gridSegments[j + i].y1 = 0;
+        gridSegments[j + i].y2 =
+          lineGap + BOARD_HEIGHT * (squareSize + lineGap);
+        gridSegments[j + i].x1 = gridSegments[j + i].x2
+          = lineGap / 2 + (j * (squareSize + lineGap));
     }
 }
 
@@ -3458,15 +4035,16 @@ void CreateMenuBarPopup(parent, name, mb)
 	    entry = XtCreateManagedWidget(mi->string, smeLineObjectClass,
 					  menu, args, j);
 	} else {
+          XtSetArg(args[j], XtNlabel, XtNewString(_(mi->string)));
 	    entry = XtCreateManagedWidget(mi->string, smeBSBObjectClass,
-					  menu, args, j);
+					  menu, args, j+1);
 	    XtAddCallback(entry, XtNcallback,
 			  (XtCallbackProc) MenuBarSelect,
 			  (caddr_t) mi->proc);
 	}
 	mi++;
     }
-}	
+}
 
 Widget CreateMenuBar(mb)
      Menu *mb;
@@ -3490,10 +4068,14 @@ Widget CreateMenuBar(mb)
 	XtSetArg(args[j], XtNmenuName, XtNewString(menuName));  j++;
 	if (tinyLayout) {
 	    char shortName[2];
-	    shortName[0] = mb->name[0];
+            shortName[0] = _(mb->name)[0];
 	    shortName[1] = NULLCHAR;
 	    XtSetArg(args[j], XtNlabel, XtNewString(shortName)); j++;
 	}
+      else {
+          XtSetArg(args[j], XtNlabel, XtNewString(_(mb->name))); j++;
+      }
+
 	XtSetArg(args[j], XtNborderWidth, 0);                   j++;
 	anchor = XtCreateManagedWidget(mb->name, menuButtonWidgetClass,
 				       menuBar, args, j);
@@ -3526,6 +4108,7 @@ Widget CreateButtonBar(mi)
 	    XtSetArg(args[j], XtNinternalWidth, 2); j++;
 	    XtSetArg(args[j], XtNborderWidth, 0); j++;
 	}
+      XtSetArg(args[j], XtNlabel, XtNewString(_(mi->string))); j++;
 	button = XtCreateManagedWidget(mi->string, commandWidgetClass,
 				       buttonBar, args, j);
 	XtAddCallback(button, XtNcallback,
@@ -3534,7 +4117,7 @@ Widget CreateButtonBar(mi)
 	mi++;
     }
     return buttonBar;
-}     
+}
 
 Widget
 CreatePieceMenu(name, color)
@@ -3548,16 +4131,17 @@ CreatePieceMenu(name, color)
 
     menu = XtCreatePopupShell(name, simpleMenuWidgetClass,
 			      boardWidget, args, 0);
-    
+
     for (i = 0; i < PIECE_MENU_SIZE; i++) {
 	String item = pieceMenuStrings[color][i];
-	
+
 	if (strcmp(item, "----") == 0) {
 	    entry = XtCreateManagedWidget(item, smeLineObjectClass,
 					  menu, NULL, 0);
 	} else {
+          XtSetArg(args[0], XtNlabel, XtNewString(_(item)));
 	    entry = XtCreateManagedWidget(item, smeBSBObjectClass,
-					  menu, NULL, 0);
+                                menu, args, 1);
 	    selection = pieceMenuTranslation[color][i];
 	    XtAddCallback(entry, XtNcallback,
 			  (XtCallbackProc) PieceMenuSelect,
@@ -3581,30 +4165,31 @@ CreatePieceMenus()
 
     whitePieceMenu = CreatePieceMenu("menuW", 0);
     blackPieceMenu = CreatePieceMenu("menuB", 1);
-    
+
     XtRegisterGrabAction(PieceMenuPopup, True,
 			 (unsigned)(ButtonPressMask|ButtonReleaseMask),
 			 GrabModeAsync, GrabModeAsync);
 
-    XtSetArg(args[0], XtNlabel, "Drop");
+    XtSetArg(args[0], XtNlabel, _("Drop"));
     dropMenu = XtCreatePopupShell("menuD", simpleMenuWidgetClass,
 				  boardWidget, args, 1);
     for (i = 0; i < DROP_MENU_SIZE; i++) {
 	String item = dropMenuStrings[i];
-	
+
 	if (strcmp(item, "----") == 0) {
 	    entry = XtCreateManagedWidget(item, smeLineObjectClass,
 					  dropMenu, NULL, 0);
 	} else {
+          XtSetArg(args[0], XtNlabel, XtNewString(_(item)));
 	    entry = XtCreateManagedWidget(item, smeBSBObjectClass,
-					  dropMenu, NULL, 0);
+                                dropMenu, args, 1);
 	    selection = dropMenuTranslation[i];
 	    XtAddCallback(entry, XtNcallback,
 			  (XtCallbackProc) DropMenuSelect,
 			  (caddr_t) selection);
 	}
     }
-}	
+}
 
 void SetupDropMenu()
 {
@@ -3658,17 +4243,17 @@ void PieceMenuPopup(w, event, params, num_params)
       default:
 	return;
     }
-    
-    if (((pmFromX = EventToSquare(event->xbutton.x, BOARD_SIZE)) < 0) ||
-	((pmFromY = EventToSquare(event->xbutton.y, BOARD_SIZE)) < 0)) {
+
+    if (((pmFromX = EventToSquare(event->xbutton.x, BOARD_WIDTH)) < 0) ||
+	((pmFromY = EventToSquare(event->xbutton.y, BOARD_HEIGHT)) < 0)) {
 	pmFromX = pmFromY = -1;
 	return;
     }
     if (flipView)
-      pmFromX = BOARD_SIZE - 1 - pmFromX;
+      pmFromX = BOARD_WIDTH - 1 - pmFromX;
     else
-      pmFromY = BOARD_SIZE - 1 - pmFromY;
-    
+      pmFromY = BOARD_HEIGHT - 1 - pmFromY;
+
     XtPopupSpringLoaded(XtNameToWidget(boardWidget, whichMenu));
 }
 
@@ -3724,7 +4309,7 @@ void BlackClock(w, event, prms, nprms)
 int EventToSquare(x, limit)
      int x;
 {
-    if (x <= 0) 
+    if (x <= 0)
       return -2;
     if (x < lineGap)
       return -1;
@@ -3750,17 +4335,17 @@ static void drawHighlight(file, rank, gc)
     int x, y;
 
     if (lineGap == 0 || appData.blindfold) return;
-    
+
     if (flipView) {
-	x = lineGap/2 + ((BOARD_SIZE-1)-file) * 
+	x = lineGap/2 + ((BOARD_WIDTH-1)-file) *
 	  (squareSize + lineGap);
 	y = lineGap/2 + rank * (squareSize + lineGap);
     } else {
 	x = lineGap/2 + file * (squareSize + lineGap);
-	y = lineGap/2 + ((BOARD_SIZE-1)-rank) * 
+	y = lineGap/2 + ((BOARD_HEIGHT-1)-rank) *
 	  (squareSize + lineGap);
     }
-    
+
     XDrawRectangle(xDisplay, xBoardWindow, gc, x, y,
 		   squareSize+lineGap, squareSize+lineGap);
 }
@@ -3932,6 +4517,7 @@ static void colorDrawPiece(piece, square_color, x, y, dest)
      int square_color, x, y;
      Drawable dest;
 {
+    if(pieceToSolid(piece) == NULL) return; // [HGM] bitmaps: make it non-fatal if we have no bitmap;
     switch (square_color) {
       case 1: /* light */
 	XCopyPlane(xDisplay, *pieceToSolid(piece),
@@ -3984,7 +4570,7 @@ static void colorDrawPieceImage(piece, square_color, x, y, dest)
     }
     XCopyArea(xDisplay, xpmPieceBitmap[kind][piece],
 	      dest, wlPieceGC, 0, 0,
-	      squareSize, squareSize, x, y);		
+	      squareSize, squareSize, x, y);
 }
 
 typedef void (*DrawFunc)();
@@ -4005,6 +4591,32 @@ DrawFunc ChooseDrawFunc()
     }
 }
 
+/* [HR] determine square color depending on chess variant. */
+static int SquareColor(row, column)
+     int row, column;
+{
+    int square_color;
+
+    if (gameInfo.variant == VariantXiangqi) {
+        if (column >= 3 && column <= 5 && row >= 0 && row <= 2) {
+            square_color = 1;
+        } else if (column >= 3 && column <= 5 && row >= 7 && row <= 9) {
+            square_color = 0;
+        } else if (row <= 4) {
+            square_color = 0;
+        } else {
+            square_color = 1;
+        }
+    } else {
+        square_color = ((column + row) % 2) == 1;
+    }
+
+    /* [hgm] holdings: next line makes all holdings squares light */
+    if(column < BOARD_LEFT || column >= BOARD_RGHT) square_color = 1;
+
+    return square_color;
+}
+
 void DrawSquare(row, column, piece, do_flash)
      int row, column, do_flash;
      ChessSquare piece;
@@ -4016,58 +4628,106 @@ void DrawSquare(row, column, piece, do_flash)
     DrawFunc drawfunc;
     int flash_delay;
 
+    if(gameInfo.variant == VariantShogi) { // [HGM] shogi: in shogi Q is used for Lance
+	if(piece == WhiteQueen) piece = WhiteLance; else
+	if(piece == BlackQueen) piece = BlackLance;
+    }
+#ifdef GOTHIC
+    else if(gameInfo.variant == VariantGothic) { // [HGM] shogi: in Gothic Chancelor has alternative look
+	if(piece == WhiteMarshall) piece = WhiteSilver; else
+	if(piece == BlackMarshall) piece = BlackSilver;
+    }
+#endif
+
     /* Calculate delay in milliseconds (2-delays per complete flash) */
     flash_delay = 500 / appData.flashRate;
-	
+
     if (flipView) {
-	x = lineGap + ((BOARD_SIZE-1)-column) * 
+	x = lineGap + ((BOARD_WIDTH-1)-column) *
 	  (squareSize + lineGap);
 	y = lineGap + row * (squareSize + lineGap);
     } else {
 	x = lineGap + column * (squareSize + lineGap);
-	y = lineGap + ((BOARD_SIZE-1)-row) * 
+	y = lineGap + ((BOARD_HEIGHT-1)-row) *
 	  (squareSize + lineGap);
     }
-    
-    square_color = ((column + row) % 2) == 1;
-    
-    if (piece == EmptySquare || appData.blindfold) {
-	BlankSquare(x, y, square_color, piece, xBoardWindow);
-    } else {
-	drawfunc = ChooseDrawFunc();
-	if (do_flash && appData.flashCount > 0) {
-	    for (i=0; i<appData.flashCount; ++i) {
-
-		drawfunc(piece, square_color, x, y, xBoardWindow);
-		XSync(xDisplay, False);
-		do_flash_delay(flash_delay);
 
-		BlankSquare(x, y, square_color, piece, xBoardWindow);
-		XSync(xDisplay, False);
-		do_flash_delay(flash_delay);
-	    }
+    square_color = SquareColor(row, column);
+
+    if ( // [HGM] holdings: blank out area between board and holdings
+                 column == BOARD_LEFT-1 ||  column == BOARD_RGHT
+              || (column == BOARD_LEFT-2 && row < BOARD_HEIGHT-gameInfo.holdingsSize)
+	          || (column == BOARD_RGHT+1 && row >= gameInfo.holdingsSize) ) {
+			BlankSquare(x, y, 2, EmptySquare, xBoardWindow);
+
+			// [HGM] print piece counts next to holdings
+			string[1] = NULLCHAR;
+			if (column == (flipView ? BOARD_LEFT-1 : BOARD_RGHT) && piece > 1 ) {
+			    string[0] = '0' + piece;
+			    XTextExtents(countFontStruct, string, 1, &direction,
+				 &font_ascent, &font_descent, &overall);
+			    if (appData.monoMode) {
+				XDrawImageString(xDisplay, xBoardWindow, countGC,
+						 x + squareSize - overall.width - 2,
+						 y + font_ascent + 1, string, 1);
+			    } else {
+				XDrawString(xDisplay, xBoardWindow, countGC,
+					    x + squareSize - overall.width - 2,
+					    y + font_ascent + 1, string, 1);
+			    }
+			}
+			if (column == (flipView ? BOARD_RGHT : BOARD_LEFT-1) && piece > 1) {
+			    string[0] = '0' + piece;
+			    XTextExtents(countFontStruct, string, 1, &direction,
+					 &font_ascent, &font_descent, &overall);
+			    if (appData.monoMode) {
+				XDrawImageString(xDisplay, xBoardWindow, countGC,
+						 x + 2, y + font_ascent + 1, string, 1);
+			    } else {
+				XDrawString(xDisplay, xBoardWindow, countGC,
+					    x + 2, y + font_ascent + 1, string, 1);
+			    }
+			}
+    } else {
+	    if (piece == EmptySquare || appData.blindfold) {
+			BlankSquare(x, y, square_color, piece, xBoardWindow);
+	    } else {
+			drawfunc = ChooseDrawFunc();
+			if (do_flash && appData.flashCount > 0) {
+			    for (i=0; i<appData.flashCount; ++i) {
+
+					drawfunc(piece, square_color, x, y, xBoardWindow);
+					XSync(xDisplay, False);
+					do_flash_delay(flash_delay);
+
+					BlankSquare(x, y, square_color, piece, xBoardWindow);
+					XSync(xDisplay, False);
+					do_flash_delay(flash_delay);
+			    }
+			}
+			drawfunc(piece, square_color, x, y, xBoardWindow);
+    	}
 	}
-	drawfunc(piece, square_color, x, y, xBoardWindow);
-    }
-	
+
     string[1] = NULLCHAR;
-    if (appData.showCoords && row == (flipView ? 7 : 0)) {
-	string[0] = 'a' + column;
-	XTextExtents(coordFontStruct, string, 1, &direction, 
+    if (appData.showCoords && row == (flipView ? BOARD_HEIGHT-1 : 0)
+		&& column >= BOARD_LEFT && column < BOARD_RGHT) {
+	string[0] = 'a' + column - BOARD_LEFT;
+	XTextExtents(coordFontStruct, string, 1, &direction,
 		     &font_ascent, &font_descent, &overall);
 	if (appData.monoMode) {
 	    XDrawImageString(xDisplay, xBoardWindow, coordGC,
-			     x + squareSize - overall.width - 2, 
+			     x + squareSize - overall.width - 2,
 			     y + squareSize - font_descent - 1, string, 1);
 	} else {
 	    XDrawString(xDisplay, xBoardWindow, coordGC,
-			x + squareSize - overall.width - 2, 
+			x + squareSize - overall.width - 2,
 			y + squareSize - font_descent - 1, string, 1);
 	}
     }
-    if (appData.showCoords && column == (flipView ? 7 : 0)) {
-	string[0] = '1' + row;
-	XTextExtents(coordFontStruct, string, 1, &direction, 
+    if (appData.showCoords && column == (flipView ? BOARD_RGHT-1 : BOARD_LEFT)) {
+	string[0] = ONE + row;
+	XTextExtents(coordFontStruct, string, 1, &direction,
 		     &font_ascent, &font_descent, &overall);
 	if (appData.monoMode) {
 	    XDrawImageString(xDisplay, xBoardWindow, coordGC,
@@ -4075,8 +4735,8 @@ void DrawSquare(row, column, piece, do_flash)
 	} else {
 	    XDrawString(xDisplay, xBoardWindow, coordGC,
 			x + 2, y + font_ascent + 1, string, 1);
-	}	    
-    }   
+	}
+    }
 }
 
 
@@ -4114,9 +4774,9 @@ static int too_many_diffs(b1, b2)
 {
     int i, j;
     int c = 0;
-  
-    for (i=0; i<BOARD_SIZE; ++i) {
-	for (j=0; j<BOARD_SIZE; ++j) {
+
+    for (i=0; i<BOARD_HEIGHT; ++i) {
+	for (j=0; j<BOARD_WIDTH; ++j) {
 	    if (b1[i][j] != b2[i][j]) {
 		if (++c > 4)	/* Castling causes 4 diffs */
 		  return 1;
@@ -4138,9 +4798,9 @@ static int castling_matrix[4][5] = {
 
 /* Checks whether castling occurred. If it did, *rrow and *rcol
    are set to the destination (row,col) of the rook that moved.
-   
+
    Returns 1 if castling occurred, 0 if not.
-   
+
    Note: Only handles a max of 1 castling move, so be sure
    to call too_many_diffs() first.
    */
@@ -4190,7 +4850,7 @@ void XDrawPosition(w, repaint, board)
     static Board lastBoard;
     Arg args[16];
     int rrow, rcol;
-    
+
     if (board == NULL) {
 	if (!lastBoardValid) return;
 	board = lastBoard;
@@ -4205,7 +4865,7 @@ void XDrawPosition(w, repaint, board)
      * It would be simpler to clear the window with XClearWindow()
      * but this causes a very distracting flicker.
      */
-    
+
     if (!repaint && lastBoardValid && lastFlipView == flipView) {
 
 	/* If too much changes (begin observing new game, etc.), don't
@@ -4222,11 +4882,11 @@ void XDrawPosition(w, repaint, board)
 	    }
 	}
 
-	/* First pass -- Draw (newly) empty squares and repair damage. 
-	   This prevents you from having a piece show up twice while it 
+	/* First pass -- Draw (newly) empty squares and repair damage.
+	   This prevents you from having a piece show up twice while it
 	   is flashing on its new square */
-	for (i = 0; i < BOARD_SIZE; i++)
-	  for (j = 0; j < BOARD_SIZE; j++)
+	for (i = 0; i < BOARD_HEIGHT; i++)
+	  for (j = 0; j < BOARD_WIDTH; j++)
 	    if ((board[i][j] != lastBoard[i][j] && board[i][j] == EmptySquare)
 		|| damage[i][j]) {
 		DrawSquare(i, j, board[i][j], 0);
@@ -4234,18 +4894,18 @@ void XDrawPosition(w, repaint, board)
 	    }
 
 	/* Second pass -- Draw piece(s) in new position and flash them */
-	for (i = 0; i < BOARD_SIZE; i++)
-	  for (j = 0; j < BOARD_SIZE; j++)
+	for (i = 0; i < BOARD_HEIGHT; i++)
+	  for (j = 0; j < BOARD_WIDTH; j++)
 	    if (board[i][j] != lastBoard[i][j]) {
-		DrawSquare(i, j, board[i][j], do_flash);	  
+		DrawSquare(i, j, board[i][j], do_flash);
 	    }
     } else {
 	if (lineGap > 0)
 	  XDrawSegments(xDisplay, xBoardWindow, lineGC,
-			gridSegments, (BOARD_SIZE + 1) * 2);
-	
-	for (i = 0; i < BOARD_SIZE; i++)
-	  for (j = 0; j < BOARD_SIZE; j++) {
+			gridSegments, BOARD_HEIGHT + BOARD_WIDTH + 2);
+
+	for (i = 0; i < BOARD_HEIGHT; i++)
+	  for (j = 0; j < BOARD_WIDTH; j++) {
 	      DrawSquare(i, j, board[i][j], 0);
 	      damage[i][j] = False;
 	  }
@@ -4292,6 +4952,13 @@ void DrawPositionProc(w, event, prms, nprms)
 /*
  * event handler for parsing user moves
  */
+// [HGM] This routine will need quite some reworking. Although the backend still supports the old
+//       way of doing things, by calling UserMoveEvent() to test the legality of the move and then perform
+//       it at the end, and doing all kind of preliminary tests here (e.g. to weed out self-captures), it
+//       should be made to use the new way, of calling UserMoveTest early  to determine the legality of the
+//       move, (which will weed out the illegal selfcaptures and moves into the holdings, and flag promotions),
+//       and at the end FinishMove() to perform the move after optional promotion popups.
+//       For now I patched it to allow self-capture with King, and suppress clicks between board and holdings.
 void HandleUserMove(w, event, prms, nprms)
      Widget w;
      XEvent *event;
@@ -4301,7 +4968,7 @@ void HandleUserMove(w, event, prms, nprms)
     int x, y;
     Boolean saveAnimate;
     static int second = 0;
-	
+
     if (w != boardWidget || errorExitStatus != -1) return;
 
     if (event->type == ButtonPress) ErrorPopDown();
@@ -4317,19 +4984,26 @@ void HandleUserMove(w, event, prms, nprms)
 	    return;
 	}
     }
-    
-    x = EventToSquare(event->xbutton.x, BOARD_SIZE);
-    y = EventToSquare(event->xbutton.y, BOARD_SIZE);
+
+    x = EventToSquare(event->xbutton.x, BOARD_WIDTH);
+    y = EventToSquare(event->xbutton.y, BOARD_HEIGHT);
     if (!flipView && y >= 0) {
-	y = BOARD_SIZE - 1 - y;
+	y = BOARD_HEIGHT - 1 - y;
     }
     if (flipView && x >= 0) {
-	x = BOARD_SIZE - 1 - x;
+	x = BOARD_WIDTH - 1 - x;
     }
 
+    /* [HGM] holdings: next 5 lines: ignore all clicks between board and holdings */
+    if(event->type == ButtonPress
+            && ( x == BOARD_LEFT-1 || x == BOARD_RGHT
+              || x == BOARD_LEFT-2 && y < BOARD_HEIGHT-gameInfo.holdingsSize
+              || x == BOARD_RGHT+1 && y >= gameInfo.holdingsSize) )
+	return;
+
     if (fromX == -1) {
 	if (event->type == ButtonPress) {
-	    /* First square */ 
+	    /* First square */
 	    if (OKToStartUserMove(x, y)) {
 		fromX = x;
 		fromY = y;
@@ -4338,7 +5012,7 @@ void HandleUserMove(w, event, prms, nprms)
 		if (appData.highlightDragging) {
 		    SetHighlights(x, y, -1, -1);
 		}
-	    } 
+	    }
 	}
 	return;
     }
@@ -4348,12 +5022,13 @@ void HandleUserMove(w, event, prms, nprms)
 	x >= 0 && y >= 0) {
 	ChessSquare fromP;
 	ChessSquare toP;
+
 	/* Check if clicking again on the same color piece */
 	fromP = boards[currentMove][fromY][fromX];
 	toP = boards[currentMove][y][x];
-	if ((WhitePawn <= fromP && fromP <= WhiteKing &&
-	     WhitePawn <= toP && toP <= WhiteKing) ||
-	    (BlackPawn <= fromP && fromP <= BlackKing &&
+	if ((WhitePawn <= fromP && fromP < WhiteKing && // [HGM] this test should go, as UserMoveTest now does it.
+	     WhitePawn <= toP && toP <= WhiteKing) ||   //       For now I made it less critical by exempting King
+	    (BlackPawn <= fromP && fromP < BlackKing && //       moves, to not interfere with FRC castlings.
 	     BlackPawn <= toP && toP <= BlackKing)) {
 	    /* Clicked again on same color piece -- changed his mind */
 	    second = (x == fromX && y == fromY);
@@ -4389,7 +5064,7 @@ void HandleUserMove(w, event, prms, nprms)
 	    SetHighlights(x, y, -1, -1);
 	}
 	return;
-    }	
+    }
 
     /* Completed move */
     toX = x;
@@ -4506,7 +5181,7 @@ Widget CommentCreate(name, text, mutable, callback, lines)
 	XtSetArg(args[j], XtNleft, XtChainLeft); j++;
 	XtSetArg(args[j], XtNright, XtChainLeft); j++;
 	b_ok =
-	  XtCreateManagedWidget("ok", commandWidgetClass, form, args, j);
+	  XtCreateManagedWidget(_("ok"), commandWidgetClass, form, args, j);
 	XtAddCallback(b_ok, XtNcallback, callback, (XtPointer) 0);
 
 	j = 0;
@@ -4517,7 +5192,7 @@ Widget CommentCreate(name, text, mutable, callback, lines)
 	XtSetArg(args[j], XtNleft, XtChainLeft); j++;
 	XtSetArg(args[j], XtNright, XtChainLeft); j++;
 	b_cancel =
-	  XtCreateManagedWidget("cancel", commandWidgetClass, form, args, j);
+	  XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j);
 	XtAddCallback(b_cancel, XtNcallback, callback, (XtPointer) 0);
 
 	j = 0;
@@ -4528,7 +5203,7 @@ Widget CommentCreate(name, text, mutable, callback, lines)
 	XtSetArg(args[j], XtNleft, XtChainLeft); j++;
 	XtSetArg(args[j], XtNright, XtChainLeft); j++;
 	b_clear =
-	  XtCreateManagedWidget("clear", commandWidgetClass, form, args, j);
+	  XtCreateManagedWidget(_("clear"), commandWidgetClass, form, args, j);
 	XtAddCallback(b_clear, XtNcallback, callback, (XtPointer) 0);
     } else {
 	j = 0;
@@ -4538,7 +5213,7 @@ Widget CommentCreate(name, text, mutable, callback, lines)
 	XtSetArg(args[j], XtNleft, XtChainLeft); j++;
 	XtSetArg(args[j], XtNright, XtChainLeft); j++;
 	b_close =
-	  XtCreateManagedWidget("close", commandWidgetClass, form, args, j);
+	  XtCreateManagedWidget(_("close"), commandWidgetClass, form, args, j);
 	XtAddCallback(b_close, XtNcallback, callback, (XtPointer) 0);
 
 	j = 0;
@@ -4549,7 +5224,7 @@ Widget CommentCreate(name, text, mutable, callback, lines)
 	XtSetArg(args[j], XtNleft, XtChainLeft); j++;
 	XtSetArg(args[j], XtNright, XtChainLeft); j++;
 	b_edit =
-	  XtCreateManagedWidget("edit", commandWidgetClass, form, args, j);
+	  XtCreateManagedWidget(_("edit"), commandWidgetClass, form, args, j);
 	XtAddCallback(b_edit, XtNcallback, callback, (XtPointer) 0);
     }
 
@@ -4714,7 +5389,7 @@ void EditCommentPopUp(index, title, text)
 
     if (editShell == NULL) {
 	editShell =
-	  CommentCreate(title, text, True, EditCommentCallback, 4); 
+	  CommentCreate(title, text, True, EditCommentCallback, 4);
 	XtRealizeWidget(editShell);
 	CatchDeleteWindow(editShell, "EditCommentPopDown");
     } else {
@@ -4750,16 +5425,16 @@ void EditCommentCallback(w, client_data, call_data)
     XtSetArg(args[j], XtNlabel, &name);  j++;
     XtGetValues(w, args, j);
 
-    if (strcmp(name, "ok") == 0) {
+    if (strcmp(name, _("ok")) == 0) {
 	edit = XtNameToWidget(editShell, "*form.text");
 	j = 0;
 	XtSetArg(args[j], XtNstring, &val); j++;
 	XtGetValues(edit, args, j);
 	ReplaceComment(savedIndex, val);
 	EditCommentPopDown();
-    } else if (strcmp(name, "cancel") == 0) {
+    } else if (strcmp(name, _("cancel")) == 0) {
 	EditCommentPopDown();
-    } else if (strcmp(name, "clear") == 0) {
+    } else if (strcmp(name, _("clear")) == 0) {
 	edit = XtNameToWidget(editShell, "*form.text");
 	XtCallActionProc(edit, "select-all", NULL, NULL, 0);
 	XtCallActionProc(edit, "kill-selection", NULL, NULL, 0);
@@ -4791,9 +5466,9 @@ void ICSInputBoxPopUp()
     Widget edit;
     Arg args[16];
     int j;
-    char *title = "ICS Input";
+    char *title = _("ICS Input");
     XtTranslations tr;
-	
+
     if (ICSInputShell == NULL) {
 	ICSInputShell = MiscCreate(title, "", True, NULL, 1);
 	tr = XtParseTranslationTable(ICSInputTranslations);
@@ -4801,7 +5476,7 @@ void ICSInputBoxPopUp()
 	XtOverrideTranslations(edit, tr);
 	XtRealizeWidget(ICSInputShell);
 	CatchDeleteWindow(ICSInputShell, "ICSInputBoxPopDown");
-	
+
     } else {
 	edit = XtNameToWidget(ICSInputShell, "*form.text");
 	j = 0;
@@ -4829,7 +5504,7 @@ void ICSInputSendText()
     int j;
     Arg args[16];
     String val;
-  
+
     edit = XtNameToWidget(ICSInputShell, "*form.text");
     j = 0;
     XtSetArg(args[j], XtNstring, &val); j++;
@@ -4926,9 +5601,9 @@ void CommentCallback(w, client_data, call_data)
     XtSetArg(args[j], XtNlabel, &name);  j++;
     XtGetValues(w, args, j);
 
-    if (strcmp(name, "close") == 0) {
+    if (strcmp(name, _("close")) == 0) {
 	CommentPopDown();
-    } else if (strcmp(name, "edit") == 0) {
+    } else if (strcmp(name, _("edit")) == 0) {
 	CommentPopDown();
 	EditCommentEvent();
     }
@@ -4958,6 +5633,7 @@ void AnalysisPopDown()
     XtPopdown(analysisShell);
     XSync(xDisplay, False);
     analysisUp = False;
+    if (appData.icsEngineAnalyze) ExitAnalyzeMode();    /* [DM] icsEngineAnalyze */
 }
 
 
@@ -4973,45 +5649,46 @@ void FileNamePopUp(label, def, proc, openMode)
     int x, y, i;
     int win_x, win_y;
     unsigned int mask;
-    
+
     fileProc = proc;		/* I can't see a way not */
     fileOpenMode = openMode;	/*   to use globals here */
-    
+
     i = 0;
     XtSetArg(args[i], XtNresizable, True); i++;
     XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++;
+    XtSetArg(args[i], XtNtitle, XtNewString(_("File name prompt"))); i++;
     fileNameShell = popup =
       XtCreatePopupShell("File name prompt", transientShellWidgetClass,
 			 shellWidget, args, i);
-    
+
     layout =
       XtCreateManagedWidget(layoutName, formWidgetClass, popup,
 			    layoutArgs, XtNumber(layoutArgs));
-  
+
     i = 0;
     XtSetArg(args[i], XtNlabel, label); i++;
     XtSetArg(args[i], XtNvalue, def); i++;
     XtSetArg(args[i], XtNborderWidth, 0); i++;
     dialog = XtCreateManagedWidget("fileName", dialogWidgetClass,
 				   layout, args, i);
-    
-    XawDialogAddButton(dialog, "ok", FileNameCallback, (XtPointer) dialog);
-    XawDialogAddButton(dialog, "cancel", FileNameCallback,
+
+    XawDialogAddButton(dialog, _("ok"), FileNameCallback, (XtPointer) dialog);
+    XawDialogAddButton(dialog, _("cancel"), FileNameCallback,
 		       (XtPointer) dialog);
-    
+
     XtRealizeWidget(popup);
     CatchDeleteWindow(popup, "FileNamePopDown");
-    
+
     XQueryPointer(xDisplay, xBoardWindow, &root, &child,
 		  &x, &y, &win_x, &win_y, &mask);
-    
+
     XtSetArg(args[0], XtNx, x - 10);
     XtSetArg(args[1], XtNy, y - 30);
     XtSetValues(popup, args, 2);
-    
+
     XtPopup(popup, XtGrabExclusive);
     filenameUp = True;
-    
+
     edit = XtNameToWidget(dialog, "*value");
     XtSetKeyboardFocus(popup, edit);
 }
@@ -5031,15 +5708,15 @@ void FileNameCallback(w, client_data, call_data)
 {
     String name;
     Arg args[16];
-    
+
     XtSetArg(args[0], XtNlabel, &name);
     XtGetValues(w, args, 1);
-    
-    if (strcmp(name, "cancel") == 0) {
+
+    if (strcmp(name, _("cancel")) == 0) {
         FileNamePopDown();
         return;
     }
-    
+
     FileNameAction(w, NULL, NULL, NULL);
 }
 
@@ -5056,7 +5733,7 @@ void FileNameAction(w, event, prms, nprms)
     int index;
 
     name = XawDialogGetValueString(w = XtParent(w));
-    
+
     if ((name != NULL) && (*name != NULLCHAR)) {
 	strcpy(buf, name);
 	XtPopdown(w = XtParent(XtParent(w)));
@@ -5072,12 +5749,12 @@ void FileNameAction(w, event, prms, nprms)
 	}
 	fullname = ExpandPathName(buf);
 	if (!fullname) {
-	    ErrorPopUp("Error", "Can't open file", FALSE);
+	    ErrorPopUp(_("Error"), _("Can't open file"), FALSE);
 	}
 	else {
 	    f = fopen(fullname, fileOpenMode);
 	    if (f == NULL) {
-		DisplayError("Failed to open file", errno);
+		DisplayError(_("Failed to open file"), errno);
 	    } else {
 		(void) (*fileProc)(f, index, buf);
 	    }
@@ -5085,7 +5762,7 @@ void FileNameAction(w, event, prms, nprms)
 	ModeHighlight();
 	return;
     }
-    
+
     XtPopdown(w = XtParent(XtParent(w)));
     XtDestroyWidget(w);
     filenameUp = False;
@@ -5103,57 +5780,58 @@ void PromotionPopUp()
     j = 0;
     XtSetArg(args[j], XtNwidth, &bw_width); j++;
     XtGetValues(boardWidget, args, j);
-    
+
     j = 0;
     XtSetArg(args[j], XtNresizable, True); j++;
+    XtSetArg(args[j], XtNtitle, XtNewString(_("Promotion"))); j++;
     promotionShell =
       XtCreatePopupShell("Promotion", transientShellWidgetClass,
 			 shellWidget, args, j);
     layout =
       XtCreateManagedWidget(layoutName, formWidgetClass, promotionShell,
 			    layoutArgs, XtNumber(layoutArgs));
-    
+
     j = 0;
-    XtSetArg(args[j], XtNlabel, "Promote pawn to what?"); j++;
+    XtSetArg(args[j], XtNlabel, _("Promote pawn to what?")); j++;
     XtSetArg(args[j], XtNborderWidth, 0); j++;
     dialog = XtCreateManagedWidget("promotion", dialogWidgetClass,
 				   layout, args, j);
-    
-    XawDialogAddButton(dialog, "Queen", PromotionCallback, 
+
+    XawDialogAddButton(dialog, _("Queen"), PromotionCallback,
 		       (XtPointer) dialog);
-    XawDialogAddButton(dialog, "Rook", PromotionCallback, 
+    XawDialogAddButton(dialog, _("Rook"), PromotionCallback,
 		       (XtPointer) dialog);
-    XawDialogAddButton(dialog, "Bishop", PromotionCallback, 
+    XawDialogAddButton(dialog, _("Bishop"), PromotionCallback,
 		       (XtPointer) dialog);
-    XawDialogAddButton(dialog, "Knight", PromotionCallback, 
+    XawDialogAddButton(dialog, _("Knight"), PromotionCallback,
 		       (XtPointer) dialog);
     if (!appData.testLegality || gameInfo.variant == VariantSuicide ||
         gameInfo.variant == VariantGiveaway) {
-      XawDialogAddButton(dialog, "King", PromotionCallback, 
+      XawDialogAddButton(dialog, _("King"), PromotionCallback,
 			 (XtPointer) dialog);
     }
-    XawDialogAddButton(dialog, "cancel", PromotionCallback, 
+    XawDialogAddButton(dialog, _("cancel"), PromotionCallback,
 		       (XtPointer) dialog);
-    
+
     XtRealizeWidget(promotionShell);
     CatchDeleteWindow(promotionShell, "PromotionPopDown");
-    
+
     j = 0;
     XtSetArg(args[j], XtNwidth, &pw_width); j++;
     XtGetValues(promotionShell, args, j);
-    
+
     XtTranslateCoords(boardWidget, (bw_width - pw_width) / 2,
 		      lineGap + squareSize/3 +
-		      ((toY == 7) ^ (flipView) ?
+		      ((toY == BOARD_HEIGHT-1) ^ (flipView) ?
 		       0 : 6*(squareSize + lineGap)), &x, &y);
-    
+
     j = 0;
     XtSetArg(args[j], XtNx, x); j++;
     XtSetArg(args[j], XtNy, y); j++;
     XtSetValues(promotionShell, args, j);
-    
+
     XtPopup(promotionShell, XtGrabNone);
-    
+
     promotionUp = True;
 }
 
@@ -5172,19 +5850,19 @@ void PromotionCallback(w, client_data, call_data)
     String name;
     Arg args[16];
     int promoChar;
-    
+
     XtSetArg(args[0], XtNlabel, &name);
     XtGetValues(w, args, 1);
-    
+
     PromotionPopDown();
-    
+
     if (fromX == -1) return;
-    
-    if (strcmp(name, "cancel") == 0) {
+
+    if (strcmp(name, _("cancel")) == 0) {
 	fromX = fromY = -1;
 	ClearHighlights();
 	return;
-    } else if (strcmp(name, "Knight") == 0) {
+    } else if (strcmp(name, _("Knight")) == 0) {
 	promoChar = 'n';
     } else {
 	promoChar = ToLower(name[0]);
@@ -5230,28 +5908,28 @@ void ErrorPopUp(title, label, modal)
     Dimension bw_width, pw_width;
     Dimension pw_height;
     int i;
-    
+
     i = 0;
     XtSetArg(args[i], XtNresizable, True);  i++;
     XtSetArg(args[i], XtNtitle, title); i++;
-    errorShell = 
+    errorShell =
       XtCreatePopupShell("errorpopup", transientShellWidgetClass,
 			 shellWidget, args, i);
     layout =
       XtCreateManagedWidget(layoutName, formWidgetClass, errorShell,
 			    layoutArgs, XtNumber(layoutArgs));
-    
+
     i = 0;
     XtSetArg(args[i], XtNlabel, label); i++;
     XtSetArg(args[i], XtNborderWidth, 0); i++;
     dialog = XtCreateManagedWidget("dialog", dialogWidgetClass,
 				   layout, args, i);
-    
-    XawDialogAddButton(dialog, "ok", ErrorCallback, (XtPointer) dialog);
-    
+
+    XawDialogAddButton(dialog, _("ok"), ErrorCallback, (XtPointer) dialog);
+
     XtRealizeWidget(errorShell);
     CatchDeleteWindow(errorShell, "ErrorPopDown");
-    
+
     i = 0;
     XtSetArg(args[i], XtNwidth, &bw_width);  i++;
     XtGetValues(boardWidget, args, i);
@@ -5344,7 +6022,7 @@ char *ModeToWidgetName(mode)
       case EndOfGame:
 	return NULL;
     }
-}     
+}
 
 void ModeHighlight()
 {
@@ -5352,7 +6030,7 @@ void ModeHighlight()
     static int oldPausing = FALSE;
     static GameMode oldmode = (GameMode) -1;
     char *wname;
-    
+
     if (!boardWidget || !XtIsRealized(boardWidget)) return;
 
     if (pausing != oldPausing) {
@@ -5432,7 +6110,7 @@ int LoadGamePopUp(f, gameNumber, title)
     if (gameNumber == 0) {
 	int error = GameListBuild(f);
 	if (error) {
-	    DisplayError("Cannot build game list", error);
+	    DisplayError(_("Cannot build game list"), error);
 	} else if (!ListEmpty(&gameList) &&
 		   ((ListGame *) gameList.tailPred)->number > 1) {
 	    GameListPopUp(f, title);
@@ -5453,7 +6131,7 @@ void LoadGameProc(w, event, prms, nprms)
     if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
 	Reset(FALSE, TRUE);
     }
-    FileNamePopUp("Load game file name?", "", LoadGamePopUp, "rb");
+    FileNamePopUp(_("Load game file name?"), "", LoadGamePopUp, "rb");
 }
 
 void LoadNextGameProc(w, event, prms, nprms)
@@ -5519,7 +6197,7 @@ void LoadPositionProc(w, event, prms, nprms)
     if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
 	Reset(FALSE, TRUE);
     }
-    FileNamePopUp("Load position file name?", "", LoadPosition, "rb");
+    FileNamePopUp(_("Load position file name?"), "", LoadPosition, "rb");
 }
 
 void SaveGameProc(w, event, prms, nprms)
@@ -5528,7 +6206,7 @@ void SaveGameProc(w, event, prms, nprms)
      String *prms;
      Cardinal *nprms;
 {
-    FileNamePopUp("Save game file name?",
+    FileNamePopUp(_("Save game file name?"),
 		  DefaultFileName(appData.oldSaveStyle ? "game" : "pgn"),
 		  SaveGame, "a");
 }
@@ -5539,7 +6217,7 @@ void SavePositionProc(w, event, prms, nprms)
      String *prms;
      Cardinal *nprms;
 {
-    FileNamePopUp("Save position file name?",
+    FileNamePopUp(_("Save position file name?"),
 		  DefaultFileName(appData.oldSaveStyle ? "pos" : "fen"),
 		  SavePosition, "a");
 }
@@ -5587,7 +6265,7 @@ SendPositionSelection(Widget w, Atom *selection, Atom *target,
     return True;
   } else {
     return False;
-  } 
+  }
 }
 
 /* note: when called from menu all parameters are NULL, so no clue what the
@@ -5602,7 +6280,7 @@ void CopyPositionProc(w, event, prms, nprms)
     int ret;
 
     if (selected_fen_position) free(selected_fen_position);
-    selected_fen_position = (char *)PositionToFEN(currentMove);
+    selected_fen_position = (char *)PositionToFEN(currentMove, NULL);
     if (!selected_fen_position) return;
     ret = XtOwnSelection(menuBarWidget, XA_PRIMARY,
 			 CurrentTime,
@@ -5676,7 +6354,7 @@ SendGameSelection(Widget w, Atom *selection, Atom *target,
     return True;
   } else {
     return False;
-  } 
+  }
 }
 
 /* note: when called from menu all parameters are NULL, so no clue what the
@@ -5711,7 +6389,7 @@ PasteGameCB(Widget w, XtPointer client_data, Atom *selection,
   }
   f = fopen(gamePasteFilename, "w");
   if (f == NULL) {
-    DisplayError("Can't open temp file", errno);
+    DisplayError(_("Can't open temp file"), errno);
     return;
   }
   fwrite(value, 1, *len, f);
@@ -5790,12 +6468,37 @@ void AnalyzeModeProc(w, event, prms, nprms)
      String *prms;
      Cardinal *nprms;
 {
+    char buf[MSG_SIZ];
+
     if (!first.analysisSupport) {
-      char buf[MSG_SIZ];
-      sprintf(buf, "%s does not support analysis", first.tidy);
+      sprintf(buf, _("%s does not support analysis"), first.tidy);
       DisplayError(buf, 0);
       return;
     }
+    /* [DM] icsEngineAnalyze [HGM] This is horrible code; reverse the gameMode and isEngineAnalyze tests! */
+    if (appData.icsActive) {
+        if (gameMode != IcsObserving) {
+            sprintf(buf,_("You are not observing a game"));
+            DisplayError(buf, 0);
+            /* secure check */
+            if (appData.icsEngineAnalyze) {
+                if (appData.debugMode)
+                    fprintf(debugFP, _("Found unexpected active ICS engine analyze \n"));
+                ExitAnalyzeMode();
+                ModeHighlight();
+            }
+            return;
+        }
+        /* if enable, use want disable icsEngineAnalyze */
+        if (appData.icsEngineAnalyze) {
+                ExitAnalyzeMode();
+                ModeHighlight();
+                return;
+        }
+        appData.icsEngineAnalyze = TRUE;
+        if (appData.debugMode)
+            fprintf(debugFP, _("ICS engine analyze starting... \n"));
+    }
     if (!appData.showThinking)
       ShowThinkingProc(w,event,prms,nprms);
 
@@ -5810,7 +6513,7 @@ void AnalyzeFileProc(w, event, prms, nprms)
 {
     if (!first.analysisSupport) {
       char buf[MSG_SIZ];
-      sprintf(buf, "%s does not support analysis", first.tidy);
+      sprintf(buf, _("%s does not support analysis"), first.tidy);
       DisplayError(buf, 0);
       return;
     }
@@ -5820,7 +6523,7 @@ void AnalyzeFileProc(w, event, prms, nprms)
       ShowThinkingProc(w,event,prms,nprms);
 
     AnalyzeFileEvent();
-    FileNamePopUp("File to analyze", "", LoadGamePopUp, "rb");
+    FileNamePopUp(_("File to analyze"), "", LoadGamePopUp, "rb");
     AnalysisPeriodicEvent(1);
 }
 
@@ -5967,6 +6670,33 @@ void ResignProc(w, event, prms, nprms)
     ResignEvent();
 }
 
+void AdjuWhiteProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+    UserAdjudicationEvent(+1);
+}
+
+void AdjuBlackProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+    UserAdjudicationEvent(-1);
+}
+
+void AdjuDrawProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+    UserAdjudicationEvent(0);
+}
+
 void EnterKeyProc(w, event, prms, nprms)
      Widget w;
      XEvent *event;
@@ -6444,7 +7174,7 @@ void PeriodicUpdatesProc(w, event, prms, nprms)
     Arg args[16];
 
     PeriodicUpdatesEvent(!appData.periodicUpdates);
-	
+
     if (appData.periodicUpdates) {
 	XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
     } else {
@@ -6578,8 +7308,10 @@ void ShowThinkingProc(w, event, prms, nprms)
 {
     Arg args[16];
 
-    ShowThinkingEvent(!appData.showThinking);
-
+    appData.showThinking = !appData.showThinking; // [HGM] thinking: tken out of ShowThinkingEvent
+    ShowThinkingEvent();
+#if 0
+    // [HGM] thinking: currently no suc menu item; replaced by Hide Thinking (From Human)
     if (appData.showThinking) {
 	XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
     } else {
@@ -6587,6 +7319,27 @@ void ShowThinkingProc(w, event, prms, nprms)
     }
     XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Show Thinking"),
 		args, 1);
+#endif
+}
+
+void HideThinkingProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+    Arg args[16];
+
+    appData.hideThinkingFromHuman = !appData.hideThinkingFromHuman; // [HGM] thinking: tken out of ShowThinkingEvent
+    ShowThinkingEvent();
+
+    if (appData.hideThinkingFromHuman) {
+	XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
+    } else {
+	XtSetArg(args[0], XtNleftBitmap, None);
+    }
+    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Hide Thinking"),
+		args, 1);
 }
 
 void InfoProc(w, event, prms, nprms)
@@ -6647,13 +7400,14 @@ void AboutProc(w, event, prms, nprms)
 #else
     char *zippy = "";
 #endif
-    sprintf(buf, "%s%s\n\n%s\n%s\n\n%s%s\n%s",
+    sprintf(buf, "%s%s\n\n%s\n%s\n%s\n\n%s%s\n%s",
 	    programVersion, zippy,
 	    "Copyright 1991 Digital Equipment Corporation",
-	    "Enhancements Copyright 1992-2001 Free Software Foundation",
+	    "Enhancements Copyright 1992-2009 Free Software Foundation",
+	    "Enhancements Copyright 2005 Alessandro Scotti",
 	    PRODUCT, " is free software and carries NO WARRANTY;",
 	    "see the file COPYING for more information.");
-    ErrorPopUp("About XBoard", buf, FALSE);
+    ErrorPopUp(_("About XBoard"), buf, FALSE);
 }
 
 void DebugProc(w, event, prms, nprms)
@@ -6690,7 +7444,7 @@ void Iconify(w, event, prms, nprms)
      Cardinal *nprms;
 {
     Arg args[16];
-    
+
     fromX = fromY = -1;
     XtSetArg(args[0], XtNiconic, True);
     XtSetValues(shellWidget, args, 1);
@@ -6701,7 +7455,7 @@ void DisplayMessage(message, extMessage)
 {
     char buf[MSG_SIZ];
     Arg arg;
-    
+
     if (extMessage) {
 	if (*message) {
 	    sprintf(buf, "%s  %s", message, extMessage);
@@ -6739,6 +7493,17 @@ void DisplayTitle(text)
     } else if (appData.cmailGameName[0] != NULLCHAR) {
 	sprintf(icon, "%s", "CMail");
 	sprintf(title, "%s: %s", programName, "CMail");
+#ifdef GOTHIC
+    // [HGM] license: This stuff should really be done in back-end, but WinBoard already had a pop-up for it
+    } else if (gameInfo.variant == VariantGothic) {
+	strcpy(icon, programName);
+	strcpy(title, GOTHIC);
+#endif
+#ifdef FALCON
+    } else if (gameInfo.variant == VariantFalcon) {
+	strcpy(icon, programName);
+	strcpy(title, FALCON);
+#endif
     } else if (appData.noChessProgram) {
 	strcpy(icon, programName);
 	strcpy(title, programName);
@@ -6770,8 +7535,8 @@ void DisplayError(message, error)
 	}
 	sprintf(buf, "%s: %s", message, strerror(error));
 	message = buf;
-    }	
-    ErrorPopUp("Error", message, FALSE);
+    }
+    ErrorPopUp(_("Error"), message, FALSE);
 }
 
 
@@ -6785,7 +7550,7 @@ void DisplayMoveError(message)
 	fprintf(stderr, "%s: %s\n", programName, message);
     }
     if (appData.popupMoveErrors) {
-	ErrorPopUp("Error", message, FALSE);
+	ErrorPopUp(_("Error"), message, FALSE);
     } else {
 	DisplayMessage(message, "");
     }
@@ -6808,7 +7573,7 @@ void DisplayFatalError(message, error, status)
 	message = buf;
     }
     if (appData.popupExitMessage && boardWidget && XtIsRealized(boardWidget)) {
-      ErrorPopUp(status ? "Fatal Error" : "Exiting", message, TRUE);
+      ErrorPopUp(status ? _("Fatal Error") : _("Exiting"), message, TRUE);
     } else {
       ExitEvent(status);
     }
@@ -6818,14 +7583,14 @@ void DisplayInformation(message)
      String message;
 {
     ErrorPopDown();
-    ErrorPopUp("Information", message, TRUE);
+    ErrorPopUp(_("Information"), message, TRUE);
 }
 
 void DisplayNote(message)
      String message;
 {
     ErrorPopDown();
-    ErrorPopUp("Note", message, FALSE);
+    ErrorPopUp(_("Note"), message, FALSE);
 }
 
 static int
@@ -6858,9 +7623,9 @@ void DisplayIcsInteractionTitle(message)
       XSetErrorHandler(oldHandler);
     }
     if (oldICSInteractionTitle == NULL) {
-      oldICSInteractionTitle = "xterm"; 
+      oldICSInteractionTitle = "xterm";
     }
-  }  
+  }
   printf("\033]0;%s\007", message);
   fflush(stdout);
 }
@@ -6875,7 +7640,7 @@ void AskQuestionProc(w, event, prms, nprms)
      Cardinal *nprms;
 {
     if (*nprms != 4) {
-	fprintf(stderr, "AskQuestionProc needed 4 parameters, got %d\n",
+	fprintf(stderr, _("AskQuestionProc needed 4 parameters, got %d\n"),
 		*nprms);
 	return;
     }
@@ -6908,7 +7673,7 @@ void AskQuestionReplyAction(w, event, prms, nprms)
     OutputToProcess(pendingReplyPR, buf, strlen(buf), &err);
     AskQuestionPopDown();
 
-    if (err) DisplayFatalError("Error writing to chess program", err, 0);
+    if (err) DisplayFatalError(_("Error writing to chess program"), err, 0);
 }
 
 void AskQuestionCallback(w, client_data, call_data)
@@ -6920,8 +7685,8 @@ void AskQuestionCallback(w, client_data, call_data)
 
     XtSetArg(args[0], XtNlabel, &name);
     XtGetValues(w, args, 1);
-    
-    if (strcmp(name, "cancel") == 0) {
+
+    if (strcmp(name, _("cancel")) == 0) {
         AskQuestionPopDown();
     } else {
 	AskQuestionReplyAction(w, NULL, NULL, NULL);
@@ -6938,46 +7703,46 @@ void AskQuestion(title, question, replyPrefix, pr)
     int x, y, i;
     int win_x, win_y;
     unsigned int mask;
-    
+
     strcpy(pendingReplyPrefix, replyPrefix);
     pendingReplyPR = pr;
-    
+
     i = 0;
     XtSetArg(args[i], XtNresizable, True); i++;
     XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++;
     askQuestionShell = popup =
       XtCreatePopupShell(title, transientShellWidgetClass,
 			 shellWidget, args, i);
-    
+
     layout =
       XtCreateManagedWidget(layoutName, formWidgetClass, popup,
 			    layoutArgs, XtNumber(layoutArgs));
-  
+
     i = 0;
     XtSetArg(args[i], XtNlabel, question); i++;
     XtSetArg(args[i], XtNvalue, ""); i++;
     XtSetArg(args[i], XtNborderWidth, 0); i++;
     dialog = XtCreateManagedWidget("question", dialogWidgetClass,
 				   layout, args, i);
-    
-    XawDialogAddButton(dialog, "enter", AskQuestionCallback,
+
+    XawDialogAddButton(dialog, _("enter"), AskQuestionCallback,
 		       (XtPointer) dialog);
-    XawDialogAddButton(dialog, "cancel", AskQuestionCallback,
+    XawDialogAddButton(dialog, _("cancel"), AskQuestionCallback,
 		       (XtPointer) dialog);
 
     XtRealizeWidget(popup);
     CatchDeleteWindow(popup, "AskQuestionPopDown");
-    
+
     XQueryPointer(xDisplay, xBoardWindow, &root, &child,
 		  &x, &y, &win_x, &win_y, &mask);
-    
+
     XtSetArg(args[0], XtNx, x - 10);
     XtSetArg(args[1], XtNy, y - 30);
     XtSetValues(popup, args, 2);
-    
+
     XtPopup(popup, XtGrabExclusive);
     askQuestionUp = True;
-    
+
     edit = XtNameToWidget(dialog, "*value");
     XtSetKeyboardFocus(popup, edit);
 }
@@ -7073,7 +7838,7 @@ Colorize(cc, continuation)
     count = strlen(buf);
     outCount = OutputToProcess(NoProc, buf, count, &error);
     if (outCount < count) {
-	DisplayFatalError("Error writing to display", error, 1);
+	DisplayFatalError(_("Error writing to display"), error, 1);
     }
 
     if (continuation) return;
@@ -7123,7 +7888,7 @@ static char *ExpandPathName(path)
     static char static_buf[2000];
     char *d, *s, buf[2000];
     struct passwd *pwd;
-  
+
     s = path;
     d = static_buf;
 
@@ -7146,7 +7911,7 @@ static char *ExpandPathName(path)
 	    pwd = getpwnam(buf);
 	    if (!pwd)
 	      {
-		  fprintf(stderr, "ERROR: Unknown user %s (in path %s)\n",
+		  fprintf(stderr, _("ERROR: Unknown user %s (in path %s)\n"),
 			  buf, path);
 		  return NULL;
 	      }
@@ -7158,12 +7923,12 @@ static char *ExpandPathName(path)
       strcpy(d, s);
 
     return static_buf;
-}  
+}
 
 char *HostName()
 {
     static char host_name[MSG_SIZ];
-    
+
 #if HAVE_GETHOSTNAME
     gethostname(host_name, MSG_SIZ);
     return host_name;
@@ -7260,7 +8025,8 @@ AnalysisClockCallback(arg, id)
      XtPointer arg;
      XtIntervalId *id;
 {
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
+    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile
+         || appData.icsEngineAnalyze) { // [DM]
 	AnalysisPeriodicEvent(0);
 	StartAnalysisClock();
     }
@@ -7321,7 +8087,7 @@ DisplayTimerLabel(w, color, timer, highlight)
 {
     char buf[MSG_SIZ];
     Arg args[16];
-    
+
     if (appData.clockMode) {
 	sprintf(buf, "%s: %s", color, TimeString(timer));
 	XtSetArg(args[0], XtNlabel, buf);
@@ -7329,7 +8095,7 @@ DisplayTimerLabel(w, color, timer, highlight)
 	sprintf(buf, "%s  ", color);
 	XtSetArg(args[0], XtNlabel, buf);
     }
-    
+
     if (highlight) {
 	XtSetArg(args[1], XtNbackground, timerForegroundPixel);
 	XtSetArg(args[2], XtNforeground, timerBackgroundPixel);
@@ -7337,7 +8103,7 @@ DisplayTimerLabel(w, color, timer, highlight)
 	XtSetArg(args[1], XtNbackground, timerBackgroundPixel);
 	XtSetArg(args[2], XtNforeground, timerForegroundPixel);
     }
-    
+
     XtSetValues(w, args, 3);
 }
 
@@ -7347,7 +8113,9 @@ DisplayWhiteClock(timeRemaining, highlight)
      int highlight;
 {
     Arg args[16];
-    DisplayTimerLabel(whiteTimerWidget, "White", timeRemaining, highlight);
+
+    if(appData.noGUI) return;
+    DisplayTimerLabel(whiteTimerWidget, _("White"), timeRemaining, highlight);
     if (highlight && iconPixmap == bIconPixmap) {
 	iconPixmap = wIconPixmap;
 	XtSetArg(args[0], XtNiconPixmap, iconPixmap);
@@ -7361,7 +8129,9 @@ DisplayBlackClock(timeRemaining, highlight)
      int highlight;
 {
     Arg args[16];
-    DisplayTimerLabel(blackTimerWidget, "Black", timeRemaining, highlight);
+
+    if(appData.noGUI) return;
+    DisplayTimerLabel(blackTimerWidget, _("Black"), timeRemaining, highlight);
     if (highlight && iconPixmap == wIconPixmap) {
 	iconPixmap = bIconPixmap;
 	XtSetArg(args[0], XtNiconPixmap, iconPixmap);
@@ -7379,12 +8149,12 @@ typedef int CPKind;
 typedef struct {
     CPKind kind;
     int pid;
-    int fdTo, fdFrom;  
+    int fdTo, fdFrom;
 } ChildProc;
 
 
 int StartChildProcess(cmdLine, dir, pr)
-     char *cmdLine; 
+     char *cmdLine;
      char *dir;
      ProcRef *pr;
 {
@@ -7393,7 +8163,7 @@ int StartChildProcess(cmdLine, dir, pr)
     int to_prog[2], from_prog[2];
     ChildProc *cp;
     char buf[MSG_SIZ];
-    
+
     if (appData.debugMode) {
 	fprintf(stderr, "StartChildProcess (dir=\"%s\") %s\n",dir, cmdLine);
     }
@@ -7417,30 +8187,34 @@ int StartChildProcess(cmdLine, dir, pr)
 
     if ((pid = fork()) == 0) {
 	/* Child process */
-	dup2(to_prog[0], 0);
-	dup2(from_prog[1], 1);
-	close(to_prog[0]);
-	close(to_prog[1]);
+	// [HGM] PSWBTM: made order resistant against case where fd of created pipe was 0 or 1
+	close(to_prog[1]);     // first close the unused pipe ends
 	close(from_prog[0]);
-	close(from_prog[1]);
-	dup2(1, fileno(stderr)); /* force stderr to the pipe */
+	dup2(to_prog[0], 0);   // to_prog was created first, nd is the only one to use 0 or 1
+	dup2(from_prog[1], 1);
+	if(to_prog[0] >= 2) close(to_prog[0]); // if 0 or 1, the dup2 already cosed the original
+	close(from_prog[1]);                   // and closing again loses one of the pipes!
+	if(fileno(stderr) >= 2) // better safe than sorry...
+		dup2(1, fileno(stderr)); /* force stderr to the pipe */
 
 	if (dir[0] != NULLCHAR && chdir(dir) != 0) {
 	    perror(dir);
 	    exit(1);
 	}
 
+	nice(appData.niceEngines); // [HGM] nice: adjust priority of engine proc
+
         execvp(argv[0], argv);
-	
+
 	/* If we get here, exec failed */
 	perror(argv[0]);
 	exit(1);
     }
-    
+
     /* Parent process */
     close(to_prog[0]);
     close(from_prog[1]);
-    
+
     cp = (ChildProc *) calloc(1, sizeof(ChildProc));
     cp->kind = CPReal;
     cp->pid = pid;
@@ -7450,22 +8224,37 @@ int StartChildProcess(cmdLine, dir, pr)
     return 0;
 }
 
+// [HGM] kill: implement the 'hard killing' of AS's Winboard_x
+static RETSIGTYPE AlarmCallBack(int n)
+{
+    return;
+}
+
 void
-DestroyChildProcess(pr, signal)
+DestroyChildProcess(pr, signalType)
      ProcRef pr;
-     int signal;
+     int signalType;
 {
     ChildProc *cp = (ChildProc *) pr;
 
     if (cp->kind != CPReal) return;
     cp->kind = CPNone;
-    if (signal) {
-      kill(cp->pid, SIGTERM);
+    if (signalType == 10) { // [HGM] kill: if it does not terminate in 3 sec, kill
+	signal(SIGALRM, AlarmCallBack);
+	alarm(3);
+	if(wait((int *) 0) == -1) { // process does not terminate on its own accord
+	    kill(cp->pid, SIGKILL); // kill it forcefully
+	    wait((int *) 0);        // and wait again
+	}
+    } else {
+	if (signalType) {
+	    kill(cp->pid, signalType == 9 ? SIGKILL : SIGTERM); // [HGM] kill: use hard kill if so requested
+	}
+	/* Process is exiting either because of the kill or because of
+	   a quit command sent by the backend; either way, wait for it to die.
+	*/
+	wait((int *) 0);
     }
-    /* Process is exiting either because of the kill or because of
-       a quit command sent by the backend; either way, wait for it to die.
-    */
-    wait((int *) 0);
     close(cp->fdFrom);
     close(cp->fdTo);
 }
@@ -7501,7 +8290,7 @@ int OpenTCP(host, port, pr)
      ProcRef *pr;
 {
 #if OMIT_SOCKETS
-    DisplayFatalError("Socket support is not configured in", 0, 2);
+    DisplayFatalError(_("Socket support is not configured in"), 0, 2);
 #else  /* !OMIT_SOCKETS */
     int s;
     struct sockaddr_in sa;
@@ -7544,7 +8333,7 @@ int OpenTCP(host, port, pr)
     sa.sin_port = htons(uport);
     memcpy((char *) &sa.sin_addr, hp->h_addr, hp->h_length);
 
-    if (connect(s, (struct sockaddr *) &sa, 
+    if (connect(s, (struct sockaddr *) &sa,
 		sizeof(struct sockaddr_in)) < 0) {
 	return errno;
     }
@@ -7603,9 +8392,9 @@ int OpenRcmd(host, user, cmd, pr)
      char *host, *user, *cmd;
      ProcRef *pr;
 {
-    DisplayFatalError("internal rcmd not implemented for Unix", 0, 1);
+    DisplayFatalError(_("internal rcmd not implemented for Unix"), 0, 1);
     return -1;
-}    
+}
 
 #define INPUT_SOURCE_BUF_SIZE 8192
 
@@ -7621,7 +8410,7 @@ typedef struct {
 } InputSource;
 
 void
-DoInputCallback(closure, source, xid) 
+DoInputCallback(closure, source, xid)
      caddr_t closure;
      int *source;
      XtInputId *xid;
@@ -7659,7 +8448,7 @@ DoInputCallback(closure, source, xid)
 	else
 	  error = 0;
 	(is->func)(is, is->closure, is->buf, count, error);
-    }	
+    }
 }
 
 InputSourceRef AddInputSource(pr, lineByLine, func, closure)
@@ -7684,7 +8473,7 @@ InputSourceRef AddInputSource(pr, lineByLine, func, closure)
     if (lineByLine) {
 	is->unused = is->buf;
     }
-    
+
     is->xid = XtAppAddInput(appContext, is->fd,
 			    (XtPointer) (XtInputReadMask),
 			    (XtInputCallbackProc) DoInputCallback,
@@ -7740,7 +8529,7 @@ int OutputToProcessDelayed(pr, message, count, outError, msdelay)
     ChildProc *cp = (ChildProc *) pr;
     int outCount = 0;
     int r;
-    
+
     while (count--) {
 	r = write(cp->fdTo, message++, 1);
 	if (r == -1) {
@@ -7796,7 +8585,7 @@ CreateAnimMasks (pieceDepth)
   XFreePixmap(xDisplay, buf);
 
   buf = XCreatePixmap(xDisplay, xBoardWindow,
-		      squareSize, squareSize, pieceDepth);	      
+		      squareSize, squareSize, pieceDepth);
   values.foreground = XBlackPixel(xDisplay, xScreen);
   values.background = XWhitePixel(xDisplay, xScreen);
   bufGC = XCreateGC(xDisplay, buf,
@@ -7809,17 +8598,17 @@ CreateAnimMasks (pieceDepth)
     XSetFunction(xDisplay, maskGC, GXclear);
     XFillRectangle(xDisplay, xpmMask[piece], maskGC,
 		   0, 0, squareSize, squareSize);
-		   
+
     /* Take a copy of the piece */
     if (White(piece))
       kind = 0;
     else
       kind = 2;
     XSetFunction(xDisplay, bufGC, GXcopy);
-    XCopyArea(xDisplay, xpmPieceBitmap[kind][((int)piece) % 6],
+    XCopyArea(xDisplay, xpmPieceBitmap[kind][((int)piece) % (int)BlackPawn],
 	      buf, bufGC,
 	      0, 0, squareSize, squareSize, 0, 0);
-	      
+
     /* XOR the background (light) over the piece */
     XSetFunction(xDisplay, bufGC, GXxor);
     if (useImageSqs)
@@ -7829,7 +8618,7 @@ CreateAnimMasks (pieceDepth)
       XSetForeground(xDisplay, bufGC, lightSquareColor);
       XFillRectangle(xDisplay, buf, bufGC, 0, 0, squareSize, squareSize);
     }
-    
+
     /* We now have an inverted piece image with the background
        erased. Construct mask by just selecting all the non-zero
        pixels - no need to reconstruct the original image.	*/
@@ -7859,7 +8648,7 @@ InitAnimState (anim, info)
 {
   XtGCMask  mask;
   XGCValues values;
-  
+
   /* Each buffer is square size, same depth as window */
   anim->saveBuf = XCreatePixmap(xDisplay, xBoardWindow,
 			squareSize, squareSize, info->depth);
@@ -7893,10 +8682,10 @@ CreateAnimVars ()
   if (done) return;
   done = 1;
   XGetWindowAttributes(xDisplay, xBoardWindow, &info);
-  
+
   InitAnimState(&game, &info);
   InitAnimState(&player, &info);
-  
+
   /* For XPM pieces, we need bitmaps to use as masks. */
   if (useImages)
     CreateAnimMasks(info.depth);
@@ -7919,20 +8708,20 @@ FrameDelay (time)
      int time;
 {
   struct itimerval delay;
-  
+
   XSync(xDisplay, False);
 
   if (time > 0) {
     frameWaiting = True;
     signal(SIGALRM, FrameAlarm);
-    delay.it_interval.tv_sec = 
+    delay.it_interval.tv_sec =
       delay.it_value.tv_sec = time / 1000;
-    delay.it_interval.tv_usec = 
+    delay.it_interval.tv_usec =
       delay.it_value.tv_usec = (time % 1000) * 1000;
     setitimer(ITIMER_REAL, &delay, NULL);
 #if 0
     /* Ugh -- busy-wait! --tpm */
-    while (frameWaiting); 
+    while (frameWaiting);
 #else
     while (frameWaiting) pause();
 #endif
@@ -7962,13 +8751,13 @@ ScreenSquare(column, row, pt, color)
      int column; int row; XPoint * pt; int * color;
 {
   if (flipView) {
-    pt->x = lineGap + ((BOARD_SIZE-1)-column) * (squareSize + lineGap);
+    pt->x = lineGap + ((BOARD_WIDTH-1)-column) * (squareSize + lineGap);
     pt->y = lineGap + row * (squareSize + lineGap);
   } else {
     pt->x = lineGap + column * (squareSize + lineGap);
-    pt->y = lineGap + ((BOARD_SIZE-1)-row) * (squareSize + lineGap);
+    pt->y = lineGap + ((BOARD_HEIGHT-1)-row) * (squareSize + lineGap);
   }
-  *color = ((column + row) % 2) == 1;
+  *color = SquareColor(row, column);
 }
 
 /*	Convert window coords to square			*/
@@ -7977,12 +8766,12 @@ static void
 BoardSquare(x, y, column, row)
      int x; int y; int * column; int * row;
 {
-  *column = EventToSquare(x, BOARD_SIZE);
+  *column = EventToSquare(x, BOARD_WIDTH);
   if (flipView && *column >= 0)
-    *column = BOARD_SIZE - 1 - *column;
-  *row = EventToSquare(y, BOARD_SIZE);
+    *column = BOARD_WIDTH - 1 - *column;
+  *row = EventToSquare(y, BOARD_HEIGHT);
   if (!flipView && *row >= 0)
-    *row = BOARD_SIZE - 1 - *row;
+    *row = BOARD_HEIGHT - 1 - *row;
 }
 
 /*   Utilities	*/
@@ -8005,7 +8794,7 @@ SetRect(rect, x, y, width, height)
 /*	Test if two frames overlap. If they do, return
 	intersection rect within old and location of
 	that rect within new. */
-	
+
 static Boolean
 Intersect(old, new, size, area, pt)
      XPoint * old; XPoint * new;
@@ -8025,7 +8814,7 @@ Intersect(old, new, size, area, pt)
 
 /*	For two overlapping frames, return the rect(s)
 	in the old that do not intersect with the new.   */
-	
+
 static void
 CalcUpdateRects(old, new, size, update, nUpdates)
      XPoint * old; XPoint * new; int size;
@@ -8094,11 +8883,11 @@ Tween(start, mid, finish, factor, frames, nFrames)
     count ++;
     fraction = fraction / 2;
   }
-  
+
   /* Midpoint */
   frames[count] = *mid;
   count ++;
-  
+
   /* Slow out, stepping 1/2, then 1/4, ... */
   fraction = 2;
   for (n = 0; n < factor; n++) {
@@ -8125,7 +8914,7 @@ SelectGCMask(piece, clip, outline, mask)
 #if HAVE_LIBXPM
       *mask = xpmMask[piece];
 #else
-      *mask = ximMaskPm[piece%6];
+      *mask = ximMaskPm[piece%(int)BlackPawn];
 #endif
   } else {
       *mask = *pieceToSolid(piece);
@@ -8145,7 +8934,7 @@ SelectGCMask(piece, clip, outline, mask)
       source = blPieceGC;
   }
   XCopyGC(xDisplay, source, 0xFFFFFFFF, *clip);
-  
+
   /* Outline only used in mono mode and is not modified */
   if (White(piece))
     *outline = bwPieceGC;
@@ -8158,7 +8947,7 @@ OverlayPiece(piece, clip, outline,  dest)
      ChessSquare piece; GC clip; GC outline; Drawable dest;
 {
   int	kind;
-  
+
   if (!useImages) {
     /* Draw solid rectangle which will be clipped to shape of piece */
     XFillRectangle(xDisplay, dest, clip,
@@ -8174,16 +8963,16 @@ OverlayPiece(piece, clip, outline,  dest)
       kind = 0;
     else
       kind = 2;
-    XCopyArea(xDisplay, xpmPieceBitmap[kind][((int)piece) % 6],
+    XCopyArea(xDisplay, xpmPieceBitmap[kind][((int)piece) % (int)BlackPawn],
 	      dest, clip,
 	      0, 0, squareSize, squareSize,
-	      0, 0);		
+	      0, 0);
   }
 }
 
 /* Animate the movement of a single piece */
 
-static void 
+static void
 BeginAnimation(anim, piece, startColor, start)
      AnimState *anim;
      ChessSquare piece;
@@ -8191,11 +8980,11 @@ BeginAnimation(anim, piece, startColor, start)
      XPoint * start;
 {
   Pixmap mask;
-  
+
   /* The old buffer is initialised with the start square (empty) */
   BlankSquare(0, 0, startColor, EmptySquare, anim->saveBuf);
   anim->prevFrame = *start;
-  
+
   /* The piece will be drawn using its own bitmap as a matte	*/
   SelectGCMask(piece, &anim->pieceGC, &anim->outlineGC, &mask);
   XSetClipMask(xDisplay, anim->pieceGC, mask);
@@ -8211,12 +9000,12 @@ AnimationFrame(anim, frame, piece)
   XRectangle overlap;
   XPoint     pt;
   int	     count, i;
-  
+
   /* Save what we are about to draw into the new buffer */
   XCopyArea(xDisplay, xBoardWindow, anim->newBuf, anim->blitGC,
 	    frame->x, frame->y, squareSize, squareSize,
 	    0, 0);
-		
+
   /* Erase bits of the previous frame */
   if (Intersect(&anim->prevFrame, frame, squareSize, &overlap, &pt)) {
     /* Where the new frame overlapped the previous,
@@ -8245,7 +9034,7 @@ AnimationFrame(anim, frame, piece)
 		0, 0, squareSize, squareSize,
 		0, 0);
   anim->prevFrame = *frame;
-  
+
   /* Draw piece over original screen contents, not current,
      and copy entire rect. Wipes out overlapping piece images. */
   OverlayPiece(piece, anim->pieceGC, anim->outlineGC, anim->newBuf);
@@ -8329,9 +9118,9 @@ AnimateMove(board, fromX, fromY, toX, toY)
 #endif
 
   if (appData.debugMode) {
-      printf("AnimateMove: piece %d %s from %d,%d to %d,%d \n",
-	     piece, hop ? "hops" : "slides", fromX, fromY, toX, toY);
-  }
+      fprintf(debugFP, hop ? _("AnimateMove: piece %d hops from %d,%d to %d,%d \n") :
+                             _("AnimateMove: piece %d slides from %d,%d to %d,%d \n"),
+             piece, fromX, fromY, toX, toY);  }
 
   ScreenSquare(fromX, fromY, &start, &startColor);
   ScreenSquare(toX, toY, &finish, &endColor);
@@ -8349,14 +9138,14 @@ AnimateMove(board, fromX, fromY, toX, toY)
     mid.x = start.x + (finish.x - start.x) / 2;
     mid.y = start.y + (finish.y - start.y) / 2;
   }
-  
+
   /* Don't use as many frames for very short moves */
   if (abs(toY - fromY) + abs(toX - fromX) <= 2)
     Tween(&start, &mid, &finish, kFactor - 1, frames, &nFrames);
   else
     Tween(&start, &mid, &finish, kFactor, frames, &nFrames);
   FrameSequence(&game, piece, startColor, &start, &finish, frames, nFrames);
-  
+
   /* Be sure end square is redrawn */
   damage[toY][toX] = True;
 }
@@ -8371,7 +9160,7 @@ DragPieceBegin(x, y)
     /* Are we animating? */
     if (!appData.animateDragging || appData.blindfold)
       return;
-     
+
     /* Figure out which square we start in and the
        mouse position relative to top left corner. */
     BoardSquare(x, y, &boardX, &boardY);
@@ -8402,6 +9191,11 @@ DragPieceBegin(x, y)
 	/* Mark this square as needing to be redrawn. Note that
 	   we don't remove the piece though, since logically (ie
 	   as seen by opponent) the move hasn't been made yet. */
+           if(boardX == BOARD_RGHT+1 && PieceForSquare(boardX-1, boardY) > 1 ||
+              boardX == BOARD_LEFT-2 && PieceForSquare(boardX+1, boardY) > 1)
+           XCopyArea(xDisplay, xBoardWindow, player.saveBuf, player.blitGC,
+	             corner.x, corner.y, squareSize, squareSize,
+	             0, 0); // [HGM] zh: unstack in stead of grab
 	damage[boardY][boardX] = True;
     } else {
 	player.dragActive = False;
@@ -8417,7 +9211,7 @@ DragPieceMove(x, y)
     /* Are we animating? */
     if (!appData.animateDragging || appData.blindfold)
       return;
-     
+
     /* Sanity check */
     if (! player.dragActive)
       return;
@@ -8445,7 +9239,7 @@ DragPieceEnd(x, y)
     /* Are we animating? */
     if (!appData.animateDragging || appData.blindfold)
       return;
-     
+
     /* Sanity check */
     if (! player.dragActive)
       return;
@@ -8482,3 +9276,10 @@ DrawDragPiece ()
   damage[player.startBoardY][player.startBoardX] = TRUE;
 }
 
+void
+SetProgramStats( FrontEndProgramStats * stats )
+{
+  // [HR] TODO
+  // [HGM] done, but perhaps backend should call this directly?
+    EngineOutputUpdate( stats );
+}
diff --git a/xboard.h b/xboard.h
index 9b36a17..115000d 100644
--- a/xboard.h
+++ b/xboard.h
@@ -2,8 +2,10 @@
  * xboard.h -- Parameter definitions for X front end
  * $Id: xboard.h,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
@@ -27,24 +29,25 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include <stdio.h>
 
@@ -100,8 +103,8 @@ typedef struct {
 
 #define BORDER_X_OFFSET 3
 #define BORDER_Y_OFFSET 27
-#define FIRST_CHESS_PROGRAM	"gnuchessx"
-#define SECOND_CHESS_PROGRAM	"gnuchessx"
+#define FIRST_CHESS_PROGRAM	"fairymax"
+#define SECOND_CHESS_PROGRAM	"fairymax"
 
 /* Default to no flashing (the "usual" XBoard behavior) */
 #define FLASH_COUNT	0		/* Number of times to flash */
diff --git a/xboard.info b/xboard.info
deleted file mode 100644
index cb65887..0000000
--- a/xboard.info
+++ /dev/null
@@ -1,3128 +0,0 @@
-This is xboard.info, produced by makeinfo version 4.3 from
-xboard.texinfo.
-
-INFO-DIR-SECTION Games
-START-INFO-DIR-ENTRY
-* xboard: (xboard).         An X Window System graphical chessboard.
-END-INFO-DIR-ENTRY
-
-
-File: xboard.info,  Node: Top,  Next: Major modes,  Up: (dir)
-
-Introduction
-************
-
-   XBoard is a graphical chessboard that can serve as a user interface
-to chess engines (such as GNU Chess), the Internet Chess Servers,
-electronic mail correspondence chess, or your own collection of saved
-games.
-
-   This manual documents version 4.2.7 of XBoard.
-
-* Menu:
-
-* Major modes::     The main things XBoard can do.
-* Menus::           Menus, buttons, and keys.
-* Options::         Command options supported by XBoard.
-* Chess Servers::   Using XBoard with an Internet Chess Server (ICS).
-* Firewalls::       Connecting to a chess server through a firewall.
-* Environment::     Environment variables.
-* Limitations::     Known limitations and/or bugs.
-* Problems::        How and where to report any problems you run into.
-* Contributors::    People who have helped developing XBoard.
-* CMail::           Using XBoard for electronic correspondence chess.
-* Other programs::  Other programs you can use with XBoard.
-
-* Copyright::       Copyright notice for this manual.
-* Copying::         The GNU General Public License.
-
-* Index::           Index of concepts and symbol names.
-
-
-File: xboard.info,  Node: Major modes,  Next: Menus,  Prev: Top,  Up: Top
-
-Major modes
-***********
-
-   XBoard always runs in one of four major modes.  You select the major
-mode from the command line when you start up XBoard.
-
-xboard [options]
-     As an interface to GNU Chess or another chess engine running on
-     your machine, XBoard lets you play a game against the machine, set
-     up arbitrary positions, force variations, watch a game between two
-     chess engines, interactively analyze your stored games or set up
-     and analyze arbitrary positions.  (Note: Not all chess engines
-     support analysis.)
-
-xboard -ics -icshost hostname [options]
-     As Internet Chess Server (ICS) interface, XBoard lets you play
-     against other ICS users, observe games they are playing, or review
-     games that have recently finished.  Most of the ICS "wild" chess
-     variants are supported, including bughouse.
-
-xboard -ncp [options]
-     XBoard can also be used simply as an electronic chessboard to play
-     through games. It will read and write game files and allow you to
-     play through variations manually. You can use it to browse games
-     off the net or review games you have saved.  These features are
-     also available in the other modes.
-
-|pxboard
-     If you want to pipe games into XBoard, use the supplied shell
-     script `pxboard'.  For example, from the news reader `xrn', find a
-     message with one or more games in it, click the Save button, and
-     type `|pxboard' as the file name.
-
-cmail [options]
-     As an interface to electronic mail correspondence chess, XBoard
-     works with the cmail program. See *Note CMail:: below for
-     instructions.
-
-
-File: xboard.info,  Node: Menus,  Next: Options,  Prev: Major modes,  Up: Top
-
-Menus, buttons, and keys
-************************
-
-   To move a piece, you can drag it with the left mouse button, or you
-can click the left mouse button once on the piece, then once more on
-the destination square.  To drop a new piece on a square (when
-applicable), press the middle or the right mouse button over the square
-and select from the popup menu.  In cases where you can drop either a
-white or black piece, use the middle button (or shift+right) for white
-and the right button (or shift+middle) for black.  When you are playing
-a bughouse game on an Internet Chess Server, a list of the offboard
-pieces that each player has available is shown in the window title
-after the player's name; in addition, the piece menus show the number
-of pieces available of each type.
-
-   All other XBoard commands are available from the menu bar. The most
-frequently used commands also have shortcut keys or on-screen buttons.
-
-   When XBoard is iconized, its graphical icon is a white knight if it
-is White's turn to move, a black knight if it is Black's turn.  See
-Iconize in *Note Keys:: below if you have problems getting this feature
-to work.
-
-* Menu:
-
-* File Menu::       Accessing external games and positions.
-* Mode Menu::       Selecting XBoard's mode.
-* Action Menu::     Talking to the chess engine or ICS opponents.
-* Step Menu::       Controlling the game.
-* Options Menu::    User preferences.
-* Help Menu::       Getting help.
-* Keys::            Other shortcut keys.
-
-
-File: xboard.info,  Node: File Menu,  Next: Mode Menu,  Up: Menus
-
-File Menu
-=========
-
-Reset
-     Resets XBoard and the chess engine to the beginning of a new chess
-     game. The `r' key is a keyboard equivalent. In Internet Chess
-     Server mode, clears the current state of XBoard, then
-     resynchronizes with the ICS by sending a refresh command. If you
-     want to stop playing, observing, or examining an ICS game, use an
-     appropriate command from the Action menu, not `Reset'.  *Note
-     Action Menu::.
-
-Load Game
-     Plays a game from a record file. The `g' key is a keyboard
-     equivalent.  A popup dialog prompts you for the file name. If the
-     file contains more than one game, a second popup dialog displays a
-     list of games (with information drawn from their PGN tags, if
-     any), and you can select the one you want. Alternatively, you can
-     load the Nth game in the file directly, by typing the number `N'
-     after the file name, separated by a space.
-
-     The game file parser will accept PGN (portable game notation), or
-     in fact almost any file that contains moves in algebraic notation.
-     Notation of the form `P at f7' is accepted for piece-drops in
-     bughouse games; this is a nonstandard extension to PGN.  If the
-     file includes a PGN position (FEN tag), or an old-style XBoard
-     position diagram bracketed by `[--' and `--]' before the first
-     move, the game starts from that position. Text enclosed in
-     parentheses, square brackets, or curly braces is assumed to be
-     commentary and is displayed in a pop-up window. Any other text in
-     the file is ignored. PGN variations (enclosed in parentheses) are
-     treated as comments; XBoard is not able to walk variation trees.
-     The nonstandard PGN tag [Variant "varname"] functions similarly to
-     the -variant command-line option (see below), allowing games in
-     certain chess variants to be loaded.  There is also a heuristic to
-     recognize chess variants from the Event tag, by looking for the
-     strings that the Internet Chess Servers put there when saving
-     variant ("wild") games.
-
-Load Next Game
-     Loads the next game from the last game record file you loaded.
-     The shifted `N' key is a keyboard equivalent.
-
-Load Previous Game
-     Loads the previous game from the last game record file you loaded.
-     The shifted `P' key is a keyboard equivalent.  Not available if
-     the last game was loaded from a pipe.
-
-Reload Same Game
-     Reloads the last game you loaded.  Not available if the last game
-     was loaded from a pipe.
-
-Save Game
-     Appends a record of the current game to a file.  A popup dialog
-     prompts you for the file name. If the game did not begin with the
-     standard starting position, the game file includes the starting
-     position used. Games are saved in the PGN (portable game notation)
-     format, unless the oldSaveStyle option is true, in which case they
-     are saved in an older format that is specific to XBoard. Both
-     formats are human-readable, and both can be read back by the `Load
-     Game' command.  Notation of the form `P at f7' is accepted for
-     piece-drops in bughouse games; this is a nonstandard extension to
-     PGN.
-
-Copy Game
-     Copies a record of the current game to an internal clipboard in PGN
-     format and sets the X selection to the game text.  The game can be
-     pasted to another application (such as a text editor or another
-     copy of XBoard) using that application's paste command.  In many X
-     applications, such as xterm and emacs, the middle mouse button can
-     be used for pasting; in XBoard, you must use the Paste Game
-     command.
-
-Paste Game
-     Interprets the current X selection as a game record and loads it,
-     as with Load Game.
-
-Load Position
-     Sets up a position from a position file.  A popup dialog prompts
-     you for the file name. If the file contains more than one saved
-     position, and you want to load the Nth one, type the number N
-     after the file name, separated by a space. Position files must be
-     in FEN (Forsythe-Edwards notation), or in the format that the Save
-     Position command writes when oldSaveStyle is turned on.
-
-Load Next Position
-     Loads the next position from the last position file you loaded.
-
-Load Previous Position
-     Loads the previous position from the last position file you
-     loaded.  Not available if the last position was loaded from a pipe.
-
-Reload Same Position
-     Reloads the last position you loaded.  Not available if the last
-     position was loaded from a pipe.
-
-Save Position
-     Appends a diagram of the current position to a file.  A popup
-     dialog prompts you for the file name. Positions are saved in FEN
-     (Forsythe-Edwards notation) format unless the `oldSaveStyle'
-     option is true, in which case they are saved in an older,
-     human-readable format that is specific to XBoard. Both formats can
-     be read back by the `Load Position' command.
-
-Copy Position
-     Copies the current position to an internal clipboard in FEN format
-     and sets the X selection to the position text.  The position can
-     be pasted to another application (such as a text editor or another
-     copy of XBoard) using that application's paste command.  In many X
-     applications, such as xterm and emacs, the middle mouse button can
-     be used for pasting; in XBoard, you must use the Paste Position
-     command.
-
-Paste Position
-     Interprets the current X selection as a FEN position and loads it,
-     as with Load Position.
-
-Mail Move
-Reload CMail Message
-     See *Note CMail::.
-
-Exit
-     Exits from XBoard. The shifted `Q' key is a keyboard equivalent.
-
-
-File: xboard.info,  Node: Mode Menu,  Next: Action Menu,  Prev: File Menu,  Up: Menus
-
-Mode Menu
-=========
-
-Machine White
-     Tells the chess engine to play White.
-
-Machine Black
-     Tells the chess engine to play Black.
-
-Two Machines
-     Plays a game between two chess engines.
-
-Analysis Mode
-     XBoard tells the chess engine to start analyzing the current
-     game/position and shows you the analysis as you move pieces around.
-     Note: Some chess engines do not support Analysis mode.
-
-     To set up a position to analyze, you do the following:
-
-     1. Select Edit Position from the Mode Menu
-
-     2. Set up the position.  Use the middle and right buttons to bring
-     up the white and black piece menus.
-
-     3. When you are finished, click on either the Black or White clock
-     to tell XBoard which side moves first.
-
-     4. Select Analysis Mode from the Mode Menu to start the analysis.
-
-Analyze File
-     This option lets you load a game from a file (PGN, XBoard format,
-     etc.)  and analyze it. When you select this menu item, a popup
-     window appears and asks for a filename to load.  If the file
-     contains multiple games, another popup appears that lets you
-     select which game you wish to analyze.  After a game is loaded,
-     use the XBoard arrow buttons to step forwards/backwards through
-     the game and watch the analysis.  Note: Some chess engines do not
-     support Analysis mode.
-
-ICS Client
-     This is the normal mode when XBoard is connected to a chess
-     server.  If you have moved into Edit Game or Edit Position mode,
-     you can select this option to get out.
-
-     To use xboard in ICS mode, run it in the foreground with the -ics
-     option, and use the terminal you started it from to type commands
-     and receive text responses from the chess server.  See *Note Chess
-     Servers:: below for more information.
-
-     XBoard activates some special position/game editing features when
-     you use the `examine' or `bsetup' commands on ICS and you have
-     `ICS Client' selected on the Mode menu.  First, you can issue the
-     ICS position-editing commands with the mouse.  Move pieces by
-     dragging with mouse button 1.  To drop a new piece on a square,
-     press mouse button 2 or 3 over the square.  This brings up a menu
-     of white pieces (button 2) or black pieces (button 3).  Additional
-     menu choices let you empty the square or clear the board.  Click
-     on the White or Black clock to set the side to play.  You cannot
-     set the side to play or drag pieces to arbitrary squares while
-     examining on ICC, but you can do so in `bsetup' mode on FICS.  In
-     addition, the menu commands `Forward', `Backward', `Pause', and
-     `Stop Examining' have special functions in this mode; see below.
-
-Edit Game
-     Allows you to make moves for both Black and White, and to change
-     moves after backing up with the `Backward' command. The clocks do
-     not run.
-
-     In chess engine mode, the chess engine continues to check moves
-     for legality but does not participate in the game. You can bring
-     the chess engine into the game by selecting `Machine White',
-     `Machine Black', or `Two Machines'.
-
-     In ICS mode, the moves are not sent to the ICS: `Edit Game' takes
-     XBoard out of ICS Client mode and lets you edit games locally.  If
-     you want to edit games on ICS in a way that other ICS users can
-     see, use the ICS `examine' command or start an ICS match against
-     yourself.
-
-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 white pieces (button 2) or black 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 word White or Black at the top of the screen.  Selecting `Edit
-     Position' causes XBoard to discard all remembered moves in the
-     current game.
-
-     In ICS mode, changes made to the position by `Edit Position' are
-     not sent to the ICS: `Edit Position' takes XBoard out of `ICS
-     Client' mode and lets you edit positions locally. If you want to
-     edit positions on ICS in a way that other ICS users can see, use
-     the ICS `examine' command, or start an ICS match against yourself.
-     (See also the ICS Client topic above.)
-
-Training
-     Training mode lets you interactively guess the moves of a game for
-     one of the players. You guess the next move of the game by playing
-     the move on the board. If the move played matches the next move of
-     the game, the move is accepted and the opponent's response is
-     autoplayed.  If the move played is incorrect, an error message is
-     displayed.  You can select this mode only while loading a game
-     (that is, after selecting `Load Game' from the File menu).  While
-     XBoard is in `Training' mode, the navigation buttons are disabled.
-
-Show Game List
-     Shows or hides the list of games generated by the last `Load Game'
-     command.
-
-Edit Tags
-     Lets you edit the PGN (portable game notation) tags for the
-     current game. After editing, the tags must still conform to the
-     PGN tag syntax:
-
-          <tag-section> ::= <tag-pair> <tag-section>
-                                  <empty>
-          <tag-pair> ::= [ <tag-name> <tag-value> ]
-          <tag-name> ::= <identifier>
-          <tag-value> ::= <string>
-
-     See the PGN Standard for full details. Here is an example:
-
-          [Event "Portoroz Interzonal"]
-          [Site "Portoroz, Yugoslavia"]
-          [Date "1958.08.16"]
-          [Round "8"]
-          [White "Robert J. Fischer"]
-          [Black "Bent Larsen"]
-          [Result "1-0"]
-
-     Any characters that do not match this syntax are silently ignored.
-     Note that the PGN standard requires all games to have at least the
-     seven tags shown above. Any that you omit will be filled in by
-     XBoard with `?' (unknown value), or `-' (inapplicable value).
-
-Edit Comment
-     Adds or modifies a comment on the current position. Comments are
-     saved by `Save Game' and are displayed by `Load Game', `Forward',
-     and `Backward'.
-
-ICS Input Box
-     If this option is set in ICS mode, XBoard creates an extra window
-     that you can use for typing in ICS commands.  The input box is
-     especially useful if you want to type in something long or do some
-     editing on your input, because output from ICS doesn't get mixed
-     in with your typing as it would in the main terminal window.
-
-Pause
-     Pauses updates to the board, and if you are playing against a
-     chess engine, also pauses your clock. To continue, select `Pause'
-     again, and the display will automatically update to the latest
-     position.  The `P' button and keyboard `p' key are equivalents.
-
-     If you select Pause when you are playing against a chess engine and
-     it is not your move, the chess engine's clock will continue to run
-     and it will eventually make a move, at which point both clocks
-     will stop. Since board updates are paused, however, you will not
-     see the move until you exit from Pause mode (or select Forward).
-     This behavior is meant to simulate adjournment with a sealed move.
-
-     If you select Pause while you are observing or examining a game on
-     a chess server, you can step backward and forward in the current
-     history of the examined game without affecting the other observers
-     and examiners, and without having your display jump forward to the
-     latest position each time a move is made. Select Pause again to
-     reconnect yourself to the current state of the game on ICS.
-
-     If you select `Pause' while you are loading a game, the game stops
-     loading. You can load more moves manually by selecting `Forward',
-     or resume automatic loading by selecting `Pause' again.
-
-
-File: xboard.info,  Node: Action Menu,  Next: Step Menu,  Prev: Mode Menu,  Up: Menus
-
-Action Menu
-===========
-
-Accept
-     Accepts a pending match offer. If there is more than one offer
-     pending, you will have to type in a more specific command instead
-     of using this menu choice.
-
-Decline
-     Declines a pending offer (match, draw, adjourn, etc.). If there is
-     more than one offer pending, you will have to type in a more
-     specific command instead of using this menu choice.
-
-Call Flag
-     Calls your opponent's flag, claiming a win on time, or claiming a
-     draw if you are both out of time. You can also call your
-     opponent's flag by clicking on his clock or by pressing the
-     keyboard `t' key.
-
-Draw
-     Offers a draw to your opponent, accepts a pending draw offer from
-     your opponent, or claims a draw by repetition or the 50-move rule,
-     as appropriate. The `d' key is a keyboard equivalent.
-
-Adjourn
-     Asks your opponent to agree to adjourning the current game, or
-     agrees to a pending adjournment offer from your opponent.
-
-Abort
-     Asks your opponent to agree to aborting the current game, or
-     agrees to a pending abort offer from your opponent. An aborted
-     game ends immediately without affecting either player's rating.
-
-Resign
-     Resigns the game to your opponent. The shifted `R' key is a
-     keyboard equivalent.
-
-Stop Observing
-     Ends your participation in observing a game, by issuing the ICS
-     observe command with no arguments. ICS mode only.
-
-Stop Examining
-     Ends your participation in examining a game, by issuing the ICS
-     unexamine command. ICS mode only.
-
-
-File: xboard.info,  Node: Step Menu,  Next: Options Menu,  Prev: Action Menu,  Up: Menus
-
-Step Menu
-=========
-
-Backward
-     Steps backward through a series of remembered moves.  The `[<]'
-     button and the `b' key are equivalents.  In addition, pressing the
-     Control key steps back one move, and releasing it steps forward
-     again.
-
-     In most modes, `Backward' only lets you look back at old positions;
-     it does not retract moves. This is the case if you are playing
-     against a chess engine, playing or observing a game on an ICS, or
-     loading a game.  If you select `Backward' in any of these
-     situations, you will not be allowed to make a different move. Use
-     `Retract Move' or `Edit Game' if you want to change past moves.
-
-     If you are examining an ICS game, the behavior of `Backward'
-     depends on whether XBoard is in Pause mode. If Pause mode is off,
-     `Backward' issues the ICS backward command, which backs up
-     everyone's view of the game and allows you to make a different
-     move. If Pause mode is on, `Backward' only backs up your local
-     view.
-
-Forward
-     Steps forward through a series of remembered moves (undoing the
-     effect of `Backward') or forward through a game file. The `[>]'
-     button and the `f' key are equivalents.
-
-     If you are examining an ICS game, the behavior of Forward depends
-     on whether XBoard is in Pause mode. If Pause mode is off,
-     `Forward' issues the ICS forward command, which moves everyone's
-     view of the game forward along the current line. If Pause mode is
-     on, `Forward' only moves your local view forward, and it will not
-     go past the position that the game was in when you paused.
-
-Back to Start
-     Jumps backward to the first remembered position in the game.  The
-     `[<<]' button and the shifted `B' key are equivalents.
-
-     In most modes, Back to Start only lets you look back at old
-     positions; it does not retract moves. This is the case if you are
-     playing against a local chess engine, playing or observing a game
-     on a chess server, or loading a game. If you select `Back to
-     Start' in any of these situations, you will not be allowed to make
-     different moves. Use `Retract Move' or `Edit Game' if you want to
-     change past moves; or use Reset to start a new game.
-
-     If you are examining an ICS game, the behavior of `Back to Start'
-     depends on whether XBoard is in Pause mode. If Pause mode is off,
-     `Back to Start' issues the ICS `backward 999999' command, which
-     backs up everyone's view of the game to the start and allows you
-     to make different moves. If Pause mode is on, `Back to Start' only
-     backs up your local view.
-
-Forward to End
-     Jumps forward to the last remembered position in the game. The
-     `[>>]' button and the shifted `F' key are equivalents.
-
-     If you are examining an ICS game, the behavior of `Forward to End'
-     depends on whether XBoard is in Pause mode. If Pause mode is off,
-     `Forward to End' issues the ICS `forward 999999' command, which
-     moves everyone's view of the game forward to the end of the
-     current line. If Pause mode is on, `Forward to End' only moves
-     your local view forward, and it will not go past the position that
-     the game was in when you paused.
-
-Revert
-     If you are examining an ICS game and Pause mode is off, issues the
-     ICS command `revert'.
-
-Truncate Game
-     Discards all remembered moves of the game beyond the current
-     position. Puts XBoard into `Edit Game' mode if it was not there
-     already.
-
-Move Now
-     Forces the chess engine to move immediately. Chess engine mode
-     only.
-
-Retract Move
-     Retracts your last move. In chess engine mode, you can do this only
-     after the chess engine has replied to your move; if the chess
-     engine is still thinking, use `Move Now' first. In ICS mode,
-     `Retract Move' issues the command `takeback 1' or `takeback 2'
-     depending on whether it is your opponent's move or yours.
-
-
-File: xboard.info,  Node: Options Menu,  Next: Help Menu,  Prev: Step Menu,  Up: Menus
-
-Options Menu
-============
-
-Always Queen
-     If this option is off, XBoard brings up a dialog box whenever you
-     move a pawn to the last rank, asking what piece you want to
-     promote it to. If the option is true, your pawns are always
-     promoted to queens. Your opponent can still underpromote.
-
-Animate Dragging
-     If Animate Dragging is on, while you are dragging a piece with the
-     mouse, an image of the piece follows the mouse cursor.  If Animate
-     Dragging is off, there is no visual feedback while you are
-     dragging a piece, but if Animate Moving is on, the move will be
-     animated when it is complete.
-
-Animate Moving
-     If Animate Moving is on, all piece moves are animated.  An image
-     of the piece is shown moving from the old square to the new square
-     when the move is completed (unless the move was already animated
-     by Animate Dragging).  If Animate Moving is off, a moved piece
-     instantly disappears from its old square and reappears on its new
-     square when the move is complete.
-
-Auto Comment
-     If this option is on, any remarks made on ICS while you are
-     observing or playing a game are recorded as a comment on the
-     current move.  This includes remarks made with the ICS commands
-     `say', `tell', `whisper', and `kibitz'.  Limitation: remarks that
-     you type yourself are not recognized; XBoard scans only the output
-     from ICS, not the input you type to it.
-
-Auto Flag
-     If this option is on and one player runs out of time before the
-     other, XBoard will automatically call his flag, claiming a win on
-     time.  In ICS mode, Auto Flag will only call your opponent's flag,
-     not yours, and the ICS may award you a draw instead of a win if
-     you have insufficient mating material.  In local chess engine mode,
-     XBoard may call either player's flag and will not take material
-     into account.
-
-Auto Flip View
-     If the Auto Flip View option is on when you start a game, the board
-     will be automatically oriented so that your pawns move from the
-     bottom of the window towards the top.
-
-Auto Observe
-     If this option is on and you add a player to your `gnotify' list
-     on ICS, XBoard will automatically observe all of that player's
-     games, unless you are doing something else (such as observing or
-     playing a game of your own) when one starts.  The games are
-     displayed from the point of view of the player on your gnotify
-     list; that is, his pawns move from the bottom of the window
-     towards the top.  Exceptions:  If both players in a game are on
-     your gnotify list, if your ICS `highlight' variable is set to 0,
-     or if the ICS you are using does not properly support observing
-     from Black's point of view, you will see the game from White's
-     point of view.
-
-Auto Raise Board
-     If this option is on, whenever a new game begins, the chessboard
-     window is deiconized (if necessary) and raised to the top of the
-     stack of windows.
-
-Auto Save
-     If this option is true, at the end of every game XBoard prompts
-     you for a file name and appends a record of the game to the file
-     you specify.  Disabled if the `saveGameFile' command-line option
-     is set, as in that case all games are saved to the specified file.
-     *Note Load and Save options::.
-
-Blindfold
-     If this option is on, XBoard displays the board as usual but does
-     not display pieces or move highlights.  You can still move in the
-     usual way (with the mouse or by typing moves in ICS mode), even
-     though the pieces are invisible.
-
-Flash Moves
-     If this option is on, whenever a move is completed, the moved
-     piece flashes.  The number of times to flash is set by the
-     flashCount command-line option; it defaults to 3 if Flash Moves is
-     first turned on from the menu.
-
-Flip View
-     Inverts your view of the chess board for the duration of the
-     current game. Starting a new game returns the board to normal.
-     The `v' key is a keyboard equivalent.
-
-     If you are playing a game on an ICS, the board is always oriented
-     at the start of the game so that your pawns move from the bottom
-     of the window towards the top. Otherwise, the starting orientation
-     is determined by the `flipView' command line option; if it is
-     false (the default), White's pawns move from bottom to top at the
-     start of each game; if it is true, Black's pawns move from bottom
-     to top. *Note User interface options::.
-
-Get Move List
-     If this option is on, whenever XBoard receives the first board of
-     a new ICS game (or a different game from the one it is currently
-     displaying), it retrieves the list of past moves from the ICS.
-     You can then review the moves with the `Forward' and `Backward'
-     commands or save them with `Save Game'.  You might want to turn
-     off this option if you are observing several blitz games at once,
-     to keep from wasting time and network bandwidth fetching the move
-     lists over and over.  When you turn this option on from the menu,
-     XBoard immediately fetches the move list of the current game (if
-     any).
-
-Highlight Last Move
-     If Highlight Last Move is on, after a move is made, the starting
-     and ending squares remain highlighted. In addition, after you use
-     Backward or Back to Start, the starting and ending squares of the
-     last move to be unmade are highlighted.
-
-Move Sound
-     If this option is on, XBoard alerts you by playing a sound after
-     each of your opponent's moves (or after every move if you are
-     observing a game on the Internet Chess Server).  The sound is not
-     played after moves you make or moves read from a saved game file.
-     By default, the sound is the terminal bell, but on some systems
-     you can change it to a sound file using the soundMove option; see
-     below.
-
-     If you turn on this option when using XBoard with the Internet
-     Chess Server, you will probably want to give the `set bell 0'
-     command to the ICS, since otherwise the ICS will ring the terminal
-     bell after every move (not just yours). (The `.icsrc' file is a
-     good place for this; see *Note ICS options::.)
-
-ICS Alarm
-     When this option is on, an alarm sound is played when your clock
-     counts down to the icsAlarmTime (by default, 5 seconds) in an ICS
-     game.  For games with time controls that include an increment, the
-     alarm will sound each time the clock counts down to the
-     icsAlarmTime.  By default, the alarm sound is the terminal bell,
-     but on some systems you can change it to a sound file using the
-     soundIcsAlarm option; see below.
-
-Old Save Style
-     If this option is off, XBoard saves games in PGN (portable game
-     notation) and positions in FEN (Forsythe-Edwards notation).  If
-     the option is on, a save style that is compatible with older
-     versions of XBoard is used instead.  The old position style is
-     more human-readable than FEN; the old game style has no particular
-     advantages.
-
-Periodic Updates
-     If this option is off (or if you are using a chess engine that
-     does not support periodic updates), the analysis window will only
-     be updated when the analysis changes. If this option is on, the
-     Analysis Window will be updated every two seconds.
-
-Ponder Next Move
-     If this option is off, the chess engine will think only when it is
-     on move.  If the option is on, the engine will also think while
-     waiting for you to make your move.
-
-Popup Exit Message
-     If this option is on, when XBoard wants to display a message just
-     before exiting, it brings up a modal dialog box and waits for you
-     to click OK before exiting.  If the option is off, XBoard prints
-     the message to standard error (the terminal) and exits immediately.
-
-Popup Move Errors
-     If this option is off, when you make an error in moving (such as
-     attempting an illegal move or moving the wrong color piece), the
-     error message is displayed in the message area.  If the option is
-     on, move errors are displayed in small popup windows like other
-     errors.  You can dismiss an error popup either by clicking its OK
-     button or by clicking anywhere on the board, including
-     downclicking to start a move.
-
-Premove
-     If this option is on while playing a game on an ICS, you can
-     register your next planned move before it is your turn.  Move the
-     piece with the mouse in the ordinary way, and the starting and
-     ending squares will be highlighted with a special color (red by
-     default).  When it is your turn, if your registered move is legal,
-     XBoard will send it to ICS immediately; if not, it will be ignored
-     and you can make a different move.  If you change your mind about
-     your premove, either make a different move, or double-click on any
-     piece to cancel the move entirely.
-
-Quiet Play
-     If this option is on, XBoard will automatically issue an ICS `set
-     shout 0' command whenever you start a game and a `set shout 1'
-     command whenever you finish one.  Thus, you will not be distracted
-     by shouts from other ICS users while playing.
-
-Show Coords
-     If this option is on, XBoard displays algebraic coordinates along
-     the board's left and bottom edges.
-
-Show Thinking
-     If this option is set, the chess engine's notion of the score and
-     best line of play from the current position is displayed as it is
-     thinking. The score indicates how many pawns ahead (or if negative,
-     behind) the chess engine thinks it is. In matches between two
-     machines, the score is prefixed by `W' or `B' to indicate whether
-     it is showing White's thinking or Black's, and only the thinking
-     of the engine that is on move is shown.
-
-Test Legality
-     If this option is on, XBoard tests whether the moves you try to
-     make with the mouse are legal and refuses to let you make an
-     illegal move.  Moves loaded from a file with `Load Game' are also
-     checked.  If the option is off, all moves are accepted, but if a
-     local chess engine or the ICS is active, they will still reject
-     illegal moves.  Turning off this option is useful if you are
-     playing a chess variant with rules that XBoard does not
-     understand.  (Bughouse, suicide, and wild variants where the king
-     may castle after starting on the d file are generally supported
-     with Test Legality on.)
-
-
-File: xboard.info,  Node: Help Menu,  Next: Keys,  Prev: Options Menu,  Up: Menus
-
-Help Menu
-=========
-
-Info XBoard
-     Displays the XBoard documentation in info format.  For this
-     feature to work, you must have the GNU info program installed on
-     your system, and the file `xboard.info' must either be present in
-     the current working directory, or have been installed by the `make
-     install' command when you built XBoard.
-
-Man XBoard
-     Displays the XBoard documentation in man page format.  For this
-     feature to work, the file `xboard.6' must have been installed by
-     the `make install' command when you built XBoard, and the
-     directory it was placed in must be on the search path for your
-     system's `man' command.
-
-Hint
-     Displays a move hint from the chess engine.
-
-Book
-     Displays a list of possible moves from the chess engine's opening
-     book.  The exact format depends on what chess engine you are using.
-     With GNU Chess 4, the first column gives moves, the second column
-     gives one possible response for each move, and the third column
-     shows the number of lines in the book that include the move from
-     the first column. If you select this option and nothing happens,
-     the chess engine is out of its book or does not support this
-     feature.
-
-About XBoard
-     Shows the current XBoard version number.
-
-
-File: xboard.info,  Node: Keys,  Prev: Help Menu,  Up: Menus
-
-Other Shortcut Keys
-===================
-
-Iconize
-     Pressing the `i' or `c' key iconizes XBoard. The graphical icon
-     displays a white knight if it is White's move, or a black knight
-     if it is Black's move. If your X window manager displays only text
-     icons, not graphical ones, check its documentation; there is
-     probably a way to enable graphical icons.  If you get black and
-     white reversed, we would like to hear about it; see *Note
-     Problems:: below for instructions on how to report this problem.
-
-   You can add or remove shortcut keys using the X resources
-`form.translations'. Here is an example of what would go in your
-`.Xdefaults' file:
-
-     XBoard*form.translations: \
-       Shift<Key>?: AboutGameProc() \n\
-       <Key>y: AcceptProc() \n\
-       <Key>n: DeclineProc() \n\
-       <Key>i: NothingProc()
-
-Binding a key to `NothingProc' makes it do nothing, thus removing it as
-a shortcut key. The XBoard commands that can be bound to keys are:
-
-     AbortProc, AboutGameProc, AboutProc, AcceptProc, AdjournProc,
-     AlwaysQueenProc, AnalysisModeProc, AnalyzeFileProc,
-     AnimateDraggingProc, AnimateMovingProc, AutobsProc, AutoflagProc,
-     AutoflipProc, AutoraiseProc, AutosaveProc, BackwardProc,
-     BlindfoldProc, BookProc, CallFlagProc, CopyGameProc, CopyPositionProc,
-     DebugProc, DeclineProc, DrawProc, EditCommentProc, EditGameProc,
-     EditPositionProc, EditTagsProc, EnterKeyProc, FlashMovesProc,
-     FlipViewProc, ForwardProc, GetMoveListProc, HighlightLastMoveProc,
-     HintProc, Iconify, IcsAlarmProc, IcsClientProc, IcsInputBoxProc,
-     InfoProc, LoadGameProc, LoadNextGameProc, LoadNextPositionProc,
-     LoadPositionProc, LoadPrevGameProc, LoadPrevPositionProc,
-     LoadSelectedProc, MachineBlackProc, MachineWhiteProc, MailMoveProc,
-     ManProc, MoveNowProc, MoveSoundProc, NothingProc, OldSaveStyleProc,
-     PasteGameProc, PastePositionProc, PauseProc, PeriodicUpdatesProc,
-     PonderNextMoveProc, PopupExitMessageProc, PopupMoveErrorsProc,
-     PremoveProc, QuietPlayProc, QuitProc, ReloadCmailMsgProc,
-     ReloadGameProc, ReloadPositionProc, RematchProc, ResetProc,
-     ResignProc, RetractMoveProc, RevertProc, SaveGameProc,
-     SavePositionProc, ShowCoordsProc, ShowGameListProc, ShowThinkingProc,
-     StopExaminingProc, StopObservingProc, TestLegalityProc, ToEndProc,
-     ToStartProc, TrainingProc, TruncateGameProc, and TwoMachinesProc.
-
-
-File: xboard.info,  Node: Options,  Next: Chess Servers,  Prev: Menus,  Up: Top
-
-Options
-*******
-
-   This section documents the command-line options to XBoard.  You can
-set these options in two ways: by typing them on the shell command line
-you use to start XBoard, or by setting them as X resources (typically
-in your `.Xdefaults' file).  Many of the options cannot be changed
-while XBoard is running; others set the initial state of items that can
-be changed with the *Note Options:: menu.
-
-   Most of the options have both a long name and a short name. To turn a
-boolean option on or off from the command line, either give its long
-name followed by the value true or false (`-longOptionName true'), or
-give just the short name to turn the option on (`-opt'), or the short
-name preceded by `x' to turn the option off (`-xopt'). For options that
-take strings or numbers as values, you can use the long or short option
-names interchangeably.
-
-   Each option corresponds to an X resource with the same name, so if
-you like, you can set options in your `.Xdefaults' file or in a file
-named `XBoard' in your home directory.  For options that have two
-names, the longer one is the name of the corresponding X resource; the
-short name is not recognized.  To turn a boolean option on or off as an
-X resource, give its long name followed by the value true or false
-(`XBoard*longOptionName: true').
-
-* Menu:
-
-* Chess engine options::        Controlling the chess engine.
-* ICS options::                 Connecting to and using ICS.
-* Load and Save options::       Input/output options.
-* User interface options::      Look and feel options.
-* Other options::               Miscellaneous.
-
-
-File: xboard.info,  Node: Chess engine options,  Next: ICS options,  Up: Options
-
-Chess Engine Options
-====================
-
--tc or -timeControl minutes[:seconds]
-     Each player begins with his clock set to the `timeControl' period.
-     Default: 5 minutes.  The additional options `movesPerSession' and
-     `timeIncrement' are mutually exclusive.
-
--mps or -movesPerSession moves
-     When both players have made `movesPerSession' moves, a new
-     `timeControl' period is added to both clocks.  Default: 40 moves.
-
--inc or -timeIncrement seconds
-     If this option is specified, `movesPerSession' is ignored.
-     Instead, after each player's move, `timeIncrement' seconds are
-     added to his clock.  Use `-inc 0' if you want to require the entire
-     game to be played in one `timeControl' period, with no increment.
-     Default: -1, which specifies `movesPerSession' mode.
-
--clock/-xclock or -clockMode true/false
-     Determines whether or not to display the chess clocks. If
-     clockMode is false, the clocks are not shown, but the side that is
-     to play next is still highlighted. Also, unless `searchTime' is
-     set, the chess engine still keeps track of the clock time and uses
-     it to determine how fast to make its moves.
-
--st or -searchTime minutes[:seconds]
-     Tells the chess engine to spend at most the given amount of time
-     searching for each of its moves. Without this option, the chess
-     engine 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.
-
--depth or -searchDepth number
-     Tells the chess engine to look ahead at most the given number of
-     moves when searching for a move to make. Without this option, the
-     chess engine chooses its search depth based on the number of moves
-     and amount of time remaining until the next time control.  With
-     the option, the engine will cut off its search early if it reaches
-     the specified depth.
-
--thinking/-xthinking or -showThinking true/false
-     Sets the Show Thinking option. *Note Options Menu::. Default:
-     false.
-
--ponder/-xponder or -ponderNextMove true/false
-     Sets the Ponder Next Move menu option. *Note Options Menu::.
-     Default: true.
-
--mg or -matchGames n
-     Automatically runs an n-game match between two chess engines, with
-     alternating colors.  If the `loadGameFile' or `loadPositionFile'
-     option is set, XBoard starts each game with the given opening
-     moves or the given position; otherwise, the games start with the
-     standard initial chess position.  If the `saveGameFile' option is
-     set, a move record for the match is appended to the specified
-     file. If the `savePositionFile' option is set, the final position
-     reached in each game of the match is appended to the specified
-     file. When the match is over, XBoard displays the match score and
-     exits. Default: 0 (do not run a match).
-
--mm/-xmm or -matchMode true/false
-     Setting `matchMode' to true is equivalent to setting `matchGames'
-     to 1.
-
--fcp or -firstChessProgram program
-     Name of first chess engine.  Default: `gnuchessx'.
-
--scp or -secondChessProgram program
-     Name of second chess engine, if needed.  A second chess engine is
-     started only in Two Machines (match) mode.  Default: `gnuchessx'.
-
--fb/-xfb or -firstPlaysBlack true/false
-     In games between two chess engines, firstChessProgram normally
-     plays white.  If this option is true, firstChessProgram plays
-     black.  In a multi-game match, this option affects the colors only
-     for the first game; they still alternate in subsequent games.
-
--fh or -firstHost host
--sh or -secondHost host
-     Hosts on which the chess engines are to run. The default for each
-     is `localhost'. If you specify another host, XBoard uses `rsh' to
-     run the chess engine there. (You can substitute a different remote
-     shell program for rsh using the `remoteShell' option described
-     below.)
-
--fd or -firstDirectory dir
--sd or -secondDirectory dir
-     Working directories in which the chess engines are to be run.  The
-     default is "", which means to run the chess engine in the same
-     working directory as XBoard itself.  (See the CHESSDIR environment
-     variable.)  This option is effective only when the chess engine is
-     being run on the local host; it does not work if the engine is run
-     remotely using the -fh or -sh option.
-
--initString string
--secondInitString string
-     The string that is sent to initialize each chess engine for a new
-     game.  Default:
-
-          new
-          random
-
-     Setting this option from the command line is tricky, because you
-     must type in real newline characters, including one at the very
-     end.  In most shells you can do this by entering a `\' character
-     followed by a newline. It is easier to set the option from your
-     `.Xdefaults' file; in that case you can include the character
-     sequence `\n' in the string, and it will be converted to a newline.
-
-     If you change this option, don't remove the `new' command; it is
-     required by all chess engines to start a new game.
-
-     You can remove the `random' command if you like; including it
-     causes GNU Chess 4 to randomize its move selection slightly so
-     that it doesn't play the same moves in every game.  Even without
-     `random', GNU Chess 4 randomizes its choice of moves from its
-     opening book.  Many other chess engines ignore this command
-     entirely and always (or never) randomize.
-
-     You can also try adding other commands to the initString; see the
-     documentation of the chess engine you are using for details.
-
--firstComputerString string
--secondComputerString string
-     The string that is sent to the chess engine if its opponent is
-     another computer chess engine.  The default is `computer\n'.
-     Probably the only useful alternative is the empty string (`'),
-     which keeps the engine from knowing that it is playing another
-     computer.
-
--reuse/-xreuse or -reuseFirst true/false
--reuse2/-xreuse2 or -reuseSecond true/false
-     If the option is false, XBoard kills off the chess engine after
-     every game and starts it again for the next game.  If the option
-     is true (the default), XBoard starts the chess engine only once
-     and uses it repeatedly to play multiple games.  Some old chess
-     engines may not work properly when reuse is turned on, but
-     otherwise games will start faster if it is left on.
-
--firstProtocolVersion version-number
--secondProtocolVersion version-number
-     This option specifies which version of the chess engine
-     communication protocol to use.  By default, version-number is 2.
-     In version 1, the "protover" command is not sent to the engine;
-     since version 1 is a subset of version 2, nothing else changes.
-     Other values for version-number are not supported.
-
-
-File: xboard.info,  Node: ICS options,  Next: Load and Save options,  Prev: Chess engine options,  Up: Options
-
-Internet Chess Server Options
-=============================
-
--ics/-xics or -internetChessServerMode true/false
-     Connect with an Internet Chess Server to play chess against its
-     other users, observe games they are playing, or review games that
-     have recently finished. Default: false.
-
--icshost or -internetChessServerHost host
-     The Internet host name or address of the chess server to connect
-     to when in ICS mode. Default: `chessclub.com'.  Another popular
-     chess server to try is `freechess.org'.  If your site doesn't have
-     a working Internet name server, try specifying the host address in
-     numeric form.  You may also need to specify the numeric address
-     when using the icshelper option with timestamp or timeseal (see
-     below).
-
--icsport or -internetChessServerPort port-number
-     The port number to use when connecting to a chess server in ICS
-     mode. Default: 5000.
-
--icshelper or -internetChessServerHelper prog-name
-     An external helper program used to communicate with the chess
-     server.  You would set it to "timestamp" for ICC (chessclub.com) or
-     "timeseal" for FICS (freechess.org), after obtaining the correct
-     version of timestamp or timeseal for your computer.  See "help
-     timestamp" on ICC and "help timeseal" on FICS.  This option is
-     shorthand for `-useTelnet -telnetProgram program'.
-
--telnet/-xtelnet or -useTelnet true/false
-     This option is poorly named; it should be called useHelper.  If
-     set to true, it instructs XBoard to run an external program to
-     communicate with the Internet Chess Server.  The program to use is
-     given by the telnetProgram option.  If the option is false (the
-     default), XBoard opens a TCP socket and uses its own internal
-     implementation of the telnet protocol to communicate with the ICS.
-     *Note Firewalls::.
-
--telnetProgram prog-name
-     This option is poorly named; it should be called helperProgram.
-     It gives the name of the telnet program to be used with the
-     `gateway' and `useTelnet' options.  The default is `telnet'. The
-     telnet program is invoked with the value of
-     `internetChessServerHost' as its first argument and the value of
-     `internetChessServerPort' as its second argument.  *Note
-     Firewalls::.
-
--gateway host-name
-     If this option is set to a host name, XBoard communicates with the
-     Internet Chess Server by using `rsh' to run the `telnetProgram' on
-     the given host, instead of using its own internal implementation
-     of the telnet protocol. You can substitute a different remote shell
-     program for `rsh' using the `remoteShell' option described below.
-     *Note Firewalls::.
-
--internetChessServerCommPort or -icscomm dev-name
-     If this option is set, XBoard communicates with the ICS through
-     the given character I/O device instead of opening a TCP connection.
-     Use this option if your system does not have any kind of Internet
-     connection itself (not even a SLIP or PPP connection), but you do
-     have dialup access (or a hardwired terminal line) to an Internet
-     service provider from which you can telnet to the ICS.
-
-     The support for this option in XBoard is minimal. You need to set
-     all communication parameters and tty modes before you enter XBoard.
-
-     Use a script something like this:
-
-          stty raw -echo 9600 > /dev/tty00
-          xboard -ics -icscomm /dev/tty00
-
-     Here replace `/dev/tty00' with the name of the device that your
-     modem is connected to. You might have to add several more options
-     to these stty commands. See the man pages for `stty' and `tty' if
-     you run into problems. Also, on many systems stty works on its
-     standard input instead of standard output, so you have to use `<'
-     instead of `>'.
-
-     If you are using linux, try starting with the script below.
-     Change it as necessary for your installation.
-
-          #!/bin/sh -f
-          # configure modem and fire up XBoard
-          
-          # configure modem
-          (
-            stty 2400 ; stty raw ; stty hupcl ; stty -clocal
-            stty ignbrk ; stty ignpar ; stty ixon ; stty ixoff
-            stty -iexten ; stty -echo
-          ) < /dev/modem
-          xboard -ics -icscomm /dev/modem
-
-     After you start XBoard in this way, type whatever commands are
-     necessary to dial out to your Internet provider and log in.  Then
-     telnet to ICS, using a command like `telnet chessclub.com 5000'.
-     Important: See the paragraph below about extra echoes, in *Note
-     Limitations::.
-
--icslogon or -internetChessServerLogonScript file-name
-     Whenever XBoard connects to the Internet Chess Server, if it finds
-     a file with the name given in this option, it feeds the file's
-     contents to the ICS as commands. The default file name is `.icsrc'.
-     Usually the first two lines of the file should be your ICS user
-     name and password.  The file can be either in $CHESSDIR, in
-     XBoard's working directory if CHESSDIR is not set, or in your home
-     directory.
-
--msLoginDelay delay
-     If you experience trouble logging on to an ICS when using the
-     `-icslogon' option, inserting some delay between characters of the
-     logon script may help. This option adds `delay' milliseconds of
-     delay between characters. Good values to try are 100 and 250.
-
--icsinput/-xicsinput or -internetChessServerInputBox true/false
-     Sets the ICS Input Box menu option. *Note Mode Menu::. Default:
-     false.
-
--autocomm/-xautocomm or -autoComment true/false
-     Sets the Auto Comment menu option. *Note Options Menu::. Default:
-     false.
-
--autoflag/-xautoflag or -autoCallFlag true/false
-     Sets the Auto Flag menu option.  *Note Options Menu::. Default:
-     false.
-
--autobs/-xautobs or -autoObserve true/false
-     Sets the Auto Observe menu option.  *Note Options Menu::. Default:
-     false.
-
--moves/-xmoves or -getMoveList true/false
-     Sets the Get Move List menu option.  *Note Options Menu::.
-     Default: true.
-
--alarm/-xalarm or -icsAlarm true/false
-     Sets the ICS Alarm menu option.  *Note Options Menu::. Default:
-     true.
-
--icsAlarmTime ms
-     Sets the time in milliseconds for the ICS Alarm menu option.
-     *Note Options Menu::. Default: 5000.
-
--pre/-xpre \fRor\fB -premove true/false
-     Sets the Premove menu option. *Note Options Menu::. Default: true.
-
--quiet/-xquiet or -quietPlay true/false
-     Sets the Quiet Play menu option.  *Note Options Menu::.  Default:
-     false.
-
--colorizeMessages or -colorize
-     Setting colorizeMessages to true tells XBoard to colorize the
-     messages received from the ICS.  Colorization works only if your
-     xterm supports ISO 6429 escape sequences for changing text colors.
-
--colorShout foreground,background,bold
--colorSShout foreground,background,bold
--colorChannel1 foreground,background,bold
--colorChannel foreground,background,bold
--colorKibitz foreground,background,bold
--colorTell foreground,background,bold
--colorChallege foreground,background,bold
--colorRequest foreground,background,bold
--colorSeek foreground,background,bold
--colorNormal foreground,background,bold
-     These options set the colors used when colorizing ICS messages.
-     All ICS messages are grouped into one of these categories: shout,
-     sshout, channel 1, other channel, kibitz, tell, challenge, request
-     (including abort, adjourn, draw, pause, and takeback), or normal
-     (all other messages).
-
-     Each foreground or background argument can be one of the following:
-     black, red, green, yellow, blue, magenta, cyan, white, or default.
-     Here "default" means the default foreground or background color of
-     your xterm.  Bold can be 1 or 0.  If background is omitted,
-     "default" is assumed; if bold is omitted, 0 is assumed.
-
-     Here is an example of how to set the colors in your `.Xdefaults'
-     file.  The colors shown here are the default values; you will get
-     them if you turn `-colorize' on without specifying your own colors.
-
-          xboard*colorizeMessages: true
-          xboard*colorShout: green
-          xboard*colorSShout: green, black, 1
-          xboard*colorChannel1: cyan
-          xboard*colorChannel: cyan, black, 1
-          xboard*colorKibitz: magenta, black, 1
-          xboard*colorTell: yellow, black, 1
-          xboard*colorChallenge: red, black, 1
-          xboard*colorRequest: red
-          xboard*colorSeek: blue
-          xboard*colorNormal: default
-
--soundProgram progname
-     If this option is set to a sound-playing program that is installed
-     and working on your system, XBoard can play sound files when
-     certain events occur, listed below.  The default program name is
-     "play".  If any of the sound options is set to "$", the event
-     rings the terminal bell by sending a ^G character to standard
-     output, instead of playing a sound file.  If an option is set to
-     the empty string "", no sound is played for that event.
-
--soundShout filename
--soundSShout filename
--soundChannel filename
--soundKibitz filename
--soundTell filename
--soundChallenge filename
--soundRequest filename
--soundSeek filename
-     These sounds are triggered in the same way as the colorization
-     events described above.  They all default to "", no sound.  They
-     are played only if the colorizeMessages is on.
-
--soundMove filename
-     This sound is used by the Move Sound menu option.  Default: "$".
-
--soundIcsAlarm filename
-     This sound is used by the ICS Alarm menu option.  Default: "$".
-
--soundIcsWin filename
-     This sound is played when you win an ICS game.  Default: "" (no
-     sound).
-
--soundIcsLoss filename
-     This sound is played when you lose an ICS game.  Default: "" (no
-     sound).
-
--soundIcsDraw filename
-     This sound is played when you draw an ICS game.  Default: "" (no
-     sound).
-
--soundIcsUnfinished filename
-     This sound is played when an ICS game that you are participating
-     in is aborted, adjourned, or otherwise ends inconclusively.
-     Default: "" (no sound).
-
-     Here is an example of how to set the sounds in your .Xdefaults
-     file:
-
-          xboard*soundShout: shout.wav
-          xboard*soundSShout: sshout.wav
-          xboard*soundChannel1: channel1.wav
-          xboard*soundChannel: channel.wav
-          xboard*soundKibitz: kibitz.wav
-          xboard*soundTell: tell.wav
-          xboard*soundChallenge: challenge.wav
-          xboard*soundRequest: request.wav
-          xboard*soundSeek: seek.wav
-          xboard*soundMove: move.wav
-          xboard*soundIcsWin: win.wav
-          xboard*soundIcsLoss: lose.wav
-          xboard*soundIcsDraw: draw.wav
-          xboard*soundIcsUnfinished: unfinished.wav
-          xboard*soundIcsAlarm: alarm.wav
-
-
-File: xboard.info,  Node: Load and Save options,  Next: User interface options,  Prev: ICS options,  Up: Options
-
-Load and Save Options
-=====================
-
--lgf or -loadGameFile file
--lgi or -loadGameIndex index
-     If the `loadGameFile' option is set, XBoard loads the specified
-     game file at startup. The file name `-' specifies the standard
-     input. If there is more than one game in the file, XBoard pops up
-     a menu of the available games, with entries based on their PGN
-     (Portable Game Notation) tags.  If the `loadGameIndex' option is
-     set to `N', the menu is suppressed and the N th game found in the
-     file is loaded immediately.  The menu is also suppressed if
-     `matchMode' is enabled or if the game file is a pipe; in these
-     cases the first game in the file is loaded immediately.  Use the
-     `pxboard' shell script provided with XBoard if you want to pipe in
-     files containing multiple games and still see the menu.
-
--td or -timeDelay seconds
-     Time delay between moves during `Load Game'. Fractional seconds
-     are allowed; try `-td 0.4'. A time delay value of -1 tells XBoard
-     not to step through game files automatically. Default: 1 second.
-
--sgf or -saveGameFile file
-     If this option is set, XBoard appends a record of every game
-     played to the specified file. The file name `-' specifies the
-     standard output.
-
--autosave/-xautosave or -autoSaveGames true/false
-     Sets the Auto Save menu option.  *Note Options Menu::.  Default:
-     false.  Ignored if `saveGameFile' is set.
-
--lpf or -loadPositionFile file
--lpi or -loadPositionIndex index
-     If the `loadPositionFile' option is set, XBoard loads the
-     specified position file at startup. The file name `-' specifies the
-     standard input. If the `loadPositionIndex' option is set to N, the
-     Nth position found in the file is loaded; otherwise the first
-     position is loaded.
-
--spf or -savePositionFile file
-     If this option is set, XBoard appends the final position reached
-     in every game played to the specified file. The file name `-'
-     specifies the standard output.
-
--oldsave/-xoldsave or -oldSaveStyle true/false
-     Sets the Old Save Style menu option.  *Note Options Menu::.
-     Default: false.
-
-
-File: xboard.info,  Node: User interface options,  Next: Other options,  Prev: Load and Save options,  Up: Options
-
-User Interface Options
-======================
-
--display
--geometry
--iconic
-     These and most other standard Xt options are accepted.
-
--movesound/-xmovesound or -ringBellAfterMoves true/false
-     Sets the Move Sound menu option.  *Note Options Menu::.  Default:
-     false.  For compatibility with old XBoard versions, -bell/-xbell
-     are also accepted as abbreviations for this option.
-
--exit/-xexit or -popupExitMessage true/false
-     Sets the Popup Exit Message menu option.  *Note Options Menu::.
-     Default: true.
-
--popup/-xpopup or -popupMoveErrors true/false
-     Sets the Popup Move Errors menu option.  *Note Options Menu::.
-     Default: false.
-
--queen/-xqueen or -alwaysPromoteToQueen true/false
-     Sets the Always Queen menu option.  *Note Options Menu::.
-     Default: false.
-
--legal/-xlegal or -testLegality true/false
-     Sets the Test Legality menu option.  *Note Options Menu::.
-     Default: true.
-
--size or -boardSize (sizeName | n1,n2,n3,n4,n5,n6,n7)
-     Determines how large the board will be, by selecting the pixel size
-     of the pieces and setting a few related parameters.  The sizeName
-     can be one of: Titanic, giving 129x129 pixel pieces, Colossal
-     116x116, Giant 108x108, Huge 95x95, Big 87x87, Large 80x80, Bulky
-     72x72, Medium 64x64, Moderate 58x58, Average 54x54, Middling
-     49x49, Mediocre 45x45, Small 40x40, Slim 37x37, Petite 33x33,
-     Dinky 29x29, Teeny 25x25, or Tiny 21x21.  Pieces of all these
-     sizes are built into XBoard.  Other sizes can be used if you have
-     them; see the pixmapDirectory and bitmapDirectory options.  The
-     default depends on the size of your screen; it is approximately the
-     largest size that will fit without clipping.
-
-     You can select other sizes or vary other layout parameters by
-     providing a list of comma-separated values (with no spaces) as the
-     argument.  You do not need to provide all the values; for any you
-     omit from the end of the list, defaults are taken from the nearest
-     built-in size.  The value `n1' gives the piece size, `n2' the
-     width of the black border between squares, `n3' the desired size
-     for the clockFont, `n4' the desired size for the coordFont, `n5'
-     the desired size for the default font, `n6' the smallLayout flag
-     (0 or 1), and `n7' the tinyLayout flag (0 or 1).  All dimensions
-     are in pixels.  If the border between squares is eliminated (0
-     width), the various highlight options will not work, as there is
-     nowhere to draw the highlight.  If smallLayout is 1 and
-     `titleInWindow' is true, the window layout is rearranged to make
-     more room for the title.  If tinyLayout is 1, the labels on the
-     menu bar are abbreviated to one character each and the buttons in
-     the button bar are made narrower.
-
--coords/-xcoords or -showCoords true/false
-     Sets the Show Coords menu option.  *Note Options Menu::.  Default:
-     false.  The `coordFont' option specifies what font to use.
-
--autoraise/-xautoraise or -autoRaiseBoard true/false
-     Sets the Auto Raise Board menu option.  *Note Options Menu::.
-     Default: true.
-
--autoflip/-xautoflip or -autoFlipView true/false
-     Sets the Auto Flip View menu option.  *Note Options Menu::.
-     Default: true.
-
--flip/-xflip or -flipView true/false
-     If Auto Flip View is not set, or if you are observing but not
-     participating in a game, then the positioning of the board at the
-     start of each game depends on the flipView option.  If flipView is
-     false (the default), the board is positioned so that the white
-     pawns move from the bottom to the top; if true, the black pawns
-     move from the bottom to the top.  In any case, the Flip menu
-     option (see *Note Options Menu::) can be used to flip the board
-     after the game starts.
-
--title/-xtitle or -titleInWindow true/false
-     If this option is true, XBoard displays player names (for ICS
-     games) and game file names (for `Load Game') inside its main
-     window. If the option is false (the default), this information is
-     displayed only in the window banner. You probably won't want to
-     set this option unless the information is not showing up in the
-     banner, as happens with a few X window managers.
-
--buttons/-xbuttons or -showButtonBar True/False
-     If this option is False, xboard omits the [<<] [<] [P] [>] [>>]
-     button bar from the window, allowing the message line to be wider.
-     You can still get the functions of these buttons using the menus
-     or their keyboard shortcuts.  Default: true.
-
--mono/-xmono or -monoMode true/false
-     Determines whether XBoard displays its pieces and squares with two
-     colors (true) or four (false). You shouldn't have to specify
-     `monoMode'; XBoard will determine if it is necessary.
-
--flashCount count
--flashRate rate
--flash/-xflash
-     These options enable flashing of pieces when they land on their
-     destination square.  `flashCount' tells XBoard how many times to
-     flash a piece after it lands on its destination square.
-     `flashRate' controls the rate of flashing (flashes/sec).
-     Abbreviations: `flash' sets flashCount to 3.  `xflash' sets
-     flashCount to 0.  Defaults:  flashCount=0 (no flashing),
-     flashRate=5.
-
--highlight/-xhighlight or -highlightLastMove true/false
-     Sets the Highlight Last Move menu option. *Note Options Menu::.
-     Default: false.
-
--blind/-xblind or -blindfold true/false
-     Sets the Blindfold menu option.  *Note Options Menu::.  Default:
-     false.
-
--clockFont font
-     The font used for the clocks. If the option value is a pattern
-     that does not specify the font size, XBoard tries to choose an
-     appropriate font for the board size being used.  Default:
-     -*-helvetica-bold-r-normal-*-*-*-*-*-*-*-*.
-
--coordFont font
-     The font used for rank and file coordinate labels if `showCoords'
-     is true. If the option value is a pattern that does not specify
-     the font size, XBoard tries to choose an appropriate font for the
-     board size being used.  Default:
-     -*-helvetica-bold-r-normal-*-*-*-*-*-*-*-*.
-
--font font
-     The font used for popup dialogs, menus, comments, etc.  If the
-     option value is a pattern that does not specify the font size,
-     XBoard tries to choose an appropriate font for the board size
-     being used.  Default: -*-helvetica-medium-r-normal-*-*-*-*-*-*-*-*.
-
--fontSizeTolerance tol
-     In the font selection algorithm, a nonscalable font will be
-     preferred over a scalable font if the nonscalable font's size
-     differs by `tol' pixels or less from the desired size.  A value of
-     -1 will force a scalable font to always be used if available; a
-     value of 0 will use a nonscalable font only if it is exactly the
-     right size; a large value (say 1000) will force a nonscalable font
-     to always be used if available.  Default: 4.
-
--bm or -bitmapDirectory dir
--pixmap or -pixmapDirectory dir
-     These options control what piece images xboard uses.  The XBoard
-     distribution includes one set of pixmap pieces in xpm format, in
-     the directory `pixmaps', and one set of bitmap pieces in xbm
-     format, in the directory `bitmaps'.  Pixmap pieces give a better
-     appearance on the screen: the white pieces have dark borders, and
-     the black pieces have opaque internal details.  With bitmaps,
-     neither piece color has a border, and the internal details are
-     transparent; you see the square color or other background color
-     through them.
-
-     If XBoard is configured and compiled on a system that includes
-     libXpm, the X pixmap library, the xpm pixmap pieces are compiled
-     in as the default.  A different xpm piece set can be selected at
-     runtime with the `pixmapDirectory' option, or a bitmap piece set
-     can be selected with the `bitmapDirectory' option.
-
-     If XBoard is configured and compiled on a system that does not
-     include libXpm (or the `--disable-xpm' option is given to the
-     configure program), the bitmap pieces are compiled in as the
-     default.  It is not possible to use xpm pieces in this case, but
-     pixmap pieces in another format called "xim" can be used by giving
-     the `pixmapDirectory' option.  Or again, a different bitmap piece
-     set can be selected with the `bitmapDirectory' option.
-
-     Files in the `bitmapDirectory' must be named as follows: The first
-     character of a piece bitmap name gives the piece it represents
-     (`p', `n', `b', `r', `q', or `k'), the next characters give the
-     size in pixels, the following character indicates whether the
-     piece is solid or outline (`s' or `o'), and the extension is `.bm'.
-     For example, a solid 80x80 knight would be named `n80s.bm'.  The
-     outline bitmaps are used only in monochrome mode.  If bitmap
-     pieces are compiled in and the bitmapDirectory is missing some
-     files, the compiled in pieces are used instead.
-
-     If the bitmapDirectory option is given, it is also possible to
-     replace xboard's icons and menu checkmark, by supplying files
-     named `icon_white.bm', `icon_black.bm', and `checkmark.bm'.
-
-     For more information about pixmap pieces and how to get additional
-     sets, see *Note zic2xpm:: below.
-
--whitePieceColor color
--blackPieceColor color
--lightSquareColor color
--darkSquareColor color
--highlightSquareColor color
-     Colors to use for the pieces, squares, and square highlights.
-     Defaults:
-
-          -whitePieceColor       #FFFFCC
-          -blackPieceColor       #202020
-          -lightSquareColor      #C8C365
-          -darkSquareColor       #77A26D
-          -highlightSquareColor  #FFFF00
-          -premoveHighlightColor #FF0000
-
-     On a grayscale monitor you might prefer:
-
-          -whitePieceColor       gray100
-          -blackPieceColor       gray0
-          -lightSquareColor      gray80
-          -darkSquareColor       gray60
-          -highlightSquareColor  gray100
-          -premoveHighlightColor gray70
-
--drag/-xdrag or -animateDragging true/false
-     Sets the Animate Dragging menu option. *Note Options Menu::.
-     Default: true.
-
--animate/-xanimate or -animateMoving true/false
-     Sets the Animate Moving menu option. *Note Options Menu::.
-     Default: true.
-
--animateSpeed n
-     Number of milliseconds delay between each animation frame when
-     Animate Moves is on.
-
-
-File: xboard.info,  Node: Other options,  Prev: User interface options,  Up: Options
-
-Other Options
-=============
-
--ncp/-xncp or -noChessProgram true/false
-     If this option is true, XBoard acts as a passive chessboard; it
-     does not start a chess engine at all. Turning on this option also
-     turns off clockMode. Default: false.
-
--mode or -initialMode modename
-     If this option is given, XBoard selects the given modename from
-     the Mode menu after starting and (if applicable) processing the
-     loadGameFile or loadPositionFile option. Default: "" (no
-     selection).  Other supported values are MachineWhite,
-     MachineBlack, TwoMachines, Analysis, AnalyzeFile, EditGame,
-     EditPosition, and Training.
-
--variant varname
-     Activates preliminary, partial support for playing chess variants
-     against a local engine or editing variant games.  This flag is not
-     needed in ICS mode.  Recognized variant names are:
-
-          normal        Normal chess
-          wildcastle    Shuffle chess, king can castle from d file
-          nocastle      Shuffle chess, no castling allowed
-          fischerandom  Fischer Random shuffle chess
-          bughouse      Bughouse, ICC/FICS rules
-          crazyhouse    Crazyhouse, ICC/FICS rules
-          losers        Lose all pieces or get mated (ICC wild 17)
-          suicide       Lose all pieces including king (FICS)
-          giveaway      Try to have no legal moves (ICC wild 26)
-          twokings      Weird ICC wild 9
-          kriegspiel    Opponent's pieces are invisible
-          atomic        Capturing piece explodes (ICC wild 27)
-          3check        Win by giving check 3 times (ICC wild 25)
-          shatranj      An ancient precursor of chess (ICC wild 28)
-          unknown       Catchall for other unknown variants
-
-     In the shuffle variants, xboard does not shuffle the pieces, but
-     you can do it by hand using Edit Position.  Some variants are
-     supported only in ICS mode, including fischerandom, bughouse, and
-     kriegspiel.  The winning/drawing conditions in crazyhouse (offboard
-     interposition on mate), losers, suicide, giveaway, atomic, and
-     3check are not fully understood.  In crazyhouse, xboard does not
-     yet keep track of offboard pieces.  Shatranj is unsupported, but
-     it may be usable if you turn off Test Legality.
-
--debug/-xdebug or -debugMode true/false
-     Turns on debugging printout.
-
--rsh or -remoteShell shell-name
-     Name of the command used to run programs remotely. The default is
-     `rsh' or `remsh', determined when XBoard is configured and
-     compiled.
-
--ruser or -remoteUser user-name
-     User name on the remote system when running programs with the
-     `remoteShell'. The default is your local user name.
-
-
-File: xboard.info,  Node: Chess Servers,  Next: Firewalls,  Prev: Options,  Up: Top
-
-Chess Servers
-*************
-
-   An "Internet Chess Server", or "ICS", is a place on the Internet
-where people can get together to play chess, watch other people's
-games, or just chat.  You can use either `telnet' or a client program
-like XBoard to connect to the server.  There are thousands of
-registered users on the different ICS hosts, and it is not unusual to
-meet 200 on both chessclub.com and freechess.org.
-
-   Most people can just type `xboard -ics' to start XBoard as an ICS
-client.  Invoking XBoard in this way connects you to the Internet Chess
-Club (ICC), a commercial ICS.  You can log in there as a guest even if
-you do not have a paid account.  To connect to the largest Free ICS
-(FICS), use the command `xboard -ics -icshost freechess.org' instead,
-or substitute a different host name to connect to your favorite ICS.
-For a full description of command-line options that control the
-connection to ICS and change the default values of ICS options, see
-*Note ICS options::.
-
-   While you are running XBoard as an ICS client, you use the terminal
-window that you started XBoard from as a place to type in commands and
-read information that is not available on the chessboard.
-
-   The first time you need to use the terminal is to enter your login
-name and password, if you are a registered player. (You don't need to do
-this manually; the `icsLogon' option can do it for you.  *note ICS
-options::.)  If you are not registered, enter `g' as your name, and the
-server will pick a unique guest name for you.
-
-   Some useful ICS commands include
-`help <topic>'
-     to get help on the given <topic>. To get a list of possible topics
-     type "help" without topic.  Try the help command before you ask
-     other people on the server for help.
-
-     For example `help register' tells you how to become a registered
-     ICS player.
-
-`who <flags>'
-     to see a list of people who are logged on.  Administrators (people
-     you should talk to if you have a problem) are marked with the
-     character `*', an asterisk. The <flags> allow you to display only
-     selected players: For example, `who of' shows a list of players
-     who are interested in playing but do not have an opponent.
-
-`games'
-     to see what games are being played
-
-`match <player> [<mins>] [<inc>]'
-     to challenge another player to a game. Both opponents get <mins>
-     minutes for the game, and <inc> seconds will be added after each
-     move.  If another player challenges you, the server asks if you
-     want to accept the challenge; use the `accept' or `decline'
-     commands to answer.
-
-`accept'
-`decline'
-     to accept or decline another player's offer.  The offer may be to
-     start a new game, or to agree to a `draw', `adjourn' or `abort'
-     the current game. *Note Action Menu::.
-
-     If you have more than one pending offer (for example, if more than
-     one player is challenging you, or if your opponent offers both a
-     draw and to adjourn the game), you have to supply additional
-     information, by typing something like `accept <player>', `accept
-     draw', or `draw'.
-
-`draw'
-`adjourn'
-`abort'
-     asks your opponent to terminate a game by mutual agreement.
-     Adjourned games can be continued later.  Your opponent can either
-     `decline' your offer or accept it (by typing the same command or
-     typing `accept').  In some cases these commands work immediately,
-     without asking your opponent to agree.  For example, you can abort
-     the game unilaterally if your opponent is out of time, and you can
-     claim a draw by repetition or the 50-move rule if available simply
-     by typing `draw'.
-
-`finger <player>'
-     to get information about the given <player>. (Default: yourself.)
-
-`vars'
-     to get a list of personal settings
-
-`set <var> <value>'
-     to modify these settings
-
-`observe <player>'
-     to observe an ongoing game of the given <player>.
-
-`examine'
-`oldmoves'
-     to review a recently completed game
-
-   Some special XBoard features are activated when you are in examine
-mode on ICS.  See the descriptions of the menu commands `Forward',
-`Backward', `Pause', `ICS Client', and `Stop Examining' on the *Note
-Step Menu::, *Note Mode Menu::, and *Note Options Menu::.
-
-
-File: xboard.info,  Node: Firewalls,  Next: Environment,  Prev: Chess Servers,  Up: Top
-
-Firewalls
-*********
-
-   By default, XBoard communicates with an Internet Chess Server by
-opening a TCP socket directly from the machine it is running on to the
-ICS. If there is a firewall between your machine and the ICS, this
-won't work. Here are some recipes for getting around common kinds of
-firewalls using special options to XBoard.  Important: See the
-paragraph in the below about extra echoes, in *Note Limitations::.
-
-   Suppose that you can't telnet directly to ICS, but you can telnet to
-a firewall host, log in, and then telnet from there to ICS.  Let's say
-the firewall is called `firewall.example.com'. Set command-line options
-as follows:
-
-     xboard -ics -icshost firewall.example.com -icsport 23
-
-Or in your `.Xdefaults' file:
-
-     XBoard*internetChessServerHost: firewall.example.com
-     XBoard*internetChessServerPort: 23
-
-Then when you run XBoard in ICS mode, you will be prompted to log in to
-the firewall host. This works because port 23 is the standard telnet
-login service. Do so, then telnet to ICS, using a command like `telnet
-chessclub.com 5000', or whatever command the firewall provides for
-telnetting to port 5000.
-
-   If your firewall lets you telnet (or rlogin) to remote hosts but
-doesn't let you telnet to port 5000, you may be able to connect to the
-chess server on port 23 instead, which is the port the telnet program
-uses by default.  Some chess servers support this (including
-chessclub.com and freechess.org), while some do not.
-
-   If your chess server does not allow connections on port 23 and your
-firewall does not allow you to connect to other ports, you may be able
-to connect by hopping through another host outside the firewall that
-you have an account on.  For instance, suppose you have a shell account
-at `foo.edu'. Follow the recipe above, but instead of typing `telnet
-chessclub.com 5000' to the firewall, type `telnet foo.edu' (or `rlogin
-foo.edu'), log in there, and then type `telnet chessclub.com 5000'.
-
-   Suppose that you can't telnet directly to ICS, but you can use rsh
-to run programs on a firewall host, and that host can telnet to ICS.
-Let's say the firewall is called `rsh.example.com'. Set command-line
-options as follows:
-
-     xboard -ics -gateway rsh.example.com -icshost chessclub.com
-
-Or in your `.Xdefaults' file:
-
-     XBoard*gateway: rsh.example.com
-     XBoard*internetChessServerHost: chessclub.com
-
-   Then when you run XBoard in ICS mode, it will connect to the ICS by
-using `rsh' to run the command `telnet chessclub.com 5000' on host
-`rsh.example.com'.
-
-   Suppose that you can telnet anywhere you want, but you have to run a
-special program called `ptelnet' to do so.
-
-   First, we'll consider the easy case, in which `ptelnet chessclub.com
-5000' gets you to the chess server.  In this case set command line
-options as follows:
-
-     xboard -ics -telnet -telnetProgram ptelnet
-
-Or in your `.Xdefaults' file:
-
-     XBoard*useTelnet: true
-     XBoard*telnetProgram: ptelnet
-
-Then when you run XBoard in ICS mode, it will issue the command
-`ptelnet chessclub.com 5000' to connect to the ICS.
-
-   Next, suppose that `ptelnet chessclub.com 5000' doesn't work; that
-is, your `ptelnet' program doesn't let you connect to alternative
-ports. As noted above, your chess server may allow you to connect on
-port 23 instead.  In that case, just add the option `-icsport ""' to
-the above command, or add `XBoard*internetChessServerPort:' to your
-`.Xdefaults' file.  But if your chess server doesn't let you connect on
-port 23, you will have to find some other host outside the firewall and
-hop through it. For instance, suppose you have a shell account at
-`foo.edu'. Set command line options as follows:
-
-     xboard -ics -telnet -telnetProgram ptelnet -icshost foo.edu -icsport ""
-
-Or in your `.Xdefaults' file:
-
-     XBoard*useTelnet: true
-     XBoard*telnetProgram: ptelnet
-     XBoard*internetChessServerHost: foo.edu
-     XBoard*internetChessServerPort:
-
-Then when you run XBoard in ICS mode, it will issue the command
-`ptelnet foo.edu' to connect to your account at `foo.edu'. Log in
-there, then type `telnet chessclub.com 5000'.
-
-   ICC timestamp and FICS timeseal do not work through some firewalls.
-You can use them only if your firewall gives a clean TCP connection
-with a full 8-bit wide path.  If your firewall allows you to get out
-only by running a special telnet program, you can't use timestamp or
-timeseal across it.  But if you have access to a computer just outside
-your firewall, and you have much lower netlag when talking to that
-computer than to the ICS, it might be worthwhile running timestamp
-there.  Follow the instructions above for hopping through a host
-outside the firewall (foo.edu in the example), but run timestamp or
-timeseal on that host instead of telnet.
-
-   Suppose that you have a SOCKS firewall that will give you a clean
-8-bit wide TCP connection to the chess server, but only after you
-authenticate yourself via the SOCKS protocol.  In that case, you could
-make a socksified version of XBoard and run that.  If you are using
-timestamp or timeseal, you will to socksify it, not XBoard; this may be
-difficult seeing that ICC and FICS do not provide source code for these
-programs.  Socksification is beyond the scope of this document, but see
-the SOCKS Web site at http://www.socks.permeo.com/.  If you are missing
-SOCKS, try http://www.funbureau.com/.
-
-
-File: xboard.info,  Node: Environment,  Next: Limitations,  Prev: Firewalls,  Up: Top
-
-Environment variables
-*********************
-
-   Game and position files are found in a directory named by the
-`CHESSDIR' environment variable. If this variable is not set, the
-current working directory is used. If `CHESSDIR' is set, XBoard
-actually changes its working directory to `$CHESSDIR', so any files
-written by the chess engine will be placed there too.
-
-
-File: xboard.info,  Node: Limitations,  Next: Problems,  Prev: Environment,  Up: Top
-
-Limitations and known bugs
-**************************
-
-   There is no way for two people running copies of XBoard to play each
-other without going through an Internet Chess Server.
-
-   Under some circumstances, your ICS password may be echoed when you
-log on.
-
-   If you are connecting to the ICS by running telnet on an Internet
-provider or firewall host, you may find that each line you type is
-echoed back an extra time after you hit <Enter>. If your Internet
-provider is a Unix system, you can probably turn its echo off by typing
-`stty -echo' after you log in, and/or typing <^E><Enter> (Ctrl+E
-followed by the Enter key) to the telnet program after you have logged
-into ICS.  It is a good idea to do this if you can, because the extra
-echo can occasionally confuse XBoard's parsing routines.
-
-   The game parser recognizes only algebraic notation.
-
-   The internal move legality tester does not look at the game history,
-so in some cases it misses illegal castling or en passant captures.  It
-permits castling with the king on the d file because this is possible in
-some "wild 1" games on ICS.  It does not check piece drops in bughouse
-and crazyhouse to see if you actually hold the piece you are trying to
-drop.  However, if you attempt an illegal move when using a chess
-engine or chess server, XBoard will accept the error message that comes
-back, undo the move, and let you try another.
-
-   Fischer Random castling is not understood.  You can probably play
-Fischer Random successfully on ICS by typing castling moves into the ICS
-Interaction window, but they will not be animated correctly, and saved
-games will not be loaded correctly if castling occurs.
-
-   FEN positions saved by XBoard never include correct information
-about whether castling is legal or how many half-moves have been made
-since the last irreversible move, and sometimes may not correctly
-indicate when en passant capture is available.
-
-   The mate detector does not understand that non-contact mate is not
-really mate in bughouse and crazyhouse.  The only problem this causes
-while playing is minor: a `#' (mate indicator) character will show up
-after a non-contact mating move in the move list; XBoard will not
-assume the game is over at that point.  However, if you are editing a
-game, Edit Game mode will be terminated by a non-contact mate.
-
-   The menus may not work if your keyboard is in Caps Lock or Num Lock
-mode.  This seems to be a problem with the Athena menu widget, not an
-XBoard bug.
-
-   Also see the ToDo file included with the distribution for many other
-possible bugs, limitations, and ideas for improvement that have been
-suggested.
-
-
-File: xboard.info,  Node: Problems,  Next: Contributors,  Prev: Limitations,  Up: Top
-
-Reporting problems
-******************
-
-   Report bugs and problems with XBoard to `<bug-xboard at gnu.org>'.
-
-   Please use the `script' program to start a typescript, run XBoard
-with the `-debug' option, and include the typescript output in your
-message.  Also tell us what kind of machine and what operating system
-version you are using.  The command `uname -a' will often tell you this.
-Here is a sample of approximately what you should type:
-
-     script
-     uname -a
-     ./configure
-     make
-     ./xboard -debug
-     exit
-     mail bug-xboard at gnu.org
-     Subject: Your short description of the problem
-     Your detailed description of the problem
-     ~r typescript
-     .
-
-   If you improve XBoard, please send a message about your changes, and
-we will get in touch with you about merging them in to the main line of
-development.  Also see our Web site at
-http://savannah.gnu.org/projects/xboard/.
-
-
-File: xboard.info,  Node: Contributors,  Next: CMail,  Prev: Problems,  Up: Top
-
-Authors and contributors
-************************
-
-   Tim Mann has been responsible for XBoard versions 1.3 and beyond, and
-for WinBoard, a port of XBoard to Microsoft Win32 (Windows NT and
-Windows 95).
-
-   Mark Williams contributed the initial (WinBoard-only) implementation
-of many new features added to both XBoard and WinBoard in version
-4.1.0, including copy/paste, premove, icsAlarm, autoFlipView, training
-mode, auto raise, and blindfold.  Ben Nye contributed X copy/paste code
-for XBoard.
-
-   Hugh Fisher added animated piece movement to XBoard, and Henrik Gram
-(henrikg at funcom.com) added it to WinBoard.  Frank McIngvale added
-click/click moving, the Analysis modes, piece flashing, ZIICS import,
-and ICS text colorization to XBoard.  Jochen Wiedmann ported XBoard to
-the Amiga, creating AmyBoard, and converted the documentation to
-texinfo.  Elmar Bartel contributed the new piece bitmaps introduced in
-version 3.2.  John Chanak contributed the initial implementation of ICS
-mode.  The color scheme and the old 80x80 piece bitmaps were taken from
-Wayne Christopher's `XChess' program.
-
-   Chris Sears and Dan Sears wrote the original XBoard.  They were
-responsible for versions 1.0 through 1.2.
-
-   Evan Welsh wrote `CMail'.  Patrick Surry helped in designing,
-testing, and documenting CMail.
-
-
-File: xboard.info,  Node: CMail,  Next: Other programs,  Prev: Contributors,  Up: Top
-
-CMail
-*****
-
-   The `cmail' program can help you play chess by email with opponents
-of your choice using XBoard as an interface.
-
-   You will usually run `cmail' without giving any options.
-
-* Menu:
-
-* CMail options::    Invoking CMail.
-* CMail game::       Starting a CMail game.
-* CMail answer::     Answering a move.
-* CMail multi::      Multiple games in one message.
-* CMail completion:: Completing a game.
-* CMail trouble::    Known CMail problems.
-
-
-File: xboard.info,  Node: CMail options,  Next: CMail game,  Up: CMail
-
-CMail options
-=============
-
--h
-     Displays `cmail' usage information.
-
--c
-     Shows the conditions of the GNU General Public License.  *Note
-     Copying::.
-
--w
-     Shows the warranty notice of the GNU General Public License.
-     *Note Copying::.
-
--v
--xv
-     Provides or inhibits verbose output from `cmail' and XBoard,
-     useful for debugging. The `-xv' form also inhibits the cmail
-     introduction message.
-
--mail
--xmail
-     Invokes or inhibits the sending of a mail message containing the
-     move.
-
--xboard
--xxboard
-     Invokes or inhibits the running of XBoard on the game file.
-
--reuse
--xreuse
-     Invokes or inhibits the reuse of an existing XBoard to display the
-     current game.
-
--remail
-     Resends the last mail message for that game. This inhibits running
-     XBoard.
-
--game <name>
-     The name of the game to be processed.
-
--wgames <number>
--bgames <number>
--games <number>
-     Number of games to start as White, as Black or in total. Default
-     is 1 as white and none as black. If only one color is specified
-     then none of the other color is assumed. If no color is specified
-     then equal numbers of White and Black games are started, with the
-     extra game being as White if an odd number of total games is
-     specified.
-
--me <short name>
--opp <short name>
-     A one-word alias for yourself or your opponent.
-
--wname <full name>
--bname <full name>
--name <full name>
--oppname <full name>
-     The full name of White, Black, yourself or your opponent.
-
--wna <net address>
--bna <net address>
--na <net address>
--oppna <net address>
-     The email address of White, Black, yourself or your opponent.
-
--dir <directory>
-     The directory in which `cmail' keeps its files. This defaults to
-     the environment variable `$CMAIL_DIR' or failing that, `$CHESSDIR',
-     `$HOME/Chess' or `~/Chess'. It will be created if it does not
-     exist.
-
--arcdir <directory>
-     The directory in which `cmail' archives completed games. Defaults
-     to the environment variable `$CMAIL_ARCDIR' or, in its absence,
-     the same directory as cmail keeps its working files (above).
-
--mailprog <mail program>
-     The program used by cmail to send email messages. This defaults to
-     the environment variable `$CMAIL_MAILPROG' or failing that
-     `/usr/ucb/Mail', `/usr/ucb/mail' or `Mail'. You will need to set
-     this variable if none of the above paths fit your system.
-
--gamesFile <file>
-     A file containing a list of games with email addresses. This
-     defaults to the environment variable `$CMAIL_GAMES' or failing that
-     `.cmailgames'.
-
--aliasesFile <file>
-     A file containing one or more aliases for a set of email
-     addresses. This defaults to the environment variable
-     `$CMAIL_ALIASES' or failing that `.cmailaliases'.
-
--logFile <file>
-     A file in which to dump verbose debugging messages that are
-     invoked with the `-v' option.
-
--event <event>
-     The PGN Event tag (default `Email correspondence game').
-
--site <site>
-     The PGN Site tag (default `NET').
-
--round <round>
-     The PGN Round tag (default `-', not applicable).
-
--mode <mode>
-     The PGN Mode tag (default `EM', Electronic Mail).
-
-Other options
-     Any option flags not listed above are passed through to XBoard.
-     Invoking XBoard through CMail changes the default values of two
-     XBoard options: The default value for `-noChessProgram' is changed
-     to true; that is, by default no chess engine is started.  The
-     default value for `-timeDelay' is changed to 0; that is, by default
-     XBoard immediately goes to the end of the game as played so far,
-     rather than stepping through the moves one by one.  You can still
-     set these options to whatever values you prefer by supplying them
-     on CMail's command line.  *Note Options::.
-
-
-File: xboard.info,  Node: CMail game,  Next: CMail answer,  Prev: CMail options,  Up: CMail
-
-Starting a CMail Game
-=====================
-
-   Type `cmail' from a shell to start a game as white. After an opening
-message, you will be prompted for a game name, which is optional--if you
-simply press <Enter>, the game name will take the form
-`you-VS-opponent'. You will next be prompted for the short name of your
-opponent. If you haven't played this person before, you will also be
-prompted for his/her email address. `cmail' will then invoke XBoard in
-the background. Make your first move and select `Mail Move' from the
-`File' menu. *Note File Menu::. If all is well, `cmail' will mail a
-copy of the move to your opponent. If you select `Exit' without having
-selected `Mail Move' then no move will be made.
-
-
-File: xboard.info,  Node: CMail answer,  Next: CMail multi,  Prev: CMail game,  Up: CMail
-
-Answering a Move
-================
-
-   When you receive a message from an opponent containing a move in one
-of your games, simply pipe the message through `cmail'. In some mailers
-this is as simple as typing `| cmail' when viewing the message, while in
-others you may have to save the message to a file and do `cmail < file'
-at the command line. In either case `cmail' will display the game using
-XBoard. If you didn't exit XBoard when you made your first move then
-`cmail' will do its best to use the existing XBoard instead of starting
-a new one. As before, simply make a move and select `Mail Move' from
-the `File' menu. *Note File Menu::. `cmail' will try to use the XBoard
-that was most recently used to display the current game. This means
-that many games can be in progress simultaneously, each with its own
-active XBoard.
-
-   If you want to look at the history or explore a variation, go ahead,
-but you must return to the current position before XBoard will allow you
-to mail a move. If you edit the game's history you must select `Reload
-Same Game' from the `File' menu to get back to the original position,
-then make the move you want and select `Mail Move'.  As before, if you
-decide you aren't ready to make a move just yet you can either select
-`Exit' without sending a move or just leave XBoard running until you
-are ready.
-
-
-File: xboard.info,  Node: CMail multi,  Next: CMail completion,  Prev: CMail answer,  Up: CMail
-
-Multi-Game Messages
-===================
-
-   It is possible to have a `cmail' message carry more than one game.
-This feature was implemented to handle IECG (International Email Chess
-Group) matches, where a match consists of one game as white and one as
-black, with moves transmitted simultaneously. In case there are more
-general uses, `cmail' itself places no limit on the number of
-black/white games contained in a message; however, XBoard does.
-
-
-File: xboard.info,  Node: CMail completion,  Next: CMail trouble,  Prev: CMail multi,  Up: CMail
-
-Completing a Game
-=================
-
-   Because XBoard can detect checkmate and stalemate, `cmail' handles
-game termination sensibly. As well as resignation, the `Action' menu
-allows draws to be offered and accepted for `cmail' games.
-
-   For multi-game messages, only unfinished and just-finished games
-will be included in email messages. When all the games are finished,
-they are archived in the user's archive directory, and similarly in the
-opponent's when he or she pipes the final message through `cmail'. The
-archive file name includes the date the game was started.
-
-
-File: xboard.info,  Node: CMail trouble,  Prev: CMail completion,  Up: CMail
-
-Known CMail Problems
-====================
-
-   It's possible that a strange conjunction of conditions may
-occasionally mean that `cmail' has trouble reactivating an existing
-XBoard. If this should happen, simply trying it again should work.  If
-not, remove the file that stores the XBoard's PID (`game.pid') or use
-the `-xreuse' option to force `cmail' to start a new XBoard.
-
-   Versions of `cmail' after 2.16 no longer understand the old file
-format that XBoard used to use and so cannot be used to correspond with
-anyone using an older version.
-
-   Versions of `cmail' older than 2.11 do not handle multi-game
-messages, so multi-game correspondence is not possible with opponents
-using an older version.
-
-
-File: xboard.info,  Node: Other programs,  Next: Copyright,  Prev: CMail,  Up: Top
-
-Other programs you can use with XBoard
-**************************************
-
-   Here are some other programs you can use with XBoard
-
-* Menu:
-
-* GNU Chess::        The GNU Chess engine.
-* Crafty::           The Crafty chess engine.
-* zic2xpm::          The program used to import chess sets from ZIICS.
-
-
-File: xboard.info,  Node: GNU Chess,  Next: Crafty,  Up: Other programs
-
-GNU Chess
-=========
-
-   The GNU Chess engine is available from:
-
-   ftp://ftp.gnu.org/gnu/gnuchess/
-
-   You can use XBoard to play a game against GNU Chess, or to interface
-GNU Chess to an ICS.
-
-
-File: xboard.info,  Node: Crafty,  Next: zic2xpm,  Prev: GNU Chess,  Up: Other programs
-
-Crafty
-======
-
-   Crafty is a chess engine written by Bob Hyatt.  You can use XBoard
-to play a game against Crafty, hook Crafty up to an ICS, or use Crafty
-to interactively analyze games and positions for you.
-
-   Crafty is a strong, rapidly evolving chess program. This rapid pace
-of development is good, because it means Crafty is always getting
-better.  This can sometimes cause problems with backwards
-compatibility, but usually the latest version of Crafty will work well
-with the latest version of XBoard.  Crafty can be obtained from its
-author's FTP site: ftp://ftp.cis.uab.edu/hyatt/.
-
-   To use Crafty with XBoard, give the -fcp and -fd options as follows,
-where <crafty's directory> is the directory in which you installed
-Crafty and placed its book and other support files.
-
-
-File: xboard.info,  Node: zic2xpm,  Prev: Crafty,  Up: Other programs
-
-zic2xpm
-=======
-
-   The "zic2xpm" program is used to import chess sets from the ZIICS(*)
-program into XBoard. "zic2xpm" is part of the XBoard distribution.
-ZIICS is available from:
-
-   ftp://ftp.freechess.org/pub/chess/DOS/ziics131.exe
-
-   To import ZIICS pieces, do this:
-1. Unzip ziics131.exe into a directory:
-          unzip -L ziics131.exe -d ~/ziics
-
-2. Use zic2xpm to convert a set of pieces to XBoard format.
-     For example, let's say you want to use the FRITZ4 set. These files
-     are named "fritz4.*" in the ZIICS distribution.
-
-          mkdir ~/fritz4
-          cd ~/fritz4
-          zic2xpm ~/ziics/fritz4.*
-
-3. Give XBoard the "-pixmap" option when starting up, e.g.:
-          xboard -pixmap ~/fritz4
-
-     Alternatively, you can add this line to your .Xdefaults file:
-
-          xboard*pixmapDirectory: ~/fritz4
-
-   (*) ZIICS is a separate copyrighted work of Andy McFarland.  The
-"ZIICS pieces" are copyrighted works of their respective creators.
-Files produced by "zic2xpm" are for PERSONAL USE ONLY and may NOT be
-redistributed without explicit permission from the original creator(s)
-of the pieces.
-
-
-File: xboard.info,  Node: Copyright,  Next: Copying,  Prev: Other programs,  Up: Top
-
-Copyright
-*********
-
-   Copyright (C) 1991 Digital Equipment Corporation, Maynard,
-Massachusetts.
-
-   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.
-
-   Enhancements copyright (C) 1992-2003 Free Software Foundation, Inc.
-
-Published by the Free Software Foundation
-59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
-   Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-   Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License," is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
-   Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public License,"
-and this permission notice, may be included in translations approved by
-the Free Software Foundation instead of in the original English.
-
-
-File: xboard.info,  Node: Copying,  Next: Index,  Prev: Copyright,  Up: Top
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
-                         Version 2, June 1991
-     Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA 02111 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 AN 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., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
-
-   Also add information on how to contact you by electronic and paper
-mail.
-
-   If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
-     Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
-     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-     type `show w'.  This is free software, and you are welcome
-     to redistribute it under certain conditions; type `show c'
-     for details.
-
-   The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
-   You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the program,
-if necessary.  Here is a sample; alter the names:
-
-     Yoyodyne, Inc., hereby disclaims all copyright
-     interest in the program `Gnomovision'
-     (which makes passes at compilers) written
-     by James Hacker.
-     
-     SIGNATURE OF TY COON, 1 April 1989
-     Ty Coon, President of Vice
-
-   This General Public License does not permit incorporating your
-program into proprietary programs.  If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library.  If this is what you want to do, use the
-GNU Library General Public License instead of this License.
-
-
-File: xboard.info,  Node: Index,  Prev: Copying,  Up: Top
-
-Index
-*****
-
-* Menu:
-
-* -animateSpeed, option:                 User interface options.
-* .cmailaliases:                         CMail options.
-* .cmailgames:                           CMail options.
-* .icsrc:                                ICS options.
-* <, Button:                             Step Menu.
-* <<, Button:                            Step Menu.
-* >, Button:                             Step Menu.
-* >>, Button:                            Step Menu.
-* abort, ICS command:                    Chess Servers.
-* Abort, Menu Item:                      Action Menu.
-* About XBoard, Menu Item:               Help Menu.
-* accept, ICS command:                   Chess Servers.
-* Accept, Menu Item:                     Action Menu.
-* Action, Menu:                          Action Menu.
-* adjourn, ICS command:                  Chess Servers.
-* Adjourn, Menu Item:                    Action Menu.
-* alarm, option:                         ICS options.
-* Always Queen, Menu Item:               Options Menu.
-* alwaysPromoteToQueen, option:          User interface options.
-* Analysis Mode, Menu Item:              Mode Menu.
-* Analyze File, Menu Item:               Mode Menu.
-* Animate Dragging, Menu Item:           Options Menu.
-* Animate Moving, Menu Item:             Options Menu.
-* animate, option:                       User interface options.
-* animateDragging, option:               User interface options.
-* animateMoving, option:                 User interface options.
-* Authors:                               Contributors.
-* Auto Comment, Menu Item:               Options Menu.
-* Auto Flag, Menu Item:                  Options Menu.
-* Auto Flip View, Menu Item:             Options Menu.
-* Auto Observe, Menu Item:               Options Menu.
-* Auto Raise Board, Menu Item:           Options Menu.
-* Auto Save, Menu Item:                  Options Menu.
-* autobs, option:                        ICS options.
-* autoCallFlag, option:                  ICS options.
-* autocomm, option:                      ICS options.
-* autoComment, option:                   ICS options.
-* autoflag, option:                      ICS options.
-* autoflip, option:                      User interface options.
-* autoFlipView, option:                  User interface options.
-* autoObserve, option:                   ICS options.
-* autoraise, option:                     User interface options.
-* autoRaiseBoard, option:                User interface options.
-* autosave, option:                      Load and Save options.
-* autoSaveGames, option:                 Load and Save options.
-* Back to Start, Menu Item:              Step Menu.
-* Backward, Menu Item:                   Step Menu.
-* bell, option:                          User interface options.
-* bitmapDirectory, option:               User interface options.
-* blackPieceColor, option:               User interface options.
-* blind, option:                         User interface options.
-* Blindfold, Menu Item:                  Options Menu.
-* blindfold, option:                     User interface options.
-* bm, option:                            User interface options.
-* board size:                            User interface options.
-* boardSize, option:                     User interface options.
-* Book, Menu Item:                       Help Menu.
-* Bug reports:                           Problems.
-* Bugs <1>:                              Problems.
-* Bugs:                                  Limitations.
-* buttons, option:                       User interface options.
-* Call Flag, Menu Item:                  Action Menu.
-* Chess engine options:                  Chess engine options.
-* CHESSDIR:                              Environment.
-* clock, option:                         Chess engine options.
-* clockFont, option:                     User interface options.
-* clockMode, option:                     Chess engine options.
-* cmail:                                 CMail.
-* colorChallenge, option:                ICS options.
-* colorChannel, option:                  ICS options.
-* colorChannel1, option:                 ICS options.
-* colorize, option:                      ICS options.
-* colorKibitz, option:                   ICS options.
-* colorNormal, option:                   ICS options.
-* colorRequest, option:                  ICS options.
-* Colors <1>:                            User interface options.
-* Colors:                                ICS options.
-* colorSeek, option:                     ICS options.
-* colorShout, option:                    ICS options.
-* colorSShout, option:                   ICS options.
-* colorTell, option:                     ICS options.
-* Contributors:                          Contributors.
-* coordFont, option:                     User interface options.
-* coords, option:                        User interface options.
-* Copy Game, Menu Item:                  File Menu.
-* Copy Position, Menu Item:              File Menu.
-* darkSquareColor, option:               User interface options.
-* debug, option:                         Other options.
-* debugMode, option:                     Other options.
-* decline, ICS command:                  Chess Servers.
-* Decline, Menu Item:                    Action Menu.
-* display, option:                       User interface options.
-* drag, option:                          User interface options.
-* draw, ICS command:                     Chess Servers.
-* Draw, Menu Item:                       Action Menu.
-* Edit Comment, Menu Item:               Mode Menu.
-* Edit Game, Menu Item:                  Mode Menu.
-* Edit Position, Menu Item:              Mode Menu.
-* Edit Tags, Menu Item:                  Mode Menu.
-* Environment variables:                 Environment.
-* examine, ICS command:                  Chess Servers.
-* Exit, Menu Item:                       File Menu.
-* exit, option:                          User interface options.
-* fb, option:                            Chess engine options.
-* fcp, option:                           Chess engine options.
-* fd, option:                            Chess engine options.
-* fh, option:                            Chess engine options.
-* File Menu:                             File Menu.
-* finger, ICS command:                   Chess Servers.
-* firstChessProgram, option:             Chess engine options.
-* firstComputerString, option:           Chess engine options.
-* firstDirectory, option:                Chess engine options.
-* firstHost, option:                     Chess engine options.
-* firstPlaysBlack, option:               Chess engine options.
-* firstProtocolVersion, option:          Chess engine options.
-* Flash Moves, Menu Item:                Options Menu.
-* flash, option:                         User interface options.
-* flashCount, option:                    User interface options.
-* flashRate, option:                     User interface options.
-* Flip View, Menu Item:                  Options Menu.
-* flip, option:                          User interface options.
-* flipView, option:                      User interface options.
-* Font:                                  User interface options.
-* Font, clock:                           User interface options.
-* Font, coordinates:                     User interface options.
-* font, option:                          User interface options.
-* fontSizeTolerance, option:             User interface options.
-* Forward to End, Menu Item:             Step Menu.
-* Forward, Menu Item:                    Step Menu.
-* games, ICS command:                    Chess Servers.
-* gateway, option:                       ICS options.
-* geometry, option:                      User interface options.
-* Get Move List, Menu Item:              Options Menu.
-* getMoveList, option:                   ICS options.
-* Help Menu:                             Help Menu.
-* help, ICS command:                     Chess Servers.
-* Highlight Last Move, Menu Item:        Options Menu.
-* highlight, option:                     User interface options.
-* highlightLastMove, option:             User interface options.
-* highlightSquareColor, option:          User interface options.
-* Hint, Menu Item:                       Help Menu.
-* iconic, option:                        User interface options.
-* ICS:                                   Chess Servers.
-* ICS Alarm, Menu Item:                  Options Menu.
-* ICS Client, Menu Item:                 Mode Menu.
-* ICS Input Box, Menu Item:              Mode Menu.
-* ICS options:                           ICS options.
-* ICS, addresses:                        Chess Servers.
-* ics, option:                           ICS options.
-* icsAlarm, option:                      ICS options.
-* icsAlarmTime, option:                  ICS options.
-* icscomm, option:                       ICS options.
-* icshelper, option:                     ICS options.
-* icshost, option:                       ICS options.
-* icsinput, option:                      ICS options.
-* icslogon, option:                      ICS options.
-* icsport, option:                       ICS options.
-* inc, option:                           Chess engine options.
-* Info XBoard, Menu Item:                Help Menu.
-* initalMode, option:                    Other options.
-* initString, option:                    Chess engine options.
-* Internet Chess Server:                 Chess Servers.
-* internetChessServerCommPort, option:   ICS options.
-* internetChessServerHelper, option:     ICS options.
-* internetChessServerHost, option:       ICS options.
-* internetChessServerInputBox, option:   ICS options.
-* internetChessServerLogonScript, option: ICS options.
-* internetChessServerMode, option:       ICS options.
-* internetChessServerPort, option:       ICS options.
-* introduction:                          Top.
-* Keys:                                  Keys.
-* legal, option:                         User interface options.
-* lgf, option:                           Load and Save options.
-* lgi, option:                           Load and Save options.
-* lightSquareColor, option:              User interface options.
-* Limitations:                           Limitations.
-* Load and Save options:                 Load and Save options.
-* Load Game, Menu Item:                  File Menu.
-* Load Next Game, Menu Item:             File Menu.
-* Load Next Position, Menu Item:         File Menu.
-* Load Position, Menu Item:              File Menu.
-* Load Previous Game, Menu Item:         File Menu.
-* Load Previous Position, Menu Item:     File Menu.
-* loadGameFile, option:                  Load and Save options.
-* loadGameIndex, option:                 Load and Save options.
-* loadPositionFile, option:              Load and Save options.
-* loadPositionIndex, option:             Load and Save options.
-* lpf, option:                           Load and Save options.
-* lpi, option:                           Load and Save options.
-* Machine Black, Menu Item:              Mode Menu.
-* Machine White, Menu Item:              Mode Menu.
-* Mail Move, Menu Item:                  File Menu.
-* Major modes:                           Major modes.
-* Man XBoard, Menu Item:                 Help Menu.
-* matchGames, option:                    Chess engine options.
-* matchMode, option:                     Chess engine options.
-* Menu, Action:                          Action Menu.
-* Menu, File:                            File Menu.
-* Menu, Help:                            Help Menu.
-* Menu, Mode:                            Mode Menu.
-* Menu, Options:                         Options Menu.
-* Menu, Step:                            Step Menu.
-* Menus:                                 Menus.
-* mg, option:                            Chess engine options.
-* mm, option:                            Chess engine options.
-* Mode Menu:                             Mode Menu.
-* mode, option:                          Other options.
-* mono, option:                          User interface options.
-* monoMode, option:                      User interface options.
-* Move Now, Menu Item:                   Step Menu.
-* Move Sound, Menu Item:                 Options Menu.
-* moves, option:                         ICS options.
-* movesound, option:                     User interface options.
-* movesPerSession, option:               Chess engine options.
-* mps, option:                           Chess engine options.
-* msLoginDelay, option:                  ICS options.
-* ncp, option:                           Other options.
-* noChessProgram, option:                Other options.
-* observe, ICS command:                  Chess Servers.
-* Old Save Style, Menu Item:             Options Menu.
-* oldmoves, ICS command:                 Chess Servers.
-* oldsave, option:                       Load and Save options.
-* oldSaveStyle, option:                  Load and Save options.
-* Options:                               Options.
-* Options Menu:                          Options Menu.
-* options, Chess engine:                 Chess engine options.
-* Options, ICS:                          ICS options.
-* Options, Load and Save:                Load and Save options.
-* Options, miscellaneous:                Other options.
-* Options, User interface:               User interface options.
-* Other programs:                        Other programs.
-* Paste Game, Menu Item:                 File Menu.
-* Paste Position, Menu Item:             File Menu.
-* Pause, Menu Item:                      Mode Menu.
-* Periodic Updates, Menu Item:           Options Menu.
-* pixmap, option:                        User interface options.
-* pixmapDirectory, option:               User interface options.
-* Ponder Next Move, Menu Item:           Options Menu.
-* ponder, option:                        Chess engine options.
-* ponderNextMove, option:                Chess engine options.
-* Popup Exit Message, Menu Item:         Options Menu.
-* Popup Move Errors, Menu Item:          Options Menu.
-* popup, option:                         User interface options.
-* popupExitMessage, option:              User interface options.
-* popupMoveErrors, option:               User interface options.
-* pre, option:                           ICS options.
-* Premove, Menu Item:                    Options Menu.
-* premove, option:                       ICS options.
-* Problems:                              Problems.
-* queen, option:                         User interface options.
-* Quiet Play, Menu Item:                 Options Menu.
-* quiet, option:                         ICS options.
-* quietPlay, option:                     ICS options.
-* Reload CMail Message, Menu Item:       File Menu.
-* Reload Same Game, Menu Item:           File Menu.
-* Reload Same Position, Menu Item:       File Menu.
-* remoteShell, option:                   Other options.
-* remoteUser, option:                    Other options.
-* Reporting bugs:                        Problems.
-* Reporting problems:                    Problems.
-* Reset, Menu Item:                      File Menu.
-* Resign, Menu Item:                     Action Menu.
-* Retract Move, Menu Item:               Step Menu.
-* reuse, option:                         Chess engine options.
-* reuse2, option:                        Chess engine options.
-* reuseFirst, option:                    Chess engine options.
-* reuseSecond, option:                   Chess engine options.
-* Revert, Menu Item:                     Step Menu.
-* ringBellAfterMoves, option:            User interface options.
-* rsh, option:                           Other options.
-* ruser, option:                         Other options.
-* Save Game, Menu Item:                  File Menu.
-* saveGameFile, option:                  Load and Save options.
-* savePositionFile, option:              Load and Save options.
-* scp, option:                           Chess engine options.
-* sd, option:                            Chess engine options.
-* searchDepth, option:                   Chess engine options.
-* searchTime, option:                    Chess engine options.
-* secondChessProgram, option:            Chess engine options.
-* secondComputerString, option:          Chess engine options.
-* secondDirectory, option:               Chess engine options.
-* secondHost, option:                    Chess engine options.
-* secondInitString, option:              Chess engine options.
-* secondProtocolVersion, option:         Chess engine options.
-* set, ICS command:                      Chess Servers.
-* sgf, option:                           Load and Save options.
-* sh, option:                            Chess engine options.
-* Shortcut keys:                         Keys.
-* Show Coords, Menu Item:                Options Menu.
-* Show Game List, Menu Item:             Mode Menu.
-* Show Thinking, Menu Item:              Options Menu.
-* showButtonBar, option:                 User interface options.
-* showCoords, option:                    User interface options.
-* showThinking, option:                  Chess engine options.
-* size, option:                          User interface options.
-* soundChallenge, option:                ICS options.
-* soundChannel, option:                  ICS options.
-* soundIcsAlarm, option:                 ICS options.
-* soundIcsDraw, option:                  ICS options.
-* soundIcsLoss, option:                  ICS options.
-* soundIcsUnfinished, option:            ICS options.
-* soundIcsWin, option:                   ICS options.
-* soundKibitz, option:                   ICS options.
-* soundMove, option:                     ICS options.
-* soundProgram, option:                  ICS options.
-* soundRequest, option:                  ICS options.
-* Sounds:                                ICS options.
-* soundSeek, option:                     ICS options.
-* soundShout, option:                    ICS options.
-* soundSShout, option:                   ICS options.
-* soundTell, option:                     ICS options.
-* spf, option:                           Load and Save options.
-* st, option:                            Chess engine options.
-* Step Menu:                             Step Menu.
-* Stop Examining, Menu Item:             Action Menu.
-* Stop Observing, Menu Item:             Action Menu.
-* tc, option:                            Chess engine options.
-* td, option:                            Load and Save options.
-* telnet, option:                        ICS options.
-* telnetProgram, option:                 ICS options.
-* Test Legality, Menu Item:              Options Menu.
-* testLegality, option:                  User interface options.
-* thinking, option:                      Chess engine options.
-* timeControl, option:                   Chess engine options.
-* timeDelay, option:                     Load and Save options.
-* timeIncrement, option:                 Chess engine options.
-* title, option:                         User interface options.
-* titleInWindow, option:                 User interface options.
-* Training, Menu Item:                   Mode Menu.
-* Truncate Game, Menu Item:              Step Menu.
-* Two Machines, Menu Item:               Mode Menu.
-* User interface options:                User interface options.
-* useTelnet, option:                     ICS options.
-* variant, option:                       Other options.
-* vars, ICS command:                     Chess Servers.
-* whitePieceColor, option:               User interface options.
-* who, ICS command:                      Chess Servers.
-* xflash, option:                        User interface options.
-
-
-
-Tag Table:
-Node: Top209
-Node: Major modes1391
-Node: Menus3083
-Node: File Menu4643
-Node: Mode Menu10349
-Node: Action Menu18423
-Node: Step Menu20073
-Node: Options Menu24103
-Node: Help Menu34626
-Node: Keys36004
-Node: Options38487
-Node: Chess engine options40170
-Node: ICS options47118
-Node: Load and Save options57957
-Node: User interface options60220
-Node: Other options70691
-Node: Chess Servers73461
-Node: Firewalls77771
-Node: Environment83229
-Node: Limitations83681
-Node: Problems86405
-Node: Contributors87402
-Node: CMail88789
-Node: CMail options89334
-Node: CMail game93202
-Node: CMail answer94011
-Node: CMail multi95442
-Node: CMail completion95990
-Node: CMail trouble96665
-Node: Other programs97452
-Node: GNU Chess97844
-Node: Crafty98114
-Node: zic2xpm98992
-Node: Copyright100189
-Node: Copying102346
-Node: Index121520
-
-End Tag Table
diff --git a/xboard.man b/xboard.man
deleted file mode 100644
index 5dab673..0000000
--- a/xboard.man
+++ /dev/null
@@ -1,2768 +0,0 @@
-.\"Do not edit this file.  It was created from xboard.texinfo
-.\"using texi2man version 1.01.tpm1 on Fri Nov 28 13:35:39 PST 2003
-.\"If you want a typeset version, you will get better
-.\"results with the original file.
-.\"
-.TH xboard 6 "$Date: " "GNU"
-.SH NAME
-.PP
-xboard \- X graphical user interface for chess
-.SH SYNOPSIS
-.PP
-.B xboard [options]
-.br
-.B xboard -ics -icshost hostname [options]
-.br
-.B xboard -ncp [options]
-.br
-.B |pxboard
-.br
-.B cmail [options]
-
-.SH DESCRIPTION
-
-XBoard is a graphical chessboard that can serve as a
-user interface to chess engines (such as GNU Chess), the
-Internet Chess Servers,
-electronic mail correspondence chess, or your own collection of saved games.
-
-This manual documents version 4.2.7 of XBoard.
-
-.SH MAJOR MODES
-XBoard always runs in one of four major modes.  You select the
-major mode from the command line when you start up XBoard.
-
-.TP
-.B xboard [options]
-As an interface to GNU Chess or another chess engine running on your
-machine, XBoard lets you play a game against the machine,
-set up arbitrary positions, force variations, watch a game between two
-chess engines, interactively analyze your stored games or set up and
-analyze arbitrary positions.  (Note: Not all chess engines support
-analysis.)
-.TP
-.B xboard -ics -icshost hostname [options]
-As Internet Chess Server (ICS) interface, XBoard
-lets you play against other ICS users, observe games
-they are playing, or review games that have recently finished.  Most
-of the ICS "wild" chess variants are supported, including bughouse.
-.TP
-.B xboard -ncp [options]
-XBoard can also be used simply
-as an electronic chessboard to play through games. It will read and
-write game files and allow you to play through variations
-manually. You can use it to browse games off the net or review games
-you have saved.  These features are also available in the other modes.
-.TP
-.B |pxboard
-If you want to pipe games into XBoard, use the supplied shell
-script `pxboard'.  For example, from the news reader `xrn',
-find a message with one or more games in it, click the Save button,
-and type `|pxboard' as the file name.
-.TP
-.B cmail [options]
-As an interface to electronic mail correspondence chess, XBoard
-works with the cmail program. See \fICMail\fR below for
-instructions.
-.PP
-.SH MENUS, BUTTONS, AND KEYS
-To move a piece, you can drag it with the left mouse button, or you
-can click the left mouse button once on the piece, then once more on
-the destination square.  To drop a new piece on a square (when
-applicable), press the middle or the right mouse button over the
-square and select from the popup menu.  In cases where you can drop
-either a white or black piece, use the middle button (or shift+right)
-for white and the right button (or shift+middle) for black.  When you
-are playing a bughouse game on an Internet Chess Server, a list of the
-offboard pieces that each player has available is shown in the window
-title after the player's name; in addition, the piece menus show the
-number of pieces available of each type.
-
-All other XBoard commands are available from the menu bar. The most
-frequently used commands also have shortcut keys or on-screen buttons.
-
-When XBoard is iconized, its graphical icon is a white knight if
-it is White's turn to move, a black knight if it is Black's turn.  See
-Iconize in \fIKeys\fR below if you have problems getting this
-feature to work.
-
-.SS File Menu
-.TP
-.B Reset
-Resets XBoard and the chess engine to the beginning of a new chess
-game. The `r' key is a keyboard equivalent. In Internet Chess
-Server mode, clears the current state of XBoard, then
-resynchronizes with the ICS by sending a refresh command. If you want to
-stop playing, observing, or examining an ICS game, use an
-appropriate command from the Action menu, not `Reset'.
-See \fIAction Menu\fR.
-.TP
-.B Load Game
-Plays a game from a record file. The `g' key is a keyboard equivalent.
-A popup dialog prompts you for the file name. If the file contains more
-than one game, a second popup dialog
-displays a list of games (with information drawn from their PGN tags, if
-any), and you can select the one you want. Alternatively, you can load the
-Nth game in the file directly, by typing the number `N' after the
-file name, separated by a space.
-
-The game file parser will accept PGN (portable game notation),
-or in fact almost any file that contains moves in algebraic
-notation. 
-Notation of the form `P at f7'
-is accepted for piece-drops in bughouse games;
-this is a nonstandard extension to PGN.
-If the file includes a PGN position (FEN tag), or an old-style
-XBoard position diagram bracketed by `[--' and `--]'
-before the first move, the game starts from that position. Text
-enclosed in parentheses, square brackets, or curly braces is assumed to
-be commentary and is displayed in a pop-up window. Any other
-text in the file is ignored. PGN variations (enclosed in
-parentheses) are treated as comments; XBoard is not able to walk
-variation trees.
-The nonstandard PGN tag [Variant "varname"] functions similarly to
-the -variant command-line option (see below), allowing games in certain chess
-variants to be loaded.  There is also a heuristic to 
-recognize chess variants from the Event tag, by looking for the strings
-that the Internet Chess Servers put there when saving variant ("wild") games.
-.TP
-.B Load Next Game
-Loads the next game from the last game record file you loaded.
-The shifted `N' key is a keyboard equivalent.
-.TP
-.B Load Previous Game
-Loads the previous game from the last game record file you
-loaded.  The shifted `P' key is a keyboard equivalent.
-Not available if the last game was loaded from a pipe.
-.TP
-.B Reload Same Game
-Reloads the last game you loaded.
-Not available if the last game was loaded from a pipe.
-.TP
-.B Save Game
-Appends a record of the current game to a file.
-A popup dialog
-prompts you for the file name. If the game did not begin with
-the standard starting position, the game file includes the
-starting position used. Games are saved in the PGN (portable
-game notation) format, unless the oldSaveStyle option is true,
-in which case they are saved in an older format that is specific
-to XBoard. Both formats are human-readable, and both can be
-read back by the `Load Game' command.
-Notation of the form `P at f7'
-is accepted for piece-drops in bughouse games;
-this is a nonstandard extension to PGN.
-.TP
-.B Copy Game
-Copies a record of the current game to an internal clipboard in PGN
-format and sets the X selection to the game text.  The game can be
-pasted to another application (such as a text editor or another copy
-of XBoard) using that application's paste command.  In many X
-applications, such as xterm and emacs, the middle mouse button can be
-used for pasting; in XBoard, you must use the Paste Game command.
-.TP
-.B Paste Game
-Interprets the current X selection as a game record and loads it, as
-with Load Game.
-.TP
-.B Load Position
-Sets up a position from a position file.  A popup dialog prompts
-you for the file name. If the file contains more than one saved
-position, and you want to load the Nth one, type the number N
-after the file name, separated by a space. Position files must
-be in FEN (Forsythe-Edwards notation), or in the format that the
-Save Position command writes when oldSaveStyle is turned on.
-.TP
-.B Load Next Position
-Loads the next position from the last position file you loaded.
-.TP
-.B Load Previous Position
-Loads the previous position from the last position file you
-loaded.  Not available if the last position was loaded from a pipe.
-.TP
-.B Reload Same Position
-Reloads the last position you loaded.
-Not available if the last position was loaded from a pipe.
-.TP
-.B Save Position
-Appends a diagram of the current position to a file.
-A popup dialog
-prompts you for the file name. Positions are saved in
-FEN (Forsythe-Edwards notation) format unless the `oldSaveStyle'
-option is true, in which case they are saved in an older,
-human-readable format that is specific to XBoard. Both formats
-can be read back by the `Load Position' command.
-.TP
-.B Copy Position
-Copies the current position to an internal clipboard in FEN format and
-sets the X selection to the position text.  The position can be pasted
-to another application (such as a text editor or another copy of
-XBoard) using that application's paste command.  In many X
-applications, such as xterm and emacs, the middle mouse button can be
-used for pasting; in XBoard, you must use the Paste Position command.
-.TP
-.B Paste Position
-Interprets the current X selection as a FEN position and loads it, as
-with Load Position.
-.TP
-.B Mail Move
-.PD 0
-.TP
-.B Reload CMail Message
-.PD
-See \fICMail\fR.
-.TP
-.B Exit
-Exits from XBoard. The shifted `Q' key is a keyboard equivalent.
-.PP
-.SS Mode Menu
-.TP
-.B Machine White
-Tells the chess engine to play White.
-.TP
-.B Machine Black
-Tells the chess engine to play Black.
-.TP
-.B Two Machines
-Plays a game between two chess engines.
-.TP
-.B Analysis Mode
-XBoard tells the chess engine to start analyzing the current game/position
-and shows you the analysis as you move pieces around.
-Note: Some chess engines do not support Analysis mode.
-
-To set up a position to analyze, you do the following:
-
-1. Select Edit Position from the Mode Menu
-
-2. Set up the position.  Use the middle and right buttons to
-bring up the white and black piece menus.
-
-3. When you are finished, click on either the Black or White
-clock to tell XBoard which side moves first.
-
-4. Select Analysis Mode from the Mode Menu to start the analysis.
-.TP
-.B Analyze File
-This option lets you load a game from a file (PGN, XBoard format, etc.)
-and analyze it. When you select this menu item, a popup window appears
-and asks for a filename to load.
-If the file contains multiple games, another popup appears that lets
-you select which game you wish to analyze.
-After a game is loaded, use the XBoard arrow buttons to step
-forwards/backwards through the game and watch the analysis.
-Note: Some chess engines do not support Analysis mode.
-.TP
-.B ICS Client
-This is the normal mode when XBoard
-is connected to a chess server.  If you have moved into
-Edit Game or Edit Position mode, you can select this option to get out.
-
-To use xboard in ICS mode, run it in the foreground with the -ics
-option, and use the terminal you started it from to type commands and
-receive text responses from the chess server.  See
-\fIChess Servers\fR below for more information.
-
-XBoard activates some special position/game editing features when you
-use the `examine' or `bsetup' commands on ICS and you have
-`ICS Client' selected on the Mode menu.  First, you can issue the
-ICS position-editing commands with the mouse.  Move pieces by dragging
-with mouse button 1.  To drop a new piece on a square, press mouse
-button 2 or 3 over the square.  This brings up a menu of white pieces
-(button 2) or black pieces (button 3).  Additional menu choices let
-you empty the square or clear the board.  Click on the White or Black
-clock to set the side to play.  You cannot set the side to play or
-drag pieces to arbitrary squares while examining on ICC, but you can
-do so in `bsetup' mode on FICS.  In addition, the menu commands
-`Forward', `Backward', `Pause', and `Stop Examining'
-have special functions in this mode; see below.
-.TP
-.B Edit Game
-Allows you to make moves for both Black and White, and to change
-moves after backing up with the `Backward' command. The clocks do
-not run.
-
-In chess engine mode, the chess engine continues to check moves for legality
-but does not participate in the game. You can bring the chess engine
-into the game by selecting `Machine White', `Machine Black',
-or `Two Machines'.
-
-In ICS mode, the moves are not sent to the ICS: `Edit Game' takes
-XBoard out of ICS Client mode and lets you edit games locally.
-If you want to edit games on ICS in a way that other ICS users
-can see, use the ICS `examine' command or start an ICS match
-against yourself.
-.TP
-.B 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 white pieces (button 2) or
-black 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 word White or Black at the top of the screen.
-Selecting `Edit Position' causes XBoard to discard
-all remembered moves in the current game.
-
-In ICS mode, changes made to the position by `Edit Position' are
-not sent to the ICS: `Edit Position' takes XBoard out of
-`ICS Client' mode and lets you edit positions locally. If you want to
-edit positions on ICS in a way that other ICS users can see, use
-the ICS `examine' command, or start an ICS match against yourself.
-(See also the ICS Client topic above.)
-.TP
-.B Training
-Training mode lets you interactively guess the moves of a game for one
-of the players. You guess the next move of the game by playing the
-move on the board. If the move played matches the next move of the
-game, the move is accepted and the opponent's response is autoplayed.
-If the move played is incorrect, an error message is displayed.  You
-can select this mode only while loading a game (that is, after
-selecting `Load Game' from the File menu).  While XBoard is in 
-`Training' mode, the navigation buttons are disabled.
-.TP
-.B Show Game List
-Shows or hides the list of games generated by the last `Load Game'
-command.
-.TP
-.B Edit Tags
-Lets you edit the PGN (portable game notation)
-tags for the current game. After editing, the tags must still conform to
-the PGN tag syntax:
-
-.nf
-    <tag-section> ::= <tag-pair> <tag-section>
-                            <empty>
-    <tag-pair> ::= [ <tag-name> <tag-value> ]
-    <tag-name> ::= <identifier>
-    <tag-value> ::= <string>
-.fi
-
-See the PGN Standard for full details. Here is an example:
-
-.nf
-    [Event "Portoroz Interzonal"]
-    [Site "Portoroz, Yugoslavia"]
-    [Date "1958.08.16"]
-    [Round "8"]
-    [White "Robert J. Fischer"]
-    [Black "Bent Larsen"]
-    [Result "1-0"]
-.fi
-
-Any characters that do not match this syntax are silently ignored. Note that
-the PGN standard requires all games to have at least the seven tags shown
-above. Any that you omit will be filled in by XBoard
-with `?' (unknown value), or `-' (inapplicable value).
-.TP
-.B Edit Comment
-Adds or modifies a comment on the current position. Comments are
-saved by `Save Game' and are displayed by `Load Game',
-`Forward', and `Backward'.
-.TP
-.B ICS Input Box
-If this option is set in ICS mode,
-XBoard
-creates an extra window that you can use for typing in ICS commands.
-The input box is especially useful if you want to type in something long or do
-some editing on your input, because output from ICS doesn't get mixed
-in with your typing as it would in the main terminal window.
-.TP
-.B Pause
-Pauses updates to the board, and if you are playing against a chess engine,
-also pauses your clock. To continue, select `Pause' again, and the
-display will automatically update to the latest position.
-The `P' button and keyboard `p' key are equivalents.
-
-If you select Pause when you are playing against a chess engine and
-it is not your move, the chess engine's clock
-will continue to run and it will eventually make a move, at which point
-both clocks will stop. Since board updates are paused, however,
-you will not see the move until you exit from Pause mode (or select Forward).
-This behavior is meant to simulate adjournment with a sealed move.
-
-If you select Pause while you are observing or examining a game on a
-chess server, you can step backward and forward in the current history
-of the examined game without affecting the other observers and
-examiners, and without having your display jump forward to the latest
-position each time a move is made. Select Pause again to reconnect
-yourself to the current state of the game on ICS.
-
-If you select `Pause' while you are loading a game, the game stops
-loading. You can load more moves manually by selecting `Forward', or
-resume automatic loading by selecting `Pause' again.
-.PP
-.SS Action Menu
-.TP
-.B Accept
-Accepts a pending match offer. If there is more than one offer
-pending, you will have to type in a more specific command
-instead of using this menu choice.
-.TP
-.B Decline
-Declines a pending offer (match, draw, adjourn, etc.). If there
-is more than one offer pending, you will have to type in a more
-specific command instead of using this menu choice.
-.TP
-.B Call Flag
-Calls your opponent's flag, claiming a win on time, or claiming
-a draw if you are both out of time. You can also call your
-opponent's flag by clicking on his clock or by pressing the
-keyboard `t' key.
-.TP
-.B Draw
-Offers a draw to your opponent, accepts a pending draw offer
-from your opponent, or claims a draw by repetition or the 50-move
-rule, as appropriate. The `d' key is a keyboard equivalent.
-.TP
-.B Adjourn
-Asks your opponent to agree to adjourning the current game, or
-agrees to a pending adjournment offer from your opponent.
-.TP
-.B Abort
-Asks your opponent to agree to aborting the current game, or
-agrees to a pending abort offer from your opponent. An aborted
-game ends immediately without affecting either player's rating.
-.TP
-.B Resign
-Resigns the game to your opponent. The shifted `R' key is a
-keyboard equivalent.
-.TP
-.B Stop Observing
-Ends your participation in observing a game, by issuing the ICS
-observe command with no arguments. ICS mode only.
-.TP
-.B Stop Examining
-Ends your participation in examining a game, by issuing the ICS
-unexamine command. ICS mode only.
-.PP
-.SS Step Menu
-.TP
-.B Backward
-Steps backward through a series of remembered moves.
-The `[<]' button and the `b' key are equivalents.
-In addition, pressing the Control key steps back one move, and releasing
-it steps forward again.
-
-In most modes, `Backward' only lets you look back at old positions;
-it does not retract moves. This is the case if you are playing against
-a chess engine, playing or observing a game on an ICS, or loading a game.
-If you select `Backward' in any of these situations, you will not
-be allowed to make a different move. Use `Retract Move' or
-`Edit Game' if you want to change past moves.
-
-If you are examining an ICS game, the behavior of `Backward'
-depends on whether XBoard is in Pause mode. If Pause mode is
-off, `Backward' issues the ICS backward command, which backs up
-everyone's view of the game and allows you to make a different
-move. If Pause mode is on, `Backward' only backs up your local
-view.
-.TP
-.B Forward
-Steps forward through a series of remembered moves (undoing the
-effect of `Backward') or forward through a game file. The
-`[>]' button and the `f' key are equivalents.
-
-If you are examining an ICS game, the behavior of Forward
-depends on whether XBoard is in Pause mode. If Pause mode is
-off, `Forward' issues the ICS forward command, which moves
-everyone's view of the game forward along the current line. If
-Pause mode is on, `Forward' only moves your local view forward,
-and it will not go past the position that the game was in when
-you paused.
-.TP
-.B Back to Start
-Jumps backward to the first remembered position in the game.
-The `[<<]' button and the shifted `B' key are equivalents.
-
-In most modes, Back to Start only lets you look back at old
-positions; it does not retract moves. This is the case if you
-are playing against a local chess engine, playing or observing a game on
-a chess server, or loading a game. If you select `Back to Start' in any
-of these situations, you will not be allowed to make different
-moves. Use `Retract Move' or `Edit Game' if you want to change past
-moves; or use Reset to start a new game.
-
-If you are examining an ICS game, the behavior of @samp{Back to
-Start} depends on whether XBoard is in Pause mode. If Pause mode
-is off, `Back to Start' issues the ICS `backward 999999'
-command, which backs up everyone's view of the game to the start and
-allows you to make different moves. If Pause mode is on, @samp{Back
-to Start} only backs up your local view.
-.TP
-.B Forward to End
-Jumps forward to the last remembered position in the game. The
-`[>>]' button and the shifted `F' key are equivalents.
-
-If you are examining an ICS game, the behavior of @samp{Forward to
-End} depends on whether XBoard is in Pause mode. If Pause mode
-is off, `Forward to End' issues the ICS `forward 999999'
-command, which moves everyone's view of the game forward to the end of
-the current line. If Pause mode is on, `Forward to End' only moves
-your local view forward, and it will not go past the position
-that the game was in when you paused.
-.TP
-.B Revert
-If you are examining an ICS game and Pause mode is off, issues
-the ICS command `revert'.
-.TP
-.B Truncate Game
-Discards all remembered moves of the game beyond the current
-position. Puts XBoard into `Edit Game' mode if it was not there
-already.
-.TP
-.B Move Now
-Forces the chess engine to move immediately. Chess engine mode only.
-.TP
-.B Retract Move
-Retracts your last move. In chess engine mode, you can do this only
-after the chess engine has replied to your move; if the chess engine is still
-thinking, use `Move Now' first. In ICS mode, `Retract Move'
-issues the command `takeback 1' or `takeback 2'
-depending on whether it is your opponent's move or yours.
-.PP
-.SS Options Menu
-.TP
-.B Always Queen
-If this option is off, XBoard brings up a dialog
-box whenever you move a pawn to the last rank, asking what piece
-you want to promote it to. If the option is true, your pawns are
-always promoted to queens. Your opponent can still underpromote.
-.TP
-.B Animate Dragging
-If Animate Dragging is on, while you are dragging a piece with the
-mouse, an image of the piece follows the mouse cursor.
-If Animate Dragging is off, there is no visual feedback while you are
-dragging a piece, but if Animate Moving is on, the move will be
-animated when it is complete. 
-.TP
-.B Animate Moving
-If Animate Moving is on, all piece moves are animated.  An image of the
-piece is shown moving from the old square to the new square when the
-move is completed (unless the move was already animated by Animate Dragging).
-If Animate Moving is off, a moved piece instantly disappears from its
-old square and reappears on its new square when the move is complete.
-.TP
-.B Auto Comment
-If this option is on, any remarks made on ICS while you are observing or
-playing a game are recorded as a comment on the current move.  This includes
-remarks made with the ICS commands `say', `tell', `whisper',
-and `kibitz'.
-Limitation: remarks that you type yourself are not recognized;
-XBoard scans only the output from ICS, not the input you type to it.
-.TP
-.B Auto Flag
-If this option is on and one player runs out of time
-before the other,
-XBoard
-will automatically call his flag, claiming a win on time.
-In ICS mode, Auto Flag will only call your opponent's flag, not yours,
-and the ICS may award you a draw instead of a win if you have
-insufficient mating material.  In local chess engine mode,
-XBoard
-may call either player's flag and will not take material into account.
-.TP
-.B Auto Flip View
-If the Auto Flip View option is on when you start a game, the board
-will be automatically oriented so that your pawns move from the bottom
-of the window towards the top.
-.TP
-.B Auto Observe
-If this option is on and you add a player to your `gnotify'
-list on ICS, XBoard will automatically observe all of that
-player's games, unless you are doing something else (such as
-observing or playing a game of your own) when one starts.
-The games are displayed 
-from the point of view of the player on your gnotify list; that is, his
-pawns move from the bottom of the window towards the top.
-Exceptions:  If both players in a game are on your gnotify list, if
-your ICS 
-`highlight'
-variable is set to 0, or if the ICS you are using does not 
-properly support observing from Black's point of view,
-you will see the game from White's point of view.
-.TP
-.B Auto Raise Board
-If this option is on, whenever a new game begins, the chessboard window
-is deiconized (if necessary) and raised to the top of the stack of windows.
-.TP
-.B Auto Save
-If this option is true, at the end of every game XBoard prompts
-you for a file name and appends a record of the game to the file
-you specify. 
-Disabled if the `saveGameFile' command-line
-option is set, as in that case all games are saved to the specified file.
-See \fILoad and Save options\fR.
-.TP
-.B Blindfold
-If this option is on, XBoard displays the board as usual but does
-not display pieces or move highlights.  You can still move in the
-usual way (with the mouse or by typing moves in ICS mode), even though
-the pieces are invisible.
-.TP
-.B Flash Moves
-If this option is on, whenever a move is completed, the moved piece flashes.
-The number of times to flash is set by the flashCount command-line
-option; it defaults to 3 if Flash Moves is first turned on from the menu.
-.TP
-.B Flip View
-Inverts your view of the chess board for the duration of the
-current game. Starting a new game returns the board to normal.
-The `v' key is a keyboard equivalent.
-
-If you are playing a game on an ICS, the board is always
-oriented at the start of the game so that your pawns move from
-the bottom of the window towards the top. Otherwise, the starting
-orientation is determined by the `flipView' command line option;
-if it is false (the default), White's pawns move from bottom to top
-at the start of each game; if it is true, Black's pawns move from
-bottom to top. See \fIUser interface options\fR.
-.TP
-.B Get Move List
-If this option is on, whenever XBoard
-receives the first board of a new ICS game (or a different game from
-the one it is currently displaying), it
-retrieves the list of past moves from the ICS.
-You can then review the moves with the `Forward' and `Backward'
-commands
-or save them with `Save Game'.  You might want to
-turn off this option if you are observing several blitz games at once,
-to keep from wasting time and network bandwidth fetching the move lists over
-and over.
-When you turn this option on from the menu, XBoard
-immediately fetches the move list of the current game (if any).
-.TP
-.B Highlight Last Move
-If Highlight Last Move is on, after a move is made, the starting and
-ending squares remain highlighted. In addition, after you use Backward
-or Back to Start, the starting and ending squares of the last move to
-be unmade are highlighted.
-.TP
-.B Move Sound
-If this option is on, XBoard alerts you by playing a sound
-after each of your opponent's moves (or after every
-move if you are observing a game on the Internet Chess Server).
-The sound is not played after moves you make or moves read from a
-saved game file. By default, the
-sound is the terminal bell, but on some systems you can change it
-to a sound file using the soundMove option; see below.
-
-If you turn on this option when using XBoard with the Internet
-Chess Server, you will probably want to give the
-`set bell 0'
-command to the ICS, since otherwise the ICS will ring the terminal bell
-after every move (not just yours). (The `.icsrc' file
-is a good place for this; see \fIICS options\fR.)
-.TP
-.B ICS Alarm
-When this option is on, an alarm sound is played when your clock
-counts down to the icsAlarmTime (by default, 5 seconds) in an ICS
-game.  For games with time controls that include an increment, the
-alarm will sound each time the clock counts down to the icsAlarmTime.
-By default, the alarm sound is the terminal bell, but on some systems
-you can change it to a sound file using the soundIcsAlarm option; see
-below.
-.TP
-.B Old Save Style
-If this option is off, XBoard saves games in PGN
-(portable game notation) and positions in FEN (Forsythe-Edwards
-notation).  If the option is on, a save style that is compatible
-with older versions of XBoard is used instead.
-The old position style is more human-readable
-than FEN; the old game style has no particular advantages.
-.TP
-.B Periodic Updates
-If this option is off (or if
-you are using a chess engine that does not support periodic updates),
-the analysis window
-will only be updated when the analysis changes. If this option is
-on, the Analysis Window will be updated every two seconds.
-.TP
-.B Ponder Next Move
-If this option is off, the chess engine will think only when it is on
-move.  If the option is on, the engine will also think while waiting
-for you to make your move.
-.TP
-.B Popup Exit Message
-If this option is on, when XBoard wants to display a message just
-before exiting, it brings up a modal dialog box and waits for you to
-click OK before exiting.  If the option is off, XBoard prints the
-message to standard error (the terminal) and exits immediately.
-.TP
-.B Popup Move Errors
-If this option is off, when you make an error in moving (such as
-attempting an illegal move or moving the wrong color piece), the
-error message is displayed in the message area.  If the option is
-on, move errors are displayed in small popup windows like other errors.
-You can dismiss an error popup either by clicking its OK button or by
-clicking anywhere on the board, including downclicking to start a move.
-.TP
-.B Premove
-If this option is on while playing a game on an ICS, you can register
-your next planned move before it is your turn.  Move the piece with
-the mouse in the ordinary way, and the starting and ending squares
-will be highlighted with a special color (red by default).  When it is
-your turn, if your registered move is legal, XBoard will send it to
-ICS immediately; if not, it will be ignored and you can make a
-different move.  If you change your mind about your premove, either
-make a different move, or double-click on any piece to cancel the move
-entirely.
-.TP
-.B Quiet Play
-If this option is on, XBoard will automatically issue an ICS
-`set shout 0'
-command whenever you start a game and a
-`set shout 1'
-command whenever you finish one.  Thus, you will not be distracted
-by shouts from other ICS users while playing.
-.TP
-.B Show Coords
-If this option is on, XBoard displays algebraic coordinates
-along the board's left and bottom edges.
-.TP
-.B Show Thinking
-If this option is set, the chess engine's notion of the score and best
-line of play from the current position is displayed as it is
-thinking. The score indicates how many pawns ahead (or if negative,
-behind) the chess engine thinks it is. In matches between two
-machines, the score is prefixed by `W' or `B' to indicate
-whether it is showing White's thinking or Black's, and only the thinking
-of the engine that is on move is shown.
-.TP
-.B Test Legality
-If this option is on, XBoard tests whether the moves you try to make
-with the mouse are legal and refuses to let you make an illegal move.
-Moves loaded from a file with `Load Game' are also checked.  If
-the option is off, all moves are accepted, but if a local chess engine
-or the ICS is active, they will still reject illegal moves.  Turning
-off this option is useful if you are playing a chess variant with
-rules that XBoard does not understand.  (Bughouse, suicide, and wild
-variants where the king may castle after starting on the d file are
-generally supported with Test Legality on.)
-.PP
-.SS Help Menu
-.TP
-.B Info XBoard
-Displays the XBoard documentation in info format.  For this feature to
-work, you must have the GNU info program installed on your system, and
-the file `xboard.info' must either be present in the current
-working directory, or have been installed by the `make install'
-command when you built XBoard.
-.TP
-.B Man XBoard
-Displays the XBoard documentation in man page format.  For this
-feature to work, the file `xboard.6' must have been installed by
-the `make install' command when you built XBoard, and the
-directory it was placed in must be on the search path for your
-system's `man' command.
-.TP
-.B Hint
-Displays a move hint from the chess engine.
-.TP
-.B Book
-Displays a list of possible moves from the chess engine's opening
-book.  The exact format depends on what chess engine you are using.
-With GNU Chess 4, the first column gives moves, the second column
-gives one possible response for each move, and the third column shows
-the number of lines in the book that include the move from the first
-column. If you select this option and nothing happens, the chess
-engine is out of its book or does not support this feature.
-.TP
-.B About XBoard
-Shows the current XBoard version number.
-.PP
-.SS Other Shortcut Keys
-.TP
-.B Iconize
-Pressing the `i' or `c' key iconizes XBoard. The graphical
-icon displays a white knight if it is White's move, or a black knight
-if it is Black's move. If your X window manager displays only text
-icons, not graphical ones, check its documentation; there is probably
-a way to enable graphical icons.  If you get black and white reversed,
-we would like to hear about it; see \fIProblems\fR below for
-instructions on how to report this problem.
-.PP
-You can add or remove shortcut keys using the X resources
-`form.translations'. Here is an example of what would go in your
-`.Xdefaults' file:
-
-.nf
-    XBoard*form.translations: \\
-      Shift<Key>?: AboutGameProc() \\n\\
-      <Key>y: AcceptProc() \\n\\
-      <Key>n: DeclineProc() \\n\\
-      <Key>i: NothingProc()
-.fi
-
-Binding a key to `NothingProc' makes it do nothing, thus removing
-it as a shortcut key. The XBoard commands that can be bound to keys
-are:
-
-.nf
-    AbortProc, AboutGameProc, AboutProc, AcceptProc, AdjournProc,
-    AlwaysQueenProc, AnalysisModeProc, AnalyzeFileProc,
-    AnimateDraggingProc, AnimateMovingProc, AutobsProc, AutoflagProc,
-    AutoflipProc, AutoraiseProc, AutosaveProc, BackwardProc,
-    BlindfoldProc, BookProc, CallFlagProc, CopyGameProc, CopyPositionProc,
-    DebugProc, DeclineProc, DrawProc, EditCommentProc, EditGameProc,
-    EditPositionProc, EditTagsProc, EnterKeyProc, FlashMovesProc,
-    FlipViewProc, ForwardProc, GetMoveListProc, HighlightLastMoveProc,
-    HintProc, Iconify, IcsAlarmProc, IcsClientProc, IcsInputBoxProc,
-    InfoProc, LoadGameProc, LoadNextGameProc, LoadNextPositionProc,
-    LoadPositionProc, LoadPrevGameProc, LoadPrevPositionProc,
-    LoadSelectedProc, MachineBlackProc, MachineWhiteProc, MailMoveProc,
-    ManProc, MoveNowProc, MoveSoundProc, NothingProc, OldSaveStyleProc,
-    PasteGameProc, PastePositionProc, PauseProc, PeriodicUpdatesProc,
-    PonderNextMoveProc, PopupExitMessageProc, PopupMoveErrorsProc,
-    PremoveProc, QuietPlayProc, QuitProc, ReloadCmailMsgProc,
-    ReloadGameProc, ReloadPositionProc, RematchProc, ResetProc,
-    ResignProc, RetractMoveProc, RevertProc, SaveGameProc,
-    SavePositionProc, ShowCoordsProc, ShowGameListProc, ShowThinkingProc,
-    StopExaminingProc, StopObservingProc, TestLegalityProc, ToEndProc,
-    ToStartProc, TrainingProc, TruncateGameProc, and TwoMachinesProc.
-.fi
-
-.SH OPTIONS
-This section documents the command-line options to XBoard.  You can
-set these options in two ways: by typing them on the shell command
-line you use to start XBoard, or by setting them as X resources
-(typically in your `.Xdefaults' file).  Many of the options
-cannot be changed while XBoard is running; others set the initial
-state of items that can be changed with the \fIOptions\fR menu.
-
-Most of the options have both a long name and a short name. To turn a
-boolean option on or off from the command line, either give its long
-name followed by the value true or false
-(`-longOptionName true'), or give just the short name to turn the
-option on (`-opt'), or the short name preceded by `x' to
-turn the option off (`-xopt'). For options that take strings or
-numbers as values, you can use the long or short option names
-interchangeably.
-
-Each option corresponds to an X resource with the same name, so
-if you like, you can set options in your `.Xdefaults' file
-or in a file named `XBoard' in your home directory.
-For options that have two names, the longer one is the name of
-the corresponding X resource; the short name is not recognized.
-To turn a boolean option on or off as an
-X resource, give its long name followed by the value
-true or false (`XBoard*longOptionName: true').
-
-.SS Chess Engine Options
-.TP
-.B -tc or -timeControl minutes[:seconds]
-Each player begins with his clock set to the `timeControl' period.
-Default: 5 minutes.
-The additional options `movesPerSession' and `timeIncrement'
-are mutually exclusive.  
-.TP
-.B -mps or -movesPerSession moves
-When both players have made `movesPerSession' moves, a
-new `timeControl' period is added to both clocks.  Default: 40 moves.
-.TP
-.B -inc or -timeIncrement seconds
-If this option is specified, `movesPerSession' is ignored.
-Instead, after each player's move, `timeIncrement' seconds are
-added to his clock.  
-Use `-inc 0' if you want to require the entire
-game to be played in one `timeControl' period, with no increment.
-Default: -1, which specifies `movesPerSession' mode.
-.TP
-.B -clock/-xclock or -clockMode true/false
-Determines whether or not to display the chess clocks. If clockMode is
-false, the clocks are not shown, but the side that is to play next
-is still highlighted. Also, unless `searchTime'
-is set, the chess engine still keeps track of the clock time and uses it to
-determine how fast to make its moves.
-.TP
-.B -st or -searchTime minutes[:seconds]
-Tells the chess engine to spend at most the given amount of time
-searching for each of its moves. Without this option, the chess engine
-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.
-.TP
-.B -depth or -searchDepth number
-Tells the chess engine to look ahead at most the given number of moves
-when searching for a move to make. Without this option, the chess
-engine chooses its search depth based on the number of moves and
-amount of time remaining until the next time control.  With the option,
-the engine will cut off its search early if it reaches the specified depth.
-.TP
-.B -thinking/-xthinking or -showThinking true/false
-Sets the Show Thinking option. See \fIOptions Menu\fR. Default: false.
-.TP
-.B -ponder/-xponder or -ponderNextMove true/false
-Sets the Ponder Next Move menu option. See \fIOptions Menu\fR. Default: true.
-.TP
-.B -mg or -matchGames n
-Automatically runs an n-game match between two chess engines,
-with alternating colors.
-If the `loadGameFile' or `loadPositionFile' option is set,
-XBoard
-starts each game with the given opening moves or the given position;
-otherwise, the games start with the standard initial chess position.
-If the `saveGameFile' option is set, a move record for the
-match is appended to the specified file. If the `savePositionFile'
-option is set, the final position reached in each game of the match is appended
-to the specified file. When the match is over, XBoard
-displays the match score and exits. Default: 0 (do not run a match).
-.TP
-.B -mm/-xmm or -matchMode true/false
-Setting `matchMode' to true is equivalent to setting
-`matchGames' to 1.
-.TP
-.B -fcp or -firstChessProgram program
-Name of first chess engine.
-Default: `gnuchessx'.
-.TP
-.B -scp or -secondChessProgram program
-Name of second chess engine, if needed.
-A second chess engine is started only in Two Machines (match) mode.
-Default: `gnuchessx'.
-.TP
-.B -fb/-xfb or -firstPlaysBlack true/false
-In games between two chess engines, firstChessProgram normally plays
-white.  If this option is true, firstChessProgram plays black.  In a
-multi-game match, this option affects the colors only for the first
-game; they still alternate in subsequent games.
-.TP
-.B -fh or -firstHost host
-.PD 0
-.TP
-.B -sh or -secondHost host
-.PD
-Hosts on which the chess engines are to run. The default for
-each is `localhost'. If you specify another host, XBoard
-uses `rsh' to run the chess engine there. (You can substitute a
-different remote shell program for rsh using the `remoteShell'
-option described below.)
-.TP
-.B -fd or -firstDirectory dir
-.PD 0
-.TP
-.B -sd or -secondDirectory dir
-.PD
-Working directories in which the chess engines are to be run.
-The default is "", which means to run the chess engine
-in the same working directory as XBoard
-itself.  (See the CHESSDIR environment variable.)
-This option is effective only when the chess engine is being run
-on the local host; it does not work if the engine is run remotely
-using the -fh or -sh option.
-.TP
-.B -initString string
-.PD 0
-.TP
-.B -secondInitString string
-.PD
-The string that is sent to initialize each chess engine for a new game.
-Default:
-
-.nf
-    new
-    random
-.fi
-
-Setting this option from the command line is tricky, because you must
-type in real newline characters, including one at the very end.
-In most shells you can do this by
-entering a `\\' character followed by a newline. It is easier to set
-the option from your `.Xdefaults' file; in that case you can
-include the character sequence `\\n' in the string, and it will
-be converted to a newline.
-
-If you change this option, don't remove the `new' 
-command; it is required by all chess engines to
-start a new game.
-
-You can remove the `random' command if you like; including it
-causes GNU Chess 4 to randomize its move selection slightly so that it
-doesn't play the same moves in every game.  Even without
-`random', GNU Chess 4 randomizes its choice of moves from its
-opening book.  Many other chess engines ignore this command entirely
-and always (or never) randomize.
-
-You can also try adding other commands to the initString; see the
-documentation of the chess engine you are using for details.
-.TP
-.B -firstComputerString string
-.PD 0
-.TP
-.B -secondComputerString string
-.PD
-The string that is sent to the chess engine if its opponent is another
-computer chess engine.  The default is `computer\\n'.  Probably the
-only useful alternative is the empty string (`'), which keeps the
-engine from knowing that it is playing another computer.
-.TP
-.B -reuse/-xreuse or -reuseFirst true/false
-.PD 0
-.TP
-.B -reuse2/-xreuse2 or -reuseSecond true/false
-.PD
-If the option is false,
-XBoard kills off the chess engine after every game and starts
-it again for the next game.  
-If the option is true (the default), 
-XBoard starts the chess engine only once
-and uses it repeatedly to play multiple games.
-Some old chess engines may not work properly when
-reuse is turned on, but otherwise games will start faster if it is left on.
-.TP
-.B -firstProtocolVersion version-number
-.PD 0
-.TP
-.B -secondProtocolVersion version-number
-.PD
-This option specifies which version of the chess engine communication
-protocol to use.  By default, version-number is 2.  In version 1, the
-"protover" command is not sent to the engine; since version 1 is a
-subset of version 2, nothing else changes.  Other values for
-version-number are not supported.
-.PP
-.SS Internet Chess Server Options
-.TP
-.B -ics/-xics or -internetChessServerMode true/false
-Connect with an Internet Chess Server to play chess against its
-other users, observe games they are playing, or review games
-that have recently finished. Default: false.
-.TP
-.B -icshost or -internetChessServerHost host
-The Internet host name or address of the chess server to connect
-to when in ICS mode. Default: `chessclub.com'.
-Another popular chess server to try is `freechess.org'.
-If your site doesn't have a working Internet name server, try
-specifying the host address in numeric form. 
-You may also need
-to specify the numeric address when using the icshelper option
-with timestamp or timeseal (see below).
-.TP
-.B -icsport or -internetChessServerPort port-number
-The port number to use when connecting to a chess server in ICS
-mode. Default: 5000.
-.TP
-.B -icshelper or -internetChessServerHelper prog-name
-An external helper program used to communicate with the chess server.
-You would set it to "timestamp" for ICC (chessclub.com) or
-"timeseal" for FICS (freechess.org), after
-obtaining the correct version of timestamp or timeseal for your
-computer.  See "help timestamp" on ICC and "help timeseal" on FICS.
-This option is shorthand for `-useTelnet -telnetProgram program'.
-.TP
-.B -telnet/-xtelnet or -useTelnet true/false
-This option is poorly named; it should be called useHelper.
-If set to true, it instructs XBoard to run an external
-program to communicate with the Internet Chess Server. 
-The program to use is given by the telnetProgram option.
-If the option is
-false (the default), XBoard opens a TCP socket and uses its own
-internal implementation of the telnet protocol to communicate with the
-ICS. See \fIFirewalls\fR.
-.TP
-.B -telnetProgram prog-name
-This option is poorly named; it should be called helperProgram.
-It gives the name of the telnet program to be used with
-the `gateway' and `useTelnet' options.  The default is
-`telnet'. The telnet program is invoked with the value of
-`internetChessServerHost' as its first argument and the value
-of `internetChessServerPort' as its second argument.
-See \fIFirewalls\fR.
-.TP
-.B -gateway host-name
-If this option is set to a host name, XBoard communicates with the
-Internet Chess Server by using `rsh' to run
-the `telnetProgram' on the given host,
-instead of using its own internal implementation
-of the telnet protocol. You can substitute a different remote shell
-program for `rsh' using the `remoteShell' option described below.
-See \fIFirewalls\fR.
-.TP
-.B -internetChessServerCommPort or -icscomm dev-name
-If this option is set, XBoard communicates with the ICS through
-the given character I/O device instead of opening a TCP connection.
-Use this option if your system does not have any kind of
-Internet connection itself (not even a SLIP or PPP connection),
-but you do have dialup access (or a hardwired terminal line) to
-an Internet service provider from which you can telnet to the ICS.
-
-The support for this option in XBoard is minimal. You need to
-set all communication parameters and tty modes before you enter
-XBoard.
-
-Use a script something like this:
-
-.nf
-    stty raw -echo 9600 > /dev/tty00
-    xboard -ics -icscomm /dev/tty00
-.fi
-
-Here replace `/dev/tty00' with the name of the device that your
-modem is connected to. You might have to add several more
-options to these stty commands. See the man pages for `stty'
-and `tty' if you run into problems. Also, on many systems stty
-works on its standard input instead of standard output, so you
-have to use `<' instead of `>'.
-
-If you are using linux, try starting with the script below.
-Change it as necessary for your installation.
-
-.nf
-    #!/bin/sh -f
-    # configure modem and fire up XBoard
-    
-    # configure modem
-    (
-      stty 2400 ; stty raw ; stty hupcl ; stty -clocal
-      stty ignbrk ; stty ignpar ; stty ixon ; stty ixoff
-      stty -iexten ; stty -echo
-    ) < /dev/modem
-    xboard -ics -icscomm /dev/modem
-.fi
-
-After you start XBoard in this way, type whatever commands are
-necessary to dial out to your Internet provider and log in.
-Then telnet to ICS, using a command like
-`telnet chessclub.com 5000'.
-Important: See the paragraph below about extra echoes, 
-in \fILimitations\fR.
-.TP
-.B -icslogon or -internetChessServerLogonScript file-name
-Whenever XBoard connects to the Internet Chess Server,
-if it finds a file with the name given in this option, it feeds the
-file's contents to the ICS as commands. The default file name
-is `.icsrc'.
-Usually the first two lines of the file should be
-your ICS user name and password.
-The file can be either in $CHESSDIR, in XBoard's working
-directory if CHESSDIR is not set, or in your home directory.
-.TP
-.B -msLoginDelay delay
-If you experience trouble logging on to an ICS when using the
-`-icslogon' option, inserting some delay between characters
-of the logon script may help. This option adds `delay'
-milliseconds of delay between characters. Good values to try
-are 100 and 250.
-.TP
-.B -icsinput/-xicsinput or -internetChessServerInputBox true/false
-Sets the ICS Input Box menu option. See \fIMode Menu\fR. Default: false.
-.TP
-.B -autocomm/-xautocomm or -autoComment true/false
-Sets the Auto Comment menu option. See \fIOptions Menu\fR. Default: false.
-.TP
-.B -autoflag/-xautoflag or -autoCallFlag true/false
-Sets the Auto Flag menu option.  See \fIOptions Menu\fR. Default: false.
-.TP
-.B -autobs/-xautobs or -autoObserve true/false
-Sets the Auto Observe menu option.  See \fIOptions Menu\fR. Default: false.
-.TP
-.B -moves/-xmoves or -getMoveList true/false
-Sets the Get Move List menu option.  See \fIOptions Menu\fR.  Default: true.
-.TP
-.B -alarm/-xalarm or -icsAlarm true/false
-Sets the ICS Alarm menu option.  See \fIOptions Menu\fR. Default: true.
-.TP
-.B -icsAlarmTime ms
-Sets the time in milliseconds for the ICS Alarm menu option. 
-See \fIOptions Menu\fR. Default: 5000.
-.TP
-.B -pre/-xpre \\fRor\\fB -premove true/false
-Sets the Premove menu option. See \fIOptions Menu\fR. Default: true.
-.TP
-.B -quiet/-xquiet or -quietPlay true/false
-Sets the Quiet Play menu option.  See \fIOptions Menu\fR.  Default: false.
-.TP
-.B -colorizeMessages or -colorize
-Setting colorizeMessages
-to true tells XBoard to colorize the messages received from
-the ICS.  Colorization works only if your xterm 
-supports ISO 6429 escape sequences for changing text colors.
-.TP
-.B -colorShout foreground,background,bold
-.PD 0
-.TP
-.B -colorSShout foreground,background,bold
-.PD
-.PD 0
-.TP
-.B -colorChannel1 foreground,background,bold
-.PD
-.PD 0
-.TP
-.B -colorChannel foreground,background,bold
-.PD
-.PD 0
-.TP
-.B -colorKibitz foreground,background,bold
-.PD
-.PD 0
-.TP
-.B -colorTell foreground,background,bold
-.PD
-.PD 0
-.TP
-.B -colorChallege foreground,background,bold
-.PD
-.PD 0
-.TP
-.B -colorRequest foreground,background,bold
-.PD
-.PD 0
-.TP
-.B -colorSeek foreground,background,bold
-.PD
-.PD 0
-.TP
-.B -colorNormal foreground,background,bold
-.PD
-These options set the colors used when colorizing ICS messages.
-All ICS messages are grouped into one of these categories:
-shout, sshout, channel 1, other channel, kibitz, tell, challenge, 
-request (including abort, adjourn, draw, pause, and takeback), or
-normal (all other messages).  
-
-Each foreground or background argument can be one of the following:
-black, red, green, yellow, blue, magenta, cyan, white, or default.
-Here ``default'' means the default foreground or background color of
-your xterm.  Bold can be 1 or 0.  If background is omitted, ``default''
-is assumed; if bold is omitted, 0 is assumed.
-
-Here is an example of how to set the colors in your `.Xdefaults' file.
-The colors shown here are the default values; you will get
-them if you turn `-colorize' on without specifying your own colors.
-
-.nf
-    xboard*colorizeMessages: true	
-    xboard*colorShout: green
-    xboard*colorSShout: green, black, 1
-    xboard*colorChannel1: cyan
-    xboard*colorChannel: cyan, black, 1
-    xboard*colorKibitz: magenta, black, 1
-    xboard*colorTell: yellow, black, 1
-    xboard*colorChallenge: red, black, 1
-    xboard*colorRequest: red
-    xboard*colorSeek: blue
-    xboard*colorNormal: default
-.fi
-.TP
-.B -soundProgram progname
-If this option is set to a sound-playing program that is installed and
-working on your system, XBoard can play sound files when certain
-events occur, listed below.  The default program name is "play".  If
-any of the sound options is set to "$", the event rings the terminal
-bell by sending a ^G character to standard output, instead of playing
-a sound file.  If an option is set to the empty string "", no sound is
-played for that event.
-.TP
-.B -soundShout filename
-.PD 0
-.TP
-.B -soundSShout filename
-.PD
-.PD 0
-.TP
-.B -soundChannel filename
-.PD
-.PD 0
-.TP
-.B -soundKibitz filename
-.PD
-.PD 0
-.TP
-.B -soundTell filename
-.PD
-.PD 0
-.TP
-.B -soundChallenge filename
-.PD
-.PD 0
-.TP
-.B -soundRequest filename
-.PD
-.PD 0
-.TP
-.B -soundSeek filename
-.PD
-These sounds are triggered in the same way as the colorization events
-described above.  They all default to "", no sound.  They are played
-only if the colorizeMessages is on.
-.TP
-.B -soundMove filename
-This sound is used by the Move Sound menu option.  Default: "$".
-.TP
-.B -soundIcsAlarm filename
-This sound is used by the ICS Alarm menu option.  Default: "$".
-.TP
-.B -soundIcsWin filename
-This sound is played when you win an ICS game.  Default: "" (no sound).
-.TP
-.B -soundIcsLoss filename
-This sound is played when you lose an ICS game.  Default: "" (no sound).
-.TP
-.B -soundIcsDraw filename
-This sound is played when you draw an ICS game.  Default: "" (no sound).
-.TP
-.B -soundIcsUnfinished filename
-This sound is played when an ICS game that you are participating in is
-aborted, adjourned, or otherwise ends inconclusively.  Default: "" (no
-sound).
-
-Here is an example of how to set the sounds in your .Xdefaults file:
-
-.nf
-    xboard*soundShout: shout.wav
-    xboard*soundSShout: sshout.wav
-    xboard*soundChannel1: channel1.wav
-    xboard*soundChannel: channel.wav
-    xboard*soundKibitz: kibitz.wav
-    xboard*soundTell: tell.wav
-    xboard*soundChallenge: challenge.wav
-    xboard*soundRequest: request.wav
-    xboard*soundSeek: seek.wav
-    xboard*soundMove: move.wav
-    xboard*soundIcsWin: win.wav
-    xboard*soundIcsLoss: lose.wav
-    xboard*soundIcsDraw: draw.wav
-    xboard*soundIcsUnfinished: unfinished.wav
-    xboard*soundIcsAlarm: alarm.wav
-.fi
-.PP
-.SS Load and Save Options
-.TP
-.B -lgf or -loadGameFile file
-.PD 0
-.TP
-.B -lgi or -loadGameIndex index
-.PD
-If the `loadGameFile' option is set, XBoard loads the specified
-game file at startup. The file name `-' specifies the standard
-input. If there is more than one game in the file, XBoard
-pops up a menu of the available games, with entries based on their PGN 
-(Portable Game Notation) tags.
-If the `loadGameIndex' option is set to `N', the menu is suppressed
-and the N th game found in the file is loaded immediately.
-The menu is also suppressed if `matchMode' is enabled or if the game file
-is a pipe; in these cases the first game in the file is loaded immediately.
-Use the `pxboard' shell script provided with XBoard if you
-want to pipe in files containing multiple games and still see the menu.
-.TP
-.B -td or -timeDelay seconds
-Time delay between moves during `Load Game'. Fractional seconds
-are allowed; try `-td 0.4'. A time delay value of -1 tells
-XBoard not to step through game files automatically. Default: 1
-second.
-.TP
-.B -sgf or -saveGameFile file
-If this option is set, XBoard appends a record of every game
-played to the specified file. The file name `-' specifies the
-standard output.
-.TP
-.B -autosave/-xautosave or -autoSaveGames true/false
-Sets the Auto Save menu option.  See \fIOptions Menu\fR.  Default: false.
-Ignored if `saveGameFile' is set.
-.TP
-.B -lpf or -loadPositionFile file
-.PD 0
-.TP
-.B -lpi or -loadPositionIndex index
-.PD
-If the `loadPositionFile' option is set, XBoard loads the
-specified position file at startup. The file name `-' specifies the
-standard input. If the `loadPositionIndex' option is set to N,
-the Nth position found in the file is loaded; otherwise the
-first position is loaded.
-.TP
-.B -spf or -savePositionFile file
-If this option is set, XBoard appends the final position reached
-in every game played to the specified file. The file name `-'
-specifies the standard output.
-.TP
-.B -oldsave/-xoldsave or -oldSaveStyle true/false
-Sets the Old Save Style menu option.  See \fIOptions Menu\fR.  Default: false.
-.PP
-.SS User Interface Options
-.TP
-.B -display
-.PD 0
-.TP
-.B -geometry
-.PD
-.PD 0
-.TP
-.B -iconic
-.PD
-These and most other standard Xt options are accepted.
-.TP
-.B -movesound/-xmovesound or -ringBellAfterMoves true/false
-Sets the Move Sound menu option.  See \fIOptions Menu\fR.  Default: false.
-For compatibility with old XBoard versions, -bell/-xbell are also 
-accepted as abbreviations for this option.
-.TP
-.B -exit/-xexit or -popupExitMessage true/false
-Sets the Popup Exit Message menu option.  See \fIOptions Menu\fR. Default: true.
-.TP
-.B -popup/-xpopup or -popupMoveErrors true/false
-Sets the Popup Move Errors menu option.  See \fIOptions Menu\fR. Default: false.
-.TP
-.B -queen/-xqueen or -alwaysPromoteToQueen true/false
-Sets the Always Queen menu option.  See \fIOptions Menu\fR.  Default: false.
-.TP
-.B -legal/-xlegal or -testLegality true/false
-Sets the Test Legality menu option.  See \fIOptions Menu\fR.  Default: true.
-.TP
-.B -size or -boardSize (sizeName | n1,n2,n3,n4,n5,n6,n7)
-Determines how large the board will be, by selecting the pixel size
-of the pieces and setting a few related parameters.
-The sizeName can be one of: Titanic, giving 129x129 pixel pieces,
-Colossal 116x116, Giant 108x108, Huge 95x95, Big 87x87, Large 80x80, Bulky 72x72,
-Medium 64x64, Moderate 58x58, Average 54x54, Middling 49x49, Mediocre
-45x45, Small 40x40, Slim 37x37, Petite 33x33, Dinky 29x29, Teeny 25x25,
-or Tiny 21x21.
-Pieces of all these sizes are built into XBoard.
-Other sizes can
-be used if you have them; see the pixmapDirectory and bitmapDirectory
-options.
-The default depends on the size of your screen; it is approximately the
-largest size that will fit without clipping.
-
-You can select other sizes or vary other layout parameters by providing
-a list of comma-separated values (with no spaces) as the argument.
-You do not need to provide all the values; for any you omit from the
-end of the list, defaults are taken from the nearest built-in size.
-The value `n1' gives the piece size, `n2' the width of the
-black border
-between squares, `n3' the desired size for the 
-clockFont, `n4' the desired size for the coordFont,
-`n5' the desired size for the default font,
-`n6' the smallLayout flag (0 or 1), 
-and `n7' the tinyLayout flag (0 or 1).  
-All dimensions are in pixels.
-If the border between squares is eliminated (0 width), the various
-highlight options will not work, as there is nowhere to draw the highlight.
-If smallLayout is 1 and `titleInWindow' is true, 
-the window layout is rearranged to make more room for the title.
-If tinyLayout is 1, the labels on the menu bar are abbreviated
-to one character each and the buttons in the button bar are made narrower.
-.TP
-.B -coords/-xcoords or -showCoords true/false
-Sets the Show Coords menu option.  See \fIOptions Menu\fR.  Default: false.
-The `coordFont' option specifies what font to use.
-.TP
-.B -autoraise/-xautoraise or -autoRaiseBoard true/false
-Sets the Auto Raise Board menu option.  See \fIOptions Menu\fR.  Default: true.
-.TP
-.B -autoflip/-xautoflip or -autoFlipView true/false
-Sets the Auto Flip View menu option.  See \fIOptions Menu\fR.  Default: true.
-.TP
-.B -flip/-xflip or -flipView true/false
-If Auto Flip View is not set, or if you are observing but not participating
-in a game, then the positioning of the board at the start of each game
-depends on the flipView option.  If flipView is false (the default),
-the board is positioned so that the white pawns move from the bottom to the
-top; if true, the black pawns move from the bottom to the top.
-In any case, the Flip menu option (see \fIOptions Menu\fR)
-can be used to flip the board after
-the game starts.
-.TP
-.B -title/-xtitle or -titleInWindow true/false
-If this option is true, XBoard displays player names (for ICS
-games) and game file names (for `Load Game') inside its main
-window. If the option is false (the default), this information is
-displayed only in the window banner. You probably won't want to
-set this option unless the information is not showing up in the
-banner, as happens with a few X window managers.
-.TP
-.B -buttons/-xbuttons or -showButtonBar True/False
-If this option is False, xboard omits the [<<] [<] [P] [>] [>>] button
-bar from the window, allowing the message line to be wider.  You can
-still get the functions of these buttons using the menus or their keyboard
-shortcuts.  Default: true.
-.TP
-.B -mono/-xmono or -monoMode true/false
-Determines whether XBoard displays its pieces and squares with
-two colors (true) or four (false). You shouldn't have to
-specify `monoMode'; XBoard will determine if it is necessary.
-.TP
-.B -flashCount count
-.PD 0
-.TP
-.B -flashRate rate
-.PD
-.PD 0
-.TP
-.B -flash/-xflash
-.PD
-These options enable flashing of pieces when they
-land on their destination square.
-`flashCount'
-tells XBoard how many times to flash a piece after it
-lands on its destination square.
-`flashRate'
-controls the rate of flashing (flashes/sec).
-Abbreviations:
-`flash'
-sets flashCount to 3.
-`xflash'
-sets flashCount to 0.
-Defaults:  flashCount=0 (no flashing), flashRate=5.
-.TP
-.B -highlight/-xhighlight or -highlightLastMove true/false
-Sets the Highlight Last Move menu option. See \fIOptions Menu\fR. Default: false.
-.TP
-.B -blind/-xblind or -blindfold true/false
-Sets the Blindfold menu option.  See \fIOptions Menu\fR.  Default: false.
-.TP
-.B -clockFont font
-The font used for the clocks. If the option value is a pattern
-that does not specify the font size, XBoard tries to choose an
-appropriate font for the board size being used.
-Default: -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
-.TP
-.B -coordFont font
-The font used for rank and file coordinate labels if `showCoords'
-is true. If the option value is a pattern that does not specify
-the font size, XBoard tries to choose an appropriate font for
-the board size being used.
-Default: -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
-.TP
-.B -font font
-The font used for popup dialogs, menus, comments, etc.
-If the option value is a pattern that does not specify
-the font size, XBoard tries to choose an appropriate font for
-the board size being used.
-Default: -*-helvetica-medium-r-normal--*-*-*-*-*-*-*-*.
-.TP
-.B -fontSizeTolerance tol
-In the font selection algorithm, a nonscalable font will be preferred
-over a scalable font if the nonscalable font's size differs
-by `tol' pixels
-or less from the desired size.  A value of -1 will force
-a scalable font to always be used if available; a value of 0 will
-use a nonscalable font only if it is exactly the right size; 
-a large value (say 1000) will force a nonscalable font to always be
-used if available.  Default: 4.
-.TP
-.B -bm or -bitmapDirectory dir
-.PD 0
-.TP
-.B -pixmap or -pixmapDirectory dir
-.PD
-These options control what piece images xboard uses.  The XBoard
-distribution includes one set of pixmap pieces in xpm format, in the
-directory `pixmaps', and one set of bitmap pieces in xbm format,
-in the directory `bitmaps'.  Pixmap
-pieces give a better appearance on the screen: the white pieces have
-dark borders, and the black pieces have opaque internal details.  With
-bitmaps, neither piece color has a border, and the internal details
-are transparent; you see the square color or other background color
-through them.
-
-If XBoard is configured and compiled on a system that includes libXpm,
-the X pixmap library, the xpm pixmap pieces are compiled in as the
-default.  A different xpm piece set can be selected at runtime with
-the `pixmapDirectory' option, or a bitmap piece set can be selected
-with the `bitmapDirectory' option.
-
-If XBoard is configured and compiled on a system that does not include
-libXpm (or the `--disable-xpm' option is given to the configure
-program), the bitmap pieces are compiled in as the default.  It is not
-possible to use xpm pieces in this case, but pixmap pieces in another
-format called "xim" can be used by giving the `pixmapDirectory' option.
-Or again, a different bitmap piece set can be selected with the
-`bitmapDirectory' option.
-
-Files in the `bitmapDirectory' must be named as follows:
-The first character of a piece bitmap name gives the piece it 
-represents (`p', `n', `b', `r', `q', or `k'),
-the next characters give the size in pixels, the
-following character indicates whether the piece is
-solid or outline (`s' or `o'),
-and the extension is `.bm'.
-For example, a solid 80x80 knight would be named `n80s.bm'.
-The outline bitmaps are used only in monochrome mode.
-If bitmap pieces are compiled in and the bitmapDirectory is missing
-some files, the compiled in pieces are used instead.
-
-If the bitmapDirectory option is given,
-it is also possible to replace xboard's icons and menu checkmark,
-by supplying files named `icon_white.bm', `icon_black.bm', and
-`checkmark.bm'.
-
-For more information about pixmap pieces and how to get additional
-sets, see \fIzic2xpm\fR below.
-.TP
-.B -whitePieceColor color
-.PD 0
-.TP
-.B -blackPieceColor color
-.PD
-.PD 0
-.TP
-.B -lightSquareColor color
-.PD
-.PD 0
-.TP
-.B -darkSquareColor color
-.PD
-.PD 0
-.TP
-.B -highlightSquareColor color
-.PD
-Colors to use for the pieces, squares, and square highlights.
-Defaults:
-
-.nf
-    -whitePieceColor       #FFFFCC
-    -blackPieceColor       #202020
-    -lightSquareColor      #C8C365
-    -darkSquareColor       #77A26D
-    -highlightSquareColor  #FFFF00
-    -premoveHighlightColor #FF0000
-.fi
-
-On a grayscale monitor you might prefer:
-
-.nf
-    -whitePieceColor       gray100
-    -blackPieceColor       gray0
-    -lightSquareColor      gray80
-    -darkSquareColor       gray60
-    -highlightSquareColor  gray100
-    -premoveHighlightColor gray70
-.fi
-.TP
-.B -drag/-xdrag or -animateDragging true/false
-Sets the Animate Dragging menu option. See \fIOptions Menu\fR.  Default: true.
-.TP
-.B -animate/-xanimate or -animateMoving true/false
-Sets the Animate Moving menu option. See \fIOptions Menu\fR.  Default: true.
-.TP
-.B -animateSpeed n
-Number of milliseconds delay between each animation frame when Animate
-Moves is on.
-.PP
-.SS Other Options
-.TP
-.B -ncp/-xncp or -noChessProgram true/false
-If this option is true, XBoard acts as a passive chessboard; it
-does not start a chess engine at all. Turning on this option
-also turns off clockMode. Default: false.
-.TP
-.B -mode or -initialMode modename
-If this option is given, XBoard selects the given modename
-from the Mode menu after starting and (if applicable) processing the
-loadGameFile or loadPositionFile option. Default: "" (no selection). 
-Other supported values are 
-MachineWhite, MachineBlack, TwoMachines, Analysis, 
-AnalyzeFile, EditGame, EditPosition, and Training.
-.TP
-.B -variant varname
-Activates preliminary, partial support for playing chess variants
-against a local engine or editing variant games.  This flag is not
-needed in ICS mode.  Recognized variant names are:
-
-.nf
-    normal        Normal chess
-    wildcastle    Shuffle chess, king can castle from d file
-    nocastle      Shuffle chess, no castling allowed
-    fischerandom  Fischer Random shuffle chess
-    bughouse      Bughouse, ICC/FICS rules
-    crazyhouse    Crazyhouse, ICC/FICS rules
-    losers        Lose all pieces or get mated (ICC wild 17)
-    suicide       Lose all pieces including king (FICS)
-    giveaway      Try to have no legal moves (ICC wild 26)
-    twokings      Weird ICC wild 9
-    kriegspiel    Opponent's pieces are invisible
-    atomic        Capturing piece explodes (ICC wild 27)
-    3check        Win by giving check 3 times (ICC wild 25)
-    shatranj      An ancient precursor of chess (ICC wild 28)
-    unknown       Catchall for other unknown variants
-.fi
-
-In the shuffle variants, xboard does not shuffle the pieces, but
-you can do it by hand using Edit Position.  Some variants are
-supported only in ICS mode, including fischerandom, bughouse, and
-kriegspiel.  The winning/drawing conditions in crazyhouse (offboard
-interposition on mate), losers, suicide, giveaway, atomic, and 3check
-are not fully understood.  In crazyhouse, xboard does not yet keep
-track of offboard pieces.  Shatranj is unsupported, but it may be
-usable if you turn off Test Legality.
-.TP
-.B -debug/-xdebug or -debugMode true/false
-Turns on debugging printout.
-.TP
-.B -rsh or -remoteShell shell-name
-Name of the command used to run programs remotely. The default
-is `rsh' or `remsh', determined when XBoard is
-configured and compiled.
-.TP
-.B -ruser or -remoteUser user-name
-User name on the remote system when running programs with the
-`remoteShell'. The default is your local user name.
-.PP
-.SH CHESS SERVERS
-An "Internet Chess Server", or "ICS", is a place on the
-Internet where people can get together to play chess, watch other
-people's games, or just chat.  You can use either `telnet' or a
-client program like XBoard to connect to the server.  There are
-thousands of registered users on the different ICS hosts, and it is
-not unusual to meet 200 on both chessclub.com and freechess.org.
-
-Most people can just type `xboard -ics' to start XBoard as an ICS
-client.  Invoking XBoard in this way connects you to the Internet
-Chess Club (ICC), a commercial ICS.  You can log in there as a guest
-even if you do not have a paid account.  To connect to the largest
-Free ICS (FICS), use the command `xboard -ics -icshost freechess.org'
-instead, or substitute a different host name to connect to your
-favorite ICS.
-For a full description of command-line options that control 
-the connection to ICS and change the default values of ICS options, see
-\fIICS options\fR.  
-
-While you are running XBoard as an ICS client,
-you use the terminal window that you started XBoard from
-as a place to type in commands and read information that is
-not available on the chessboard.
-
-The first time you need to use the terminal is to enter your login name
-and password, if you are a registered player. (You don't need to do
-this manually; the `icsLogon' option can do it for you.
-See \fIICS options\fR.)  If you are not registered, 
-enter `g' as your name, and the server will pick a
-unique guest name for you.
-
-Some useful ICS commands
-include
-.TP
-.B help <topic>
-to get help on the given <topic>. To get a list of possible topics type
-"help" without topic.  Try the help command before you ask other
-people on the server for help.
-
-For example `help register' tells you how to become a registered
-ICS player.
-.TP
-.B who <flags>
-to see a list of people who are logged on.  Administrators
-(people you should talk to if you have a problem) are marked
-with the character `*', an asterisk. The <flags> allow you to
-display only selected players: For example, `who of' shows a
-list of players who are interested in playing but do not have
-an opponent.
-.TP
-.B games
-to see what games are being played
-.TP
-.B match <player> [<mins>] [<inc>]
-to challenge another player to a game. Both opponents get <mins> minutes
-for the game, and <inc> seconds will be added after each move.
-If another player challenges you, the server asks if you want to
-accept the challenge; use the `accept' or `decline' commands
-to answer.
-.TP
-.B accept
-.PD 0
-.TP
-.B decline
-.PD
-to accept or decline another player's offer. 
-The offer may be to start a new game, or to agree to a 
-`draw', `adjourn' or `abort' the current game. See \fIAction Menu\fR.
-
-If you have more than one pending offer (for example, if more than one player
-is challenging you, or if your opponent offers both a draw and to adjourn the
-game), you have to supply additional information, by typing something
-like `accept <player>', `accept draw', or `draw'.
-.TP
-.B draw
-.PD 0
-.TP
-.B adjourn
-.PD
-.PD 0
-.TP
-.B abort
-.PD
-asks your opponent to terminate a game by mutual agreement. Adjourned
-games can be continued later. 
-Your opponent can either `decline' your offer or accept it (by typing the
-same command or typing `accept').  In some cases these commands work
-immediately, without asking your opponent to agree.  For example, you can
-abort the game unilaterally if your opponent is out of time, and you can claim
-a draw by repetition or the 50-move rule if available simply by typing 
-`draw'.
-.TP
-.B finger <player>
-to get information about the given <player>. (Default: yourself.)
-.TP
-.B vars
-to get a list of personal settings
-.TP
-.B set <var> <value>
-to modify these settings
-.TP
-.B observe <player>
-to observe an ongoing game of the given <player>.
-.TP
-.B examine
-.PD 0
-.TP
-.B oldmoves
-.PD
-to review a recently completed game
-.PP
-Some special XBoard features are activated when you are
-in examine mode on ICS.  See the descriptions of the menu commands
-`Forward', `Backward', `Pause', `ICS Client', 
-and `Stop Examining' on the \fIStep Menu\fR, \fIMode Menu\fR, and
-\fIOptions Menu\fR.
-
-.SH FIREWALLS
-By default, XBoard communicates with an Internet Chess Server
-by opening a TCP socket directly from the machine it is running on
-to the ICS. If there is a firewall between your machine and the ICS,
-this won't work. Here are some recipes for getting around common
-kinds of firewalls using special options to XBoard.
-Important: See the paragraph in the below about extra echoes, in
-\fILimitations\fR.
-
-Suppose that you can't telnet directly to ICS, but you can telnet
-to a firewall host, log in, and then telnet from there to ICS.
-Let's say the firewall is called `firewall.example.com'. Set
-command-line options as follows:
-
-.nf
-    xboard -ics -icshost firewall.example.com -icsport 23
-.fi
-
-Or in your `.Xdefaults' file:
-
-.nf
-    XBoard*internetChessServerHost: firewall.example.com
-    XBoard*internetChessServerPort: 23
-.fi
-
-Then when you run XBoard in ICS mode, you will be prompted
-to log in to the firewall host. This works because port 23 is the
-standard telnet login service. Do so, then telnet to ICS, using a
-command like `telnet chessclub.com 5000', or whatever command
-the firewall provides for telnetting to port 5000.
-
-If your firewall lets you telnet (or rlogin) to remote hosts but
-doesn't let you telnet to port 5000, you may be able to connect to the
-chess server on port 23 instead, which is the port the telnet program
-uses by default.  Some chess servers support this (including
-chessclub.com and freechess.org), while some do not.
-
-If your chess server does not allow connections on port 23 and your
-firewall does not allow you to connect to other ports, you may be able
-to connect by hopping through another host outside the firewall that
-you have an account on.  For instance, suppose you have a shell
-account at `foo.edu'. Follow the recipe above, but instead of
-typing `telnet chessclub.com 5000' to the firewall, type
-`telnet foo.edu' (or `rlogin foo.edu'), log in there, and
-then type `telnet chessclub.com 5000'.
-
-Suppose that you can't telnet directly to ICS, but you can use rsh
-to run programs on a firewall host, and that host can telnet to ICS.
-Let's say the firewall is called `rsh.example.com'. Set
-command-line options as follows:
-
-.nf
-    xboard -ics -gateway rsh.example.com -icshost chessclub.com
-.fi
-
-Or in your `.Xdefaults' file:
-
-.nf
-    XBoard*gateway: rsh.example.com
-    XBoard*internetChessServerHost: chessclub.com
-.fi
-
-Then when you run XBoard in ICS mode, it will connect to
-the ICS by using `rsh' to run the command
-`telnet chessclub.com 5000' on host `rsh.example.com'.
-
-Suppose that you can telnet anywhere you want, but you have to
-run a special program called `ptelnet' to do so.
-
-First, we'll consider the easy case, in which
-`ptelnet chessclub.com 5000' gets you to the chess server.
-In this case set command line options as follows:
-
-.nf
-    xboard -ics -telnet -telnetProgram ptelnet
-.fi
-
-Or in your `.Xdefaults' file:
-
-.nf
-    XBoard*useTelnet: true
-    XBoard*telnetProgram: ptelnet
-.fi
-
-Then when you run XBoard in ICS mode, it will issue the
-command `ptelnet chessclub.com 5000' to connect to the ICS.
-
-Next, suppose that `ptelnet chessclub.com 5000' doesn't work;
-that is, your `ptelnet' program doesn't let you connect to
-alternative ports. As noted above, your chess server may allow you to
-connect on port 23 instead.  In that case, just add the option
-`-icsport ""' to the above command, or add
-`XBoard*internetChessServerPort:' to your `.Xdefaults' file.
-But if your chess server doesn't let you connect on port 23, you will have
-to find some other host outside the firewall and hop through it. For
-instance, suppose you have a shell account at `foo.edu'. Set
-command line options as follows:
-
-.nf
-    xboard -ics -telnet -telnetProgram ptelnet -icshost foo.edu -icsport ""
-.fi
-
-Or in your `.Xdefaults' file:
-
-.nf
-    XBoard*useTelnet: true
-    XBoard*telnetProgram: ptelnet
-    XBoard*internetChessServerHost: foo.edu
-    XBoard*internetChessServerPort:
-.fi
-
-Then when you run XBoard in ICS mode, it will issue the
-command `ptelnet foo.edu' to connect to your account at
-`foo.edu'. Log in there, then type `telnet chessclub.com 5000'.
-
-ICC timestamp and FICS timeseal do not work through some
-firewalls.  You can use them only if your firewall gives a clean TCP
-connection with a full 8-bit wide path.  If your firewall allows you
-to get out only by running a special telnet program, you can't use
-timestamp or timeseal across it.  But if you have access to a
-computer just outside your firewall, and you have much lower netlag
-when talking to that computer than to the ICS, it might be worthwhile
-running timestamp there.  Follow the instructions above for hopping
-through a host outside the firewall (foo.edu in the example),
-but run timestamp or timeseal on that host instead of telnet.
-
-Suppose that you have a SOCKS firewall that will give you a clean
-8-bit wide TCP connection to the chess server, but only after you
-authenticate yourself via the SOCKS protocol.  In that case, you could
-make a socksified version of XBoard and run that.  If you are using
-timestamp or timeseal, you will to socksify it, not XBoard; this may
-be difficult seeing that ICC and FICS do not provide source code for
-these programs.  Socksification is beyond the scope of this document,
-but see the SOCKS Web site at http://www.socks.permeo.com/.
-If you are missing SOCKS, try http://www.funbureau.com/.
-
-.SH ENVIRONMENT VARIABLES
-Game and position files are found in a directory named by the
-`CHESSDIR' environment variable. If this variable is not set, the
-current working directory is used. If `CHESSDIR' is set,
-XBoard actually changes its working directory to
-`$CHESSDIR', so any files written by the chess engine
-will be placed there too.
-
-.SH LIMITATIONS AND KNOWN BUGS
-There is no way for two people running copies of XBoard to play
-each other without going through an Internet Chess Server.
-
-Under some circumstances, your ICS password may be echoed when you log on.
-
-If you are connecting to the ICS by running telnet on an Internet
-provider or firewall host, you may find that each line you type is
-echoed back an extra time after you hit <Enter>. If your Internet
-provider is a Unix system, you can probably turn its echo off by
-typing `stty -echo' after you log in, and/or typing
-<^E><Enter> (Ctrl+E followed by the Enter key) to the telnet
-program after you have logged into ICS.  It is a good idea to do this
-if you can, because the extra echo can occasionally confuse XBoard's
-parsing routines.
-
-The game parser recognizes only algebraic notation.
-
-The internal move legality tester does not look at the game history,
-so in some cases it misses illegal castling or en passant captures.
-It permits castling with the king on the d file because this is possible in
-some "wild 1" games on ICS.  It does not check
-piece drops in bughouse and crazyhouse to see if you actually
-hold the piece you are trying to drop.
-However, if you attempt an illegal move when using
-a chess engine or chess server, XBoard will accept the error message
-that comes back, undo the move, and let you try another.
-
-Fischer Random castling is not understood.  You can probably play
-Fischer Random successfully on ICS by typing castling moves into the ICS
-Interaction window, but they will not be animated correctly, and saved
-games will not be loaded correctly if castling occurs.
-
-FEN positions saved by XBoard
-never include correct information about whether castling is legal or
-how many half-moves have been made since the last irreversible move,
-and sometimes may not correctly indicate when en passant capture is available.
-
-The mate detector does not understand that non-contact mate is not
-really mate in bughouse and crazyhouse.  The only problem this causes
-while playing is minor: a `#' (mate indicator) character will show
-up after a non-contact mating move in the move list; XBoard will
-not assume the game is over at that point.  However, if you are editing
-a game, Edit Game mode will be terminated by a non-contact mate.
-
-The menus may not work if your keyboard is in Caps Lock or Num Lock mode.
-This seems to be a problem with the Athena menu widget,
-not an XBoard bug.
-
-Also see the ToDo file included with the distribution for many other
-possible bugs, limitations, and ideas for improvement that have been
-suggested.
-.SH REPORTING PROBLEMS
-Report bugs and problems with XBoard to `<bug-xboard at gnu.org>'.
-
-Please use the `script' program to start a typescript, run 
-XBoard with the `-debug' option, and include the typescript
-output in your message.
-Also tell us what kind of machine and what operating system version
-you are using.  The command `uname -a' will often tell you this.
-Here is a sample of approximately what you should type:
-
-.nf
-    script
-    uname -a
-    ./configure
-    make
-    ./xboard -debug
-    exit
-    mail bug-xboard at gnu.org
-    Subject: Your short description of the problem
-    Your detailed description of the problem
-    ~r typescript
-    .
-.fi
-
-If you improve XBoard, please send a message about your changes,
-and we will get in touch with you about merging them in
-to the main line of development.
-Also see our Web site at http://savannah.gnu.org/projects/xboard/.
-
-.SH AUTHORS AND CONTRIBUTORS
-Tim Mann has been responsible for XBoard versions 1.3 and beyond, and
-for WinBoard, a port of XBoard to Microsoft Win32 (Windows NT and
-Windows 95).
-
-Mark Williams contributed the initial (WinBoard-only) implementation
-of many new features added to both XBoard and WinBoard in version
-4.1.0, including copy/paste, premove, icsAlarm, autoFlipView, training
-mode, auto raise, and blindfold.  Ben Nye contributed X copy/paste
-code for XBoard.
-
-Hugh Fisher added animated piece movement to XBoard, and Henrik Gram
-(henrikg at funcom.com) added it to WinBoard.  Frank McIngvale added
-click/click moving, the Analysis modes, piece flashing, ZIICS import,
-and ICS text colorization to XBoard.  Jochen Wiedmann ported XBoard to
-the Amiga, creating AmyBoard, and converted the documentation to
-texinfo.  Elmar Bartel contributed the new piece bitmaps introduced in
-version 3.2.  John Chanak contributed the initial implementation of
-ICS mode.  The color scheme and the old 80x80 piece bitmaps were taken
-from Wayne Christopher's `XChess' program.
-
-Chris Sears and Dan Sears wrote the original XBoard.  They were
-responsible for versions 1.0 through 1.2.
-
-Evan Welsh wrote `CMail'.  Patrick Surry helped in designing,
-testing, and documenting CMail.
-
-.SH CMAIL
-The `cmail' program can help you play chess by email with opponents of
-your choice using XBoard as an interface.
-
-You will usually run `cmail' without giving any options.
-
-.SS CMail options
-.TP
-.B -h
-Displays `cmail' usage information.
-.TP
-.B -c
-Shows the conditions of the GNU General Public License.
-See \fICopying\fR.
-.TP
-.B -w
-Shows the warranty notice of the GNU General Public License.
-See \fICopying\fR.
-.TP
-.B -v
-.PD 0
-.TP
-.B -xv
-.PD
-Provides or inhibits verbose output from `cmail' and XBoard,
-useful for debugging. The
-`-xv'
-form also inhibits the cmail introduction message.
-.TP
-.B -mail
-.PD 0
-.TP
-.B -xmail
-.PD
-Invokes or inhibits the sending of a mail message containing the move.
-.TP
-.B -xboard
-.PD 0
-.TP
-.B -xxboard
-.PD
-Invokes or inhibits the running of XBoard on the game file.
-.TP
-.B -reuse
-.PD 0
-.TP
-.B -xreuse
-.PD
-Invokes or inhibits the reuse of an existing XBoard to display the
-current game.
-.TP
-.B -remail
-Resends the last mail message for that game. This inhibits running
-XBoard.
-.TP
-.B -game <name>
-The name of the game to be processed.
-.TP
-.B -wgames <number>
-.PD 0
-.TP
-.B -bgames <number>
-.PD
-.PD 0
-.TP
-.B -games <number>
-.PD
-Number of games to start as White, as Black or in total. Default is 1 as
-white and none as black. If only one color is specified then none of the
-other color is assumed. If no color is specified then equal numbers of
-White and Black games are started, with the extra game being as White if an
-odd number of total games is specified.
-.TP
-.B -me <short name>
-.PD 0
-.TP
-.B -opp <short name>
-.PD
-A one-word alias for yourself or your opponent.
-.TP
-.B -wname <full name>
-.PD 0
-.TP
-.B -bname <full name>
-.PD
-.PD 0
-.TP
-.B -name <full name>
-.PD
-.PD 0
-.TP
-.B -oppname <full name>
-.PD
-The full name of White, Black, yourself or your opponent.
-.TP
-.B -wna <net address>
-.PD 0
-.TP
-.B -bna <net address>
-.PD
-.PD 0
-.TP
-.B -na <net address>
-.PD
-.PD 0
-.TP
-.B -oppna <net address>
-.PD
-The email address of White, Black, yourself or your opponent.
-.TP
-.B -dir <directory>
-The directory in which `cmail' keeps its files. This defaults to the
-environment variable `$CMAIL_DIR' or failing that, `$CHESSDIR',
-`$HOME/Chess' or `~/Chess'. It will be created if it does not exist.
-.TP
-.B -arcdir <directory>
-The directory in which `cmail' archives completed games. Defaults to
-the environment variable `$CMAIL_ARCDIR' or, in its absence, the same
-directory as cmail keeps its working files (above).
-.TP
-.B -mailprog <mail program>
-The program used by cmail to send email messages. This defaults to the
-environment variable `$CMAIL_MAILPROG' or failing that
-`/usr/ucb/Mail', `/usr/ucb/mail' or `Mail'. You will need
-to set this variable if none of the above paths fit your system.
-.TP
-.B -gamesFile <file>
-A file containing a list of games with email addresses. This defaults to
-the environment variable `$CMAIL_GAMES' or failing that
-`.cmailgames'.
-.TP
-.B -aliasesFile <file>
-A file containing one or more aliases for a set of email addresses. This
-defaults to the environment variable `$CMAIL_ALIASES' or failing
-that `.cmailaliases'.
-.TP
-.B -logFile <file>
-A file in which to dump verbose debugging messages that are invoked with
-the `-v'
-option.
-.TP
-.B -event <event>
-The PGN Event tag (default `Email correspondence game').
-.TP
-.B -site <site>
-The PGN Site tag (default `NET').
-.TP
-.B -round <round>
-The PGN Round tag (default `-', not applicable).
-.TP
-.B -mode <mode>
-The PGN Mode tag (default `EM', Electronic Mail).
-.TP
-.B Other options
-Any option flags not listed above are passed through to XBoard.
-Invoking XBoard through CMail changes the default values of two XBoard
-options: The default value for `-noChessProgram' is changed to
-true; that is, by default no chess engine is started.  The default
-value for `-timeDelay' is changed to 0; that is, by default
-XBoard immediately goes to the end of the game as played so far,
-rather than stepping through the moves one by one.  You can still set
-these options to whatever values you prefer by supplying them on
-CMail's command line.  See \fIOptions\fR.
-.PP
-.SS Starting a CMail Game
-Type `cmail' from a shell to start a game as white. After an opening
-message, you will be prompted for a game name, which is optional -- if you
-simply press <Enter>, the game name will take the form
-`you-VS-opponent'. You will next be prompted for the short name
-of your opponent. If you haven't played this person before, you will also
-be prompted for his/her email address. `cmail' will then invoke
-XBoard in the background. Make your first move and select
-`Mail Move' from the `File' menu. See \fIFile Menu\fR. If all is well,
-`cmail' will mail a copy of the move to your opponent. If you select
-`Exit' without having selected `Mail Move' then no move will be
-made.
-
-.SS Answering a Move
-When you receive a message from an opponent containing a move in one of
-your games, simply pipe the message through `cmail'. In some mailers
-this is as simple as typing `| cmail' when viewing the message, while in
-others you may have to save the message to a file and do `cmail < file'
-at the command line. In either case `cmail' will display the game using
-XBoard. If you didn't exit XBoard when you made your first move
-then `cmail' will do its best to use the existing XBoard instead
-of starting a new one. As before, simply make a move and select
-`Mail Move' from the `File' menu. See \fIFile Menu\fR. `cmail'
-will try to use the
-XBoard that was most recently used to display the current game. This
-means that many games can be in progress simultaneously, each with its own
-active XBoard.
-
-If you want to look at the history or explore a variation, go ahead, but
-you must return to the current position before XBoard will allow you
-to mail a move. If you edit the game's history you must select
-`Reload Same Game' from the `File' menu to get back to the original
-position, then make the move you want and select `Mail Move'.
-As before, if you decide you aren't ready to make a move just yet you can
-either select `Exit' without sending a move or just leave
-XBoard running until you are ready.
-
-.SS Multi-Game Messages
-It is possible to have a `cmail' message carry more than one game.
-This feature was implemented to handle IECG (International Email Chess
-Group) matches, where a match consists of one game as white and one as black,
-with moves transmitted simultaneously. In case there are more general uses,
-`cmail' itself places no limit on the number of black/white games
-contained in a message; however, XBoard does.
-
-.SS Completing a Game
-Because XBoard can detect checkmate and stalemate, `cmail'
-handles game termination sensibly. As well as resignation, the
-`Action' menu allows draws to be offered and accepted for
-`cmail' games.
-
-For multi-game messages, only unfinished and just-finished games will be
-included in email messages. When all the games are finished, they are
-archived in the user's archive directory, and similarly in the opponent's
-when he or she pipes the final message through `cmail'. The archive
-file name includes the date the game was started.
-
-.SS Known CMail Problems
-It's possible that a strange conjunction of conditions may occasionally
-mean that `cmail' has trouble reactivating an existing
-XBoard. If this should happen, simply trying it again should work.
-If not, remove the file that stores the XBoard's PID
-(`game.pid') or use the `-xreuse' option to force
-`cmail' to start a new XBoard.
-
-Versions of `cmail' after 2.16 no longer understand the old file format
-that XBoard used to use and so cannot be used to correspond with
-anyone using an older version.
-
-Versions of `cmail' older than 2.11 do not handle multi-game messages,
-so multi-game correspondence is not possible with opponents using an older
-version.
-
-.SH OTHER PROGRAMS YOU CAN USE WITH XBOARD
-Here are some other programs you can use with XBoard
-
-.SS GNU Chess
-The GNU Chess engine is available from:
-
-ftp://ftp.gnu.org/gnu/gnuchess/
-
-You can use XBoard to play a game against GNU Chess, or to
-interface GNU Chess to an ICS.
-
-.SS Crafty
-Crafty is a chess engine written by Bob Hyatt.
-You can use XBoard to play a game against Crafty, hook Crafty up
-to an ICS, or use Crafty to interactively analyze games and positions
-for you.
-
-Crafty is a strong, rapidly evolving chess program. This rapid
-pace of development is good, because it means Crafty is always
-getting better.  This can sometimes cause problems with
-backwards compatibility, but usually the latest version of Crafty
-will work well with the latest version of XBoard.
-Crafty can be obtained from its author's FTP site:
-ftp://ftp.cis.uab.edu/hyatt/.
-
-To use Crafty with XBoard, give the -fcp and -fd options as follows, where
-<crafty's directory> is the directory in which you installed Crafty
-and placed its book and other support files.
-
-.SS zic2xpm
-The ``zic2xpm'' program is used to import chess sets from the ZIICS(*)
-program into XBoard. ``zic2xpm'' is part of the XBoard distribution.
-ZIICS is available from:
-
-ftp://ftp.freechess.org/pub/chess/DOS/ziics131.exe
-
-To import ZIICS pieces, do this:
-.TP
-.B 1. Unzip ziics131.exe into a directory:
-
-.nf
-    unzip -L ziics131.exe -d ~/ziics
-.fi
-.TP
-.B 2. Use zic2xpm to convert a set of pieces to XBoard format.
-
-For example, let's say you want to use the
-FRITZ4 set. These files are named ``fritz4.*'' in the ZIICS distribution.
-
-.nf
-    mkdir ~/fritz4
-    cd ~/fritz4
-    zic2xpm ~/ziics/fritz4.*
-.fi
-.TP
-.B 3. Give XBoard the ``-pixmap'' option when starting up, e.g.:
-
-.nf
-    xboard -pixmap ~/fritz4
-.fi
-
-Alternatively, you can add this line to your .Xdefaults file:
-
-.nf
-    xboard*pixmapDirectory: ~/fritz4
-.fi
-.PP
-(*) ZIICS is a separate copyrighted work of Andy McFarland.
-The ``ZIICS pieces'' are copyrighted works of their respective
-creators. Files produced by ``zic2xpm'' are for PERSONAL USE ONLY
-and may NOT be redistributed without explicit permission from
-the original creator(s) of the pieces.
-
-.SH COPYRIGHT
-Copyright (C) 1991 Digital Equipment Corporation, Maynard, Massachusetts.
-
-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.
-
-Enhancements copyright (C) 1992-2003 Free Software Foundation, Inc.
-
-.nf
-Published by the Free Software Foundation
-59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-.fi
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-section entitled ``GNU General Public License,''
-is included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the section entitled ``GNU General Public License,''
-and this permission notice, may be included in translations approved by
-the Free Software Foundation instead of in the original English.
-
-.SH GNU GENERAL PUBLIC LICENSE
-.nf
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
-59 Temple Place, Suite 330, Boston, MA 02111 USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-.fi
-
-  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.
-
-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.
-
-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.
-
-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:
-
-You must cause the modified files to carry prominent notices
-stating that you changed the files and the date of any change.
-
-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.
-
-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.
-
-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:
-
-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,
-
-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,
-
-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.
-
-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.
-
-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.
-
-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.
-
-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.
-
-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.
-
-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.
-
-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.
-
-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.
-
-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.
-
-  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.
-
-.nf
-ONE LINE TO GIVE THE PROGRAM'S NAME AND AN 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., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
-.fi
-
-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:
-
-.nf
-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.
-.fi
-
-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:
-
-.nf
-    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
-.fi
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
diff --git a/xboard.texi b/xboard.texi
index b6e9634..e26ff5c 100644
--- a/xboard.texi
+++ b/xboard.texi
@@ -1,2529 +1,3042 @@
- at ifinfo
- at format
-INFO-DIR-SECTION Games
-START-INFO-DIR-ENTRY
-* xboard: (xboard).         An X Window System graphical chessboard.
-END-INFO-DIR-ENTRY
- at end format
- at end ifinfo
-
- at titlepage
- at title XBoard
-
- at page
- at vskip 0pt plus 1filll
- at include copyright.texi
-
- at end titlepage
- at ifset man
-.TH xboard 6 "$Date: " "GNU"
-.SH NAME
-.PP
-xboard @- X graphical user interface for chess
-.SH SYNOPSIS
-.PP
-.B xboard [options]
-.br
-.B xboard -ics -icshost hostname [options]
-.br
-.B xboard -ncp [options]
-.br
-.B |pxboard
-.br
-.B cmail [options]
- at end ifset
-
- at node Top
- at top Introduction
- at cindex introduction
-
- at ifset man
-.SH DESCRIPTION
- at end ifset
-
-XBoard is a graphical chessboard that can serve as a
-user interface to chess engines (such as GNU Chess), the
-Internet Chess Servers,
-electronic mail correspondence chess, or your own collection of saved games.
-
-This manual documents version @value{VERSION} of XBoard.
-
- at menu
-* Major modes::     The main things XBoard can do.
-* Menus::           Menus, buttons, and keys.
-* Options::         Command options supported by XBoard.
-* Chess Servers::   Using XBoard with an Internet Chess Server (ICS).
-* Firewalls::       Connecting to a chess server through a firewall.
-* Environment::     Environment variables.
-* Limitations::     Known limitations and/or bugs.
-* Problems::        How and where to report any problems you run into.
-* Contributors::    People who have helped developing XBoard.
-* CMail::           Using XBoard for electronic correspondence chess.
-* Other programs::  Other programs you can use with XBoard.
- at ifnottex
-* Copyright::       Copyright notice for this manual.
- at end ifnottex
-* Copying::         The GNU General Public License.
-
-* Index::           Index of concepts and symbol names.
- at end menu
-
- at node Major modes
- at chapter Major modes
- at cindex Major modes
-
-XBoard always runs in one of four major modes.  You select the
-major mode from the command line when you start up XBoard.
-
- at table @asis
- at item xboard [options]
-As an interface to GNU Chess or another chess engine running on your
-machine, XBoard lets you play a game against the machine,
-set up arbitrary positions, force variations, watch a game between two
-chess engines, interactively analyze your stored games or set up and
-analyze arbitrary positions.  (Note: Not all chess engines support
-analysis.)
- at item xboard -ics -icshost hostname [options]
-As Internet Chess Server (ICS) interface, XBoard
-lets you play against other ICS users, observe games
-they are playing, or review games that have recently finished.  Most
-of the ICS "wild" chess variants are supported, including bughouse.
- at item xboard -ncp [options]
-XBoard can also be used simply
-as an electronic chessboard to play through games. It will read and
-write game files and allow you to play through variations
-manually. You can use it to browse games off the net or review games
-you have saved.  These features are also available in the other modes.
- at item |pxboard
-If you want to pipe games into XBoard, use the supplied shell
-script @file{pxboard}.  For example, from the news reader @file{xrn},
-find a message with one or more games in it, click the Save button,
-and type @samp{|pxboard} as the file name.
- at item cmail [options]
-As an interface to electronic mail correspondence chess, XBoard
-works with the cmail program. See @ref{CMail} below for
-instructions.
- at end table
-
- at node Menus
- at chapter Menus, buttons, and keys
- at cindex Menus
-
-To move a piece, you can drag it with the left mouse button, or you
-can click the left mouse button once on the piece, then once more on
-the destination square.  To drop a new piece on a square (when
-applicable), press the middle or the right mouse button over the
-square and select from the popup menu.  In cases where you can drop
-either a white or black piece, use the middle button (or shift+right)
-for white and the right button (or shift+middle) for black.  When you
-are playing a bughouse game on an Internet Chess Server, a list of the
-offboard pieces that each player has available is shown in the window
-title after the player's name; in addition, the piece menus show the
-number of pieces available of each type.
-
-All other XBoard commands are available from the menu bar. The most
-frequently used commands also have shortcut keys or on-screen buttons.
-
-When XBoard is iconized, its graphical icon is a white knight if
-it is White's turn to move, a black knight if it is Black's turn.  See
-Iconize in @ref{Keys} below if you have problems getting this
-feature to work.
-
- at menu
-* File Menu::       Accessing external games and positions.
-* Mode Menu::       Selecting XBoard's mode.
-* Action Menu::     Talking to the chess engine or ICS opponents.
-* Step Menu::       Controlling the game.
-* Options Menu::    User preferences.
-* Help Menu::       Getting help.
-* Keys::            Other shortcut keys.
- at end menu
-
- at node File Menu
- at section File Menu
- at cindex File Menu
- at cindex Menu, File
- at table @asis
- at item Reset
- at cindex Reset, Menu Item
-Resets XBoard and the chess engine to the beginning of a new chess
-game. The @kbd{r} key is a keyboard equivalent. In Internet Chess
-Server mode, clears the current state of XBoard, then
-resynchronizes with the ICS by sending a refresh command. If you want to
-stop playing, observing, or examining an ICS game, use an
-appropriate command from the Action menu, not @samp{Reset}.
- at xref{Action Menu}.
- at item Load Game
- at cindex Load Game, Menu Item
-Plays a game from a record file. The @kbd{g} key is a keyboard equivalent.
-A popup dialog prompts you for the file name. If the file contains more
-than one game, a second popup dialog
-displays a list of games (with information drawn from their PGN tags, if
-any), and you can select the one you want. Alternatively, you can load the
-Nth game in the file directly, by typing the number @kbd{N} after the
-file name, separated by a space.
-
-The game file parser will accept PGN (portable game notation),
-or in fact almost any file that contains moves in algebraic
-notation. 
-Notation of the form @samp{P@@f7}
-is accepted for piece-drops in bughouse games;
-this is a nonstandard extension to PGN.
-If the file includes a PGN position (FEN tag), or an old-style
-XBoard position diagram bracketed by @samp{[--} and @samp{--]}
-before the first move, the game starts from that position. Text
-enclosed in parentheses, square brackets, or curly braces is assumed to
-be commentary and is displayed in a pop-up window. Any other
-text in the file is ignored. PGN variations (enclosed in
-parentheses) are treated as comments; XBoard is not able to walk
-variation trees.
-The nonstandard PGN tag [Variant "varname"] functions similarly to
-the -variant command-line option (see below), allowing games in certain chess
-variants to be loaded.  There is also a heuristic to 
-recognize chess variants from the Event tag, by looking for the strings
-that the Internet Chess Servers put there when saving variant ("wild") games.
- at item Load Next Game
- at cindex Load Next Game, Menu Item
-Loads the next game from the last game record file you loaded.
-The shifted @kbd{N} key is a keyboard equivalent.
- at item Load Previous Game
- at cindex Load Previous Game, Menu Item
-Loads the previous game from the last game record file you
-loaded.  The shifted @kbd{P} key is a keyboard equivalent.
-Not available if the last game was loaded from a pipe.
- at item Reload Same Game
- at cindex Reload Same Game, Menu Item
-Reloads the last game you loaded.
-Not available if the last game was loaded from a pipe.
- at item Save Game
- at cindex Save Game, Menu Item
-Appends a record of the current game to a file.
-A popup dialog
-prompts you for the file name. If the game did not begin with
-the standard starting position, the game file includes the
-starting position used. Games are saved in the PGN (portable
-game notation) format, unless the oldSaveStyle option is true,
-in which case they are saved in an older format that is specific
-to XBoard. Both formats are human-readable, and both can be
-read back by the @samp{Load Game} command.
-Notation of the form @samp{P@@f7}
-is accepted for piece-drops in bughouse games;
-this is a nonstandard extension to PGN.
- at item Copy Game
- at cindex Copy Game, Menu Item
-Copies a record of the current game to an internal clipboard in PGN
-format and sets the X selection to the game text.  The game can be
-pasted to another application (such as a text editor or another copy
-of XBoard) using that application's paste command.  In many X
-applications, such as xterm and emacs, the middle mouse button can be
-used for pasting; in XBoard, you must use the Paste Game command.
- at item Paste Game
- at cindex Paste Game, Menu Item
-Interprets the current X selection as a game record and loads it, as
-with Load Game.
- at item Load Position
- at cindex Load Position, Menu Item
-Sets up a position from a position file.  A popup dialog prompts
-you for the file name. If the file contains more than one saved
-position, and you want to load the Nth one, type the number N
-after the file name, separated by a space. Position files must
-be in FEN (Forsythe-Edwards notation), or in the format that the
-Save Position command writes when oldSaveStyle is turned on.
- at item Load Next Position
- at cindex Load Next Position, Menu Item
-Loads the next position from the last position file you loaded.
- at item Load Previous Position
- at cindex Load Previous Position, Menu Item
-Loads the previous position from the last position file you
-loaded.  Not available if the last position was loaded from a pipe.
- at item Reload Same Position
- at cindex Reload Same Position, Menu Item
-Reloads the last position you loaded.
-Not available if the last position was loaded from a pipe.
- at item Save Position
- at cindex Save Game, Menu Item
-Appends a diagram of the current position to a file.
-A popup dialog
-prompts you for the file name. Positions are saved in
-FEN (Forsythe-Edwards notation) format unless the @code{oldSaveStyle}
-option is true, in which case they are saved in an older,
-human-readable format that is specific to XBoard. Both formats
-can be read back by the @samp{Load Position} command.
- at item Copy Position
- at cindex Copy Position, Menu Item
-Copies the current position to an internal clipboard in FEN format and
-sets the X selection to the position text.  The position can be pasted
-to another application (such as a text editor or another copy of
-XBoard) using that application's paste command.  In many X
-applications, such as xterm and emacs, the middle mouse button can be
-used for pasting; in XBoard, you must use the Paste Position command.
- at item Paste Position
- at cindex Paste Position, Menu Item
-Interprets the current X selection as a FEN position and loads it, as
-with Load Position.
- at item Mail Move
- at itemx Reload CMail Message
- at cindex Mail Move, Menu Item
- at cindex Reload CMail Message, Menu Item
-See @ref{CMail}.
- at item Exit
- at cindex Exit, Menu Item
-Exits from XBoard. The shifted @kbd{Q} key is a keyboard equivalent.
- at end table
-
- at node Mode Menu
- at section Mode Menu
- at cindex Menu, Mode
- at cindex Mode Menu
- at table @asis
- at item Machine White
- at cindex Machine White, Menu Item
-Tells the chess engine to play White.
- at item Machine Black
- at cindex Machine Black, Menu Item
-Tells the chess engine to play Black.
- at item Two Machines
- at cindex Two Machines, Menu Item
-Plays a game between two chess engines.
- at item Analysis Mode
- at cindex Analysis Mode, Menu Item
-XBoard tells the chess engine to start analyzing the current game/position
-and shows you the analysis as you move pieces around.
-Note: Some chess engines do not support Analysis mode.
-
-To set up a position to analyze, you do the following:
-
-1. Select Edit Position from the Mode Menu
-
-2. Set up the position.  Use the middle and right buttons to
-bring up the white and black piece menus.
-
-3. When you are finished, click on either the Black or White
-clock to tell XBoard which side moves first.
-
-4. Select Analysis Mode from the Mode Menu to start the analysis.
- at item Analyze File
- at cindex Analyze File, Menu Item
-This option lets you load a game from a file (PGN, XBoard format, etc.)
-and analyze it. When you select this menu item, a popup window appears
-and asks for a filename to load.
-If the file contains multiple games, another popup appears that lets
-you select which game you wish to analyze.
-After a game is loaded, use the XBoard arrow buttons to step
-forwards/backwards through the game and watch the analysis.
-Note: Some chess engines do not support Analysis mode.
- at item ICS Client
- at cindex ICS Client, Menu Item
-This is the normal mode when XBoard
-is connected to a chess server.  If you have moved into
-Edit Game or Edit Position mode, you can select this option to get out.
-
-To use xboard in ICS mode, run it in the foreground with the -ics
-option, and use the terminal you started it from to type commands and
-receive text responses from the chess server.  See
- at ref{Chess Servers} below for more information.
-
-XBoard activates some special position/game editing features when you
-use the @kbd{examine} or @kbd{bsetup} commands on ICS and you have
- at samp{ICS Client} selected on the Mode menu.  First, you can issue the
-ICS position-editing commands with the mouse.  Move pieces by dragging
-with mouse button 1.  To drop a new piece on a square, press mouse
-button 2 or 3 over the square.  This brings up a menu of white pieces
-(button 2) or black pieces (button 3).  Additional menu choices let
-you empty the square or clear the board.  Click on the White or Black
-clock to set the side to play.  You cannot set the side to play or
-drag pieces to arbitrary squares while examining on ICC, but you can
-do so in @kbd{bsetup} mode on FICS.  In addition, the menu commands
- at samp{Forward}, @samp{Backward}, @samp{Pause}, and @samp{Stop Examining}
-have special functions in this mode; see below.
- at item Edit Game
- at cindex Edit Game, Menu Item
-Allows you to make moves for both Black and White, and to change
-moves after backing up with the @samp{Backward} command. The clocks do
-not run.
-
-In chess engine mode, the chess engine continues to check moves for legality
-but does not participate in the game. You can bring the chess engine
-into the game by selecting @samp{Machine White}, @samp{Machine Black},
-or @samp{Two Machines}.
-
-In ICS mode, the moves are not sent to the ICS: @samp{Edit Game} takes
-XBoard out of ICS Client mode and lets you edit games locally.
-If you want to edit games on ICS in a way that other ICS users
-can see, use the ICS @kbd{examine} command or start an ICS match
-against yourself.
- at item Edit Position
- at cindex Edit Position, Menu Item
-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 white pieces (button 2) or
-black 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 word White or Black at the top of the screen.
-Selecting @samp{Edit Position} causes XBoard to discard
-all remembered moves in the current game.
-
-In ICS mode, changes made to the position by @samp{Edit Position} are
-not sent to the ICS: @samp{Edit Position} takes XBoard out of
- at samp{ICS Client} mode and lets you edit positions locally. If you want to
-edit positions on ICS in a way that other ICS users can see, use
-the ICS @kbd{examine} command, or start an ICS match against yourself.
-(See also the ICS Client topic above.)
- at item Training
- at cindex Training, Menu Item
-Training mode lets you interactively guess the moves of a game for one
-of the players. You guess the next move of the game by playing the
-move on the board. If the move played matches the next move of the
-game, the move is accepted and the opponent's response is autoplayed.
-If the move played is incorrect, an error message is displayed.  You
-can select this mode only while loading a game (that is, after
-selecting @samp{Load Game} from the File menu).  While XBoard is in 
- at samp{Training} mode, the navigation buttons are disabled.
- at item Show Game List
- at cindex Show Game List, Menu Item
-Shows or hides the list of games generated by the last @samp{Load Game}
-command.
- at item Edit Tags
- at cindex Edit Tags, Menu Item
-Lets you edit the PGN (portable game notation)
-tags for the current game. After editing, the tags must still conform to
-the PGN tag syntax:
-
- at example
-<tag-section> ::= <tag-pair> <tag-section>
-                        <empty>
-<tag-pair> ::= [ <tag-name> <tag-value> ]
-<tag-name> ::= <identifier>
-<tag-value> ::= <string>
- at end example
- at noindent
-See the PGN Standard for full details. Here is an example:
-
- at example
-[Event "Portoroz Interzonal"]
-[Site "Portoroz, Yugoslavia"]
-[Date "1958.08.16"]
-[Round "8"]
-[White "Robert J. Fischer"]
-[Black "Bent Larsen"]
-[Result "1-0"]
- at end example
- at noindent
-Any characters that do not match this syntax are silently ignored. Note that
-the PGN standard requires all games to have at least the seven tags shown
-above. Any that you omit will be filled in by XBoard
-with @samp{?} (unknown value), or @samp{-} (inapplicable value).
- at item Edit Comment
- at cindex Edit Comment, Menu Item
-Adds or modifies a comment on the current position. Comments are
-saved by @samp{Save Game} and are displayed by @samp{Load Game},
- at samp{Forward}, and @samp{Backward}.
- at item ICS Input Box
- at cindex ICS Input Box, Menu Item
-If this option is set in ICS mode,
-XBoard
-creates an extra window that you can use for typing in ICS commands.
-The input box is especially useful if you want to type in something long or do
-some editing on your input, because output from ICS doesn't get mixed
-in with your typing as it would in the main terminal window.
- at item Pause
- at cindex Pause, Menu Item
-Pauses updates to the board, and if you are playing against a chess engine,
-also pauses your clock. To continue, select @samp{Pause} again, and the
-display will automatically update to the latest position.
-The @samp{P} button and keyboard @kbd{p} key are equivalents.
-
-If you select Pause when you are playing against a chess engine and
-it is not your move, the chess engine's clock
-will continue to run and it will eventually make a move, at which point
-both clocks will stop. Since board updates are paused, however,
-you will not see the move until you exit from Pause mode (or select Forward).
-This behavior is meant to simulate adjournment with a sealed move.
-
-If you select Pause while you are observing or examining a game on a
-chess server, you can step backward and forward in the current history
-of the examined game without affecting the other observers and
-examiners, and without having your display jump forward to the latest
-position each time a move is made. Select Pause again to reconnect
-yourself to the current state of the game on ICS.
-
-If you select @samp{Pause} while you are loading a game, the game stops
-loading. You can load more moves manually by selecting @samp{Forward}, or
-resume automatic loading by selecting @samp{Pause} again.
- at end table
-
- at node Action Menu
- at section Action Menu
- at cindex Menu, Action
- at cindex Action, Menu
- at table @asis
- at item Accept
- at cindex Accept, Menu Item
-Accepts a pending match offer. If there is more than one offer
-pending, you will have to type in a more specific command
-instead of using this menu choice.
- at item Decline
- at cindex Decline, Menu Item
-Declines a pending offer (match, draw, adjourn, etc.). If there
-is more than one offer pending, you will have to type in a more
-specific command instead of using this menu choice.
- at item Call Flag
- at cindex Call Flag, Menu Item
-Calls your opponent's flag, claiming a win on time, or claiming
-a draw if you are both out of time. You can also call your
-opponent's flag by clicking on his clock or by pressing the
-keyboard @kbd{t} key.
- at item Draw
- at cindex Draw, Menu Item
-Offers a draw to your opponent, accepts a pending draw offer
-from your opponent, or claims a draw by repetition or the 50-move
-rule, as appropriate. The @kbd{d} key is a keyboard equivalent.
- at item Adjourn
- at cindex Adjourn, Menu Item
-Asks your opponent to agree to adjourning the current game, or
-agrees to a pending adjournment offer from your opponent.
- at item Abort
- at cindex Abort, Menu Item
-Asks your opponent to agree to aborting the current game, or
-agrees to a pending abort offer from your opponent. An aborted
-game ends immediately without affecting either player's rating.
- at item Resign
- at cindex Resign, Menu Item
-Resigns the game to your opponent. The shifted @kbd{R} key is a
-keyboard equivalent.
- at item Stop Observing
- at cindex Stop Observing, Menu Item
-Ends your participation in observing a game, by issuing the ICS
-observe command with no arguments. ICS mode only.
- at item Stop Examining
- at cindex Stop Examining, Menu Item
-Ends your participation in examining a game, by issuing the ICS
-unexamine command. ICS mode only.
- at end table
-
- at node Step Menu
- at section Step Menu
- at cindex Step Menu
- at cindex Menu, Step
- at table @asis
- at item Backward
- at cindex Backward, Menu Item
- at cindex <, Button
-Steps backward through a series of remembered moves.
-The @samp{[<]} button and the @kbd{b} key are equivalents.
-In addition, pressing the Control key steps back one move, and releasing
-it steps forward again.
-
-In most modes, @samp{Backward} only lets you look back at old positions;
-it does not retract moves. This is the case if you are playing against
-a chess engine, playing or observing a game on an ICS, or loading a game.
-If you select @samp{Backward} in any of these situations, you will not
-be allowed to make a different move. Use @samp{Retract Move} or
- at samp{Edit Game} if you want to change past moves.
-
-If you are examining an ICS game, the behavior of @samp{Backward}
-depends on whether XBoard is in Pause mode. If Pause mode is
-off, @samp{Backward} issues the ICS backward command, which backs up
-everyone's view of the game and allows you to make a different
-move. If Pause mode is on, @samp{Backward} only backs up your local
-view.
- at item Forward
- at cindex Forward, Menu Item
- at cindex >, Button
-Steps forward through a series of remembered moves (undoing the
-effect of @samp{Backward}) or forward through a game file. The
- at samp{[>]} button and the @kbd{f} key are equivalents.
-
-If you are examining an ICS game, the behavior of Forward
-depends on whether XBoard is in Pause mode. If Pause mode is
-off, @samp{Forward} issues the ICS forward command, which moves
-everyone's view of the game forward along the current line. If
-Pause mode is on, @samp{Forward} only moves your local view forward,
-and it will not go past the position that the game was in when
-you paused.
- at item Back to Start
- at cindex Back to Start, Menu Item
- at cindex <<, Button
-Jumps backward to the first remembered position in the game.
-The @samp{[<<]} button and the shifted @kbd{B} key are equivalents.
-
-In most modes, Back to Start only lets you look back at old
-positions; it does not retract moves. This is the case if you
-are playing against a local chess engine, playing or observing a game on
-a chess server, or loading a game. If you select @samp{Back to Start} in any
-of these situations, you will not be allowed to make different
-moves. Use @samp{Retract Move} or @samp{Edit Game} if you want to change past
-moves; or use Reset to start a new game.
-
-If you are examining an ICS game, the behavior of @samp{Back to
-Start} depends on whether XBoard is in Pause mode. If Pause mode
-is off, @samp{Back to Start} issues the ICS @samp{backward 999999}
-command, which backs up everyone's view of the game to the start and
-allows you to make different moves. If Pause mode is on, @samp{Back
-to Start} only backs up your local view.
- at item Forward to End
- at cindex Forward to End, Menu Item
- at cindex >>, Button
-Jumps forward to the last remembered position in the game. The
- at samp{[>>]} button and the shifted @kbd{F} key are equivalents.
-
-If you are examining an ICS game, the behavior of @samp{Forward to
-End} depends on whether XBoard is in Pause mode. If Pause mode
-is off, @samp{Forward to End} issues the ICS @samp{forward 999999}
-command, which moves everyone's view of the game forward to the end of
-the current line. If Pause mode is on, @samp{Forward to End} only moves
-your local view forward, and it will not go past the position
-that the game was in when you paused.
- at item Revert
- at cindex Revert, Menu Item
-If you are examining an ICS game and Pause mode is off, issues
-the ICS command @samp{revert}.
- at item Truncate Game
- at cindex Truncate Game, Menu Item
-Discards all remembered moves of the game beyond the current
-position. Puts XBoard into @samp{Edit Game} mode if it was not there
-already.
- at item Move Now
- at cindex Move Now, Menu Item
-Forces the chess engine to move immediately. Chess engine mode only.
- at item Retract Move
- at cindex Retract Move, Menu Item
-Retracts your last move. In chess engine mode, you can do this only
-after the chess engine has replied to your move; if the chess engine is still
-thinking, use @samp{Move Now} first. In ICS mode, @samp{Retract Move}
-issues the command @samp{takeback 1} or @samp{takeback 2}
-depending on whether it is your opponent's move or yours.
- at end table
-
- at node Options Menu
- at section Options Menu
- at cindex Menu, Options
- at cindex Options Menu
- at table @asis
- at item Always Queen
- at cindex Always Queen, Menu Item
-If this option is off, XBoard brings up a dialog
-box whenever you move a pawn to the last rank, asking what piece
-you want to promote it to. If the option is true, your pawns are
-always promoted to queens. Your opponent can still underpromote.
- at item Animate Dragging
- at cindex Animate Dragging, Menu Item
-If Animate Dragging is on, while you are dragging a piece with the
-mouse, an image of the piece follows the mouse cursor.
-If Animate Dragging is off, there is no visual feedback while you are
-dragging a piece, but if Animate Moving is on, the move will be
-animated when it is complete. 
- at item Animate Moving
- at cindex Animate Moving, Menu Item
-If Animate Moving is on, all piece moves are animated.  An image of the
-piece is shown moving from the old square to the new square when the
-move is completed (unless the move was already animated by Animate Dragging).
-If Animate Moving is off, a moved piece instantly disappears from its
-old square and reappears on its new square when the move is complete.
- at item Auto Comment
- at cindex Auto Comment, Menu Item
-If this option is on, any remarks made on ICS while you are observing or
-playing a game are recorded as a comment on the current move.  This includes
-remarks made with the ICS commands @kbd{say}, @kbd{tell}, @kbd{whisper},
-and @kbd{kibitz}.
-Limitation: remarks that you type yourself are not recognized;
-XBoard scans only the output from ICS, not the input you type to it.
- at item Auto Flag
- at cindex Auto Flag, Menu Item
-If this option is on and one player runs out of time
-before the other,
-XBoard
-will automatically call his flag, claiming a win on time.
-In ICS mode, Auto Flag will only call your opponent's flag, not yours,
-and the ICS may award you a draw instead of a win if you have
-insufficient mating material.  In local chess engine mode,
-XBoard
-may call either player's flag and will not take material into account.
- at item Auto Flip View
- at cindex Auto Flip View, Menu Item
-If the Auto Flip View option is on when you start a game, the board
-will be automatically oriented so that your pawns move from the bottom
-of the window towards the top.
- at item Auto Observe
- at cindex Auto Observe, Menu Item
-If this option is on and you add a player to your @code{gnotify}
-list on ICS, XBoard will automatically observe all of that
-player's games, unless you are doing something else (such as
-observing or playing a game of your own) when one starts.
-The games are displayed 
-from the point of view of the player on your gnotify list; that is, his
-pawns move from the bottom of the window towards the top.
-Exceptions:  If both players in a game are on your gnotify list, if
-your ICS 
- at code{highlight}
-variable is set to 0, or if the ICS you are using does not 
-properly support observing from Black's point of view,
-you will see the game from White's point of view.
- at item Auto Raise Board
- at cindex Auto Raise Board, Menu Item
-If this option is on, whenever a new game begins, the chessboard window
-is deiconized (if necessary) and raised to the top of the stack of windows.
- at item Auto Save
- at cindex Auto Save, Menu Item
-If this option is true, at the end of every game XBoard prompts
-you for a file name and appends a record of the game to the file
-you specify. 
-Disabled if the @code{saveGameFile} command-line
-option is set, as in that case all games are saved to the specified file.
- at xref{Load and Save options}.
- at item Blindfold
- at cindex Blindfold, Menu Item
-If this option is on, XBoard displays the board as usual but does
-not display pieces or move highlights.  You can still move in the
-usual way (with the mouse or by typing moves in ICS mode), even though
-the pieces are invisible.
- at item Flash Moves
- at cindex Flash Moves, Menu Item
-If this option is on, whenever a move is completed, the moved piece flashes.
-The number of times to flash is set by the flashCount command-line
-option; it defaults to 3 if Flash Moves is first turned on from the menu.
- at item Flip View
- at cindex Flip View, Menu Item
-Inverts your view of the chess board for the duration of the
-current game. Starting a new game returns the board to normal.
-The @kbd{v} key is a keyboard equivalent.
-
-If you are playing a game on an ICS, the board is always
-oriented at the start of the game so that your pawns move from
-the bottom of the window towards the top. Otherwise, the starting
-orientation is determined by the @code{flipView} command line option;
-if it is false (the default), White's pawns move from bottom to top
-at the start of each game; if it is true, Black's pawns move from
-bottom to top. @xref{User interface options}.
- at item Get Move List
- at cindex Get Move List, Menu Item
-If this option is on, whenever XBoard
-receives the first board of a new ICS game (or a different game from
-the one it is currently displaying), it
-retrieves the list of past moves from the ICS.
-You can then review the moves with the @samp{Forward} and @samp{Backward}
-commands
-or save them with @samp{Save Game}.  You might want to
-turn off this option if you are observing several blitz games at once,
-to keep from wasting time and network bandwidth fetching the move lists over
-and over.
-When you turn this option on from the menu, XBoard
-immediately fetches the move list of the current game (if any).
- at item Highlight Last Move
- at cindex Highlight Last Move, Menu Item
-If Highlight Last Move is on, after a move is made, the starting and
-ending squares remain highlighted. In addition, after you use Backward
-or Back to Start, the starting and ending squares of the last move to
-be unmade are highlighted.
- at item Move Sound
- at cindex Move Sound, Menu Item
-If this option is on, XBoard alerts you by playing a sound
-after each of your opponent's moves (or after every
-move if you are observing a game on the Internet Chess Server).
-The sound is not played after moves you make or moves read from a
-saved game file. By default, the
-sound is the terminal bell, but on some systems you can change it
-to a sound file using the soundMove option; see below.
-
-If you turn on this option when using XBoard with the Internet
-Chess Server, you will probably want to give the
- at kbd{set bell 0}
-command to the ICS, since otherwise the ICS will ring the terminal bell
-after every move (not just yours). (The @file{.icsrc} file
-is a good place for this; see @ref{ICS options}.)
- at item ICS Alarm
- at cindex ICS Alarm, Menu Item
-When this option is on, an alarm sound is played when your clock
-counts down to the icsAlarmTime (by default, 5 seconds) in an ICS
-game.  For games with time controls that include an increment, the
-alarm will sound each time the clock counts down to the icsAlarmTime.
-By default, the alarm sound is the terminal bell, but on some systems
-you can change it to a sound file using the soundIcsAlarm option; see
-below.
- at item Old Save Style
- at cindex Old Save Style, Menu Item
-If this option is off, XBoard saves games in PGN
-(portable game notation) and positions in FEN (Forsythe-Edwards
-notation).  If the option is on, a save style that is compatible
-with older versions of XBoard is used instead.
-The old position style is more human-readable
-than FEN; the old game style has no particular advantages.
- at item Periodic Updates
- at cindex Periodic Updates, Menu Item
-If this option is off (or if
-you are using a chess engine that does not support periodic updates),
-the analysis window
-will only be updated when the analysis changes. If this option is
-on, the Analysis Window will be updated every two seconds.
- at item Ponder Next Move
- at cindex Ponder Next Move, Menu Item
-If this option is off, the chess engine will think only when it is on
-move.  If the option is on, the engine will also think while waiting
-for you to make your move.
- at item Popup Exit Message
- at cindex Popup Exit Message, Menu Item
-If this option is on, when XBoard wants to display a message just
-before exiting, it brings up a modal dialog box and waits for you to
-click OK before exiting.  If the option is off, XBoard prints the
-message to standard error (the terminal) and exits immediately.
- at item Popup Move Errors
- at cindex Popup Move Errors, Menu Item
-If this option is off, when you make an error in moving (such as
-attempting an illegal move or moving the wrong color piece), the
-error message is displayed in the message area.  If the option is
-on, move errors are displayed in small popup windows like other errors.
-You can dismiss an error popup either by clicking its OK button or by
-clicking anywhere on the board, including downclicking to start a move.
- at item Premove
- at cindex Premove, Menu Item
-If this option is on while playing a game on an ICS, you can register
-your next planned move before it is your turn.  Move the piece with
-the mouse in the ordinary way, and the starting and ending squares
-will be highlighted with a special color (red by default).  When it is
-your turn, if your registered move is legal, XBoard will send it to
-ICS immediately; if not, it will be ignored and you can make a
-different move.  If you change your mind about your premove, either
-make a different move, or double-click on any piece to cancel the move
-entirely.
- at item Quiet Play
- at cindex Quiet Play, Menu Item
-If this option is on, XBoard will automatically issue an ICS
- at kbd{set shout 0}
-command whenever you start a game and a
- at kbd{set shout 1}
-command whenever you finish one.  Thus, you will not be distracted
-by shouts from other ICS users while playing.
- at item Show Coords
- at cindex Show Coords, Menu Item
-If this option is on, XBoard displays algebraic coordinates
-along the board's left and bottom edges.
- at item Show Thinking
- at cindex Show Thinking, Menu Item
-If this option is set, the chess engine's notion of the score and best
-line of play from the current position is displayed as it is
-thinking. The score indicates how many pawns ahead (or if negative,
-behind) the chess engine thinks it is. In matches between two
-machines, the score is prefixed by @samp{W} or @samp{B} to indicate
-whether it is showing White's thinking or Black's, and only the thinking
-of the engine that is on move is shown.
- at item Test Legality
- at cindex Test Legality, Menu Item
-If this option is on, XBoard tests whether the moves you try to make
-with the mouse are legal and refuses to let you make an illegal move.
-Moves loaded from a file with @samp{Load Game} are also checked.  If
-the option is off, all moves are accepted, but if a local chess engine
-or the ICS is active, they will still reject illegal moves.  Turning
-off this option is useful if you are playing a chess variant with
-rules that XBoard does not understand.  (Bughouse, suicide, and wild
-variants where the king may castle after starting on the d file are
-generally supported with Test Legality on.)
- at end table
-
- at node Help Menu
- at section Help Menu
- at cindex Menu, Help
- at cindex Help Menu
- at table @asis
- at item Info XBoard
- at cindex Info XBoard, Menu Item
-Displays the XBoard documentation in info format.  For this feature to
-work, you must have the GNU info program installed on your system, and
-the file @file{xboard.info} must either be present in the current
-working directory, or have been installed by the @samp{make install}
-command when you built XBoard.
- at item Man XBoard
- at cindex Man XBoard, Menu Item
-Displays the XBoard documentation in man page format.  For this
-feature to work, the file @file{xboard.6} must have been installed by
-the @samp{make install} command when you built XBoard, and the
-directory it was placed in must be on the search path for your
-system's @samp{man} command.
- at item Hint
- at cindex Hint, Menu Item
-Displays a move hint from the chess engine.
- at item Book
- at cindex Book, Menu Item
-Displays a list of possible moves from the chess engine's opening
-book.  The exact format depends on what chess engine you are using.
-With GNU Chess 4, the first column gives moves, the second column
-gives one possible response for each move, and the third column shows
-the number of lines in the book that include the move from the first
-column. If you select this option and nothing happens, the chess
-engine is out of its book or does not support this feature.
- at item About XBoard
- at cindex About XBoard, Menu Item
-Shows the current XBoard version number.
- at end table
-
- at node Keys
- at section Other Shortcut Keys
- at cindex Keys
- at cindex Shortcut keys
- at table @asis
- at item Iconize
-Pressing the @kbd{i} or @kbd{c} key iconizes XBoard. The graphical
-icon displays a white knight if it is White's move, or a black knight
-if it is Black's move. If your X window manager displays only text
-icons, not graphical ones, check its documentation; there is probably
-a way to enable graphical icons.  If you get black and white reversed,
-we would like to hear about it; see @ref{Problems} below for
-instructions on how to report this problem.
- at end table
-
-You can add or remove shortcut keys using the X resources
- at code{form.translations}. Here is an example of what would go in your
- at file{.Xdefaults} file:
-
- at example
-XBoard*form.translations: \
-  Shift<Key>?: AboutGameProc() \n\
-  <Key>y: AcceptProc() \n\
-  <Key>n: DeclineProc() \n\
-  <Key>i: NothingProc()
- at end example
- at noindent
-Binding a key to @code{NothingProc} makes it do nothing, thus removing
-it as a shortcut key. The XBoard commands that can be bound to keys
-are:
-
- at example
-AbortProc, AboutGameProc, AboutProc, AcceptProc, AdjournProc,
-AlwaysQueenProc, AnalysisModeProc, AnalyzeFileProc,
-AnimateDraggingProc, AnimateMovingProc, AutobsProc, AutoflagProc,
-AutoflipProc, AutoraiseProc, AutosaveProc, BackwardProc,
-BlindfoldProc, BookProc, CallFlagProc, CopyGameProc, CopyPositionProc,
-DebugProc, DeclineProc, DrawProc, EditCommentProc, EditGameProc,
-EditPositionProc, EditTagsProc, EnterKeyProc, FlashMovesProc,
-FlipViewProc, ForwardProc, GetMoveListProc, HighlightLastMoveProc,
-HintProc, Iconify, IcsAlarmProc, IcsClientProc, IcsInputBoxProc,
-InfoProc, LoadGameProc, LoadNextGameProc, LoadNextPositionProc,
-LoadPositionProc, LoadPrevGameProc, LoadPrevPositionProc,
-LoadSelectedProc, MachineBlackProc, MachineWhiteProc, MailMoveProc,
-ManProc, MoveNowProc, MoveSoundProc, NothingProc, OldSaveStyleProc,
-PasteGameProc, PastePositionProc, PauseProc, PeriodicUpdatesProc,
-PonderNextMoveProc, PopupExitMessageProc, PopupMoveErrorsProc,
-PremoveProc, QuietPlayProc, QuitProc, ReloadCmailMsgProc,
-ReloadGameProc, ReloadPositionProc, RematchProc, ResetProc,
-ResignProc, RetractMoveProc, RevertProc, SaveGameProc,
-SavePositionProc, ShowCoordsProc, ShowGameListProc, ShowThinkingProc,
-StopExaminingProc, StopObservingProc, TestLegalityProc, ToEndProc,
-ToStartProc, TrainingProc, TruncateGameProc, and TwoMachinesProc.
- at end example
-
- at node Options
- at chapter Options
- at cindex Options
- at cindex Options
-
-This section documents the command-line options to XBoard.  You can
-set these options in two ways: by typing them on the shell command
-line you use to start XBoard, or by setting them as X resources
-(typically in your @file{.Xdefaults} file).  Many of the options
-cannot be changed while XBoard is running; others set the initial
-state of items that can be changed with the @ref{Options} menu.
-
-Most of the options have both a long name and a short name. To turn a
-boolean option on or off from the command line, either give its long
-name followed by the value true or false
-(@samp{-longOptionName true}), or give just the short name to turn the
-option on (@samp{-opt}), or the short name preceded by @samp{x} to
-turn the option off (@samp{-xopt}). For options that take strings or
-numbers as values, you can use the long or short option names
-interchangeably.
-
-Each option corresponds to an X resource with the same name, so
-if you like, you can set options in your @file{.Xdefaults} file
-or in a file named @file{XBoard} in your home directory.
-For options that have two names, the longer one is the name of
-the corresponding X resource; the short name is not recognized.
-To turn a boolean option on or off as an
-X resource, give its long name followed by the value
-true or false (@samp{XBoard*longOptionName: true}).
-
- at menu
-* Chess engine options::        Controlling the chess engine.
-* ICS options::                 Connecting to and using ICS.
-* Load and Save options::       Input/output options.
-* User interface options::      Look and feel options.
-* Other options::               Miscellaneous.
- at end menu
-
- at node Chess engine options
- at section Chess Engine Options
- at cindex options, Chess engine
- at cindex Chess engine options
- at table @asis
- at item -tc or -timeControl minutes[:seconds]
- at cindex tc, option
- at cindex timeControl, option
-Each player begins with his clock set to the @code{timeControl} period.
-Default: 5 minutes.
-The additional options @code{movesPerSession} and @code{timeIncrement}
-are mutually exclusive.  
- at item -mps or -movesPerSession moves
- at cindex mps, option
- at cindex movesPerSession, option
-When both players have made @code{movesPerSession} moves, a
-new @code{timeControl} period is added to both clocks.  Default: 40 moves.
- at item -inc or -timeIncrement seconds
- at cindex inc, option
- at cindex timeIncrement, option
-If this option is specified, @code{movesPerSession} is ignored.
-Instead, after each player's move, @code{timeIncrement} seconds are
-added to his clock.  
-Use @samp{-inc 0} if you want to require the entire
-game to be played in one @code{timeControl} period, with no increment.
-Default: -1, which specifies @code{movesPerSession} mode.
- at item -clock/-xclock or -clockMode true/false
- at cindex clock, option
- at cindex clockMode, option
-Determines whether or not to display the chess clocks. If clockMode is
-false, the clocks are not shown, but the side that is to play next
-is still highlighted. Also, unless @code{searchTime}
-is set, the chess engine still keeps track of the clock time and uses it to
-determine how fast to make its moves.
- at item -st or -searchTime minutes[:seconds]
- at cindex st, option
- at cindex searchTime, option
-Tells the chess engine to spend at most the given amount of time
-searching for each of its moves. Without this option, the chess engine
-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.
- at item -depth or -searchDepth number
- at cindex sd, option
- at cindex searchDepth, option
-Tells the chess engine to look ahead at most the given number of moves
-when searching for a move to make. Without this option, the chess
-engine chooses its search depth based on the number of moves and
-amount of time remaining until the next time control.  With the option,
-the engine will cut off its search early if it reaches the specified depth.
- at item -thinking/-xthinking or -showThinking true/false
- at cindex thinking, option
- at cindex showThinking, option
-Sets the Show Thinking option. @xref{Options Menu}. Default: false.
- at item -ponder/-xponder or -ponderNextMove true/false
- at cindex ponder, option
- at cindex ponderNextMove, option
-Sets the Ponder Next Move menu option. @xref{Options Menu}. Default: true.
- at item -mg or -matchGames n
- at cindex mg, option
- at cindex matchGames, option
-Automatically runs an n-game match between two chess engines,
-with alternating colors.
-If the @code{loadGameFile} or @code{loadPositionFile} option is set,
-XBoard
-starts each game with the given opening moves or the given position;
-otherwise, the games start with the standard initial chess position.
-If the @code{saveGameFile} option is set, a move record for the
-match is appended to the specified file. If the @code{savePositionFile}
-option is set, the final position reached in each game of the match is appended
-to the specified file. When the match is over, XBoard
-displays the match score and exits. Default: 0 (do not run a match).
- at item -mm/-xmm or -matchMode true/false
- at cindex mm, option
- at cindex matchMode, option
-Setting @code{matchMode} to true is equivalent to setting
- at code{matchGames} to 1.
- at item -fcp or -firstChessProgram program
- at cindex fcp, option
- at cindex firstChessProgram, option
-Name of first chess engine.
-Default: @file{gnuchessx}.
- at item -scp or -secondChessProgram program
- at cindex scp, option
- at cindex secondChessProgram, option
-Name of second chess engine, if needed.
-A second chess engine is started only in Two Machines (match) mode.
-Default: @file{gnuchessx}.
- at item -fb/-xfb or -firstPlaysBlack true/false
- at cindex fb, option
- at cindex firstPlaysBlack, option
-In games between two chess engines, firstChessProgram normally plays
-white.  If this option is true, firstChessProgram plays black.  In a
-multi-game match, this option affects the colors only for the first
-game; they still alternate in subsequent games.
- at item -fh or -firstHost host
- at itemx -sh or -secondHost host
- at cindex fh, option
- at cindex firstHost, option
- at cindex sh, option
- at cindex secondHost, option
-Hosts on which the chess engines are to run. The default for
-each is @file{localhost}. If you specify another host, XBoard
-uses @file{rsh} to run the chess engine there. (You can substitute a
-different remote shell program for rsh using the @code{remoteShell}
-option described below.)
- at item -fd or -firstDirectory dir
- at itemx -sd or -secondDirectory dir
- at cindex fd, option
- at cindex firstDirectory, option
- at cindex sd, option
- at cindex secondDirectory, option
-Working directories in which the chess engines are to be run.
-The default is "", which means to run the chess engine
-in the same working directory as XBoard
-itself.  (See the CHESSDIR environment variable.)
-This option is effective only when the chess engine is being run
-on the local host; it does not work if the engine is run remotely
-using the -fh or -sh option.
- at item -initString string
- at itemx -secondInitString string
- at cindex initString, option
- at cindex secondInitString, option
-The string that is sent to initialize each chess engine for a new game.
-Default:
-
- at example
-new
-random
- at end example
- at noindent
-Setting this option from the command line is tricky, because you must
-type in real newline characters, including one at the very end.
-In most shells you can do this by
-entering a @samp{\} character followed by a newline. It is easier to set
-the option from your @file{.Xdefaults} file; in that case you can
-include the character sequence @samp{\n} in the string, and it will
-be converted to a newline.
-
-If you change this option, don't remove the @samp{new} 
-command; it is required by all chess engines to
-start a new game.
-
-You can remove the @samp{random} command if you like; including it
-causes GNU Chess 4 to randomize its move selection slightly so that it
-doesn't play the same moves in every game.  Even without
- at samp{random}, GNU Chess 4 randomizes its choice of moves from its
-opening book.  Many other chess engines ignore this command entirely
-and always (or never) randomize.
-
-You can also try adding other commands to the initString; see the
-documentation of the chess engine you are using for details.
- at item -firstComputerString string
- at itemx -secondComputerString string
- at cindex firstComputerString, option
- at cindex secondComputerString, option
-The string that is sent to the chess engine if its opponent is another
-computer chess engine.  The default is @samp{computer\n}.  Probably the
-only useful alternative is the empty string (@samp{}), which keeps the
-engine from knowing that it is playing another computer.
- at item -reuse/-xreuse or -reuseFirst true/false
- at itemx -reuse2/-xreuse2 or -reuseSecond true/false
- at cindex reuse, option
- at cindex reuseFirst, option
- at cindex reuse2, option
- at cindex reuseSecond, option
-If the option is false,
-XBoard kills off the chess engine after every game and starts
-it again for the next game.  
-If the option is true (the default), 
-XBoard starts the chess engine only once
-and uses it repeatedly to play multiple games.
-Some old chess engines may not work properly when
-reuse is turned on, but otherwise games will start faster if it is left on.
- at item -firstProtocolVersion version-number
- at itemx -secondProtocolVersion version-number
- at cindex firstProtocolVersion, option
- at cindex secondProtocolVersion, option
-This option specifies which version of the chess engine communication
-protocol to use.  By default, version-number is 2.  In version 1, the
-"protover" command is not sent to the engine; since version 1 is a
-subset of version 2, nothing else changes.  Other values for
-version-number are not supported.
- at end table
-
- at node ICS options
- at section Internet Chess Server Options
- at cindex ICS options
- at cindex Options, ICS
- at table @asis
- at item -ics/-xics or -internetChessServerMode true/false
- at cindex ics, option
- at cindex internetChessServerMode, option
-Connect with an Internet Chess Server to play chess against its
-other users, observe games they are playing, or review games
-that have recently finished. Default: false.
- at item -icshost or -internetChessServerHost host
- at cindex icshost, option
- at cindex internetChessServerHost, option
-The Internet host name or address of the chess server to connect
-to when in ICS mode. Default: @code{chessclub.com}.
-Another popular chess server to try is @code{freechess.org}.
-If your site doesn't have a working Internet name server, try
-specifying the host address in numeric form. 
-You may also need
-to specify the numeric address when using the icshelper option
-with timestamp or timeseal (see below).
- at item -icsport or -internetChessServerPort port-number
- at cindex icsport, option
- at cindex internetChessServerPort, option
-The port number to use when connecting to a chess server in ICS
-mode. Default: 5000.
- at item -icshelper or -internetChessServerHelper prog-name
- at cindex icshelper, option
- at cindex internetChessServerHelper, option
-An external helper program used to communicate with the chess server.
-You would set it to "timestamp" for ICC (chessclub.com) or
-"timeseal" for FICS (freechess.org), after
-obtaining the correct version of timestamp or timeseal for your
-computer.  See "help timestamp" on ICC and "help timeseal" on FICS.
-This option is shorthand for @code{-useTelnet -telnetProgram program}.
- at item -telnet/-xtelnet or -useTelnet true/false
- at cindex telnet, option
- at cindex useTelnet, option
-This option is poorly named; it should be called useHelper.
-If set to true, it instructs XBoard to run an external
-program to communicate with the Internet Chess Server. 
-The program to use is given by the telnetProgram option.
-If the option is
-false (the default), XBoard opens a TCP socket and uses its own
-internal implementation of the telnet protocol to communicate with the
-ICS. @xref{Firewalls}.
- at item -telnetProgram prog-name
- at cindex telnetProgram, option
-This option is poorly named; it should be called helperProgram.
-It gives the name of the telnet program to be used with
-the @code{gateway} and @code{useTelnet} options.  The default is
- at file{telnet}. The telnet program is invoked with the value of
- at code{internetChessServerHost} as its first argument and the value
-of @code{internetChessServerPort} as its second argument.
- at xref{Firewalls}.
- at item -gateway host-name
- at cindex gateway, option
-If this option is set to a host name, XBoard communicates with the
-Internet Chess Server by using @file{rsh} to run
-the @code{telnetProgram} on the given host,
-instead of using its own internal implementation
-of the telnet protocol. You can substitute a different remote shell
-program for @file{rsh} using the @code{remoteShell} option described below.
- at xref{Firewalls}.
- at item -internetChessServerCommPort or -icscomm dev-name
- at cindex internetChessServerCommPort, option
- at cindex icscomm, option
-If this option is set, XBoard communicates with the ICS through
-the given character I/O device instead of opening a TCP connection.
-Use this option if your system does not have any kind of
-Internet connection itself (not even a SLIP or PPP connection),
-but you do have dialup access (or a hardwired terminal line) to
-an Internet service provider from which you can telnet to the ICS.
-
-The support for this option in XBoard is minimal. You need to
-set all communication parameters and tty modes before you enter
-XBoard.
-
-Use a script something like this:
-
- at example
-stty raw -echo 9600 > /dev/tty00
-xboard -ics -icscomm /dev/tty00
- at end example
-
-Here replace @samp{/dev/tty00} with the name of the device that your
-modem is connected to. You might have to add several more
-options to these stty commands. See the man pages for @file{stty}
-and @code{tty} if you run into problems. Also, on many systems stty
-works on its standard input instead of standard output, so you
-have to use @samp{<} instead of @samp{>}.
-
-If you are using linux, try starting with the script below.
-Change it as necessary for your installation.
-
- at example
-#!/bin/sh -f
-# configure modem and fire up XBoard
-
-# configure modem
-(
-  stty 2400 ; stty raw ; stty hupcl ; stty -clocal
-  stty ignbrk ; stty ignpar ; stty ixon ; stty ixoff
-  stty -iexten ; stty -echo
-) < /dev/modem
-xboard -ics -icscomm /dev/modem
- at end example
- at noindent
-After you start XBoard in this way, type whatever commands are
-necessary to dial out to your Internet provider and log in.
-Then telnet to ICS, using a command like
- at kbd{telnet chessclub.com 5000}.
-Important: See the paragraph below about extra echoes, 
-in @ref{Limitations}.
- at item -icslogon or -internetChessServerLogonScript file-name
- at cindex icslogon, option
- at cindex internetChessServerLogonScript, option
- at cindex .icsrc
-Whenever XBoard connects to the Internet Chess Server,
-if it finds a file with the name given in this option, it feeds the
-file's contents to the ICS as commands. The default file name
-is @file{.icsrc}.
-Usually the first two lines of the file should be
-your ICS user name and password.
-The file can be either in $CHESSDIR, in XBoard's working
-directory if CHESSDIR is not set, or in your home directory.
- at item -msLoginDelay delay
- at cindex msLoginDelay, option
-If you experience trouble logging on to an ICS when using the
- at code{-icslogon} option, inserting some delay between characters
-of the logon script may help. This option adds @code{delay}
-milliseconds of delay between characters. Good values to try
-are 100 and 250.
- at item -icsinput/-xicsinput or -internetChessServerInputBox true/false
- at cindex icsinput, option
- at cindex internetChessServerInputBox, option
-Sets the ICS Input Box menu option. @xref{Mode Menu}. Default: false.
- at item -autocomm/-xautocomm or -autoComment true/false
- at cindex autocomm, option
- at cindex autoComment, option
-Sets the Auto Comment menu option. @xref{Options Menu}. Default: false.
- at item -autoflag/-xautoflag or -autoCallFlag true/false
- at cindex autoflag, option
- at cindex autoCallFlag, option
-Sets the Auto Flag menu option.  @xref{Options Menu}. Default: false.
- at item -autobs/-xautobs or -autoObserve true/false
- at cindex autobs, option
- at cindex autoObserve, option
-Sets the Auto Observe menu option.  @xref{Options Menu}. Default: false.
- at item -moves/-xmoves or -getMoveList true/false
- at cindex moves, option
- at cindex getMoveList, option
-Sets the Get Move List menu option.  @xref{Options Menu}.  Default: true.
- at item -alarm/-xalarm or -icsAlarm true/false
- at cindex alarm, option
- at cindex icsAlarm, option
-Sets the ICS Alarm menu option.  @xref{Options Menu}. Default: true.
- at item -icsAlarmTime ms
- at cindex icsAlarmTime, option
-Sets the time in milliseconds for the ICS Alarm menu option. 
- at xref{Options Menu}. Default: 5000.
- at item -pre/-xpre \fRor\fB -premove true/false
- at cindex pre, option
- at cindex premove, option
-Sets the Premove menu option. @xref{Options Menu}. Default: true.
- at item -quiet/-xquiet or -quietPlay true/false
- at cindex quiet, option
- at cindex quietPlay, option
-Sets the Quiet Play menu option.  @xref{Options Menu}.  Default: false.
- at item -colorizeMessages or -colorize
- at cindex Colors
- at cindex colorize, option
-Setting colorizeMessages
-to true tells XBoard to colorize the messages received from
-the ICS.  Colorization works only if your xterm 
-supports ISO 6429 escape sequences for changing text colors.
- at item -colorShout foreground,background,bold
- at itemx -colorSShout foreground,background,bold
- at itemx -colorChannel1 foreground,background,bold
- at itemx -colorChannel foreground,background,bold
- at itemx -colorKibitz foreground,background,bold
- at itemx -colorTell foreground,background,bold
- at itemx -colorChallege foreground,background,bold
- at itemx -colorRequest foreground,background,bold
- at itemx -colorSeek foreground,background,bold
- at itemx -colorNormal foreground,background,bold
- at cindex Colors
- at cindex colorShout, option
- at cindex colorSShout, option
- at cindex colorChannel1, option
- at cindex colorChannel, option
- at cindex colorKibitz, option
- at cindex colorTell, option
- at cindex colorChallenge, option
- at cindex colorRequest, option
- at cindex colorSeek, option
- at cindex colorNormal, option
-These options set the colors used when colorizing ICS messages.
-All ICS messages are grouped into one of these categories:
-shout, sshout, channel 1, other channel, kibitz, tell, challenge, 
-request (including abort, adjourn, draw, pause, and takeback), or
-normal (all other messages).  
-
-Each foreground or background argument can be one of the following:
-black, red, green, yellow, blue, magenta, cyan, white, or default.
-Here ``default'' means the default foreground or background color of
-your xterm.  Bold can be 1 or 0.  If background is omitted, ``default''
-is assumed; if bold is omitted, 0 is assumed.
-
-Here is an example of how to set the colors in your @file{.Xdefaults} file.
-The colors shown here are the default values; you will get
-them if you turn @code{-colorize} on without specifying your own colors.
-
- at example
-xboard*colorizeMessages: true	
-xboard*colorShout: green
-xboard*colorSShout: green, black, 1
-xboard*colorChannel1: cyan
-xboard*colorChannel: cyan, black, 1
-xboard*colorKibitz: magenta, black, 1
-xboard*colorTell: yellow, black, 1
-xboard*colorChallenge: red, black, 1
-xboard*colorRequest: red
-xboard*colorSeek: blue
-xboard*colorNormal: default
- at end example
- at item -soundProgram progname
- at cindex soundProgram, option
- at cindex Sounds
-If this option is set to a sound-playing program that is installed and
-working on your system, XBoard can play sound files when certain
-events occur, listed below.  The default program name is "play".  If
-any of the sound options is set to "$", the event rings the terminal
-bell by sending a ^G character to standard output, instead of playing
-a sound file.  If an option is set to the empty string "", no sound is
-played for that event.
- at item -soundShout filename
- at itemx -soundSShout filename
- at itemx -soundChannel filename
- at itemx -soundKibitz filename
- at itemx -soundTell filename
- at itemx -soundChallenge filename
- at itemx -soundRequest filename
- at itemx -soundSeek filename
- at cindex soundShout, option
- at cindex soundSShout, option
- at cindex soundChannel, option
- at cindex soundKibitz, option
- at cindex soundTell, option
- at cindex soundChallenge, option
- at cindex soundRequest, option
- at cindex soundSeek, option
-These sounds are triggered in the same way as the colorization events
-described above.  They all default to "", no sound.  They are played
-only if the colorizeMessages is on.
- at item -soundMove filename
- at cindex soundMove, option
-This sound is used by the Move Sound menu option.  Default: "$".
- at item -soundIcsAlarm filename
- at cindex soundIcsAlarm, option
-This sound is used by the ICS Alarm menu option.  Default: "$".
- at item -soundIcsWin filename
- at cindex soundIcsWin, option
-This sound is played when you win an ICS game.  Default: "" (no sound).
- at item -soundIcsLoss filename
- at cindex soundIcsLoss, option
-This sound is played when you lose an ICS game.  Default: "" (no sound).
- at item -soundIcsDraw filename
- at cindex soundIcsDraw, option
-This sound is played when you draw an ICS game.  Default: "" (no sound).
- at item -soundIcsUnfinished filename
- at cindex soundIcsUnfinished, option
-This sound is played when an ICS game that you are participating in is
-aborted, adjourned, or otherwise ends inconclusively.  Default: "" (no
-sound).
-
-Here is an example of how to set the sounds in your .Xdefaults file:
-
- at example
-xboard*soundShout: shout.wav
-xboard*soundSShout: sshout.wav
-xboard*soundChannel1: channel1.wav
-xboard*soundChannel: channel.wav
-xboard*soundKibitz: kibitz.wav
-xboard*soundTell: tell.wav
-xboard*soundChallenge: challenge.wav
-xboard*soundRequest: request.wav
-xboard*soundSeek: seek.wav
-xboard*soundMove: move.wav
-xboard*soundIcsWin: win.wav
-xboard*soundIcsLoss: lose.wav
-xboard*soundIcsDraw: draw.wav
-xboard*soundIcsUnfinished: unfinished.wav
-xboard*soundIcsAlarm: alarm.wav
- at end example
- at end table
-
- at node Load and Save options
- at section Load and Save Options
- at cindex Options, Load and Save
- at cindex Load and Save options
- at table @asis
- at item -lgf or -loadGameFile file
- at itemx -lgi or -loadGameIndex index
- at cindex lgf, option
- at cindex loadGameFile, option
- at cindex lgi, option
- at cindex loadGameIndex, option
-If the @code{loadGameFile} option is set, XBoard loads the specified
-game file at startup. The file name @file{-} specifies the standard
-input. If there is more than one game in the file, XBoard
-pops up a menu of the available games, with entries based on their PGN 
-(Portable Game Notation) tags.
-If the @code{loadGameIndex} option is set to @samp{N}, the menu is suppressed
-and the N th game found in the file is loaded immediately.
-The menu is also suppressed if @code{matchMode} is enabled or if the game file
-is a pipe; in these cases the first game in the file is loaded immediately.
-Use the @file{pxboard} shell script provided with XBoard if you
-want to pipe in files containing multiple games and still see the menu.
- at item -td or -timeDelay seconds
- at cindex td, option
- at cindex timeDelay, option
-Time delay between moves during @samp{Load Game}. Fractional seconds
-are allowed; try @samp{-td 0.4}. A time delay value of -1 tells
-XBoard not to step through game files automatically. Default: 1
-second.
- at item -sgf or -saveGameFile file
- at cindex sgf, option
- at cindex saveGameFile, option
-If this option is set, XBoard appends a record of every game
-played to the specified file. The file name @file{-} specifies the
-standard output.
- at item -autosave/-xautosave or -autoSaveGames true/false
- at cindex autosave, option
- at cindex autoSaveGames, option
-Sets the Auto Save menu option.  @xref{Options Menu}.  Default: false.
-Ignored if @code{saveGameFile} is set.
- at item -lpf or -loadPositionFile file
- at itemx -lpi or -loadPositionIndex index
- at cindex lpf, option
- at cindex loadPositionFile, option
- at cindex lpi, option
- at cindex loadPositionIndex, option
-If the @code{loadPositionFile} option is set, XBoard loads the
-specified position file at startup. The file name @file{-} specifies the
-standard input. If the @code{loadPositionIndex} option is set to N,
-the Nth position found in the file is loaded; otherwise the
-first position is loaded.
- at item -spf or -savePositionFile file
- at cindex spf, option
- at cindex savePositionFile, option
-If this option is set, XBoard appends the final position reached
-in every game played to the specified file. The file name @file{-}
-specifies the standard output.
- at item -oldsave/-xoldsave or -oldSaveStyle true/false
- at cindex oldsave, option
- at cindex oldSaveStyle, option
-Sets the Old Save Style menu option.  @xref{Options Menu}.  Default: false.
- at end table
-
- at node User interface options
- at section User Interface Options
- at cindex User interface options
- at cindex Options, User interface
- at table @asis
- at item -display
- at itemx -geometry
- at itemx -iconic
- at cindex display, option
- at cindex geometry, option
- at cindex iconic, option
-These and most other standard Xt options are accepted.
- at item -movesound/-xmovesound or -ringBellAfterMoves true/false
- at cindex movesound, option
- at cindex bell, option
- at cindex ringBellAfterMoves, option
-Sets the Move Sound menu option.  @xref{Options Menu}.  Default: false.
-For compatibility with old XBoard versions, -bell/-xbell are also 
-accepted as abbreviations for this option.
- at item -exit/-xexit or -popupExitMessage true/false
- at cindex exit, option
- at cindex popupExitMessage, option
-Sets the Popup Exit Message menu option.  @xref{Options Menu}. Default: true.
- at item -popup/-xpopup or -popupMoveErrors true/false
- at cindex popup, option
- at cindex popupMoveErrors, option
-Sets the Popup Move Errors menu option.  @xref{Options Menu}. Default: false.
- at item -queen/-xqueen or -alwaysPromoteToQueen true/false
- at cindex queen, option
- at cindex alwaysPromoteToQueen, option
-Sets the Always Queen menu option.  @xref{Options Menu}.  Default: false.
- at item -legal/-xlegal or -testLegality true/false
- at cindex legal, option
- at cindex testLegality, option
-Sets the Test Legality menu option.  @xref{Options Menu}.  Default: true.
- at item -size or -boardSize (sizeName | n1,n2,n3,n4,n5,n6,n7)
- at cindex size, option
- at cindex boardSize, option
- at cindex board size
-Determines how large the board will be, by selecting the pixel size
-of the pieces and setting a few related parameters.
-The sizeName can be one of: Titanic, giving 129x129 pixel pieces,
-Colossal 116x116, Giant 108x108, Huge 95x95, Big 87x87, Large 80x80, Bulky 72x72,
-Medium 64x64, Moderate 58x58, Average 54x54, Middling 49x49, Mediocre
-45x45, Small 40x40, Slim 37x37, Petite 33x33, Dinky 29x29, Teeny 25x25,
-or Tiny 21x21.
-Pieces of all these sizes are built into XBoard.
-Other sizes can
-be used if you have them; see the pixmapDirectory and bitmapDirectory
-options.
-The default depends on the size of your screen; it is approximately the
-largest size that will fit without clipping.
-
-You can select other sizes or vary other layout parameters by providing
-a list of comma-separated values (with no spaces) as the argument.
-You do not need to provide all the values; for any you omit from the
-end of the list, defaults are taken from the nearest built-in size.
-The value @code{n1} gives the piece size, @code{n2} the width of the
-black border
-between squares, @code{n3} the desired size for the 
-clockFont, @code{n4} the desired size for the coordFont,
- at code{n5} the desired size for the default font,
- at code{n6} the smallLayout flag (0 or 1), 
-and @code{n7} the tinyLayout flag (0 or 1).  
-All dimensions are in pixels.
-If the border between squares is eliminated (0 width), the various
-highlight options will not work, as there is nowhere to draw the highlight.
-If smallLayout is 1 and @code{titleInWindow} is true, 
-the window layout is rearranged to make more room for the title.
-If tinyLayout is 1, the labels on the menu bar are abbreviated
-to one character each and the buttons in the button bar are made narrower.
- at item -coords/-xcoords or -showCoords true/false
- at cindex coords, option
- at cindex showCoords, option
-Sets the Show Coords menu option.  @xref{Options Menu}.  Default: false.
-The @code{coordFont} option specifies what font to use.
- at item -autoraise/-xautoraise or -autoRaiseBoard true/false
- at cindex autoraise, option
- at cindex autoRaiseBoard, option
-Sets the Auto Raise Board menu option.  @xref{Options Menu}.  Default: true.
- at item -autoflip/-xautoflip or -autoFlipView true/false
- at cindex autoflip, option
- at cindex autoFlipView, option
-Sets the Auto Flip View menu option.  @xref{Options Menu}.  Default: true.
- at item -flip/-xflip or -flipView true/false
- at cindex flip, option
- at cindex flipView, option
-If Auto Flip View is not set, or if you are observing but not participating
-in a game, then the positioning of the board at the start of each game
-depends on the flipView option.  If flipView is false (the default),
-the board is positioned so that the white pawns move from the bottom to the
-top; if true, the black pawns move from the bottom to the top.
-In any case, the Flip menu option (see @ref{Options Menu})
-can be used to flip the board after
-the game starts.
- at item -title/-xtitle or -titleInWindow true/false
- at cindex title, option
- at cindex titleInWindow, option
-If this option is true, XBoard displays player names (for ICS
-games) and game file names (for @samp{Load Game}) inside its main
-window. If the option is false (the default), this information is
-displayed only in the window banner. You probably won't want to
-set this option unless the information is not showing up in the
-banner, as happens with a few X window managers.
- at item -buttons/-xbuttons or -showButtonBar True/False
- at cindex buttons, option
- at cindex showButtonBar, option
-If this option is False, xboard omits the [<<] [<] [P] [>] [>>] button
-bar from the window, allowing the message line to be wider.  You can
-still get the functions of these buttons using the menus or their keyboard
-shortcuts.  Default: true.
- at item -mono/-xmono or -monoMode true/false
- at cindex mono, option
- at cindex monoMode, option
-Determines whether XBoard displays its pieces and squares with
-two colors (true) or four (false). You shouldn't have to
-specify @code{monoMode}; XBoard will determine if it is necessary.
- at item -flashCount count
- at itemx -flashRate rate
- at itemx -flash/-xflash
- at cindex flashCount, option
- at cindex flashRate, option
- at cindex flash, option
- at cindex xflash, option
-These options enable flashing of pieces when they
-land on their destination square.
- at code{flashCount}
-tells XBoard how many times to flash a piece after it
-lands on its destination square.
- at code{flashRate}
-controls the rate of flashing (flashes/sec).
-Abbreviations:
- at code{flash}
-sets flashCount to 3.
- at code{xflash}
-sets flashCount to 0.
-Defaults:  flashCount=0 (no flashing), flashRate=5.
- at item -highlight/-xhighlight or -highlightLastMove true/false
- at cindex highlight, option
- at cindex highlightLastMove, option
-Sets the Highlight Last Move menu option. @xref{Options Menu}. Default: false.
- at item -blind/-xblind or -blindfold true/false
- at cindex blind, option
- at cindex blindfold, option
-Sets the Blindfold menu option.  @xref{Options Menu}.  Default: false.
- at item -clockFont font
- at cindex clockFont, option
- at cindex Font, clock
-The font used for the clocks. If the option value is a pattern
-that does not specify the font size, XBoard tries to choose an
-appropriate font for the board size being used.
-Default: -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
- at item -coordFont font
- at cindex coordFont, option
- at cindex Font, coordinates
-The font used for rank and file coordinate labels if @code{showCoords}
-is true. If the option value is a pattern that does not specify
-the font size, XBoard tries to choose an appropriate font for
-the board size being used.
-Default: -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
- at item -font font
- at cindex font, option
- at cindex Font
-The font used for popup dialogs, menus, comments, etc.
-If the option value is a pattern that does not specify
-the font size, XBoard tries to choose an appropriate font for
-the board size being used.
-Default: -*-helvetica-medium-r-normal--*-*-*-*-*-*-*-*.
- at item -fontSizeTolerance tol
- at cindex fontSizeTolerance, option
-In the font selection algorithm, a nonscalable font will be preferred
-over a scalable font if the nonscalable font's size differs
-by @code{tol} pixels
-or less from the desired size.  A value of -1 will force
-a scalable font to always be used if available; a value of 0 will
-use a nonscalable font only if it is exactly the right size; 
-a large value (say 1000) will force a nonscalable font to always be
-used if available.  Default: 4.
- at item -bm or -bitmapDirectory dir
- at itemx -pixmap or -pixmapDirectory dir
- at cindex bm, option
- at cindex bitmapDirectory, option
- at cindex pixmap, option
- at cindex pixmapDirectory, option
-These options control what piece images xboard uses.  The XBoard
-distribution includes one set of pixmap pieces in xpm format, in the
-directory @file{pixmaps}, and one set of bitmap pieces in xbm format,
-in the directory @file{bitmaps}.  Pixmap
-pieces give a better appearance on the screen: the white pieces have
-dark borders, and the black pieces have opaque internal details.  With
-bitmaps, neither piece color has a border, and the internal details
-are transparent; you see the square color or other background color
-through them.
-
-If XBoard is configured and compiled on a system that includes libXpm,
-the X pixmap library, the xpm pixmap pieces are compiled in as the
-default.  A different xpm piece set can be selected at runtime with
-the @code{pixmapDirectory} option, or a bitmap piece set can be selected
-with the @code{bitmapDirectory} option.
-
-If XBoard is configured and compiled on a system that does not include
-libXpm (or the @code{--disable-xpm} option is given to the configure
-program), the bitmap pieces are compiled in as the default.  It is not
-possible to use xpm pieces in this case, but pixmap pieces in another
-format called "xim" can be used by giving the @code{pixmapDirectory} option.
-Or again, a different bitmap piece set can be selected with the
- at code{bitmapDirectory} option.
-
-Files in the @code{bitmapDirectory} must be named as follows:
-The first character of a piece bitmap name gives the piece it 
-represents (@samp{p}, @samp{n}, @samp{b}, @samp{r}, @samp{q}, or @samp{k}),
-the next characters give the size in pixels, the
-following character indicates whether the piece is
-solid or outline (@samp{s} or @samp{o}),
-and the extension is @samp{.bm}.
-For example, a solid 80x80 knight would be named @file{n80s.bm}.
-The outline bitmaps are used only in monochrome mode.
-If bitmap pieces are compiled in and the bitmapDirectory is missing
-some files, the compiled in pieces are used instead.
-
-If the bitmapDirectory option is given,
-it is also possible to replace xboard's icons and menu checkmark,
-by supplying files named @file{icon_white.bm}, @file{icon_black.bm}, and
- at file{checkmark.bm}.
-
-For more information about pixmap pieces and how to get additional
-sets, see @ref{zic2xpm} below.
- at item -whitePieceColor color
- at itemx -blackPieceColor color
- at itemx -lightSquareColor color
- at itemx -darkSquareColor color
- at itemx -highlightSquareColor color
- at cindex Colors
- at cindex whitePieceColor, option
- at cindex blackPieceColor, option
- at cindex lightSquareColor, option
- at cindex darkSquareColor, option
- at cindex highlightSquareColor, option
-Colors to use for the pieces, squares, and square highlights.
-Defaults:
-
- at example
--whitePieceColor       #FFFFCC
--blackPieceColor       #202020
--lightSquareColor      #C8C365
--darkSquareColor       #77A26D
--highlightSquareColor  #FFFF00
--premoveHighlightColor #FF0000
- at end example
-
-On a grayscale monitor you might prefer:
-
- at example
--whitePieceColor       gray100
--blackPieceColor       gray0
--lightSquareColor      gray80
--darkSquareColor       gray60
--highlightSquareColor  gray100
--premoveHighlightColor gray70
- at end example
- at item -drag/-xdrag or -animateDragging true/false
- at cindex drag, option
- at cindex animateDragging, option
-Sets the Animate Dragging menu option. @xref{Options Menu}.  Default: true.
- at item -animate/-xanimate or -animateMoving true/false
- at cindex animate, option
- at cindex animateMoving, option
-Sets the Animate Moving menu option. @xref{Options Menu}.  Default: true.
- at item -animateSpeed n
- at cindex -animateSpeed, option
-Number of milliseconds delay between each animation frame when Animate
-Moves is on.
- at end table
-
- at node Other options
- at section Other Options
- at cindex Options, miscellaneous
- at table @asis
- at item -ncp/-xncp or -noChessProgram true/false
- at cindex ncp, option
- at cindex noChessProgram, option
-If this option is true, XBoard acts as a passive chessboard; it
-does not start a chess engine at all. Turning on this option
-also turns off clockMode. Default: false.
- at item -mode or -initialMode modename
- at cindex mode, option
- at cindex initalMode, option
-If this option is given, XBoard selects the given modename
-from the Mode menu after starting and (if applicable) processing the
-loadGameFile or loadPositionFile option. Default: "" (no selection). 
-Other supported values are 
-MachineWhite, MachineBlack, TwoMachines, Analysis, 
-AnalyzeFile, EditGame, EditPosition, and Training.
- at item -variant varname
- at cindex variant, option
-Activates preliminary, partial support for playing chess variants
-against a local engine or editing variant games.  This flag is not
-needed in ICS mode.  Recognized variant names are:
-
- at example
-normal        Normal chess
-wildcastle    Shuffle chess, king can castle from d file
-nocastle      Shuffle chess, no castling allowed
-fischerandom  Fischer Random shuffle chess
-bughouse      Bughouse, ICC/FICS rules
-crazyhouse    Crazyhouse, ICC/FICS rules
-losers        Lose all pieces or get mated (ICC wild 17)
-suicide       Lose all pieces including king (FICS)
-giveaway      Try to have no legal moves (ICC wild 26)
-twokings      Weird ICC wild 9
-kriegspiel    Opponent's pieces are invisible
-atomic        Capturing piece explodes (ICC wild 27)
-3check        Win by giving check 3 times (ICC wild 25)
-shatranj      An ancient precursor of chess (ICC wild 28)
-unknown       Catchall for other unknown variants
- at end example
-
-In the shuffle variants, xboard does not shuffle the pieces, but
-you can do it by hand using Edit Position.  Some variants are
-supported only in ICS mode, including fischerandom, bughouse, and
-kriegspiel.  The winning/drawing conditions in crazyhouse (offboard
-interposition on mate), losers, suicide, giveaway, atomic, and 3check
-are not fully understood.  In crazyhouse, xboard does not yet keep
-track of offboard pieces.  Shatranj is unsupported, but it may be
-usable if you turn off Test Legality.
- at item -debug/-xdebug or -debugMode true/false
- at cindex debug, option
- at cindex debugMode, option
-Turns on debugging printout.
- at item -rsh or -remoteShell shell-name
- at cindex rsh, option
- at cindex remoteShell, option
-Name of the command used to run programs remotely. The default
-is @file{rsh} or @file{remsh}, determined when XBoard is
-configured and compiled.
- at item -ruser or -remoteUser user-name
- at cindex ruser, option
- at cindex remoteUser, option
-User name on the remote system when running programs with the
- at code{remoteShell}. The default is your local user name.
- at end table
-
- at node Chess Servers
- at chapter Chess Servers
- at cindex ICS
- at cindex ICS, addresses
- at cindex Internet Chess Server
-An @dfn{Internet Chess Server}, or @dfn{ICS}, is a place on the
-Internet where people can get together to play chess, watch other
-people's games, or just chat.  You can use either @code{telnet} or a
-client program like XBoard to connect to the server.  There are
-thousands of registered users on the different ICS hosts, and it is
-not unusual to meet 200 on both chessclub.com and freechess.org.
-
-Most people can just type @kbd{xboard -ics} to start XBoard as an ICS
-client.  Invoking XBoard in this way connects you to the Internet
-Chess Club (ICC), a commercial ICS.  You can log in there as a guest
-even if you do not have a paid account.  To connect to the largest
-Free ICS (FICS), use the command @kbd{xboard -ics -icshost freechess.org}
-instead, or substitute a different host name to connect to your
-favorite ICS.
-For a full description of command-line options that control 
-the connection to ICS and change the default values of ICS options, see
- at ref{ICS options}.  
-
-While you are running XBoard as an ICS client,
-you use the terminal window that you started XBoard from
-as a place to type in commands and read information that is
-not available on the chessboard.
-
-The first time you need to use the terminal is to enter your login name
-and password, if you are a registered player. (You don't need to do
-this manually; the @code{icsLogon} option can do it for you.
- at pxref{ICS options}.)  If you are not registered, 
-enter @kbd{g} as your name, and the server will pick a
-unique guest name for you.
-
-Some useful ICS commands
-include
- at table @kbd
- at item help <topic>
- at cindex help, ICS command
-to get help on the given <topic>. To get a list of possible topics type
- at dfn{help} without topic.  Try the help command before you ask other
-people on the server for help.
-
-For example @kbd{help register} tells you how to become a registered
-ICS player.
- at item who <flags>
- at cindex who, ICS command
-to see a list of people who are logged on.  Administrators
-(people you should talk to if you have a problem) are marked
-with the character @samp{*}, an asterisk. The <flags> allow you to
-display only selected players: For example, @kbd{who of} shows a
-list of players who are interested in playing but do not have
-an opponent.
- at item games
- at cindex games, ICS command
-to see what games are being played
- at item match <player> [<mins>] [<inc>]
-to challenge another player to a game. Both opponents get <mins> minutes
-for the game, and <inc> seconds will be added after each move.
-If another player challenges you, the server asks if you want to
-accept the challenge; use the @kbd{accept} or @kbd{decline} commands
-to answer.
- at item accept
- at itemx decline
- at cindex accept, ICS command
- at cindex decline, ICS command
-to accept or decline another player's offer. 
-The offer may be to start a new game, or to agree to a 
- at kbd{draw}, @kbd{adjourn} or @kbd{abort} the current game. @xref{Action Menu}.
-
-If you have more than one pending offer (for example, if more than one player
-is challenging you, or if your opponent offers both a draw and to adjourn the
-game), you have to supply additional information, by typing something
-like @kbd{accept <player>}, @kbd{accept draw}, or @kbd{draw}.
- at item draw
- at itemx adjourn
- at itemx abort
- at cindex draw, ICS command
- at cindex adjourn, ICS command
- at cindex abort, ICS command
-asks your opponent to terminate a game by mutual agreement. Adjourned
-games can be continued later. 
-Your opponent can either @kbd{decline} your offer or accept it (by typing the
-same command or typing @kbd{accept}).  In some cases these commands work
-immediately, without asking your opponent to agree.  For example, you can
-abort the game unilaterally if your opponent is out of time, and you can claim
-a draw by repetition or the 50-move rule if available simply by typing 
- at kbd{draw}.
- at item finger <player>
- at cindex finger, ICS command
-to get information about the given <player>. (Default: yourself.)
- at item vars
- at cindex vars, ICS command
-to get a list of personal settings
- at item set <var> <value>
- at cindex set, ICS command
-to modify these settings
- at item observe <player>
- at cindex observe, ICS command
-to observe an ongoing game of the given <player>.
- at item examine
- at itemx oldmoves
- at cindex examine, ICS command
- at cindex oldmoves, ICS command
-to review a recently completed game
- at end table
-
-Some special XBoard features are activated when you are
-in examine mode on ICS.  See the descriptions of the menu commands
- at samp{Forward}, @samp{Backward}, @samp{Pause}, @samp{ICS Client}, 
-and @samp{Stop Examining} on the @ref{Step Menu}, @ref{Mode Menu}, and
- at ref{Options Menu}.
-
- at node Firewalls
- at chapter Firewalls
-By default, XBoard communicates with an Internet Chess Server
-by opening a TCP socket directly from the machine it is running on
-to the ICS. If there is a firewall between your machine and the ICS,
-this won't work. Here are some recipes for getting around common
-kinds of firewalls using special options to XBoard.
-Important: See the paragraph in the below about extra echoes, in
- at ref{Limitations}.
-
-Suppose that you can't telnet directly to ICS, but you can telnet
-to a firewall host, log in, and then telnet from there to ICS.
-Let's say the firewall is called @samp{firewall.example.com}. Set
-command-line options as follows:
-
- at example
-xboard -ics -icshost firewall.example.com -icsport 23
- at end example
- at noindent
-Or in your @file{.Xdefaults} file:
-
- at example
-XBoard*internetChessServerHost: firewall.example.com
-XBoard*internetChessServerPort: 23
- at end example
- at noindent
-Then when you run XBoard in ICS mode, you will be prompted
-to log in to the firewall host. This works because port 23 is the
-standard telnet login service. Do so, then telnet to ICS, using a
-command like @samp{telnet chessclub.com 5000}, or whatever command
-the firewall provides for telnetting to port 5000.
-
-If your firewall lets you telnet (or rlogin) to remote hosts but
-doesn't let you telnet to port 5000, you may be able to connect to the
-chess server on port 23 instead, which is the port the telnet program
-uses by default.  Some chess servers support this (including
-chessclub.com and freechess.org), while some do not.
-
-If your chess server does not allow connections on port 23 and your
-firewall does not allow you to connect to other ports, you may be able
-to connect by hopping through another host outside the firewall that
-you have an account on.  For instance, suppose you have a shell
-account at @samp{foo.edu}. Follow the recipe above, but instead of
-typing @samp{telnet chessclub.com 5000} to the firewall, type
- at samp{telnet foo.edu} (or @samp{rlogin foo.edu}), log in there, and
-then type @samp{telnet chessclub.com 5000}.
-
-Suppose that you can't telnet directly to ICS, but you can use rsh
-to run programs on a firewall host, and that host can telnet to ICS.
-Let's say the firewall is called @samp{rsh.example.com}. Set
-command-line options as follows:
-
- at example
-xboard -ics -gateway rsh.example.com -icshost chessclub.com
- at end example
-
- at noindent
-Or in your @file{.Xdefaults} file:
-
- at example
-XBoard*gateway: rsh.example.com
-XBoard*internetChessServerHost: chessclub.com
- at end example
-
-Then when you run XBoard in ICS mode, it will connect to
-the ICS by using @file{rsh} to run the command
- at samp{telnet chessclub.com 5000} on host @samp{rsh.example.com}.
-
-Suppose that you can telnet anywhere you want, but you have to
-run a special program called @file{ptelnet} to do so.
-
-First, we'll consider the easy case, in which
- at samp{ptelnet chessclub.com 5000} gets you to the chess server.
-In this case set command line options as follows:
-
- at example
-xboard -ics -telnet -telnetProgram ptelnet
- at end example
-
- at noindent
-Or in your @file{.Xdefaults} file:
-
- at example
-XBoard*useTelnet: true
-XBoard*telnetProgram: ptelnet
- at end example
-
- at noindent
-Then when you run XBoard in ICS mode, it will issue the
-command @samp{ptelnet chessclub.com 5000} to connect to the ICS.
-
-Next, suppose that @samp{ptelnet chessclub.com 5000} doesn't work;
-that is, your @file{ptelnet} program doesn't let you connect to
-alternative ports. As noted above, your chess server may allow you to
-connect on port 23 instead.  In that case, just add the option
- at samp{-icsport ""} to the above command, or add
- at samp{XBoard*internetChessServerPort:} to your @file{.Xdefaults} file.
-But if your chess server doesn't let you connect on port 23, you will have
-to find some other host outside the firewall and hop through it. For
-instance, suppose you have a shell account at @samp{foo.edu}. Set
-command line options as follows:
-
- at example
-xboard -ics -telnet -telnetProgram ptelnet -icshost foo.edu -icsport ""
- at end example
-
- at noindent
-Or in your @file{.Xdefaults} file:
-
- at example
-XBoard*useTelnet: true
-XBoard*telnetProgram: ptelnet
-XBoard*internetChessServerHost: foo.edu
-XBoard*internetChessServerPort:
- at end example
-
- at noindent
-Then when you run XBoard in ICS mode, it will issue the
-command @samp{ptelnet foo.edu} to connect to your account at
- at samp{foo.edu}. Log in there, then type @samp{telnet chessclub.com 5000}.
-
-ICC timestamp and FICS timeseal do not work through some
-firewalls.  You can use them only if your firewall gives a clean TCP
-connection with a full 8-bit wide path.  If your firewall allows you
-to get out only by running a special telnet program, you can't use
-timestamp or timeseal across it.  But if you have access to a
-computer just outside your firewall, and you have much lower netlag
-when talking to that computer than to the ICS, it might be worthwhile
-running timestamp there.  Follow the instructions above for hopping
-through a host outside the firewall (foo.edu in the example),
-but run timestamp or timeseal on that host instead of telnet.
-
-Suppose that you have a SOCKS firewall that will give you a clean
-8-bit wide TCP connection to the chess server, but only after you
-authenticate yourself via the SOCKS protocol.  In that case, you could
-make a socksified version of XBoard and run that.  If you are using
-timestamp or timeseal, you will to socksify it, not XBoard; this may
-be difficult seeing that ICC and FICS do not provide source code for
-these programs.  Socksification is beyond the scope of this document,
-but see the SOCKS Web site at http://www.socks.permeo.com/.
-If you are missing SOCKS, try http://www.funbureau.com/.
-
- at node Environment
- at chapter Environment variables
- at cindex Environment variables
- at cindex CHESSDIR
-Game and position files are found in a directory named by the
- at code{CHESSDIR} environment variable. If this variable is not set, the
-current working directory is used. If @code{CHESSDIR} is set,
-XBoard actually changes its working directory to
- at code{$CHESSDIR}, so any files written by the chess engine
-will be placed there too.
-
- at node Limitations
- at chapter Limitations and known bugs
- at cindex Limitations
- at cindex Bugs
-There is no way for two people running copies of XBoard to play
-each other without going through an Internet Chess Server.
-
-Under some circumstances, your ICS password may be echoed when you log on.
-
-If you are connecting to the ICS by running telnet on an Internet
-provider or firewall host, you may find that each line you type is
-echoed back an extra time after you hit @key{Enter}. If your Internet
-provider is a Unix system, you can probably turn its echo off by
-typing @kbd{stty -echo} after you log in, and/or typing
- at key{^E}@key{Enter} (Ctrl+E followed by the Enter key) to the telnet
-program after you have logged into ICS.  It is a good idea to do this
-if you can, because the extra echo can occasionally confuse XBoard's
-parsing routines.
-
-The game parser recognizes only algebraic notation.
-
-The internal move legality tester does not look at the game history,
-so in some cases it misses illegal castling or en passant captures.
-It permits castling with the king on the d file because this is possible in
-some "wild 1" games on ICS.  It does not check
-piece drops in bughouse and crazyhouse to see if you actually
-hold the piece you are trying to drop.
-However, if you attempt an illegal move when using
-a chess engine or chess server, XBoard will accept the error message
-that comes back, undo the move, and let you try another.
-
-Fischer Random castling is not understood.  You can probably play
-Fischer Random successfully on ICS by typing castling moves into the ICS
-Interaction window, but they will not be animated correctly, and saved
-games will not be loaded correctly if castling occurs.
-
-FEN positions saved by XBoard
-never include correct information about whether castling is legal or
-how many half-moves have been made since the last irreversible move,
-and sometimes may not correctly indicate when en passant capture is available.
-
-The mate detector does not understand that non-contact mate is not
-really mate in bughouse and crazyhouse.  The only problem this causes
-while playing is minor: a @samp{#} (mate indicator) character will show
-up after a non-contact mating move in the move list; XBoard will
-not assume the game is over at that point.  However, if you are editing
-a game, Edit Game mode will be terminated by a non-contact mate.
-
-The menus may not work if your keyboard is in Caps Lock or Num Lock mode.
-This seems to be a problem with the Athena menu widget,
-not an XBoard bug.
-
-Also see the ToDo file included with the distribution for many other
-possible bugs, limitations, and ideas for improvement that have been
-suggested.
- at node Problems
- at chapter Reporting problems
- at cindex Bugs
- at cindex Bug reports
- at cindex Reporting bugs
- at cindex Problems
- at cindex Reporting problems
-
-Report bugs and problems with XBoard to @code{<bug-xboard@@gnu.org>}.
-
-Please use the @file{script} program to start a typescript, run 
-XBoard with the @samp{-debug} option, and include the typescript
-output in your message.
-Also tell us what kind of machine and what operating system version
-you are using.  The command @samp{uname -a} will often tell you this.
-Here is a sample of approximately what you should type:
-
- at example
-script
-uname -a
-./configure
-make
-./xboard -debug
-exit
-mail bug-xboard@@gnu.org
-Subject: Your short description of the problem
-Your detailed description of the problem
-~r typescript
-.
- at end example
-
-If you improve XBoard, please send a message about your changes,
-and we will get in touch with you about merging them in
-to the main line of development.
-Also see our Web site at http://savannah.gnu.org/projects/xboard/.
-
- at node Contributors
- at chapter Authors and contributors
- at cindex Authors
- at cindex Contributors
-
-Tim Mann has been responsible for XBoard versions 1.3 and beyond, and
-for WinBoard, a port of XBoard to Microsoft Win32 (Windows NT and
-Windows 95).
-
-Mark Williams contributed the initial (WinBoard-only) implementation
-of many new features added to both XBoard and WinBoard in version
-4.1.0, including copy/paste, premove, icsAlarm, autoFlipView, training
-mode, auto raise, and blindfold.  Ben Nye contributed X copy/paste
-code for XBoard.
-
-Hugh Fisher added animated piece movement to XBoard, and Henrik Gram
-(henrikg@@funcom.com) added it to WinBoard.  Frank McIngvale added
-click/click moving, the Analysis modes, piece flashing, ZIICS import,
-and ICS text colorization to XBoard.  Jochen Wiedmann ported XBoard to
-the Amiga, creating AmyBoard, and converted the documentation to
-texinfo.  Elmar Bartel contributed the new piece bitmaps introduced in
-version 3.2.  John Chanak contributed the initial implementation of
-ICS mode.  The color scheme and the old 80x80 piece bitmaps were taken
-from Wayne Christopher's @code{XChess} program.
-
-Chris Sears and Dan Sears wrote the original XBoard.  They were
-responsible for versions 1.0 through 1.2.
-
-Evan Welsh wrote @code{CMail}.  Patrick Surry helped in designing,
-testing, and documenting CMail.
-
- at node CMail
- at chapter CMail
- at cindex cmail
-The @file{cmail} program can help you play chess by email with opponents of
-your choice using XBoard as an interface.
-
-You will usually run @file{cmail} without giving any options.
-
- at menu
-* CMail options::    Invoking CMail.
-* CMail game::       Starting a CMail game.
-* CMail answer::     Answering a move.
-* CMail multi::      Multiple games in one message.
-* CMail completion:: Completing a game.
-* CMail trouble::    Known CMail problems.
- at end menu
-
- at node CMail options
- at section CMail options
- at table @asis
- at item -h
-Displays @file{cmail} usage information.
- at item -c
-Shows the conditions of the GNU General Public License.
- at xref{Copying}.
- at item -w
-Shows the warranty notice of the GNU General Public License.
- at xref{Copying}.
- at item -v
- at itemx -xv
-Provides or inhibits verbose output from @file{cmail} and XBoard,
-useful for debugging. The
- at code{-xv}
-form also inhibits the cmail introduction message.
- at item -mail
- at itemx -xmail
-Invokes or inhibits the sending of a mail message containing the move.
- at item -xboard
- at itemx -xxboard
-Invokes or inhibits the running of XBoard on the game file.
- at item -reuse
- at itemx -xreuse
-Invokes or inhibits the reuse of an existing XBoard to display the
-current game.
- at item -remail
-Resends the last mail message for that game. This inhibits running
-XBoard.
- at item -game <name>
-The name of the game to be processed.
- at item -wgames <number>
- at itemx -bgames <number>
- at itemx -games <number>
-Number of games to start as White, as Black or in total. Default is 1 as
-white and none as black. If only one color is specified then none of the
-other color is assumed. If no color is specified then equal numbers of
-White and Black games are started, with the extra game being as White if an
-odd number of total games is specified.
- at item -me <short name>
- at itemx -opp <short name>
-A one-word alias for yourself or your opponent.
- at item -wname <full name>
- at itemx -bname <full name>
- at itemx -name <full name>
- at itemx -oppname <full name>
-The full name of White, Black, yourself or your opponent.
- at item -wna <net address>
- at itemx -bna <net address>
- at itemx -na <net address>
- at itemx -oppna <net address>
-The email address of White, Black, yourself or your opponent.
- at item -dir <directory>
-The directory in which @file{cmail} keeps its files. This defaults to the
-environment variable @code{$CMAIL_DIR} or failing that, @code{$CHESSDIR},
- at file{$HOME/Chess} or @file{~/Chess}. It will be created if it does not exist.
- at item -arcdir <directory>
-The directory in which @file{cmail} archives completed games. Defaults to
-the environment variable @code{$CMAIL_ARCDIR} or, in its absence, the same
-directory as cmail keeps its working files (above).
- at item -mailprog <mail program>
-The program used by cmail to send email messages. This defaults to the
-environment variable @code{$CMAIL_MAILPROG} or failing that
- at file{/usr/ucb/Mail}, @file{/usr/ucb/mail} or @file{Mail}. You will need
-to set this variable if none of the above paths fit your system.
- at item -gamesFile <file>
- at cindex .cmailgames
-A file containing a list of games with email addresses. This defaults to
-the environment variable @code{$CMAIL_GAMES} or failing that
- at file{.cmailgames}.
- at item -aliasesFile <file>
- at cindex .cmailaliases
-A file containing one or more aliases for a set of email addresses. This
-defaults to the environment variable @code{$CMAIL_ALIASES} or failing
-that @file{.cmailaliases}.
- at item -logFile <file>
-A file in which to dump verbose debugging messages that are invoked with
-the @samp{-v}
-option.
- at item -event <event>
-The PGN Event tag (default @samp{Email correspondence game}).
- at item -site <site>
-The PGN Site tag (default @samp{NET}).
- at item -round <round>
-The PGN Round tag (default @samp{-}, not applicable).
- at item -mode <mode>
-The PGN Mode tag (default @samp{EM}, Electronic Mail).
- at item Other options
-Any option flags not listed above are passed through to XBoard.
-Invoking XBoard through CMail changes the default values of two XBoard
-options: The default value for @samp{-noChessProgram} is changed to
-true; that is, by default no chess engine is started.  The default
-value for @samp{-timeDelay} is changed to 0; that is, by default
-XBoard immediately goes to the end of the game as played so far,
-rather than stepping through the moves one by one.  You can still set
-these options to whatever values you prefer by supplying them on
-CMail's command line.  @xref{Options}.
- at end table
-
- at node CMail game
- at section Starting a CMail Game
-Type @file{cmail} from a shell to start a game as white. After an opening
-message, you will be prompted for a game name, which is optional---if you
-simply press @key{Enter}, the game name will take the form
- at samp{you-VS-opponent}. You will next be prompted for the short name
-of your opponent. If you haven't played this person before, you will also
-be prompted for his/her email address. @file{cmail} will then invoke
-XBoard in the background. Make your first move and select
- at samp{Mail Move} from the @samp{File} menu. @xref{File Menu}. If all is well,
- at file{cmail} will mail a copy of the move to your opponent. If you select
- at samp{Exit} without having selected @samp{Mail Move} then no move will be
-made.
-
- at node CMail answer
- at section Answering a Move
-When you receive a message from an opponent containing a move in one of
-your games, simply pipe the message through @file{cmail}. In some mailers
-this is as simple as typing @kbd{| cmail} when viewing the message, while in
-others you may have to save the message to a file and do @kbd{cmail < file}
-at the command line. In either case @file{cmail} will display the game using
-XBoard. If you didn't exit XBoard when you made your first move
-then @file{cmail} will do its best to use the existing XBoard instead
-of starting a new one. As before, simply make a move and select
- at samp{Mail Move} from the @samp{File} menu. @xref{File Menu}. @file{cmail}
-will try to use the
-XBoard that was most recently used to display the current game. This
-means that many games can be in progress simultaneously, each with its own
-active XBoard.
-
-If you want to look at the history or explore a variation, go ahead, but
-you must return to the current position before XBoard will allow you
-to mail a move. If you edit the game's history you must select
- at samp{Reload Same Game} from the @samp{File} menu to get back to the original
-position, then make the move you want and select @samp{Mail Move}.
-As before, if you decide you aren't ready to make a move just yet you can
-either select @samp{Exit} without sending a move or just leave
-XBoard running until you are ready.
-
- at node CMail multi
- at section Multi-Game Messages
-
-It is possible to have a @file{cmail} message carry more than one game.
-This feature was implemented to handle IECG (International Email Chess
-Group) matches, where a match consists of one game as white and one as black,
-with moves transmitted simultaneously. In case there are more general uses,
- at file{cmail} itself places no limit on the number of black/white games
-contained in a message; however, XBoard does.
-
- at node CMail completion
- at section Completing a Game
-Because XBoard can detect checkmate and stalemate, @file{cmail}
-handles game termination sensibly. As well as resignation, the
- at samp{Action} menu allows draws to be offered and accepted for
- at file{cmail} games.
-
-For multi-game messages, only unfinished and just-finished games will be
-included in email messages. When all the games are finished, they are
-archived in the user's archive directory, and similarly in the opponent's
-when he or she pipes the final message through @file{cmail}. The archive
-file name includes the date the game was started.
-
- at node CMail trouble
- at section Known CMail Problems
-It's possible that a strange conjunction of conditions may occasionally
-mean that @file{cmail} has trouble reactivating an existing
-XBoard. If this should happen, simply trying it again should work.
-If not, remove the file that stores the XBoard's PID
-(@file{game.pid}) or use the @samp{-xreuse} option to force
- at file{cmail} to start a new XBoard.
-
-Versions of @file{cmail} after 2.16 no longer understand the old file format
-that XBoard used to use and so cannot be used to correspond with
-anyone using an older version.
-
-Versions of @file{cmail} older than 2.11 do not handle multi-game messages,
-so multi-game correspondence is not possible with opponents using an older
-version.
-
- at node Other programs
- at chapter Other programs you can use with XBoard
- at cindex Other programs
-
-Here are some other programs you can use with XBoard
-
- at menu
-* GNU Chess::        The GNU Chess engine.
-* Crafty::           The Crafty chess engine.
-* zic2xpm::          The program used to import chess sets from ZIICS.
- at end menu
-
- at node GNU Chess
- at section GNU Chess
-
-The GNU Chess engine is available from:
-
-ftp://ftp.gnu.org/gnu/gnuchess/
-
-You can use XBoard to play a game against GNU Chess, or to
-interface GNU Chess to an ICS.
-
- at node Crafty
- at section Crafty
-
-Crafty is a chess engine written by Bob Hyatt.
-You can use XBoard to play a game against Crafty, hook Crafty up
-to an ICS, or use Crafty to interactively analyze games and positions
-for you.
-
-Crafty is a strong, rapidly evolving chess program. This rapid
-pace of development is good, because it means Crafty is always
-getting better.  This can sometimes cause problems with
-backwards compatibility, but usually the latest version of Crafty
-will work well with the latest version of XBoard.
-Crafty can be obtained from its author's FTP site:
-ftp://ftp.cis.uab.edu/hyatt/.
-
-To use Crafty with XBoard, give the -fcp and -fd options as follows, where
-<crafty's directory> is the directory in which you installed Crafty
-and placed its book and other support files.
-
- at node zic2xpm
- at section zic2xpm
-
-The ``zic2xpm'' program is used to import chess sets from the ZIICS(*)
-program into XBoard. ``zic2xpm'' is part of the XBoard distribution.
-ZIICS is available from:
-
-ftp://ftp.freechess.org/pub/chess/DOS/ziics131.exe
-
-To import ZIICS pieces, do this:
- at table @asis
- at item 1. Unzip ziics131.exe into a directory:
-
- at example
-unzip -L ziics131.exe -d ~/ziics
- at end example
- at item 2. Use zic2xpm to convert a set of pieces to XBoard format.
-
-For example, let's say you want to use the
-FRITZ4 set. These files are named ``fritz4.*'' in the ZIICS distribution.
-
- at example
-mkdir ~/fritz4
-cd ~/fritz4
-zic2xpm ~/ziics/fritz4.*
- at end example
- at item 3. Give XBoard the ``-pixmap'' option when starting up, e.g.:
-
- at example
-xboard -pixmap ~/fritz4
- at end example
-
-Alternatively, you can add this line to your .Xdefaults file:
-
- at example
-xboard*pixmapDirectory: ~/fritz4
- at end example
- at end table
-
-(*) ZIICS is a separate copyrighted work of Andy McFarland.
-The ``ZIICS pieces'' are copyrighted works of their respective
-creators. Files produced by ``zic2xpm'' are for PERSONAL USE ONLY
-and may NOT be redistributed without explicit permission from
-the original creator(s) of the pieces.
-
- at ifnottex
- at node Copyright
- at unnumbered Copyright
- at include copyright.texi
- at end ifnottex
-
- at node Copying
- at unnumbered GNU GENERAL PUBLIC LICENSE
- at include gpl.texinfo
-
- at c noman
- at node Index
- at unnumbered Index
-
- at printindex cp
- at contents
- at c end noman
+\input texinfo	@c -*-texinfo-*-
+ at c %**start of header
+ at setfilename xboard.info
+ at settitle XBoard
+ at c %**end of header
+
+ at include version.texi
+
+ at ifinfo
+ at format
+INFO-DIR-SECTION Games
+START-INFO-DIR-ENTRY
+* xboard: (xboard).         An X Window System graphical chessboard.
+END-INFO-DIR-ENTRY
+ at end format
+ at end ifinfo
+
+ at titlepage
+ at title XBoard
+
+ at page
+ at vskip 0pt plus 1filll
+ at include copyright.texi
+
+ at end titlepage
+ at ifset man
+.TH xboard 6 "$Date: " "GNU"
+.SH NAME
+.PP
+xboard @- X graphical user interface for chess
+.SH SYNOPSIS
+.PP
+.B xboard [options]
+.br
+.B xboard -ics -icshost hostname [options]
+.br
+.B xboard -ncp [options]
+.br
+.B |pxboard
+.br
+.B cmail [options]
+ at end ifset
+
+ at node Top
+ at top Introduction
+ at cindex introduction
+
+ at ifset man
+.SH DESCRIPTION
+ at end ifset
+
+XBoard is a graphical chessboard that can serve as a
+user interface to chess engines (such as GNU Chess), the
+Internet Chess Servers,
+electronic mail correspondence chess, or your own collection of saved games.
+
+This manual documents version @value{VERSION} of XBoard.
+
+ at menu
+* Major modes::     The main things XBoard can do.
+* Menus::           Menus, buttons, and keys.
+* Options::         Command options supported by XBoard.
+* Chess Servers::   Using XBoard with an Internet Chess Server (ICS).
+* Firewalls::       Connecting to a chess server through a firewall.
+* Environment::     Environment variables.
+* Limitations::     Known limitations and/or bugs.
+* Problems::        How and where to report any problems you run into.
+* Contributors::    People who have helped developing XBoard.
+* CMail::           Using XBoard for electronic correspondence chess.
+* Other programs::  Other programs you can use with XBoard.
+ at ifnottex
+* Copyright::       Copyright notice for this manual.
+ at end ifnottex
+* Copying::         The GNU General Public License.
+
+* Index::           Index of concepts and symbol names.
+ at end menu
+
+ at node Major modes
+ at chapter Major modes
+ at cindex Major modes
+
+XBoard always runs in one of four major modes.  You select the
+major mode from the command line when you start up XBoard.
+
+ at table @asis
+ at item xboard [options]
+As an interface to GNU Chess or another chess engine running on your
+machine, XBoard lets you play a game against the machine,
+set up arbitrary positions, force variations, watch a game between two
+chess engines, interactively analyze your stored games or set up and
+analyze arbitrary positions.  (Note: Not all chess engines support
+analysis.)
+ at item xboard -ics -icshost hostname [options]
+As Internet Chess Server (ICS) interface, XBoard
+lets you play against other ICS users, observe games
+they are playing, or review games that have recently finished.  Most
+of the ICS "wild" chess variants are supported, including bughouse.
+ at item xboard -ncp [options]
+XBoard can also be used simply
+as an electronic chessboard to play through games. It will read and
+write game files and allow you to play through variations
+manually. You can use it to browse games off the net or review games
+you have saved.  These features are also available in the other modes.
+ at item |pxboard
+If you want to pipe games into XBoard, use the supplied shell
+script @file{pxboard}.  For example, from the news reader @file{xrn},
+find a message with one or more games in it, click the Save button,
+and type @samp{|pxboard} as the file name.
+ at item cmail [options]
+As an interface to electronic mail correspondence chess, XBoard
+works with the cmail program. See @ref{CMail} below for
+instructions.
+ at end table
+
+ at node Menus
+ at chapter Menus, buttons, and keys
+ at cindex Menus
+
+To move a piece, you can drag it with the left mouse button, or you
+can click the left mouse button once on the piece, then once more on
+the destination square.  To drop a new piece on a square (when
+applicable), press the middle or the right mouse button over the
+square and select from the popup menu.  In cases where you can drop
+either a white or black piece, use the middle button (or shift+right)
+for white and the right button (or shift+middle) for black.  When you
+are playing a bughouse game on an Internet Chess Server, a list of the
+offboard pieces that each player has available is shown in the window
+title after the player's name; in addition, the piece menus show the
+number of pieces available of each type. From version 4.3.14 on, it is
+also possible in crazyhouse, bughouse or shogi to dag and drop pieces
+to the board from the holdings squares displayed next to the board.
+
+All other XBoard commands are available from the menu bar. The most
+frequently used commands also have shortcut keys or on-screen buttons.
+
+When XBoard is iconized, its graphical icon is a white knight if
+it is White's turn to move, a black knight if it is Black's turn.  See
+Iconize in @ref{Keys} below if you have problems getting this
+feature to work.
+
+ at menu
+* File Menu::       Accessing external games and positions.
+* Mode Menu::       Selecting XBoard's mode.
+* Action Menu::     Talking to the chess engine or ICS opponents.
+* Step Menu::       Controlling the game.
+* Options Menu::    User preferences.
+* Help Menu::       Getting help.
+* Keys::            Other shortcut keys.
+ at end menu
+
+ at node File Menu
+ at section File Menu
+ at cindex File Menu
+ at cindex Menu, File
+ at table @asis
+ at item New Game
+ at cindex New Game, Menu Item
+Resets XBoard and the chess engine to the beginning of a new chess
+game. The @kbd{r} key is a keyboard equivalent. In Internet Chess
+Server mode, clears the current state of XBoard, then
+resynchronizes with the ICS by sending a refresh command. If you want to
+stop playing, observing, or examining an ICS game, use an
+appropriate command from the Action menu, not @samp{New Game}.
+ at xref{Action Menu}.
+ at item New Shuffle Game
+ at cindex New Shuffle Game, Menu Item
+Similar to @samp{New Game}, but allows you to specify a particular initial position 
+(according to a standardized numbering system)
+in chess variants which use randomized opening positions (e.g. Chess960).
+The selected opening position will persistently be chosen on any following
+New Game command until you use this menu to select another. Selecting
+position number -1 will produce a newly randomized position on any new game.
+Using this menu item in variants that normally do not shuffle their opening position
+does cause these variants to become shuffle variants until you use the
+ at samp{New Shuffle Game} menu to explicitly switch the randomization off,
+or select a new variant.
+ at item New Variant
+ at cindex New variant, Menu Item
+Allows you to select a new chess variant in non-ICS mode. 
+(In ICS play, the ICS is responsible for deciding which variant will be played,
+and XBoard adapts autmatically.) If you play with an engine, the engine must
+be able to play the selected variant, or the command will be ignored.
+XBoard supports all major variants, such as xiangqi, shogi, chess, chess960,
+Capablanca Chess, shatranj, crazyhous, bughouse.
+ at item Load Game
+ at cindex Load Game, Menu Item
+Plays a game from a record file. The @kbd{g} key is a keyboard equivalent.
+A popup dialog prompts you for the file name. If the file contains more
+than one game, a second popup dialog
+displays a list of games (with information drawn from their PGN tags, if
+any), and you can select the one you want. Alternatively, you can load the
+Nth game in the file directly, by typing the number @kbd{N} after the
+file name, separated by a space.
+
+The game file parser will accept PGN (portable game notation),
+or in fact almost any file that contains moves in algebraic
+notation. 
+Notation of the form @samp{P@@f7}
+is accepted for piece-drops in bughouse games;
+this is a nonstandard extension to PGN.
+If the file includes a PGN position (FEN tag), or an old-style
+XBoard position diagram bracketed by @samp{[--} and @samp{--]}
+before the first move, the game starts from that position. Text
+enclosed in parentheses, square brackets, or curly braces is assumed to
+be commentary and is displayed in a pop-up window. Any other
+text in the file is ignored. PGN variations (enclosed in
+parentheses) are treated as comments; XBoard is not able to walk
+variation trees.
+The nonstandard PGN tag [Variant "varname"] functions similarly to
+the -variant command-line option (see below), allowing games in certain chess
+variants to be loaded.  There is also a heuristic to 
+recognize chess variants from the Event tag, by looking for the strings
+that the Internet Chess Servers put there when saving variant ("wild") games.
+ at item Load Next Game
+ at cindex Load Next Game, Menu Item
+Loads the next game from the last game record file you loaded.
+The shifted @kbd{N} key is a keyboard equivalent.
+ at item Load Previous Game
+ at cindex Load Previous Game, Menu Item
+Loads the previous game from the last game record file you
+loaded.  The shifted @kbd{P} key is a keyboard equivalent.
+Not available if the last game was loaded from a pipe.
+ at item Reload Same Game
+ at cindex Reload Same Game, Menu Item
+Reloads the last game you loaded.
+Not available if the last game was loaded from a pipe.
+ at item Save Game
+ at cindex Save Game, Menu Item
+Appends a record of the current game to a file.
+A popup dialog
+prompts you for the file name. If the game did not begin with
+the standard starting position, the game file includes the
+starting position used. Games are saved in the PGN (portable
+game notation) format, unless the oldSaveStyle option is true,
+in which case they are saved in an older format that is specific
+to XBoard. Both formats are human-readable, and both can be
+read back by the @samp{Load Game} command.
+Notation of the form @samp{P@@f7}
+is accepted for piece-drops in bughouse games;
+this is a nonstandard extension to PGN.
+ at item Copy Game
+ at cindex Copy Game, Menu Item
+Copies a record of the current game to an internal clipboard in PGN
+format and sets the X selection to the game text.  The game can be
+pasted to another application (such as a text editor or another copy
+of XBoard) using that application's paste command.  In many X
+applications, such as xterm and emacs, the middle mouse button can be
+used for pasting; in XBoard, you must use the Paste Game command.
+ at item Paste Game
+ at cindex Paste Game, Menu Item
+Interprets the current X selection as a game record and loads it, as
+with Load Game.
+ at item Load Position
+ at cindex Load Position, Menu Item
+Sets up a position from a position file.  A popup dialog prompts
+you for the file name. If the file contains more than one saved
+position, and you want to load the Nth one, type the number N
+after the file name, separated by a space. Position files must
+be in FEN (Forsythe-Edwards notation), or in the format that the
+Save Position command writes when oldSaveStyle is turned on.
+ at item Load Next Position
+ at cindex Load Next Position, Menu Item
+Loads the next position from the last position file you loaded.
+ at item Load Previous Position
+ at cindex Load Previous Position, Menu Item
+Loads the previous position from the last position file you
+loaded.  Not available if the last position was loaded from a pipe.
+ at item Reload Same Position
+ at cindex Reload Same Position, Menu Item
+Reloads the last position you loaded.
+Not available if the last position was loaded from a pipe.
+ at item Save Position
+ at cindex Save Game, Menu Item
+Appends a diagram of the current position to a file.
+A popup dialog
+prompts you for the file name. Positions are saved in
+FEN (Forsythe-Edwards notation) format unless the @code{oldSaveStyle}
+option is true, in which case they are saved in an older,
+human-readable format that is specific to XBoard. Both formats
+can be read back by the @samp{Load Position} command.
+ at item Copy Position
+ at cindex Copy Position, Menu Item
+Copies the current position to an internal clipboard in FEN format and
+sets the X selection to the position text.  The position can be pasted
+to another application (such as a text editor or another copy of
+XBoard) using that application's paste command.  In many X
+applications, such as xterm and emacs, the middle mouse button can be
+used for pasting; in XBoard, you must use the Paste Position command.
+ at item Paste Position
+ at cindex Paste Position, Menu Item
+Interprets the current X selection as a FEN position and loads it, as
+with Load Position.
+ at item Mail Move
+ at itemx Reload CMail Message
+ at cindex Mail Move, Menu Item
+ at cindex Reload CMail Message, Menu Item
+See @ref{CMail}.
+ at item Exit
+ at cindex Exit, Menu Item
+Exits from XBoard. The shifted @kbd{Q} key is a keyboard equivalent.
+ at end table
+
+ at node Mode Menu
+ at section Mode Menu
+ at cindex Menu, Mode
+ at cindex Mode Menu
+ at table @asis
+ at item Machine White
+ at cindex Machine White, Menu Item
+Tells the chess engine to play White.
+ at item Machine Black
+ at cindex Machine Black, Menu Item
+Tells the chess engine to play Black.
+ at item Two Machines
+ at cindex Two Machines, Menu Item
+Plays a game between two chess engines.
+ at item Analysis Mode
+ at cindex Analysis Mode, Menu Item
+XBoard tells the chess engine to start analyzing the current game/position
+and shows you the analysis as you move pieces around.
+Note: Some chess engines do not support Analysis mode.
+
+To set up a position to analyze, you do the following:
+
+1. Select Edit Position from the Mode Menu
+
+2. Set up the position.  Use the middle and right buttons to
+bring up the white and black piece menus.
+
+3. When you are finished, click on either the Black or White
+clock to tell XBoard which side moves first.
+
+4. Select Analysis Mode from the Mode Menu to start the analysis.
+
+The analysis function can also be used when observing games on an ICS
+with an engine loaded (zippy mode); the engine then will analyse
+the positions as they occur in the observed game.
+ at item Analyze File
+ at cindex Analyze File, Menu Item
+This option lets you load a game from a file (PGN, XBoard format, etc.)
+and analyze it. When you select this menu item, a popup window appears
+and asks for a filename to load.
+If the file contains multiple games, another popup appears that lets
+you select which game you wish to analyze.
+After a game is loaded, use the XBoard arrow buttons to step
+forwards/backwards through the game and watch the analysis.
+Note: Some chess engines do not support Analysis mode.
+ at item ICS Client
+ at cindex ICS Client, Menu Item
+This is the normal mode when XBoard
+is connected to a chess server.  If you have moved into
+Edit Game or Edit Position mode, you can select this option to get out.
+
+To use xboard in ICS mode, run it in the foreground with the -ics
+option, and use the terminal you started it from to type commands and
+receive text responses from the chess server.  See
+ at ref{Chess Servers} below for more information.
+
+XBoard activates some special position/game editing features when you
+use the @kbd{examine} or @kbd{bsetup} commands on ICS and you have
+ at samp{ICS Client} selected on the Mode menu.  First, you can issue the
+ICS position-editing commands with the mouse.  Move pieces by dragging
+with mouse button 1.  To drop a new piece on a square, press mouse
+button 2 or 3 over the square.  This brings up a menu of white pieces
+(button 2) or black pieces (button 3).  Additional menu choices let
+you empty the square or clear the board.  Click on the White or Black
+clock to set the side to play.  You cannot set the side to play or
+drag pieces to arbitrary squares while examining on ICC, but you can
+do so in @kbd{bsetup} mode on FICS.  In addition, the menu commands
+ at samp{Forward}, @samp{Backward}, @samp{Pause}, and @samp{Stop Examining}
+have special functions in this mode; see below.
+ at item Edit Game
+ at cindex Edit Game, Menu Item
+Allows you to make moves for both Black and White, and to change
+moves after backing up with the @samp{Backward} command. The clocks do
+not run.
+
+In chess engine mode, the chess engine continues to check moves for legality
+but does not participate in the game. You can bring the chess engine
+into the game by selecting @samp{Machine White}, @samp{Machine Black},
+or @samp{Two Machines}.
+
+In ICS mode, the moves are not sent to the ICS: @samp{Edit Game} takes
+XBoard out of ICS Client mode and lets you edit games locally.
+If you want to edit games on ICS in a way that other ICS users
+can see, use the ICS @kbd{examine} command or start an ICS match
+against yourself.
+ at item Edit Position
+ at cindex Edit Position, Menu Item
+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 white pieces (button 2) or
+black 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 word White or Black at the top of the screen.
+Selecting @samp{Edit Position} causes XBoard to discard
+all remembered moves in the current game.
+
+In ICS mode, changes made to the position by @samp{Edit Position} are
+not sent to the ICS: @samp{Edit Position} takes XBoard out of
+ at samp{ICS Client} mode and lets you edit positions locally. If you want to
+edit positions on ICS in a way that other ICS users can see, use
+the ICS @kbd{examine} command, or start an ICS match against yourself.
+(See also the ICS Client topic above.)
+ at item Training
+ at cindex Training, Menu Item
+Training mode lets you interactively guess the moves of a game for one
+of the players. You guess the next move of the game by playing the
+move on the board. If the move played matches the next move of the
+game, the move is accepted and the opponent's response is autoplayed.
+If the move played is incorrect, an error message is displayed.  You
+can select this mode only while loading a game (that is, after
+selecting @samp{Load Game} from the File menu).  While XBoard is in 
+ at samp{Training} mode, the navigation buttons are disabled.
+ at item Show Game List
+ at cindex Show Game List, Menu Item
+Shows or hides the list of games generated by the last @samp{Load Game}
+command.
+ at item Show Move History
+ at cindex Show Move History, Menu Item
+Shows or hides a list of moves of the current game.
+This list allows you to move the display to any earlier position in the game
+by clicking on the corresponding move.
+ at item Show Engine Output
+ at cindex Show Engine Output, Menu Item
+Shows or hides a window in which the thinking output of any loaded engines
+is displayed.
+ at item Edit Tags
+ at cindex Edit Tags, Menu Item
+Lets you edit the PGN (portable game notation)
+tags for the current game. After editing, the tags must still conform to
+the PGN tag syntax:
+
+ at example
+<tag-section> ::= <tag-pair> <tag-section>
+                        <empty>
+<tag-pair> ::= [ <tag-name> <tag-value> ]
+<tag-name> ::= <identifier>
+<tag-value> ::= <string>
+ at end example
+ at noindent
+See the PGN Standard for full details. Here is an example:
+
+ at example
+[Event "Portoroz Interzonal"]
+[Site "Portoroz, Yugoslavia"]
+[Date "1958.08.16"]
+[Round "8"]
+[White "Robert J. Fischer"]
+[Black "Bent Larsen"]
+[Result "1-0"]
+ at end example
+ at noindent
+Any characters that do not match this syntax are silently ignored. Note that
+the PGN standard requires all games to have at least the seven tags shown
+above. Any that you omit will be filled in by XBoard
+with @samp{?} (unknown value), or @samp{-} (inapplicable value).
+ at item Edit Comment
+ at cindex Edit Comment, Menu Item
+Adds or modifies a comment on the current position. Comments are
+saved by @samp{Save Game} and are displayed by @samp{Load Game},
+ at samp{Forward}, and @samp{Backward}.
+ at item ICS Input Box
+ at cindex ICS Input Box, Menu Item
+If this option is set in ICS mode,
+XBoard
+creates an extra window that you can use for typing in ICS commands.
+The input box is especially useful if you want to type in something long or do
+some editing on your input, because output from ICS doesn't get mixed
+in with your typing as it would in the main terminal window.
+ at item Pause
+ at cindex Pause, Menu Item
+Pauses updates to the board, and if you are playing against a chess engine,
+also pauses your clock. To continue, select @samp{Pause} again, and the
+display will automatically update to the latest position.
+The @samp{P} button and keyboard @kbd{p} key are equivalents.
+
+If you select Pause when you are playing against a chess engine and
+it is not your move, the chess engine's clock
+will continue to run and it will eventually make a move, at which point
+both clocks will stop. Since board updates are paused, however,
+you will not see the move until you exit from Pause mode (or select Forward).
+This behavior is meant to simulate adjournment with a sealed move.
+
+If you select Pause while you are observing or examining a game on a
+chess server, you can step backward and forward in the current history
+of the examined game without affecting the other observers and
+examiners, and without having your display jump forward to the latest
+position each time a move is made. Select Pause again to reconnect
+yourself to the current state of the game on ICS.
+
+If you select @samp{Pause} while you are loading a game, the game stops
+loading. You can load more moves manually by selecting @samp{Forward}, or
+resume automatic loading by selecting @samp{Pause} again.
+ at end table
+
+ at node Action Menu
+ at section Action Menu
+ at cindex Menu, Action
+ at cindex Action, Menu
+ at table @asis
+ at item Accept
+ at cindex Accept, Menu Item
+Accepts a pending match offer. If there is more than one offer
+pending, you will have to type in a more specific command
+instead of using this menu choice.
+ at item Decline
+ at cindex Decline, Menu Item
+Declines a pending offer (match, draw, adjourn, etc.). If there
+is more than one offer pending, you will have to type in a more
+specific command instead of using this menu choice.
+ at item Call Flag
+ at cindex Call Flag, Menu Item
+Calls your opponent's flag, claiming a win on time, or claiming
+a draw if you are both out of time. You can also call your
+opponent's flag by clicking on his clock or by pressing the
+keyboard @kbd{t} key.
+ at item Draw
+ at cindex Draw, Menu Item
+Offers a draw to your opponent, accepts a pending draw offer
+from your opponent, or claims a draw by repetition or the 50-move
+rule, as appropriate. The @kbd{d} key is a keyboard equivalent.
+ at item Adjourn
+ at cindex Adjourn, Menu Item
+Asks your opponent to agree to adjourning the current game, or
+agrees to a pending adjournment offer from your opponent.
+ at item Abort
+ at cindex Abort, Menu Item
+Asks your opponent to agree to aborting the current game, or
+agrees to a pending abort offer from your opponent. An aborted
+game ends immediately without affecting either player's rating.
+ at item Resign
+ at cindex Resign, Menu Item
+Resigns the game to your opponent. The shifted @kbd{R} key is a
+keyboard equivalent.
+ at item Stop Observing
+ at cindex Stop Observing, Menu Item
+Ends your participation in observing a game, by issuing the ICS
+observe command with no arguments. ICS mode only.
+ at item Stop Examining
+ at cindex Stop Examining, Menu Item
+Ends your participation in examining a game, by issuing the ICS
+unexamine command. ICS mode only.
+ at end table
+
+ at node Step Menu
+ at section Step Menu
+ at cindex Step Menu
+ at cindex Menu, Step
+ at table @asis
+ at item Backward
+ at cindex Backward, Menu Item
+ at cindex <, Button
+Steps backward through a series of remembered moves.
+The @samp{[<]} button and the @kbd{b} key are equivalents,
+as is turning the mouse wheel towards you.
+In addition, pressing the Control key steps back one move, and releasing
+it steps forward again.
+
+In most modes, @samp{Backward} only lets you look back at old positions;
+it does not retract moves. This is the case if you are playing against
+a chess engine, playing or observing a game on an ICS, or loading a game.
+If you select @samp{Backward} in any of these situations, you will not
+be allowed to make a different move. Use @samp{Retract Move} or
+ at samp{Edit Game} if you want to change past moves.
+
+If you are examining an ICS game, the behavior of @samp{Backward}
+depends on whether XBoard is in Pause mode. If Pause mode is
+off, @samp{Backward} issues the ICS backward command, which backs up
+everyone's view of the game and allows you to make a different
+move. If Pause mode is on, @samp{Backward} only backs up your local
+view.
+ at item Forward
+ at cindex Forward, Menu Item
+ at cindex >, Button
+Steps forward through a series of remembered moves (undoing the
+effect of @samp{Backward}) or forward through a game file. The
+ at samp{[>]} button and the @kbd{f} key are equivalents,
+as is turning the mouse wheel away from you.
+
+If you are examining an ICS game, the behavior of Forward
+depends on whether XBoard is in Pause mode. If Pause mode is
+off, @samp{Forward} issues the ICS forward command, which moves
+everyone's view of the game forward along the current line. If
+Pause mode is on, @samp{Forward} only moves your local view forward,
+and it will not go past the position that the game was in when
+you paused.
+ at item Back to Start
+ at cindex Back to Start, Menu Item
+ at cindex <<, Button
+Jumps backward to the first remembered position in the game.
+The @samp{[<<]} button and the shifted @kbd{B} key are equivalents.
+
+In most modes, Back to Start only lets you look back at old
+positions; it does not retract moves. This is the case if you
+are playing against a local chess engine, playing or observing a game on
+a chess server, or loading a game. If you select @samp{Back to Start} in any
+of these situations, you will not be allowed to make different
+moves. Use @samp{Retract Move} or @samp{Edit Game} if you want to change past
+moves; or use Reset to start a new game.
+
+If you are examining an ICS game, the behavior of @samp{Back to
+Start} depends on whether XBoard is in Pause mode. If Pause mode
+is off, @samp{Back to Start} issues the ICS @samp{backward 999999}
+command, which backs up everyone's view of the game to the start and
+allows you to make different moves. If Pause mode is on, @samp{Back
+to Start} only backs up your local view.
+ at item Forward to End
+ at cindex Forward to End, Menu Item
+ at cindex >>, Button
+Jumps forward to the last remembered position in the game. The
+ at samp{[>>]} button and the shifted @kbd{F} key are equivalents.
+
+If you are examining an ICS game, the behavior of @samp{Forward to
+End} depends on whether XBoard is in Pause mode. If Pause mode
+is off, @samp{Forward to End} issues the ICS @samp{forward 999999}
+command, which moves everyone's view of the game forward to the end of
+the current line. If Pause mode is on, @samp{Forward to End} only moves
+your local view forward, and it will not go past the position
+that the game was in when you paused.
+ at item Revert
+ at cindex Revert, Menu Item
+If you are examining an ICS game and Pause mode is off, issues
+the ICS command @samp{revert}.
+ at item Truncate Game
+ at cindex Truncate Game, Menu Item
+Discards all remembered moves of the game beyond the current
+position. Puts XBoard into @samp{Edit Game} mode if it was not there
+already.
+ at item Move Now
+ at cindex Move Now, Menu Item
+Forces the chess engine to move immediately. Chess engine mode only.
+ at item Retract Move
+ at cindex Retract Move, Menu Item
+Retracts your last move. In chess engine mode, you can do this only
+after the chess engine has replied to your move; if the chess engine is still
+thinking, use @samp{Move Now} first. In ICS mode, @samp{Retract Move}
+issues the command @samp{takeback 1} or @samp{takeback 2}
+depending on whether it is your opponent's move or yours.
+ at item Adjudicate to White
+ at itemx Adjudicate to Black
+ at itemx Adjudicate Draw
+ at cindex Adjudicate to White, Menu Item
+ at cindex Adjudicate to Black, Menu Item
+ at cindex Adjudicate Draw, Menu Item
+Terminate an ongoing game in Two-Machines mode (including match mode),
+with as result a win for white, for black, or a draw, repsectively.
+The PGN file of the game will accompany the result string
+by the comment "user adjudication".
+ at end table
+
+ at node Options Menu
+ at section Options Menu
+ at cindex Menu, Options
+ at cindex Options Menu
+ at table @asis
+ at item Flip View
+ at cindex Flip View, Menu Item
+Inverts your view of the chess board for the duration of the
+current game. Starting a new game returns the board to normal.
+The @kbd{v} key is a keyboard equivalent.
+ at item Adjudications
+ at cindex Adjudications, Menu Item
+Pops up a sub-menu where you can enable or disable various adjudications
+that XBoard can perform in engine-engine games.
+You can instruct XBoard to detect and terminate the game on checkmate
+or stalemate, even if the engines would not do so, to verify engine
+result claims (forfeiting engines that make false claims), rather than
+naively following the engine, to declare draw on posititions
+which can never be won for lack of mating material, (e.g. KBK),
+or which are impossble to win unless the opponent seeks its own demise 
+(e.g. KBKN).
+For these adjudications to work, @samp{Test Legality} should be switched on.
+It is also possible to insruct XBoard to enforce a 50-move or 3-fold-repeat
+rule and automtically declare draw (after a user-adjustable number of moves
+or repeats) even if the engines are prepared to go on.
+It is also possible to have XBoard declare draw on games that seem to drag on 
+forever, or adjudicate a loss if both engines agree (for 3 cosecutive moves) that one
+of them is behind more than a user-adjustable score threshold.
+For the latter adjudication to work, XBoard should be able to properly understand
+the engine's scores. To faclitate the latter, you can inform xboard here if
+the engines report scores from the viewpoint of white, or from that of their own color.
+ at item Engine Settings
+Pops up a sub-menu where you can set some engine parameters common to most engines,
+such as hash-table size, tablebase cache size, maximum number of processors
+that SMP engines can use, and where to find the Polyglot adapter needed
+to run UCI engines under XBoard. The feature tht allows setting of these parameters on
+engines is new since XBoard 4.3.15, so not many WinBoard engines respond
+to it yet, but UCI engines should.
+It is also possible to specify a GUI opening book here, i.e. an opening
+book that XBoard consults for any position a playing engine gets in.
+It then forces the engine to play the book move, rather than to think up its own,
+if that position is found in the book.
+The book can switched on and off independently for either engine.
+ at item Time Control
+ at cindex Time Control, Menu Item
+Pops up a sub-menu where you can set the time-control parameters interactively.
+Allows you to select classical or incremental time controls,
+set the moves per session, session duration, and time increment.
+Also allows specification of time-odds factors for one or both engines.
+If an engine is given a time-odds factor N, all time quota it gets, 
+be it at the beginning of a session or through the time increment or
+fixed time per move, will be divided by N.
+ at item Always Queen
+ at cindex Always Queen, Menu Item
+If this option is off, XBoard brings up a dialog
+box whenever you move a pawn to the last rank, asking what piece
+you want to promote it to. If the option is true, your pawns are
+always promoted to queens. Your opponent can still underpromote.
+ at item Animate Dragging
+ at cindex Animate Dragging, Menu Item
+If Animate Dragging is on, while you are dragging a piece with the
+mouse, an image of the piece follows the mouse cursor.
+If Animate Dragging is off, there is no visual feedback while you are
+dragging a piece, but if Animate Moving is on, the move will be
+animated when it is complete. 
+ at item Animate Moving
+ at cindex Animate Moving, Menu Item
+If Animate Moving is on, all piece moves are animated.  An image of the
+piece is shown moving from the old square to the new square when the
+move is completed (unless the move was already animated by Animate Dragging).
+If Animate Moving is off, a moved piece instantly disappears from its
+old square and reappears on its new square when the move is complete.
+ at item Auto Comment
+ at cindex Auto Comment, Menu Item
+If this option is on, any remarks made on ICS while you are observing or
+playing a game are recorded as a comment on the current move.  This includes
+remarks made with the ICS commands @kbd{say}, @kbd{tell}, @kbd{whisper},
+and @kbd{kibitz}.
+Limitation: remarks that you type yourself are not recognized;
+XBoard scans only the output from ICS, not the input you type to it.
+ at item Auto Flag
+ at cindex Auto Flag, Menu Item
+If this option is on and one player runs out of time
+before the other,
+XBoard
+will automatically call his flag, claiming a win on time.
+In ICS mode, Auto Flag will only call your opponent's flag, not yours,
+and the ICS may award you a draw instead of a win if you have
+insufficient mating material.  In local chess engine mode,
+XBoard
+may call either player's flag and will not take material into account.
+ at item Auto Flip View
+ at cindex Auto Flip View, Menu Item
+If the Auto Flip View option is on when you start a game, the board
+will be automatically oriented so that your pawns move from the bottom
+of the window towards the top.
+ at item Auto Observe
+ at cindex Auto Observe, Menu Item
+If this option is on and you add a player to your @code{gnotify}
+list on ICS, XBoard will automatically observe all of that
+player's games, unless you are doing something else (such as
+observing or playing a game of your own) when one starts.
+The games are displayed 
+from the point of view of the player on your gnotify list; that is, his
+pawns move from the bottom of the window towards the top.
+Exceptions:  If both players in a game are on your gnotify list, if
+your ICS 
+ at code{highlight}
+variable is set to 0, or if the ICS you are using does not 
+properly support observing from Black's point of view,
+you will see the game from White's point of view.
+ at item Auto Raise Board
+ at cindex Auto Raise Board, Menu Item
+If this option is on, whenever a new game begins, the chessboard window
+is deiconized (if necessary) and raised to the top of the stack of windows.
+ at item Auto Save
+ at cindex Auto Save, Menu Item
+If this option is true, at the end of every game XBoard prompts
+you for a file name and appends a record of the game to the file
+you specify. 
+Disabled if the @code{saveGameFile} command-line
+option is set, as in that case all games are saved to the specified file.
+ at xref{Load and Save options}.
+ at item Blindfold
+ at cindex Blindfold, Menu Item
+If this option is on, XBoard displays the board as usual but does
+not display pieces or move highlights.  You can still move in the
+usual way (with the mouse or by typing moves in ICS mode), even though
+the pieces are invisible.
+ at item Flash Moves
+ at cindex Flash Moves, Menu Item
+If this option is on, whenever a move is completed, the moved piece flashes.
+The number of times to flash is set by the flashCount command-line
+option; it defaults to 3 if Flash Moves is first turned on from the menu.
+
+If you are playing a game on an ICS, the board is always
+oriented at the start of the game so that your pawns move from
+the bottom of the window towards the top. Otherwise, the starting
+orientation is determined by the @code{flipView} command line option;
+if it is false (the default), White's pawns move from bottom to top
+at the start of each game; if it is true, Black's pawns move from
+bottom to top. @xref{User interface options}.
+ at item Get Move List
+ at cindex Get Move List, Menu Item
+If this option is on, whenever XBoard
+receives the first board of a new ICS game (or a different game from
+the one it is currently displaying), it
+retrieves the list of past moves from the ICS.
+You can then review the moves with the @samp{Forward} and @samp{Backward}
+commands
+or save them with @samp{Save Game}.  You might want to
+turn off this option if you are observing several blitz games at once,
+to keep from wasting time and network bandwidth fetching the move lists over
+and over.
+When you turn this option on from the menu, XBoard
+immediately fetches the move list of the current game (if any).
+ at item Highlight Last Move
+ at cindex Highlight Last Move, Menu Item
+If Highlight Last Move is on, after a move is made, the starting and
+ending squares remain highlighted. In addition, after you use Backward
+or Back to Start, the starting and ending squares of the last move to
+be unmade are highlighted.
+ at item Move Sound
+ at cindex Move Sound, Menu Item
+If this option is on, XBoard alerts you by playing a sound
+after each of your opponent's moves (or after every
+move if you are observing a game on the Internet Chess Server).
+The sound is not played after moves you make or moves read from a
+saved game file. By default, the
+sound is the terminal bell, but on some systems you can change it
+to a sound file using the soundMove option; see below.
+
+If you turn on this option when using XBoard with the Internet
+Chess Server, you will probably want to give the
+ at kbd{set bell 0}
+command to the ICS, since otherwise the ICS will ring the terminal bell
+after every move (not just yours). (The @file{.icsrc} file
+is a good place for this; see @ref{ICS options}.)
+ at item ICS Alarm
+ at cindex ICS Alarm, Menu Item
+When this option is on, an alarm sound is played when your clock
+counts down to the icsAlarmTime (by default, 5 seconds) in an ICS
+game.  For games with time controls that include an increment, the
+alarm will sound each time the clock counts down to the icsAlarmTime.
+By default, the alarm sound is the terminal bell, but on some systems
+you can change it to a sound file using the soundIcsAlarm option; see
+below.
+ at item Old Save Style
+ at cindex Old Save Style, Menu Item
+If this option is off, XBoard saves games in PGN
+(portable game notation) and positions in FEN (Forsythe-Edwards
+notation).  If the option is on, a save style that is compatible
+with older versions of XBoard is used instead.
+The old position style is more human-readable
+than FEN; the old game style has no particular advantages.
+ at item Periodic Updates
+ at cindex Periodic Updates, Menu Item
+If this option is off (or if
+you are using a chess engine that does not support periodic updates),
+the analysis window
+will only be updated when the analysis changes. If this option is
+on, the Analysis Window will be updated every two seconds.
+ at item Ponder Next Move
+ at cindex Ponder Next Move, Menu Item
+If this option is off, the chess engine will think only when it is on
+move.  If the option is on, the engine will also think while waiting
+for you to make your move.
+ at item Popup Exit Message
+ at cindex Popup Exit Message, Menu Item
+If this option is on, when XBoard wants to display a message just
+before exiting, it brings up a modal dialog box and waits for you to
+click OK before exiting.  If the option is off, XBoard prints the
+message to standard error (the terminal) and exits immediately.
+ at item Popup Move Errors
+ at cindex Popup Move Errors, Menu Item
+If this option is off, when you make an error in moving (such as
+attempting an illegal move or moving the wrong color piece), the
+error message is displayed in the message area.  If the option is
+on, move errors are displayed in small popup windows like other errors.
+You can dismiss an error popup either by clicking its OK button or by
+clicking anywhere on the board, including downclicking to start a move.
+ at item Premove
+ at cindex Premove, Menu Item
+If this option is on while playing a game on an ICS, you can register
+your next planned move before it is your turn.  Move the piece with
+the mouse in the ordinary way, and the starting and ending squares
+will be highlighted with a special color (red by default).  When it is
+your turn, if your registered move is legal, XBoard will send it to
+ICS immediately; if not, it will be ignored and you can make a
+different move.  If you change your mind about your premove, either
+make a different move, or double-click on any piece to cancel the move
+entirely.
+ at item Quiet Play
+ at cindex Quiet Play, Menu Item
+If this option is on, XBoard will automatically issue an ICS
+ at kbd{set shout 0}
+command whenever you start a game and a
+ at kbd{set shout 1}
+command whenever you finish one.  Thus, you will not be distracted
+by shouts from other ICS users while playing.
+ at item Show Coords
+ at cindex Show Coords, Menu Item
+If this option is on, XBoard displays algebraic coordinates
+along the board's left and bottom edges.
+ at item Hide Thinking
+ at cindex Hide Thinking, Menu Item
+If this option is off, the chess engine's notion of the score and best
+line of play from the current position is displayed as it is
+thinking. The score indicates how many pawns ahead (or if negative,
+behind) the chess engine thinks it is. In matches between two
+machines, the score is prefixed by @samp{W} or @samp{B} to indicate
+whether it is showing White's thinking or Black's, and only the thinking
+of the engine that is on move is shown.
+ at item Test Legality
+ at cindex Test Legality, Menu Item
+If this option is on, XBoard tests whether the moves you try to make
+with the mouse are legal and refuses to let you make an illegal move.
+Moves loaded from a file with @samp{Load Game} are also checked.  If
+the option is off, all moves are accepted, but if a local chess engine
+or the ICS is active, they will still reject illegal moves.  Turning
+off this option is useful if you are playing a chess variant with
+rules that XBoard does not understand.  (Bughouse, suicide, and wild
+variants where the king may castle after starting on the d file are
+generally supported with Test Legality on.)
+ at end table
+
+ at node Help Menu
+ at section Help Menu
+ at cindex Menu, Help
+ at cindex Help Menu
+ at table @asis
+ at item Info XBoard
+ at cindex Info XBoard, Menu Item
+Displays the XBoard documentation in info format.  For this feature to
+work, you must have the GNU info program installed on your system, and
+the file @file{xboard.info} must either be present in the current
+working directory, or have been installed by the @samp{make install}
+command when you built XBoard.
+ at item Man XBoard
+ at cindex Man XBoard, Menu Item
+Displays the XBoard documentation in man page format.  For this
+feature to work, the file @file{xboard.6} must have been installed by
+the @samp{make install} command when you built XBoard, and the
+directory it was placed in must be on the search path for your
+system's @samp{man} command.
+ at item Hint
+ at cindex Hint, Menu Item
+Displays a move hint from the chess engine.
+ at item Book
+ at cindex Book, Menu Item
+Displays a list of possible moves from the chess engine's opening
+book.  The exact format depends on what chess engine you are using.
+With GNU Chess 4, the first column gives moves, the second column
+gives one possible response for each move, and the third column shows
+the number of lines in the book that include the move from the first
+column. If you select this option and nothing happens, the chess
+engine is out of its book or does not support this feature.
+ at item About XBoard
+ at cindex About XBoard, Menu Item
+Shows the current XBoard version number.
+ at end table
+
+ at node Keys
+ at section Other Shortcut Keys
+ at cindex Keys
+ at cindex Shortcut keys
+ at table @asis
+ at item Iconize
+Pressing the @kbd{i} or @kbd{c} key iconizes XBoard. The graphical
+icon displays a white knight if it is White's move, or a black knight
+if it is Black's move. If your X window manager displays only text
+icons, not graphical ones, check its documentation; there is probably
+a way to enable graphical icons.  If you get black and white reversed,
+we would like to hear about it; see @ref{Problems} below for
+instructions on how to report this problem.
+ at end table
+
+You can add or remove shortcut keys using the X resources
+ at code{form.translations}. Here is an example of what would go in your
+ at file{.Xresources} file:
+
+ at example
+XBoard*form.translations: \
+  Shift<Key>?: AboutGameProc() \n\
+  <Key>y: AcceptProc() \n\
+  <Key>n: DeclineProc() \n\
+  <Key>i: NothingProc()
+ at end example
+ at noindent
+Binding a key to @code{NothingProc} makes it do nothing, thus removing
+it as a shortcut key. The XBoard commands that can be bound to keys
+are:
+
+ at example
+AbortProc, AboutGameProc, AboutProc, AcceptProc, AdjournProc,
+AlwaysQueenProc, AnalysisModeProc, AnalyzeFileProc,
+AnimateDraggingProc, AnimateMovingProc, AutobsProc, AutoflagProc,
+AutoflipProc, AutoraiseProc, AutosaveProc, BackwardProc,
+BlindfoldProc, BookProc, CallFlagProc, CopyGameProc, CopyPositionProc,
+DebugProc, DeclineProc, DrawProc, EditCommentProc, EditGameProc,
+EditPositionProc, EditTagsProc, EnterKeyProc, FlashMovesProc,
+FlipViewProc, ForwardProc, GetMoveListProc, HighlightLastMoveProc,
+HintProc, Iconify, IcsAlarmProc, IcsClientProc, IcsInputBoxProc,
+InfoProc, LoadGameProc, LoadNextGameProc, LoadNextPositionProc,
+LoadPositionProc, LoadPrevGameProc, LoadPrevPositionProc,
+LoadSelectedProc, MachineBlackProc, MachineWhiteProc, MailMoveProc,
+ManProc, MoveNowProc, MoveSoundProc, NothingProc, OldSaveStyleProc,
+PasteGameProc, PastePositionProc, PauseProc, PeriodicUpdatesProc,
+PonderNextMoveProc, PopupExitMessageProc, PopupMoveErrorsProc,
+PremoveProc, QuietPlayProc, QuitProc, ReloadCmailMsgProc,
+ReloadGameProc, ReloadPositionProc, RematchProc, ResetProc,
+ResignProc, RetractMoveProc, RevertProc, SaveGameProc,
+SavePositionProc, ShowCoordsProc, ShowGameListProc, ShowThinkingProc,
+StopExaminingProc, StopObservingProc, TestLegalityProc, ToEndProc,
+ToStartProc, TrainingProc, TruncateGameProc, and TwoMachinesProc.
+ at end example
+
+ at node Options
+ at chapter Options
+ at cindex Options
+ at cindex Options
+
+This section documents the command-line options to XBoard.  You can
+set these options in two ways: by typing them on the shell command
+line you use to start XBoard, or by setting them as X resources
+(typically in your @file{.Xresources} file).  Many of the options
+cannot be changed while XBoard is running; others set the initial
+state of items that can be changed with the @ref{Options} menu.
+
+Most of the options have both a long name and a short name. To turn a
+boolean option on or off from the command line, either give its long
+name followed by the value true or false
+(@samp{-longOptionName true}), or give just the short name to turn the
+option on (@samp{-opt}), or the short name preceded by @samp{x} to
+turn the option off (@samp{-xopt}). For options that take strings or
+numbers as values, you can use the long or short option names
+interchangeably.
+
+Each option corresponds to an X resource with the same name, so
+if you like, you can set options in your @file{.Xresources} file
+or in a file named @file{XBoard} in your home directory.
+For options that have two names, the longer one is the name of
+the corresponding X resource; the short name is not recognized.
+To turn a boolean option on or off as an
+X resource, give its long name followed by the value
+true or false (@samp{XBoard*longOptionName: true}).
+
+ at menu
+* Chess engine options::        Controlling the chess engine.
+* UCI + WB Engine Settings::    Setting some very common engine parameters
+* ICS options::                 Connecting to and using ICS.
+* Load and Save options::       Input/output options.
+* User interface options::      Look and feel options.
+* Adjudication Options::        Control adjudcation of engine-engine games.
+* Other options::               Miscellaneous.
+ at end menu
+
+ at node Chess engine options
+ at section Chess Engine Options
+ at cindex options, Chess engine
+ at cindex Chess engine options
+ at table @asis
+ at item -tc or -timeControl minutes[:seconds]
+ at cindex tc, option
+ at cindex timeControl, option
+Each player begins with his clock set to the @code{timeControl} period.
+Default: 5 minutes.
+The additional options @code{movesPerSession} and @code{timeIncrement}
+are mutually exclusive.  
+ at item -mps or -movesPerSession moves
+ at cindex mps, option
+ at cindex movesPerSession, option
+When both players have made @code{movesPerSession} moves, a
+new @code{timeControl} period is added to both clocks.  Default: 40 moves.
+ at item -inc or -timeIncrement seconds
+ at cindex inc, option
+ at cindex timeIncrement, option
+If this option is specified, @code{movesPerSession} is ignored.
+Instead, after each player's move, @code{timeIncrement} seconds are
+added to his clock.  
+Use @samp{-inc 0} if you want to require the entire
+game to be played in one @code{timeControl} period, with no increment.
+Default: -1, which specifies @code{movesPerSession} mode.
+ at item -clock/-xclock or -clockMode true/false
+ at cindex clock, option
+ at cindex clockMode, option
+Determines whether or not to display the chess clocks. If clockMode is
+false, the clocks are not shown, but the side that is to play next
+is still highlighted. Also, unless @code{searchTime}
+is set, the chess engine still keeps track of the clock time and uses it to
+determine how fast to make its moves.
+ at item -st or -searchTime minutes[:seconds]
+ at cindex st, option
+ at cindex searchTime, option
+Tells the chess engine to spend at most the given amount of time
+searching for each of its moves. Without this option, the chess engine
+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.
+ at item -depth or -searchDepth number
+ at cindex sd, option
+ at cindex searchDepth, option
+Tells the chess engine to look ahead at most the given number of moves
+when searching for a move to make. Without this option, the chess
+engine chooses its search depth based on the number of moves and
+amount of time remaining until the next time control.  With the option,
+the engine will cut off its search early if it reaches the specified depth.
+ at item -firstNPS number
+ at itemx -secondNPS number
+ at cindex firstNPS, option
+ at cindex secondNPS, option
+Tells the chess engine to use an internal time standard based on its node count, 
+rather then wall-clock time, to make its timing decisions. 
+The time in virtual seconds should be obtained by dividing the node count 
+through the given number, like the number was a rate in nodes per second. 
+Xboard will manage the clocks in accordance with this, relying on the number 
+of nodes reported by the engine in its thinking output. If the given number equals zero, 
+it can obviously not be used to convert nodes to seconds, and the time reported 
+by the engine is used to decrement the XBoard clock in stead. The engine is supposed to 
+report in CPU time it uses, rather than wall-clock time, in this mode. This option 
+can provide fairer conditions for engine-engine matches on heavily loaded machines, 
+or with very fast games (where the wall clock is too inaccurate). 
+ at code{showThinking} must be on for this option to work. Default: -1 (off).
+Not many engines might support this yet!
+ at item -firstTimeOdds factor
+ at itemx -secondTimeOdds factor
+ at cindex firstTimeOdds, option
+ at cindex secondTimeOdds, option
+Reduces the time given to the mentioned engine by the given factor. 
+If pondering is off, the effect is indistinguishable from what would happen 
+if the engine was running on an n-times slower machine. Default: 1.
+ at item -timeOddsMode mode
+ at cindex timeOddsMode, option
+This option determines how the case is handled where both engines have a time-odds handicap. 
+If mode=1, the engine that gets the most time will always get the nominal time, 
+as specified by the time-control options, and its opponent's time is renormalized accordingly. 
+If mode=0, both play with reduced time. Default: 0.
+ at item -hideThinkingFromHuman true/false
+Controls the Hide Thinking option. @xref{Options Menu}. Default: true.
+(Relaces the Show-Thinking option of older xboard versions.)
+ at item -thinking/-xthinking or -showThinking true/false
+ at cindex thinking, option
+ at cindex showThinking, option
+Forces the engine to send thinking output to xboard. 
+Used to be the only way to control if thinking output was displayed 
+in older xboard versions,
+but as the thinking output in xboard 4.3 is also used for several other
+purposes (adjudication, storing in PGN file) the display of it is now controlled
+by the new option Hide Thinking. @xref{Options Menu}. Default: false.
+(But if xboard needs the thinking output for some purpose,
+it makes the engine send it despite the setting of this option.)
+ at item -ponder/-xponder or -ponderNextMove true/false
+ at cindex ponder, option
+ at cindex ponderNextMove, option
+Sets the Ponder Next Move menu option. @xref{Options Menu}. Default: true.
+ at item -smpCores number
+Specifies the maxmum nmber of CPUs an SMP engine is allowed to use.
+Only works for engines that support the WinBoard-protocol cores feature.
+ at item -mg or -matchGames n
+ at cindex mg, option
+ at cindex matchGames, option
+Automatically runs an n-game match between two chess engines,
+with alternating colors.
+If the @code{loadGameFile} or @code{loadPositionFile} option is set,
+XBoard
+starts each game with the given opening moves or the given position;
+otherwise, the games start with the standard initial chess position.
+If the @code{saveGameFile} option is set, a move record for the
+match is appended to the specified file. If the @code{savePositionFile}
+option is set, the final position reached in each game of the match is appended
+to the specified file. When the match is over, XBoard
+displays the match score and exits. Default: 0 (do not run a match).
+ at item -mm/-xmm or -matchMode true/false
+ at cindex mm, option
+ at cindex matchMode, option
+Setting @code{matchMode} to true is equivalent to setting
+ at code{matchGames} to 1.
+ at item -sameColorGames n
+ at cindex sameColorGames, option
+Automatically runs an n-game match between two chess engines,
+without alternating colors.
+Otherwise the same applies as for the @samp{-matchGames} option,
+over which it takes precedence if both are specified. (See there.)
+Default: 0 (do not run a match).
+ at item -fcp or -firstChessProgram program
+ at cindex fcp, option
+ at cindex firstChessProgram, option
+Name of first chess engine.
+Default: @file{Fairy-Max}.
+ at item -scp or -secondChessProgram program
+ at cindex scp, option
+ at cindex secondChessProgram, option
+Name of second chess engine, if needed.
+A second chess engine is started only in Two Machines (match) mode.
+Default: @file{Fairy-Max}.
+ at item -fb/-xfb or -firstPlaysBlack true/false
+ at cindex fb, option
+ at cindex firstPlaysBlack, option
+In games between two chess engines, firstChessProgram normally plays
+white.  If this option is true, firstChessProgram plays black.  In a
+multi-game match, this option affects the colors only for the first
+game; they still alternate in subsequent games.
+ at item -fh or -firstHost host
+ at itemx -sh or -secondHost host
+ at cindex fh, option
+ at cindex firstHost, option
+ at cindex sh, option
+ at cindex secondHost, option
+Hosts on which the chess engines are to run. The default for
+each is @file{localhost}. If you specify another host, XBoard
+uses @file{rsh} to run the chess engine there. (You can substitute a
+different remote shell program for rsh using the @code{remoteShell}
+option described below.)
+ at item -fd or -firstDirectory dir
+ at itemx -sd or -secondDirectory dir
+ at cindex fd, option
+ at cindex firstDirectory, option
+ at cindex sd, option
+ at cindex secondDirectory, option
+Working directories in which the chess engines are to be run.
+The default is "", which means to run the chess engine
+in the same working directory as XBoard
+itself.  (See the CHESSDIR environment variable.)
+This option is effective only when the chess engine is being run
+on the local host; it does not work if the engine is run remotely
+using the -fh or -sh option.
+ at item -initString string
+ at itemx -secondInitString string
+ at cindex initString, option
+ at cindex secondInitString, option
+The string that is sent to initialize each chess engine for a new game.
+Default:
+
+ at example
+new
+random
+ at end example
+ at noindent
+Setting this option from the command line is tricky, because you must
+type in real newline characters, including one at the very end.
+In most shells you can do this by
+entering a @samp{\} character followed by a newline. It is easier to set
+the option from your @file{.Xresources} file; in that case you can
+include the character sequence @samp{\n} in the string, and it will
+be converted to a newline.
+
+If you change this option, don't remove the @samp{new} 
+command; it is required by all chess engines to
+start a new game.
+
+You can remove the @samp{random} command if you like; including it
+causes GNU Chess 4 to randomize its move selection slightly so that it
+doesn't play the same moves in every game.  Even without
+ at samp{random}, GNU Chess 4 randomizes its choice of moves from its
+opening book.  Many other chess engines ignore this command entirely
+and always (or never) randomize.
+
+You can also try adding other commands to the initString; see the
+documentation of the chess engine you are using for details.
+ at item -firstComputerString string
+ at itemx -secondComputerString string
+ at cindex firstComputerString, option
+ at cindex secondComputerString, option
+The string that is sent to the chess engine if its opponent is another
+computer chess engine.  The default is @samp{computer\n}.  Probably the
+only useful alternative is the empty string (@samp{}), which keeps the
+engine from knowing that it is playing another computer.
+ at item -reuse/-xreuse or -reuseFirst true/false
+ at itemx -reuse2/-xreuse2 or -reuseSecond true/false
+ at cindex reuse, option
+ at cindex reuseFirst, option
+ at cindex reuse2, option
+ at cindex reuseSecond, option
+If the option is false,
+XBoard kills off the chess engine after every game and starts
+it again for the next game.  
+If the option is true (the default), 
+XBoard starts the chess engine only once
+and uses it repeatedly to play multiple games.
+Some old chess engines may not work properly when
+reuse is turned on, but otherwise games will start faster if it is left on.
+ at item -firstProtocolVersion version-number
+ at itemx -secondProtocolVersion version-number
+ at cindex firstProtocolVersion, option
+ at cindex secondProtocolVersion, option
+This option specifies which version of the chess engine communication
+protocol to use.  By default, version-number is 2.  In version 1, the
+"protover" command is not sent to the engine; since version 1 is a
+subset of version 2, nothing else changes.  Other values for
+version-number are not supported.
+ at item -firstScoreAbs true/false
+ at itemx -secondScoreAbs true/false
+ at cindex firstScoreAbs, option
+ at cindex secondScoreAbs, option
+If this option is set, the score reported by the engine is taken to be 
+that in favor of white, even when the engine plays black. 
+Important when XBoard uses the score for adjudications, or in PGN reporting. 
+ at item -niceEngines priority
+ at cindex niceEngines, option
+This option allows you to lower the priority of the engine processes, 
+so that the generally insatiable hunger for CPU time of chess engines does not interfere so much 
+with smooth operation of WinBoard (or the rest of your system). 
+Negative values could increase the engine priority, which is not recommended.
+ at item -firstOptions string
+ at itemx -secondOptions string
+ at cindex firstOptions, option
+ at cindex secondOptions, option
+The given string is a comma-separated list of (option name, option value) pairs, 
+like the following example: “style=Karpov,blunder rate=0”. 
+If the options announced by the engine at startup through the feature commands of WinBoard protocol 
+matches one of the option names (i.e. “style” or “blunder rate”), 
+it would be set to the given value (i.e. “Karpov” or 0) 
+through a corresponding option command to the engine. 
+This provided that the type of the value (text or numeric) matches as well.
+ at item -firstNeedsNoncompliantFEN string
+ at itemx -secondNeedsNoncompliantFEN string
+ at cindex firstNeedsNoncompliantFEN, option
+ at cindex secondNeedsNoncompliantFEN, option
+The castling rights and e.p. fields of the FEN sent to the mentioned engine 
+with the setboard command will be replaced by the given string. This can for 
+instance be used to run engines that do not understand Chess960 FENs in 
+variant fischerandom, to make them at least understand the opening position, 
+through setting the string to “KQkq -”. (Note you also have to give the e.p. field!) 
+Other possible applications are to provide work-arounds for engines that want to see 
+castling and e.p. fields in variants that do not have castling or e.p. 
+(shatranj, courier, xiangqi, shogi) so that WinBoard would normally omit them 
+(string = “- -“), or to add variant-specific fields that are not yet supported by WinBoard 
+(e.g. to indicate the number of checks in 3check).
+ at end table
+
+ at node UCI + WB Engine Settings
+ at section UCI + WB Engine Settings
+ at cindex Engine Settings
+ at cindex Settings, Engine
+ at table @asis
+ at item -fUCI or -firstIsUCI true/false
+ at itemx -sUCI or -secondIsUCI true/false
+ at cindex fUCI, option
+ at cindex sUCI, option
+ at cindex firstIsUCI, option
+ at cindex secondIsUCI, option
+Indicates if the mentioned engine executable file is an UCI engine, 
+and should be run with the aid of the Polyglot adapter rather than directly. 
+Xboard will then pass the other UCI options and engine name to Polyglot 
+through a .ini temporary file ceated for the purpose.
+ at item -PolyglotDir filename
+ at cindex PolyglotDir, option
+Gives the name of the directory in which the Polyglot adapter for UCI engines expects its files.
+Default: "/usr/local/share/polyglot".
+ at item -usePolyglotBook true/false
+ at cindex usePolyglotBook, option
+Specifies if the Polygot book should be used.
+ at item -PolyglotBook filename
+ at cindex PolyglotBook, option
+Gives the filename of the opening book that Polyglot should use. 
+From XBoard 4.3.15 on, native WinBoard engines will also use the opening book specified here, 
+provided the @code{usePolyglotBook} option is set to true,
+and the option @code{firstHasOwnBookUCI} or @code{secondHasOwnBookUCI} applying to the engine
+is set to false.
+The engine will be kept in force mode as long as the current position is in book, 
+and XBoard will select the book moves for it. Default "".
+ at item -fNoOwnBookUCI or -firstXBook or -firstHasOwnBookUCI true/false
+ at itemx -sNoOwnBookUCI or -secondXBook or -secondHasOwnBookUCI true/false
+ at cindex fNoOwnBookUCI, option
+ at cindex sNoOwnBookUCI, option
+ at cindex firstHasOwnBookUCI, option
+ at cindex secondHasOwnBookUCI, option
+ at cindex firstXBook, option
+ at cindex secondXBook, option
+Indicates if the mentioned engine has its own opening book it should play from,
+rather than using the external book through XBoard. Default: false.
+ at item -defaultHashSize n
+ at cindex defaultHashSize, option
+Sets the size of the hash table to n MegaBytes. Together with the EGTB cache size 
+this number is also used to calculate the memory setting of WinBoard engines, 
+for those that support the memory feature of WinBoard protocol. Default: 64.
+ at item -defaultCacheSizeEGTB n
+ at cindex defaultCacheSizeEGTB, option
+Sets the size of the EGTB cache to n MegaBytes. Together with the hash-table size 
+this number is also used to calculate the memory setting of WinBoard engines, 
+for those that support the memory feature of WinBoard protocol. Default: 4.
+ at item -defaultPathEGTB filename
+ at cindex defaultPathEGTB, option
+Gives the name of the directory where the end-game tablebases are installed, for UCI engines.
+Default: "/usr/local/share/egtb".
+ at item -egtFormats string
+ at cindex egtFormats, option
+Specifies which end-game tables are installed on the computer, and where. 
+The argument is a comma-separated list of format specifications, 
+each specification consisting of a format name, a colon, and a directory path name, 
+e.g. "nalimov:/usr/local/share/egtb". 
+If the name part matches that of a format that the engine requests through a feature command, 
+xboard will relay the path name for this format to the engine through an egtpath command. 
+One egtpath command for each matching format will be sent. 
+Popular formats are "nalimov" DTM tablebases and "scorpio" bitbases.
+Default: "".
+ at end table
+
+ at node ICS options
+ at section ICS options
+ at cindex ICS options
+ at cindex Options, ICS
+ at table @asis
+ at item -ics/-xics or -internetChessServerMode true/false
+ at cindex ics, option
+ at cindex internetChessServerMode, option
+Connect with an Internet Chess Server to play chess against its
+other users, observe games they are playing, or review games
+that have recently finished. Default: false.
+ at item -icshost or -internetChessServerHost host
+ at cindex icshost, option
+ at cindex internetChessServerHost, option
+The Internet host name or address of the chess server to connect
+to when in ICS mode. Default: @code{chessclub.com}.
+Another popular chess server to try is @code{freechess.org}.
+If your site doesn't have a working Internet name server, try
+specifying the host address in numeric form. 
+You may also need
+to specify the numeric address when using the icshelper option
+with timestamp or timeseal (see below).
+ at item -icsport or -internetChessServerPort port-number
+ at cindex icsport, option
+ at cindex internetChessServerPort, option
+The port number to use when connecting to a chess server in ICS
+mode. Default: 5000.
+ at item -icshelper or -internetChessServerHelper prog-name
+ at cindex icshelper, option
+ at cindex internetChessServerHelper, option
+An external helper program used to communicate with the chess server.
+You would set it to "timestamp" for ICC (chessclub.com) or
+"timeseal" for FICS (freechess.org), after
+obtaining the correct version of timestamp or timeseal for your
+computer.  See "help timestamp" on ICC and "help timeseal" on FICS.
+This option is shorthand for @code{-useTelnet -telnetProgram program}.
+ at item -telnet/-xtelnet or -useTelnet true/false
+ at cindex telnet, option
+ at cindex useTelnet, option
+This option is poorly named; it should be called useHelper.
+If set to true, it instructs XBoard to run an external
+program to communicate with the Internet Chess Server. 
+The program to use is given by the telnetProgram option.
+If the option is
+false (the default), XBoard opens a TCP socket and uses its own
+internal implementation of the telnet protocol to communicate with the
+ICS. @xref{Firewalls}.
+ at item -telnetProgram prog-name
+ at cindex telnetProgram, option
+This option is poorly named; it should be called helperProgram.
+It gives the name of the telnet program to be used with
+the @code{gateway} and @code{useTelnet} options.  The default is
+ at file{telnet}. The telnet program is invoked with the value of
+ at code{internetChessServerHost} as its first argument and the value
+of @code{internetChessServerPort} as its second argument.
+ at xref{Firewalls}.
+ at item -gateway host-name
+ at cindex gateway, option
+If this option is set to a host name, XBoard communicates with the
+Internet Chess Server by using @file{rsh} to run
+the @code{telnetProgram} on the given host,
+instead of using its own internal implementation
+of the telnet protocol. You can substitute a different remote shell
+program for @file{rsh} using the @code{remoteShell} option described below.
+ at xref{Firewalls}.
+ at item -internetChessServerCommPort or -icscomm dev-name
+ at cindex internetChessServerCommPort, option
+ at cindex icscomm, option
+If this option is set, XBoard communicates with the ICS through
+the given character I/O device instead of opening a TCP connection.
+Use this option if your system does not have any kind of
+Internet connection itself (not even a SLIP or PPP connection),
+but you do have dialup access (or a hardwired terminal line) to
+an Internet service provider from which you can telnet to the ICS.
+
+The support for this option in XBoard is minimal. You need to
+set all communication parameters and tty modes before you enter
+XBoard.
+
+Use a script something like this:
+
+ at example
+stty raw -echo 9600 > /dev/tty00
+xboard -ics -icscomm /dev/tty00
+ at end example
+
+Here replace @samp{/dev/tty00} with the name of the device that your
+modem is connected to. You might have to add several more
+options to these stty commands. See the man pages for @file{stty}
+and @code{tty} if you run into problems. Also, on many systems stty
+works on its standard input instead of standard output, so you
+have to use @samp{<} instead of @samp{>}.
+
+If you are using linux, try starting with the script below.
+Change it as necessary for your installation.
+
+ at example
+#!/bin/sh -f
+# configure modem and fire up XBoard
+
+# configure modem
+(
+  stty 2400 ; stty raw ; stty hupcl ; stty -clocal
+  stty ignbrk ; stty ignpar ; stty ixon ; stty ixoff
+  stty -iexten ; stty -echo
+) < /dev/modem
+xboard -ics -icscomm /dev/modem
+ at end example
+ at noindent
+After you start XBoard in this way, type whatever commands are
+necessary to dial out to your Internet provider and log in.
+Then telnet to ICS, using a command like
+ at kbd{telnet chessclub.com 5000}.
+Important: See the paragraph below about extra echoes, 
+in @ref{Limitations}.
+ at item -icslogon or -internetChessServerLogonScript file-name
+ at cindex icslogon, option
+ at cindex internetChessServerLogonScript, option
+ at cindex .icsrc
+Whenever XBoard connects to the Internet Chess Server,
+if it finds a file with the name given in this option, it feeds the
+file's contents to the ICS as commands. The default file name
+is @file{.icsrc}.
+Usually the first two lines of the file should be
+your ICS user name and password.
+The file can be either in $CHESSDIR, in XBoard's working
+directory if CHESSDIR is not set, or in your home directory.
+ at item -msLoginDelay delay
+ at cindex msLoginDelay, option
+If you experience trouble logging on to an ICS when using the
+ at code{-icslogon} option, inserting some delay between characters
+of the logon script may help. This option adds @code{delay}
+milliseconds of delay between characters. Good values to try
+are 100 and 250.
+ at item -icsinput/-xicsinput or -internetChessServerInputBox true/false
+ at cindex icsinput, option
+ at cindex internetChessServerInputBox, option
+Sets the ICS Input Box menu option. @xref{Mode Menu}. Default: false.
+ at item -autocomm/-xautocomm or -autoComment true/false
+ at cindex autocomm, option
+ at cindex autoComment, option
+Sets the Auto Comment menu option. @xref{Options Menu}. Default: false.
+ at item -autoflag/-xautoflag or -autoCallFlag true/false
+ at cindex autoflag, option
+ at cindex autoCallFlag, option
+Sets the Auto Flag menu option.  @xref{Options Menu}. Default: false.
+ at item -autobs/-xautobs or -autoObserve true/false
+ at cindex autobs, option
+ at cindex autoObserve, option
+Sets the Auto Observe menu option.  @xref{Options Menu}. Default: false.
+ at item -autoKibitz
+ at cindex autoKibitz, option
+Enables kibitzing of the engines last thinking output (depth, score, time, speed, PV) 
+before it moved
+to the ICS, in zippy mode. The option @code{showThinking} must be switched on for 
+this option to work.
+Also diverts similar kibitz information of an opponent engine that is playing you 
+through the ICS to the engine-output window, as if the engine was playing locally.
+ at item -moves/-xmoves or -getMoveList true/false
+ at cindex moves, option
+ at cindex getMoveList, option
+Sets the Get Move List menu option.  @xref{Options Menu}.  Default: true.
+ at item -alarm/-xalarm or -icsAlarm true/false
+ at cindex alarm, option
+ at cindex icsAlarm, option
+Sets the ICS Alarm menu option.  @xref{Options Menu}. Default: true.
+ at item -icsAlarmTime ms
+ at cindex icsAlarmTime, option
+Sets the time in milliseconds for the ICS Alarm menu option. 
+ at xref{Options Menu}. Default: 5000.
+ at item -pre/-xpre \fRor\fB -premove true/false
+ at cindex pre, option
+ at cindex premove, option
+Sets the Premove menu option. @xref{Options Menu}. Default: true.
+ at item -quiet/-xquiet or -quietPlay true/false
+ at cindex quiet, option
+ at cindex quietPlay, option
+Sets the Quiet Play menu option.  @xref{Options Menu}.  Default: false.
+ at item -colorizeMessages or -colorize
+ at cindex Colors
+ at cindex colorize, option
+Setting colorizeMessages
+to true tells XBoard to colorize the messages received from
+the ICS.  Colorization works only if your xterm 
+supports ISO 6429 escape sequences for changing text colors.
+ at item -colorShout foreground,background,bold
+ at itemx -colorSShout foreground,background,bold
+ at itemx -colorChannel1 foreground,background,bold
+ at itemx -colorChannel foreground,background,bold
+ at itemx -colorKibitz foreground,background,bold
+ at itemx -colorTell foreground,background,bold
+ at itemx -colorChallege foreground,background,bold
+ at itemx -colorRequest foreground,background,bold
+ at itemx -colorSeek foreground,background,bold
+ at itemx -colorNormal foreground,background,bold
+ at cindex Colors
+ at cindex colorShout, option
+ at cindex colorSShout, option
+ at cindex colorChannel1, option
+ at cindex colorChannel, option
+ at cindex colorKibitz, option
+ at cindex colorTell, option
+ at cindex colorChallenge, option
+ at cindex colorRequest, option
+ at cindex colorSeek, option
+ at cindex colorNormal, option
+These options set the colors used when colorizing ICS messages.
+All ICS messages are grouped into one of these categories:
+shout, sshout, channel 1, other channel, kibitz, tell, challenge, 
+request (including abort, adjourn, draw, pause, and takeback), or
+normal (all other messages).  
+
+Each foreground or background argument can be one of the following:
+black, red, green, yellow, blue, magenta, cyan, white, or default.
+Here ``default'' means the default foreground or background color of
+your xterm.  Bold can be 1 or 0.  If background is omitted, ``default''
+is assumed; if bold is omitted, 0 is assumed.
+
+Here is an example of how to set the colors in your @file{.Xresources} file.
+The colors shown here are the default values; you will get
+them if you turn @code{-colorize} on without specifying your own colors.
+
+ at example
+xboard*colorizeMessages: true	
+xboard*colorShout: green
+xboard*colorSShout: green, black, 1
+xboard*colorChannel1: cyan
+xboard*colorChannel: cyan, black, 1
+xboard*colorKibitz: magenta, black, 1
+xboard*colorTell: yellow, black, 1
+xboard*colorChallenge: red, black, 1
+xboard*colorRequest: red
+xboard*colorSeek: blue
+xboard*colorNormal: default
+ at end example
+ at item -soundProgram progname
+ at cindex soundProgram, option
+ at cindex Sounds
+If this option is set to a sound-playing program that is installed and
+working on your system, XBoard can play sound files when certain
+events occur, listed below.  The default program name is "play".  If
+any of the sound options is set to "$", the event rings the terminal
+bell by sending a ^G character to standard output, instead of playing
+a sound file.  If an option is set to the empty string "", no sound is
+played for that event.
+ at item -soundShout filename
+ at itemx -soundSShout filename
+ at itemx -soundChannel filename
+ at itemx -soundKibitz filename
+ at itemx -soundTell filename
+ at itemx -soundChallenge filename
+ at itemx -soundRequest filename
+ at itemx -soundSeek filename
+ at cindex soundShout, option
+ at cindex soundSShout, option
+ at cindex soundChannel, option
+ at cindex soundKibitz, option
+ at cindex soundTell, option
+ at cindex soundChallenge, option
+ at cindex soundRequest, option
+ at cindex soundSeek, option
+These sounds are triggered in the same way as the colorization events
+described above.  They all default to "", no sound.  They are played
+only if the colorizeMessages is on.
+ at item -soundMove filename
+ at cindex soundMove, option
+This sound is used by the Move Sound menu option.  Default: "$".
+ at item -soundIcsAlarm filename
+ at cindex soundIcsAlarm, option
+This sound is used by the ICS Alarm menu option.  Default: "$".
+ at item -soundIcsWin filename
+ at cindex soundIcsWin, option
+This sound is played when you win an ICS game.  Default: "" (no sound).
+ at item -soundIcsLoss filename
+ at cindex soundIcsLoss, option
+This sound is played when you lose an ICS game.  Default: "" (no sound).
+ at item -soundIcsDraw filename
+ at cindex soundIcsDraw, option
+This sound is played when you draw an ICS game.  Default: "" (no sound).
+ at item -soundIcsUnfinished filename
+ at cindex soundIcsUnfinished, option
+This sound is played when an ICS game that you are participating in is
+aborted, adjourned, or otherwise ends inconclusively.  Default: "" (no
+sound).
+
+Here is an example of how to set the sounds in your @file{.Xresources} file:
+
+ at example
+xboard*soundShout: shout.wav
+xboard*soundSShout: sshout.wav
+xboard*soundChannel1: channel1.wav
+xboard*soundChannel: channel.wav
+xboard*soundKibitz: kibitz.wav
+xboard*soundTell: tell.wav
+xboard*soundChallenge: challenge.wav
+xboard*soundRequest: request.wav
+xboard*soundSeek: seek.wav
+xboard*soundMove: move.wav
+xboard*soundIcsWin: win.wav
+xboard*soundIcsLoss: lose.wav
+xboard*soundIcsDraw: draw.wav
+xboard*soundIcsUnfinished: unfinished.wav
+xboard*soundIcsAlarm: alarm.wav
+ at end example
+ at end table
+
+ at node Load and Save options
+ at section Load and Save options
+ at cindex Options, Load and Save
+ at cindex Load and Save options
+ at table @asis
+ at item -lgf or -loadGameFile file
+ at itemx -lgi or -loadGameIndex index
+ at cindex lgf, option
+ at cindex loadGameFile, option
+ at cindex lgi, option
+ at cindex loadGameIndex, option
+If the @code{loadGameFile} option is set, XBoard loads the specified
+game file at startup. The file name @file{-} specifies the standard
+input. If there is more than one game in the file, XBoard
+pops up a menu of the available games, with entries based on their PGN 
+(Portable Game Notation) tags.
+If the @code{loadGameIndex} option is set to @samp{N}, the menu is suppressed
+and the N th game found in the file is loaded immediately.
+The menu is also suppressed if @code{matchMode} is enabled or if the game file
+is a pipe; in these cases the first game in the file is loaded immediately.
+Use the @file{pxboard} shell script provided with XBoard if you
+want to pipe in files containing multiple games and still see the menu.
+If the loadGameIndex specifies an index -1, this triggers auto-increment
+of the index in @code{matchMode}, which means that after every game the
+index is incremented by one, causing each game of the match to be played
+from the next game in the file. Similarly, specifying an index value of -2
+causes the index to be incremented every two games, so that each game
+in the file is used twice (with reversed colors).
+The @code{rewindIndex} option causes the index to be reset to the
+first game of the file when it has reached a specified value.
+ at item -rewindIndex n
+Causes a position file or game file to be rewound to its beginning after n
+positions or games in auto-increment @code{matchMode}. 
+See @code{loadPositionIndex} and @code{loadGameIndex}.
+default: 0 (no rewind).
+ at item -td or -timeDelay seconds
+ at cindex td, option
+ at cindex timeDelay, option
+Time delay between moves during @samp{Load Game}. Fractional seconds
+are allowed; try @samp{-td 0.4}. A time delay value of -1 tells
+XBoard not to step through game files automatically. Default: 1
+second.
+ at item -sgf or -saveGameFile file
+ at cindex sgf, option
+ at cindex saveGameFile, option
+If this option is set, XBoard appends a record of every game
+played to the specified file. The file name @file{-} specifies the
+standard output.
+ at item -autosave/-xautosave or -autoSaveGames true/false
+ at cindex autosave, option
+ at cindex autoSaveGames, option
+Sets the Auto Save menu option.  @xref{Options Menu}.  Default: false.
+Ignored if @code{saveGameFile} is set.
+ at item -lpf or -loadPositionFile file
+ at itemx -lpi or -loadPositionIndex index
+ at cindex lpf, option
+ at cindex loadPositionFile, option
+ at cindex lpi, option
+ at cindex loadPositionIndex, option
+If the @code{loadPositionFile} option is set, XBoard loads the
+specified position file at startup. The file name @file{-} specifies the
+standard input. If the @code{loadPositionIndex} option is set to N,
+the Nth position found in the file is loaded; otherwise the
+first position is loaded.
+If the loadPositionIndex specifies an index -1, this triggers auto-increment
+of the index in @code{matchMode}, which means that after every game the
+index is incremented by one, causing each game of the match to be played
+from the next position in the file. Similarly, specifying an index value of -2
+causes the index to be incremented every two games, so that each position
+in the file is used twice (with the engines playing opposite colors).
+The @code{rewindIndex} option causes the index to be reset to the
+first position of the file when it has reached a specified value.
+ at item -spf or -savePositionFile file
+ at cindex spf, option
+ at cindex savePositionFile, option
+If this option is set, XBoard appends the final position reached
+in every game played to the specified file. The file name @file{-}
+specifies the standard output.
+ at item -pgnExtendedInfo true/false
+ at cindex pgnExtendedInfo, option`
+If this option is set, WinBoard saves depth, score and time used for each 
+move that the engine found as a comment in the PGN file.
+Default: false.
+ at item -pgnEventHeader string
+ at cindex pgnEventHeader, option`
+Sets the name used in the PGN event tag to string. 
+Default: "Computer Chess Game".
+ at item -saveOutOfBookInfo true/false
+ at cindex saveOutOfBookInfo, option`
+Include the information on how the engine(s) game out of its opening book in a special 'annotator' tag with the PGN file.
+ at item -oldsave/-xoldsave or -oldSaveStyle true/false
+ at cindex oldsave, option
+ at cindex oldSaveStyle, option
+Sets the Old Save Style menu option.  @xref{Options Menu}.  Default: false.
+ at item -gameListTags string
+ at cindex gameListTags, option
+The character string lists the PGN tags that should be printed in the
+Game List, and their order. The meaning of the codes is e=event,
+s=site, d=date, o=round, p=players, r=result, w=white Elo, b=black Elo,
+t=time control, v=variant, a=out-of-book info.
+Default: "eprd"
+ at end table
+
+ at node User interface options
+ at section User interface options
+ at cindex User interface options
+ at cindex Options, User interface
+ at table @asis
+ at item -display
+ at itemx -geometry
+ at itemx -iconic
+ at cindex display, option
+ at cindex geometry, option
+ at cindex iconic, option
+These and most other standard Xt options are accepted.
+ at item -noGUI
+ at cindex noGUI, option
+Suppresses all GUI functions of XBoard 
+(to speed up automated ultra-fast engine-engine games, which you don’t want to watch). 
+There will be no board or clock updates, no printing of moves, 
+and no update of the icon on the task bar in this mode.
+ at item -movesound/-xmovesound or -ringBellAfterMoves true/false
+ at cindex movesound, option
+ at cindex bell, option
+ at cindex ringBellAfterMoves, option
+Sets the Move Sound menu option.  @xref{Options Menu}.  Default: false.
+For compatibility with old XBoard versions, -bell/-xbell are also 
+accepted as abbreviations for this option.
+ at item -exit/-xexit or -popupExitMessage true/false
+ at cindex exit, option
+ at cindex popupExitMessage, option
+Sets the Popup Exit Message menu option.  @xref{Options Menu}. Default: true.
+ at item -popup/-xpopup or -popupMoveErrors true/false
+ at cindex popup, option
+ at cindex popupMoveErrors, option
+Sets the Popup Move Errors menu option.  @xref{Options Menu}. Default: false.
+ at item -queen/-xqueen or -alwaysPromoteToQueen true/false
+ at cindex queen, option
+ at cindex alwaysPromoteToQueen, option
+Sets the Always Queen menu option.  @xref{Options Menu}.  Default: false.
+ at item -legal/-xlegal or -testLegality true/false
+ at cindex legal, option
+ at cindex testLegality, option
+Sets the Test Legality menu option.  @xref{Options Menu}.  Default: true.
+ at item -size or -boardSize (sizeName | n1,n2,n3,n4,n5,n6,n7)
+ at cindex size, option
+ at cindex boardSize, option
+ at cindex board size
+Determines how large the board will be, by selecting the pixel size
+of the pieces and setting a few related parameters.
+The sizeName can be one of: Titanic, giving 129x129 pixel pieces,
+Colossal 116x116, Giant 108x108, Huge 95x95, Big 87x87, Large 80x80, Bulky 72x72,
+Medium 64x64, Moderate 58x58, Average 54x54, Middling 49x49, Mediocre
+45x45, Small 40x40, Slim 37x37, Petite 33x33, Dinky 29x29, Teeny 25x25,
+or Tiny 21x21.
+Pieces of all these sizes are built into XBoard.
+Other sizes can
+be used if you have them; see the pixmapDirectory and bitmapDirectory
+options.
+The default depends on the size of your screen; it is approximately the
+largest size that will fit without clipping.
+
+You can select other sizes or vary other layout parameters by providing
+a list of comma-separated values (with no spaces) as the argument.
+You do not need to provide all the values; for any you omit from the
+end of the list, defaults are taken from the nearest built-in size.
+The value @code{n1} gives the piece size, @code{n2} the width of the
+black border
+between squares, @code{n3} the desired size for the 
+clockFont, @code{n4} the desired size for the coordFont,
+ at code{n5} the desired size for the default font,
+ at code{n6} the smallLayout flag (0 or 1), 
+and @code{n7} the tinyLayout flag (0 or 1).  
+All dimensions are in pixels.
+If the border between squares is eliminated (0 width), the various
+highlight options will not work, as there is nowhere to draw the highlight.
+If smallLayout is 1 and @code{titleInWindow} is true, 
+the window layout is rearranged to make more room for the title.
+If tinyLayout is 1, the labels on the menu bar are abbreviated
+to one character each and the buttons in the button bar are made narrower.
+ at item -coords/-xcoords or -showCoords true/false
+ at cindex coords, option
+ at cindex showCoords, option
+Sets the Show Coords menu option.  @xref{Options Menu}.  Default: false.
+The @code{coordFont} option specifies what font to use.
+ at item -autoraise/-xautoraise or -autoRaiseBoard true/false
+ at cindex autoraise, option
+ at cindex autoRaiseBoard, option
+Sets the Auto Raise Board menu option.  @xref{Options Menu}.  Default: true.
+ at item -autoflip/-xautoflip or -autoFlipView true/false
+ at cindex autoflip, option
+ at cindex autoFlipView, option
+Sets the Auto Flip View menu option.  @xref{Options Menu}.  Default: true.
+ at item -flip/-xflip or -flipView true/false
+ at cindex flip, option
+ at cindex flipView, option
+If Auto Flip View is not set, or if you are observing but not participating
+in a game, then the positioning of the board at the start of each game
+depends on the flipView option.  If flipView is false (the default),
+the board is positioned so that the white pawns move from the bottom to the
+top; if true, the black pawns move from the bottom to the top.
+In any case, the Flip menu option (see @ref{Options Menu})
+can be used to flip the board after
+the game starts.
+ at item -title/-xtitle or -titleInWindow true/false
+ at cindex title, option
+ at cindex titleInWindow, option
+If this option is true, XBoard displays player names (for ICS
+games) and game file names (for @samp{Load Game}) inside its main
+window. If the option is false (the default), this information is
+displayed only in the window banner. You probably won't want to
+set this option unless the information is not showing up in the
+banner, as happens with a few X window managers.
+ at item -buttons/-xbuttons or -showButtonBar True/False
+ at cindex buttons, option
+ at cindex showButtonBar, option
+If this option is False, xboard omits the [<<] [<] [P] [>] [>>] button
+bar from the window, allowing the message line to be wider.  You can
+still get the functions of these buttons using the menus or their keyboard
+shortcuts.  Default: true.
+ at item -mono/-xmono or -monoMode true/false
+ at cindex mono, option
+ at cindex monoMode, option
+Determines whether XBoard displays its pieces and squares with
+two colors (true) or four (false). You shouldn't have to
+specify @code{monoMode}; XBoard will determine if it is necessary.
+ at item -flashCount count
+ at itemx -flashRate rate
+ at itemx -flash/-xflash
+ at cindex flashCount, option
+ at cindex flashRate, option
+ at cindex flash, option
+ at cindex xflash, option
+These options enable flashing of pieces when they
+land on their destination square.
+ at code{flashCount}
+tells XBoard how many times to flash a piece after it
+lands on its destination square.
+ at code{flashRate}
+controls the rate of flashing (flashes/sec).
+Abbreviations:
+ at code{flash}
+sets flashCount to 3.
+ at code{xflash}
+sets flashCount to 0.
+Defaults:  flashCount=0 (no flashing), flashRate=5.
+ at item -highlight/-xhighlight or -highlightLastMove true/false
+ at cindex highlight, option
+ at cindex highlightLastMove, option
+Sets the Highlight Last Move menu option. @xref{Options Menu}. Default: false.
+ at item -blind/-xblind or -blindfold true/false
+ at cindex blind, option
+ at cindex blindfold, option
+Sets the Blindfold menu option.  @xref{Options Menu}.  Default: false.
+ at item -clockFont font
+ at cindex clockFont, option
+ at cindex Font, clock
+The font used for the clocks. If the option value is a pattern
+that does not specify the font size, XBoard tries to choose an
+appropriate font for the board size being used.
+Default: -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
+ at item -coordFont font
+ at cindex coordFont, option
+ at cindex Font, coordinates
+The font used for rank and file coordinate labels if @code{showCoords}
+is true. If the option value is a pattern that does not specify
+the font size, XBoard tries to choose an appropriate font for
+the board size being used.
+Default: -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
+ at item -font font
+ at cindex font, option
+ at cindex Font
+The font used for popup dialogs, menus, comments, etc.
+If the option value is a pattern that does not specify
+the font size, XBoard tries to choose an appropriate font for
+the board size being used.
+Default: -*-helvetica-medium-r-normal--*-*-*-*-*-*-*-*.
+ at item -fontSizeTolerance tol
+ at cindex fontSizeTolerance, option
+In the font selection algorithm, a nonscalable font will be preferred
+over a scalable font if the nonscalable font's size differs
+by @code{tol} pixels
+or less from the desired size.  A value of -1 will force
+a scalable font to always be used if available; a value of 0 will
+use a nonscalable font only if it is exactly the right size; 
+a large value (say 1000) will force a nonscalable font to always be
+used if available.  Default: 4.
+ at item -bm or -bitmapDirectory dir
+ at itemx -pixmap or -pixmapDirectory dir
+ at cindex bm, option
+ at cindex bitmapDirectory, option
+ at cindex pixmap, option
+ at cindex pixmapDirectory, option
+These options control what piece images xboard uses.  The XBoard
+distribution includes one set of pixmap pieces in xpm format, in the
+directory @file{pixmaps}, and one set of bitmap pieces in xbm format,
+in the directory @file{bitmaps}.  Pixmap
+pieces give a better appearance on the screen: the white pieces have
+dark borders, and the black pieces have opaque internal details.  With
+bitmaps, neither piece color has a border, and the internal details
+are transparent; you see the square color or other background color
+through them.
+
+If XBoard is configured and compiled on a system that includes libXpm,
+the X pixmap library, the xpm pixmap pieces are compiled in as the
+default.  A different xpm piece set can be selected at runtime with
+the @code{pixmapDirectory} option, or a bitmap piece set can be selected
+with the @code{bitmapDirectory} option.
+
+If XBoard is configured and compiled on a system that does not include
+libXpm (or the @code{--disable-xpm} option is given to the configure
+program), the bitmap pieces are compiled in as the default.  It is not
+possible to use xpm pieces in this case, but pixmap pieces in another
+format called "xim" can be used by giving the @code{pixmapDirectory} option.
+Or again, a different bitmap piece set can be selected with the
+ at code{bitmapDirectory} option.
+
+Files in the @code{bitmapDirectory} must be named as follows:
+The first character of a piece bitmap name gives the piece it 
+represents (@samp{p}, @samp{n}, @samp{b}, @samp{r}, @samp{q}, or @samp{k}),
+the next characters give the size in pixels, the
+following character indicates whether the piece is
+solid or outline (@samp{s} or @samp{o}),
+and the extension is @samp{.bm}.
+For example, a solid 80x80 knight would be named @file{n80s.bm}.
+The outline bitmaps are used only in monochrome mode.
+If bitmap pieces are compiled in and the bitmapDirectory is missing
+some files, the compiled in pieces are used instead.
+
+If the bitmapDirectory option is given,
+it is also possible to replace xboard's icons and menu checkmark,
+by supplying files named @file{icon_white.bm}, @file{icon_black.bm}, and
+ at file{checkmark.bm}.
+
+For more information about pixmap pieces and how to get additional
+sets, see @ref{zic2xpm} below.
+ at item -whitePieceColor color
+ at itemx -blackPieceColor color
+ at itemx -lightSquareColor color
+ at itemx -darkSquareColor color
+ at itemx -highlightSquareColor color
+ at cindex Colors
+ at cindex whitePieceColor, option
+ at cindex blackPieceColor, option
+ at cindex lightSquareColor, option
+ at cindex darkSquareColor, option
+ at cindex highlightSquareColor, option
+Colors to use for the pieces, squares, and square highlights.
+Defaults:
+
+ at example
+-whitePieceColor       #FFFFCC
+-blackPieceColor       #202020
+-lightSquareColor      #C8C365
+-darkSquareColor       #77A26D
+-highlightSquareColor  #FFFF00
+-premoveHighlightColor #FF0000
+ at end example
+
+On a grayscale monitor you might prefer:
+
+ at example
+-whitePieceColor       gray100
+-blackPieceColor       gray0
+-lightSquareColor      gray80
+-darkSquareColor       gray60
+-highlightSquareColor  gray100
+-premoveHighlightColor gray70
+ at end example
+ at item -drag/-xdrag or -animateDragging true/false
+ at cindex drag, option
+ at cindex animateDragging, option
+Sets the Animate Dragging menu option. @xref{Options Menu}.  Default: true.
+ at item -animate/-xanimate or -animateMoving true/false
+ at cindex animate, option
+ at cindex animateMoving, option
+Sets the Animate Moving menu option. @xref{Options Menu}.  Default: true.
+ at item -animateSpeed n
+ at cindex -animateSpeed, option
+Number of milliseconds delay between each animation frame when Animate
+Moves is on.
+ at end table
+
+ at node Adjudication Options
+ at section Adjudication Options
+ at cindex Options, adjudication
+ at table @asis
+ at item -adjudicateLossThreshold n
+ at cindex adjudicateLossThreshold, option
+If the given value is non-zero, XBoard adjudicates the game as a loss 
+if both engines agree for a duration of 6 consecutive ply that the score 
+is below the given score threshold for that engine. Make sure the score 
+is interpreted properly by XBoard, 
+using @code{-firstScoreAbs} and @code{-secondScoreAbs} if needed. 
+Default: 0 (no adjudiction)
+ at item -adjudicateDrawMoves n
+ at cindex adjudicateDrawMoves, option
+If the given value is non-zero, XBoard adjudicates the game as a draw 
+if after the given number of moves it was not yet decided. Defaut: 0 (no adjudication)
+ at item -checkMates true/false
+ at cindex checkMates, option
+If this option is set, XBoard detects all checkmates and stalemates, 
+and ends the game as soon as they occur. 
+Legality-testing must be switched on for this option to work.
+Default: true
+ at item -testClaims true/false
+ at cindex testClaims, option
+If this option is set, XBoard verifies all result claims made by engines, 
+and those who send false claims will forfeit the game because of it. 
+Legality-testing must be switched on for this option to work. Default: true
+ at item -materialDraws true/false
+ at cindex materialDraws, option
+If this option is set, XBoard adjudicates games as draws when there is 
+no sufficient material left to inflict a checkmate. 
+This applies to KBKB with like bishops (any number, actually), and to KBK, KNK and KK. 
+Legality-testing must be switched on for this option to work. Default: true
+ at item -trivialDraws true/false
+ at cindex trivialDraws, option
+If this option is set, XBoard adjudicates games as draws that cannot be 
+usually won without opponent cooperation. This applies to KBKB with unlike bishops, 
+and to KBKN, KNKN, KNNK, KRKR and KQKQ. The draw is called after 6 ply into these end-games, 
+to allow quick mates that can occur in some exceptional positions to be found by the engines. 
+KQKQ does not really belong in this category, and might be taken out in the future. 
+(When bitbase-based adjudications are implemented.) 
+Legality-testing must be on for this option to work. Default: false
+ at item -ruleMoves n
+ at cindex ruleMoves, option
+If the given value is non-zero, XBoard adjudicates the game as a draw after the given 
+number of consecutive reversible moves. Engine draw claims are always accepted after 50 moves, 
+irrespective of the given value of n.
+ at item -repeatsToDraw n
+If the given value is non-zero, xboard adjudicates the game as a draw if a position 
+is repeated the given number of times. Engines draw claims are always accepted after 3 repeats, 
+(on the 3rd occurrence, actually), irrespective of the value of n. 
+Beware that positions that have different castling or en-passant rights do not count 
+as repeats, XBoard is fully e.p. and castling aware!
+ at end table
+
+ at node Other options
+ at section Other options
+ at cindex Options, miscellaneous
+ at table @asis
+ at item -ncp/-xncp or -noChessProgram true/false
+ at cindex ncp, option
+ at cindex noChessProgram, option
+If this option is true, XBoard acts as a passive chessboard; it
+does not start a chess engine at all. Turning on this option
+also turns off clockMode. Default: false.
+ at item -mode or -initialMode modename
+ at cindex mode, option
+ at cindex initalMode, option
+If this option is given, XBoard selects the given modename
+from the Mode menu after starting and (if applicable) processing the
+loadGameFile or loadPositionFile option. Default: "" (no selection). 
+Other supported values are 
+MachineWhite, MachineBlack, TwoMachines, Analysis, 
+AnalyzeFile, EditGame, EditPosition, and Training.
+ at item -variant varname
+ at cindex variant, option
+Activates preliminary, partial support for playing chess variants
+against a local engine or editing variant games.  This flag is not
+needed in ICS mode.  Recognized variant names are:
+
+ at example
+normal        Normal chess
+wildcastle    Shuffle chess, king can castle from d file
+nocastle      Shuffle chess, no castling allowed
+fischerandom  Fischer Random shuffle chess
+bughouse      Bughouse, ICC/FICS rules
+crazyhouse    Crazyhouse, ICC/FICS rules
+losers        Lose all pieces or get mated (ICC wild 17)
+suicide       Lose all pieces including king (FICS)
+giveaway      Try to have no legal moves (ICC wild 26)
+twokings      Weird ICC wild 9
+kriegspiel    Opponent's pieces are invisible
+atomic        Capturing piece explodes (ICC wild 27)
+3check        Win by giving check 3 times (ICC wild 25)
+shatranj      An ancient precursor of chess (ICC wild 28)
+xiangqi       Chinese Chess (on a 9x10 board)
+shogi         Japanese Chess (on a 9x9 board & piece drops) 
+capablanca    Capablanca Chess (10x8 board, with Archbishop 
+              and Chancellor pieces)
+gothic        similar, with a better initial position
+caparandom    An FRC-like version of Capablanca Chess (10x8) 
+janus         A game with two Archbishops (10x8 board)
+courier       Medieval intermedite between shatranj and 
+              modern Chess (on 12x8 board) 
+falcon        Patented 10x8 variant with two Falcon pieces
+berolina      Pawns capture straight ahead, and move diagonal 
+cylinder      Pieces wrap around the board edge
+knightmate    King moves as Knight, and vice versa 
+super         Superchess (shuffle variant with 4 exo-pieces)
+fairy         A catchall variant in which all piece types 
+              known to XBoard can participate (8x8)
+unknown       Catchall for other unknown variants
+ at end example
+
+In the shuffle variants, XBoard now does shuffle the pieces, although
+you can still do it by hand using Edit Position.  Some variants are
+supported only in ICS mode, including bughouse, and
+kriegspiel.  The winning/drawing conditions in crazyhouse (offboard
+interposition on mate), losers, suicide, giveaway, atomic, and 3check
+are not fully understood.  
+Berolina and cylinder chess can only be played with legality testing off.
+In crazyhouse, XBoard now does keep
+track of offboard pieces.  In shatranj it does implement the baring
+rule when mate detection is switched on.
+ at item -boardHeight N
+ at cindex boardHeight, option
+Allows you to set a non-standard number of board ranks in any variant. 
+If the height is given as -1, the default height for the variant is used.
+Default: -1
+ at item -boardWidth N
+ at cindex boardWidth, option
+Allows you to set a non-standard number of board files in any variant. 
+If the width is given as -1, the default width for the variant is used. 
+With a non-standard width, the initial position will always be an empty board, 
+as the usual opening array will not fit.
+Default: -1
+ at item -holdingsSize N
+ at cindex holdingsSize, option
+Allows you to set a non-standard size for the holdings in any variant. 
+If the size is given as -1, the default holdings size for the variant is used. 
+The first N piece types will go into the holdings on capture, and you will be 
+able to drop them on the board in stead of making a normal move. If size equals 0, 
+there will be no holdings.
+Default: -1
+ at item -defaultFrcPosition N
+ at cindex defaultFrcPosition, option
+Specifies the number of the opening position in shuffle games like Chess960. 
+A value of -1 means the position is randomly generated by XBoard
+at the beginning of every game.
+Default: -1
+ at item -pieceToSquareTable string
+ at cindex pieceToSquareTable, option
+The characters that are used to represent the piece types XBoard knows in FEN 
+diagrams and SAN moves. The string argument has to have an even length 
+(or it will be ignored), as white and black pieces have to be given separately 
+(in that order). The last letter for each color will be the King. 
+The letters before that will be PNBRQ and then a whole host of fairy pieces 
+in an order that has not fully crystallized yet (currently FEACWMOHIJGDVSLU, 
+F=Ferz, Elephant, A=Archbishop, C=Chancellor, W=Wazir, M=Commoner, O=Cannon, 
+H=Nightrider). You should list at least all pieces that occur in the variant 
+you are playing. If you have less than 44 characters in the string, the pieces 
+not mentioned will get assigned a period, and you will not be able to distinguish 
+them in FENs. You can also explicitly assign pieces a period, in which case they 
+will not be counted in deciding which captured pieces can go into the holdings.
+A tilde '~' as a piece name does mean this piece is used to represent a promoted 
+Pawn in crazyhouse-like games, i.e. on capture it turns back onto a Pawn. 
+A '+' similarly indicates the piece is a shogi-style promoted piece, that should 
+revert to its non-promoted version on capture (rather than to a Pawn).
+Note that promoted pieces are represented by pieces 11 further in the list.
+You should not have to use this option often: each variant has its own default 
+setting for the piece representation in FEN, which should be sufficient in normal use.
+Default: ""
+ at item -debug/-xdebug or -debugMode true/false
+ at cindex debug, option
+ at cindex debugMode, option
+Turns on debugging printout.
+ at item -debugFile filename or -nameOfDebugFile filename
+ at cindex debugFile, option
+ at cindex nameOfDebugFile, option
+Sets the name of the file to which WinBoard saves debug information 
+(including all communication to and from the engines).
+ at item -engineDebugOutput number
+ at cindex engineDebugOutput, option
+Specifies how WinBoard should handle unsolicited output from the engine, 
+with respect to saving it in the debug file. 
+The output is further (hopefully) ignored. 
+If number=0, WinBoard refrains from writing such spurious output to the debug file. 
+If number=1, all engine output is written faithfully to the debug file. 
+If number=2, any protocol-violating line is prefixed with a ‘#’ character, 
+as the engine itself should have done if it wanted to submit info for inclusion in the debug file.
+This option is provided for the benefit of applications that use the debug file 
+as a source of information, such as the broadcaster of live games TLCV / TLCS. 
+Such applications can be protected from spurious engine output that might otherwise confuse them.
+ at item -rsh or -remoteShell shell-name
+ at cindex rsh, option
+ at cindex remoteShell, option
+Name of the command used to run programs remotely. The default
+is @file{rsh} or @file{remsh}, determined when XBoard is
+configured and compiled.
+ at item -ruser or -remoteUser user-name
+ at cindex ruser, option
+ at cindex remoteUser, option
+User name on the remote system when running programs with the
+ at code{remoteShell}. The default is your local user name.
+ at item -userName username
+ at cindex userName, option
+Name under which the Human player will be listed in the PGN file. 
+Default is the login name on your local computer.
+ at item -delayBeforeQuit number
+ at itemx -delayAfterQuit number
+ at cindex delayBeforeQuit, option
+ at cindex delayAfterQuit, option
+These options specify how long WinBoard has to wait before sending a termination signal to rogue engine processes, that do not want to react to the ‘quit’ command. The second one determines the pause after killing the engine, to make sure it dies.
+
+ at end table
+
+ at node Chess Servers
+ at chapter Chess Servers
+ at cindex ICS
+ at cindex ICS, addresses
+ at cindex Internet Chess Server
+An @dfn{Internet Chess Server}, or @dfn{ICS}, is a place on the
+Internet where people can get together to play chess, watch other
+people's games, or just chat.  You can use either @code{telnet} or a
+client program like XBoard to connect to the server.  There are
+thousands of registered users on the different ICS hosts, and it is
+not unusual to meet 200 on both chessclub.com and freechess.org.
+
+Most people can just type @kbd{xboard -ics} to start XBoard as an ICS
+client.  Invoking XBoard in this way connects you to the Internet
+Chess Club (ICC), a commercial ICS.  You can log in there as a guest
+even if you do not have a paid account.  To connect to the largest
+Free ICS (FICS), use the command @kbd{xboard -ics -icshost freechess.org}
+instead, or substitute a different host name to connect to your
+favorite ICS.
+For a full description of command-line options that control 
+the connection to ICS and change the default values of ICS options, see
+ at ref{ICS options}.  
+
+While you are running XBoard as an ICS client,
+you use the terminal window that you started XBoard from
+as a place to type in commands and read information that is
+not available on the chessboard.
+
+The first time you need to use the terminal is to enter your login name
+and password, if you are a registered player. (You don't need to do
+this manually; the @code{icsLogon} option can do it for you.
+ at pxref{ICS options}.)  If you are not registered, 
+enter @kbd{g} as your name, and the server will pick a
+unique guest name for you.
+
+Some useful ICS commands
+include
+ at table @kbd
+ at item help <topic>
+ at cindex help, ICS command
+to get help on the given <topic>. To get a list of possible topics type
+ at dfn{help} without topic.  Try the help command before you ask other
+people on the server for help.
+
+For example @kbd{help register} tells you how to become a registered
+ICS player.
+ at item who <flags>
+ at cindex who, ICS command
+to see a list of people who are logged on.  Administrators
+(people you should talk to if you have a problem) are marked
+with the character @samp{*}, an asterisk. The <flags> allow you to
+display only selected players: For example, @kbd{who of} shows a
+list of players who are interested in playing but do not have
+an opponent.
+ at item games
+ at cindex games, ICS command
+to see what games are being played
+ at item match <player> [<mins>] [<inc>]
+to challenge another player to a game. Both opponents get <mins> minutes
+for the game, and <inc> seconds will be added after each move.
+If another player challenges you, the server asks if you want to
+accept the challenge; use the @kbd{accept} or @kbd{decline} commands
+to answer.
+ at item accept
+ at itemx decline
+ at cindex accept, ICS command
+ at cindex decline, ICS command
+to accept or decline another player's offer. 
+The offer may be to start a new game, or to agree to a 
+ at kbd{draw}, @kbd{adjourn} or @kbd{abort} the current game. @xref{Action Menu}.
+
+If you have more than one pending offer (for example, if more than one player
+is challenging you, or if your opponent offers both a draw and to adjourn the
+game), you have to supply additional information, by typing something
+like @kbd{accept <player>}, @kbd{accept draw}, or @kbd{draw}.
+ at item draw
+ at itemx adjourn
+ at itemx abort
+ at cindex draw, ICS command
+ at cindex adjourn, ICS command
+ at cindex abort, ICS command
+asks your opponent to terminate a game by mutual agreement. Adjourned
+games can be continued later. 
+Your opponent can either @kbd{decline} your offer or accept it (by typing the
+same command or typing @kbd{accept}).  In some cases these commands work
+immediately, without asking your opponent to agree.  For example, you can
+abort the game unilaterally if your opponent is out of time, and you can claim
+a draw by repetition or the 50-move rule if available simply by typing 
+ at kbd{draw}.
+ at item finger <player>
+ at cindex finger, ICS command
+to get information about the given <player>. (Default: yourself.)
+ at item vars
+ at cindex vars, ICS command
+to get a list of personal settings
+ at item set <var> <value>
+ at cindex set, ICS command
+to modify these settings
+ at item observe <player>
+ at cindex observe, ICS command
+to observe an ongoing game of the given <player>.
+ at item examine
+ at itemx oldmoves
+ at cindex examine, ICS command
+ at cindex oldmoves, ICS command
+to review a recently completed game
+ at end table
+
+Some special XBoard features are activated when you are
+in examine mode on ICS.  See the descriptions of the menu commands
+ at samp{Forward}, @samp{Backward}, @samp{Pause}, @samp{ICS Client}, 
+and @samp{Stop Examining} on the @ref{Step Menu}, @ref{Mode Menu}, and
+ at ref{Options Menu}.
+
+ at node Firewalls
+ at chapter Firewalls
+By default, XBoard communicates with an Internet Chess Server
+by opening a TCP socket directly from the machine it is running on
+to the ICS. If there is a firewall between your machine and the ICS,
+this won't work. Here are some recipes for getting around common
+kinds of firewalls using special options to XBoard.
+Important: See the paragraph in the below about extra echoes, in
+ at ref{Limitations}.
+
+Suppose that you can't telnet directly to ICS, but you can telnet
+to a firewall host, log in, and then telnet from there to ICS.
+Let's say the firewall is called @samp{firewall.example.com}. Set
+command-line options as follows:
+
+ at example
+xboard -ics -icshost firewall.example.com -icsport 23
+ at end example
+ at noindent
+Or in your @file{.Xresources} file:
+
+ at example
+XBoard*internetChessServerHost: firewall.example.com
+XBoard*internetChessServerPort: 23
+ at end example
+ at noindent
+Then when you run XBoard in ICS mode, you will be prompted
+to log in to the firewall host. This works because port 23 is the
+standard telnet login service. Do so, then telnet to ICS, using a
+command like @samp{telnet chessclub.com 5000}, or whatever command
+the firewall provides for telnetting to port 5000.
+
+If your firewall lets you telnet (or rlogin) to remote hosts but
+doesn't let you telnet to port 5000, you may be able to connect to the
+chess server on port 23 instead, which is the port the telnet program
+uses by default.  Some chess servers support this (including
+chessclub.com and freechess.org), while some do not.
+
+If your chess server does not allow connections on port 23 and your
+firewall does not allow you to connect to other ports, you may be able
+to connect by hopping through another host outside the firewall that
+you have an account on.  For instance, suppose you have a shell
+account at @samp{foo.edu}. Follow the recipe above, but instead of
+typing @samp{telnet chessclub.com 5000} to the firewall, type
+ at samp{telnet foo.edu} (or @samp{rlogin foo.edu}), log in there, and
+then type @samp{telnet chessclub.com 5000}.
+
+Suppose that you can't telnet directly to ICS, but you can use rsh
+to run programs on a firewall host, and that host can telnet to ICS.
+Let's say the firewall is called @samp{rsh.example.com}. Set
+command-line options as follows:
+
+ at example
+xboard -ics -gateway rsh.example.com -icshost chessclub.com
+ at end example
+
+ at noindent
+Or in your @file{.Xresources} file:
+
+ at example
+XBoard*gateway: rsh.example.com
+XBoard*internetChessServerHost: chessclub.com
+ at end example
+
+Then when you run XBoard in ICS mode, it will connect to
+the ICS by using @file{rsh} to run the command
+ at samp{telnet chessclub.com 5000} on host @samp{rsh.example.com}.
+
+Suppose that you can telnet anywhere you want, but you have to
+run a special program called @file{ptelnet} to do so.
+
+First, we'll consider the easy case, in which
+ at samp{ptelnet chessclub.com 5000} gets you to the chess server.
+In this case set command line options as follows:
+
+ at example
+xboard -ics -telnet -telnetProgram ptelnet
+ at end example
+
+ at noindent
+Or in your @file{.Xresources} file:
+
+ at example
+XBoard*useTelnet: true
+XBoard*telnetProgram: ptelnet
+ at end example
+
+ at noindent
+Then when you run XBoard in ICS mode, it will issue the
+command @samp{ptelnet chessclub.com 5000} to connect to the ICS.
+
+Next, suppose that @samp{ptelnet chessclub.com 5000} doesn't work;
+that is, your @file{ptelnet} program doesn't let you connect to
+alternative ports. As noted above, your chess server may allow you to
+connect on port 23 instead.  In that case, just add the option
+ at samp{-icsport ""} to the above command, or add
+ at samp{XBoard*internetChessServerPort:} to your @file{.Xresources} file.
+But if your chess server doesn't let you connect on port 23, you will have
+to find some other host outside the firewall and hop through it. For
+instance, suppose you have a shell account at @samp{foo.edu}. Set
+command line options as follows:
+
+ at example
+xboard -ics -telnet -telnetProgram ptelnet -icshost foo.edu -icsport ""
+ at end example
+
+ at noindent
+Or in your @file{.Xresources} file:
+
+ at example
+XBoard*useTelnet: true
+XBoard*telnetProgram: ptelnet
+XBoard*internetChessServerHost: foo.edu
+XBoard*internetChessServerPort:
+ at end example
+
+ at noindent
+Then when you run XBoard in ICS mode, it will issue the
+command @samp{ptelnet foo.edu} to connect to your account at
+ at samp{foo.edu}. Log in there, then type @samp{telnet chessclub.com 5000}.
+
+ICC timestamp and FICS timeseal do not work through some
+firewalls.  You can use them only if your firewall gives a clean TCP
+connection with a full 8-bit wide path.  If your firewall allows you
+to get out only by running a special telnet program, you can't use
+timestamp or timeseal across it.  But if you have access to a
+computer just outside your firewall, and you have much lower netlag
+when talking to that computer than to the ICS, it might be worthwhile
+running timestamp there.  Follow the instructions above for hopping
+through a host outside the firewall (foo.edu in the example),
+but run timestamp or timeseal on that host instead of telnet.
+
+Suppose that you have a SOCKS firewall that will give you a clean
+8-bit wide TCP connection to the chess server, but only after you
+authenticate yourself via the SOCKS protocol.  In that case, you could
+make a socksified version of XBoard and run that.  If you are using
+timestamp or timeseal, you will to socksify it, not XBoard; this may
+be difficult seeing that ICC and FICS do not provide source code for
+these programs.  Socksification is beyond the scope of this document,
+but see the SOCKS Web site at http://www.socks.permeo.com/.
+If you are missing SOCKS, try http://www.funbureau.com/.
+
+ at node Environment
+ at chapter Environment variables
+ at cindex Environment variables
+ at cindex CHESSDIR
+Game and position files are found in a directory named by the
+ at code{CHESSDIR} environment variable. If this variable is not set, the
+current working directory is used. If @code{CHESSDIR} is set,
+XBoard actually changes its working directory to
+ at code{$CHESSDIR}, so any files written by the chess engine
+will be placed there too.
+
+ at node Limitations
+ at chapter Limitations and known bugs
+ at cindex Limitations
+ at cindex Bugs
+There is no way for two people running copies of XBoard to play
+each other without going through an Internet Chess Server.
+
+Under some circumstances, your ICS password may be echoed when you log on.
+
+If you are connecting to the ICS by running telnet on an Internet
+provider or firewall host, you may find that each line you type is
+echoed back an extra time after you hit @key{Enter}. If your Internet
+provider is a Unix system, you can probably turn its echo off by
+typing @kbd{stty -echo} after you log in, and/or typing
+ at key{^E}@key{Enter} (Ctrl+E followed by the Enter key) to the telnet
+program after you have logged into ICS.  It is a good idea to do this
+if you can, because the extra echo can occasionally confuse XBoard's
+parsing routines.
+
+The game parser recognizes only algebraic notation.
+
+Many of the following points used to be limitations in XBoard 4.2.7 and earlier, 
+but are now fixed:
+The internal move legality tester in XBoard 4.3.xx does look at the game history, 
+and is fully aware of castling or en-passant-capture rights. It permits castling with 
+the king on the d file because this is possible in some "wild 1" games on ICS. 
+The piece-drop menu does not check piece drops in bughouse to see if you actually hold 
+the piece you are trying to drop. But this way of dropping pieces should be considered 
+an obsolete feature, now that pieces can be dropped by dragging them from the holdings 
+to the board. Anyway, if you would attempt an illegal move when using a chess engine or the ICS, 
+WinBoard will accept the error message that comes back, undo the move, and let you try another.
+FEN positions saved by XBoard do include correct information about whether castling or 
+en passant are legal, and also handle the 50-move counter.
+The mate detector does not understand that non-contact mate is not really mate in bughouse. 
+The only problem this causes while playing is minor: a "#" (mate indicator) character will 
+show up after a non-contact mating move in the move list. XBoard will not assume the game 
+is over at that point, not even when the option Detect Mates is on.
+Edit Game mode always uses the rules of the selected variant, 
+which can be a variant that uses piece drops.  
+You can load and edit games that contain piece drops. 
+The (obsolete) piece menus are not active, 
+but you can perform piece drops by dragging pieces from the holdings.
+Edit Position mode does not allow you to edit the crazyhouse holdings properly. 
+You cannot drag pieces to the holding, and using the popup menu to put pieces 
+there does not adapt the holding counts and leads to an inconsistent state. 
+Set up crazyhouse positions by loading / pasting a bFEN, from there you can set the holdings.
+Fischer Random castling is fully understood. 
+You can enter castlings by dragging the King on top of your Rook. 
+You can probably also play Fischer Random successfully on ICS by typing 
+castling moves into the ICS Interaction window.
+
+The menus may not work if your keyboard is in Caps Lock or Num Lock mode.
+This seems to be a problem with the Athena menu widget,
+not an XBoard bug.
+
+Also see the ToDo file included with the distribution for many other
+possible bugs, limitations, and ideas for improvement that have been
+suggested.
+ at node Problems
+ at chapter Reporting problems
+ at cindex Bugs
+ at cindex Bug reports
+ at cindex Reporting bugs
+ at cindex Problems
+ at cindex Reporting problems
+
+Report bugs and problems with XBoard to @code{<bug-xboard@@gnu.org>}.
+
+Please use the @file{script} program to start a typescript, run 
+XBoard with the @samp{-debug} option, and include the typescript
+output in your message.
+Also tell us what kind of machine and what operating system version
+you are using.  The command @samp{uname -a} will often tell you this.
+Here is a sample of approximately what you should type:
+
+ at example
+script
+uname -a
+./configure
+make
+./xboard -debug
+exit
+mail bug-xboard@@gnu.org
+Subject: Your short description of the problem
+Your detailed description of the problem
+~r typescript
+.
+ at end example
+
+The WinBoard / XBoard 4.3 line is being developed by H.G. Muller 
+independently of the GNU Savannah xboard project. 
+Bug reports on this version, and suggestions for improvements and additions, 
+are best posted in the WinBoard forum, 
+WinBoard-development section (http://www.open-aurec.com/wbforum). 
+
+If you improve XBoard, please send a message about your changes,
+and we will get in touch with you about merging them in
+to the main line of development.
+Also see our Web site at http://savannah.gnu.org/projects/xboard/.
+
+ at node Contributors
+ at chapter Authors and contributors
+ at cindex Authors
+ at cindex Contributors
+
+Tim Mann has been responsible for XBoard versions 1.3 and beyond, and
+for WinBoard, a port of XBoard to Microsoft Win32 (Windows NT and
+Windows 95). H.G.Muller is responsible for version 4.3.
+
+Mark Williams contributed the initial (WinBoard-only) implementation
+of many new features added to both XBoard and WinBoard in version
+4.1.0, including copy/paste, premove, icsAlarm, autoFlipView, training
+mode, auto raise, and blindfold.  Ben Nye contributed X copy/paste
+code for XBoard.
+
+Hugh Fisher added animated piece movement to XBoard, and Henrik Gram
+(henrikg@@funcom.com) added it to WinBoard.  Frank McIngvale added
+click/click moving, the Analysis modes, piece flashing, ZIICS import,
+and ICS text colorization to XBoard.  Jochen Wiedmann ported XBoard to
+the Amiga, creating AmyBoard, and converted the documentation to
+texinfo.  Elmar Bartel contributed the new piece bitmaps introduced in
+version 3.2.  John Chanak contributed the initial implementation of
+ICS mode.  The color scheme and the old 80x80 piece bitmaps were taken
+from Wayne Christopher's @code{XChess} program.
+
+Chris Sears and Dan Sears wrote the original XBoard.  They were
+responsible for versions 1.0 through 1.2.
+
+Evan Welsh wrote @code{CMail}.  Patrick Surry helped in designing,
+testing, and documenting CMail.
+
+Allessandro Scotti added many elements to the user interface of WinBoard, 
+including the board textures and font-based rendering, the evaluation-graph, 
+move-history and engine-output window. 
+He was also responsible for adding the UCI support. 
+
+H.G. Muller made WinBoard castling- and e.p.-aware, 
+added variant support with adjustable board sizes, 
+the crazyhouse holdings, and the fairy pieces. 
+In addition he added most of the adjudication options, 
+made WinBoard more robust in dealing with buggy and crashing engines, 
+and extended time control with a time-odds and node-count-based modes.
+Most of the options that initially wre WinBoard only have now been back-ported to XBoard.
+
+Michel van den Bergh provided the code for reading Polyglot opening books.
+
+Arun Persaud worked with H.G. Muller to combine all the features of the never-released WinBoard 4.2.8 
+of the Savannah project (mainly by Daniel Mehrmann), 
+and the never-released 4.3.16 into a unified WinBoard 4.4, 
+which is now available both from the Savannah web site and the WinBoard forum.
+ at node CMail
+ at chapter CMail
+ at cindex cmail
+The @file{cmail} program can help you play chess by email with opponents of
+your choice using XBoard as an interface.
+
+You will usually run @file{cmail} without giving any options.
+
+ at menu
+* CMail options::    Invoking CMail.
+* CMail game::       Starting a CMail game.
+* CMail answer::     Answering a move.
+* CMail multi::      Multiple games in one message.
+* CMail completion:: Completing a game.
+* CMail trouble::    Known CMail problems.
+ at end menu
+
+ at node CMail options
+ at section CMail options
+ at table @asis
+ at item -h
+Displays @file{cmail} usage information.
+ at item -c
+Shows the conditions of the GNU General Public License.
+ at xref{Copying}.
+ at item -w
+Shows the warranty notice of the GNU General Public License.
+ at xref{Copying}.
+ at item -v
+ at itemx -xv
+Provides or inhibits verbose output from @file{cmail} and XBoard,
+useful for debugging. The
+ at code{-xv}
+form also inhibits the cmail introduction message.
+ at item -mail
+ at itemx -xmail
+Invokes or inhibits the sending of a mail message containing the move.
+ at item -xboard
+ at itemx -xxboard
+Invokes or inhibits the running of XBoard on the game file.
+ at item -reuse
+ at itemx -xreuse
+Invokes or inhibits the reuse of an existing XBoard to display the
+current game.
+ at item -remail
+Resends the last mail message for that game. This inhibits running
+XBoard.
+ at item -game <name>
+The name of the game to be processed.
+ at item -wgames <number>
+ at itemx -bgames <number>
+ at itemx -games <number>
+Number of games to start as White, as Black or in total. Default is 1 as
+white and none as black. If only one color is specified then none of the
+other color is assumed. If no color is specified then equal numbers of
+White and Black games are started, with the extra game being as White if an
+odd number of total games is specified.
+ at item -me <short name>
+ at itemx -opp <short name>
+A one-word alias for yourself or your opponent.
+ at item -wname <full name>
+ at itemx -bname <full name>
+ at itemx -name <full name>
+ at itemx -oppname <full name>
+The full name of White, Black, yourself or your opponent.
+ at item -wna <net address>
+ at itemx -bna <net address>
+ at itemx -na <net address>
+ at itemx -oppna <net address>
+The email address of White, Black, yourself or your opponent.
+ at item -dir <directory>
+The directory in which @file{cmail} keeps its files. This defaults to the
+environment variable @code{$CMAIL_DIR} or failing that, @code{$CHESSDIR},
+ at file{$HOME/Chess} or @file{~/Chess}. It will be created if it does not exist.
+ at item -arcdir <directory>
+The directory in which @file{cmail} archives completed games. Defaults to
+the environment variable @code{$CMAIL_ARCDIR} or, in its absence, the same
+directory as cmail keeps its working files (above).
+ at item -mailprog <mail program>
+The program used by cmail to send email messages. This defaults to the
+environment variable @code{$CMAIL_MAILPROG} or failing that
+ at file{/usr/ucb/Mail}, @file{/usr/ucb/mail} or @file{Mail}. You will need
+to set this variable if none of the above paths fit your system.
+ at item -gamesFile <file>
+ at cindex .cmailgames
+A file containing a list of games with email addresses. This defaults to
+the environment variable @code{$CMAIL_GAMES} or failing that
+ at file{.cmailgames}.
+ at item -aliasesFile <file>
+ at cindex .cmailaliases
+A file containing one or more aliases for a set of email addresses. This
+defaults to the environment variable @code{$CMAIL_ALIASES} or failing
+that @file{.cmailaliases}.
+ at item -logFile <file>
+A file in which to dump verbose debugging messages that are invoked with
+the @samp{-v}
+option.
+ at item -event <event>
+The PGN Event tag (default @samp{Email correspondence game}).
+ at item -site <site>
+The PGN Site tag (default @samp{NET}).
+ at item -round <round>
+The PGN Round tag (default @samp{-}, not applicable).
+ at item -mode <mode>
+The PGN Mode tag (default @samp{EM}, Electronic Mail).
+ at item Other options
+Any option flags not listed above are passed through to XBoard.
+Invoking XBoard through CMail changes the default values of two XBoard
+options: The default value for @samp{-noChessProgram} is changed to
+true; that is, by default no chess engine is started.  The default
+value for @samp{-timeDelay} is changed to 0; that is, by default
+XBoard immediately goes to the end of the game as played so far,
+rather than stepping through the moves one by one.  You can still set
+these options to whatever values you prefer by supplying them on
+CMail's command line.  @xref{Options}.
+ at end table
+
+ at node CMail game
+ at section Starting a CMail Game
+Type @file{cmail} from a shell to start a game as white. After an opening
+message, you will be prompted for a game name, which is optional---if you
+simply press @key{Enter}, the game name will take the form
+ at samp{you-VS-opponent}. You will next be prompted for the short name
+of your opponent. If you haven't played this person before, you will also
+be prompted for his/her email address. @file{cmail} will then invoke
+XBoard in the background. Make your first move and select
+ at samp{Mail Move} from the @samp{File} menu. @xref{File Menu}. If all is well,
+ at file{cmail} will mail a copy of the move to your opponent. If you select
+ at samp{Exit} without having selected @samp{Mail Move} then no move will be
+made.
+
+ at node CMail answer
+ at section Answering a Move
+When you receive a message from an opponent containing a move in one of
+your games, simply pipe the message through @file{cmail}. In some mailers
+this is as simple as typing @kbd{| cmail} when viewing the message, while in
+others you may have to save the message to a file and do @kbd{cmail < file}
+at the command line. In either case @file{cmail} will display the game using
+XBoard. If you didn't exit XBoard when you made your first move
+then @file{cmail} will do its best to use the existing XBoard instead
+of starting a new one. As before, simply make a move and select
+ at samp{Mail Move} from the @samp{File} menu. @xref{File Menu}. @file{cmail}
+will try to use the
+XBoard that was most recently used to display the current game. This
+means that many games can be in progress simultaneously, each with its own
+active XBoard.
+
+If you want to look at the history or explore a variation, go ahead, but
+you must return to the current position before XBoard will allow you
+to mail a move. If you edit the game's history you must select
+ at samp{Reload Same Game} from the @samp{File} menu to get back to the original
+position, then make the move you want and select @samp{Mail Move}.
+As before, if you decide you aren't ready to make a move just yet you can
+either select @samp{Exit} without sending a move or just leave
+XBoard running until you are ready.
+
+ at node CMail multi
+ at section Multi-Game Messages
+
+It is possible to have a @file{cmail} message carry more than one game.
+This feature was implemented to handle IECG (International Email Chess
+Group) matches, where a match consists of one game as white and one as black,
+with moves transmitted simultaneously. In case there are more general uses,
+ at file{cmail} itself places no limit on the number of black/white games
+contained in a message; however, XBoard does.
+
+ at node CMail completion
+ at section Completing a Game
+Because XBoard can detect checkmate and stalemate, @file{cmail}
+handles game termination sensibly. As well as resignation, the
+ at samp{Action} menu allows draws to be offered and accepted for
+ at file{cmail} games.
+
+For multi-game messages, only unfinished and just-finished games will be
+included in email messages. When all the games are finished, they are
+archived in the user's archive directory, and similarly in the opponent's
+when he or she pipes the final message through @file{cmail}. The archive
+file name includes the date the game was started.
+
+ at node CMail trouble
+ at section Known CMail Problems
+It's possible that a strange conjunction of conditions may occasionally
+mean that @file{cmail} has trouble reactivating an existing
+XBoard. If this should happen, simply trying it again should work.
+If not, remove the file that stores the XBoard's PID
+(@file{game.pid}) or use the @samp{-xreuse} option to force
+ at file{cmail} to start a new XBoard.
+
+Versions of @file{cmail} after 2.16 no longer understand the old file format
+that XBoard used to use and so cannot be used to correspond with
+anyone using an older version.
+
+Versions of @file{cmail} older than 2.11 do not handle multi-game messages,
+so multi-game correspondence is not possible with opponents using an older
+version.
+
+ at node Other programs
+ at chapter Other programs you can use with XBoard
+ at cindex Other programs
+
+Here are some other programs you can use with XBoard
+
+ at menu
+* GNU Chess::        The GNU Chess engine.
+* Fairy-Max::        The Fairy-Max chess engine.
+* HoiChess::         The HoiChess chess engine.
+* Crafty::           The Crafty chess engine.
+* zic2xpm::          The program used to import chess sets from ZIICS.
+ at end menu
+
+ at node GNU Chess
+ at section GNU Chess
+
+The GNU Chess engine is available from:
+
+ftp://ftp.gnu.org/gnu/gnuchess/
+
+You can use XBoard to play a game against GNU Chess, or to
+interface GNU Chess to an ICS.
+
+ at node Fairy-Max
+ at section Fairy-Max
+
+Fairy-Max is a derivative from the World's smallest Chess program micro-Max,
+which measures only about 100 lines of source code.
+The main difference with micro-Max is that Fairy-Max loads its move-generator
+tables from a file, so that the rules for piece movement can be easily configured
+to implement unorthodox pieces.
+Fairy-Max can therefore play a lage number of variants, normal Chess being one of those.
+In addition it plas Knightmate, Capablanca and Gothic Chess, Shatranj, Courier Chess,
+Cylinder chess, Berolina Chess, while the user can easily define new variants.
+It can be obtained from:
+
+http://home.hccnet.nl/h.g.muller/dwnldpage.html
+
+ at node HoiChess
+ at section HoiChess
+
+HoiChess is a not-so-very-strong Chess engine, which comes with a derivative HoiXiangqi,
+able to play Chinese Chess. It can be obtained from the standard Linux repositories
+through:
+
+sudo apt-get install hoichess
+
+ at node Crafty
+ at section Crafty
+
+Crafty is a chess engine written by Bob Hyatt.
+You can use XBoard to play a game against Crafty, hook Crafty up
+to an ICS, or use Crafty to interactively analyze games and positions
+for you.
+
+Crafty is a strong, rapidly evolving chess program. This rapid
+pace of development is good, because it means Crafty is always
+getting better.  This can sometimes cause problems with
+backwards compatibility, but usually the latest version of Crafty
+will work well with the latest version of XBoard.
+Crafty can be obtained from its author's FTP site:
+ftp://ftp.cis.uab.edu/hyatt/.
+
+To use Crafty with XBoard, give the -fcp and -fd options as follows, where
+<crafty's directory> is the directory in which you installed Crafty
+and placed its book and other support files.
+
+ at node zic2xpm
+ at section zic2xpm
+
+The ``zic2xpm'' program is used to import chess sets from the ZIICS(*)
+program into XBoard. ``zic2xpm'' is part of the XBoard distribution.
+ZIICS is available from:
+
+ftp://ftp.freechess.org/pub/chess/DOS/ziics131.exe
+
+To import ZIICS pieces, do this:
+ at table @asis
+ at item 1. Unzip ziics131.exe into a directory:
+
+ at example
+unzip -L ziics131.exe -d ~/ziics
+ at end example
+ at item 2. Use zic2xpm to convert a set of pieces to XBoard format.
+
+For example, let's say you want to use the
+FRITZ4 set. These files are named ``fritz4.*'' in the ZIICS distribution.
+
+ at example
+mkdir ~/fritz4
+cd ~/fritz4
+zic2xpm ~/ziics/fritz4.*
+ at end example
+ at item 3. Give XBoard the ``-pixmap'' option when starting up, e.g.:
+
+ at example
+xboard -pixmap ~/fritz4
+ at end example
+
+Alternatively, you can add this line to your @file{.Xresources} file:
+
+ at example
+xboard*pixmapDirectory: ~/fritz4
+ at end example
+ at end table
+
+(*) ZIICS is a separate copyrighted work of Andy McFarland.
+The ``ZIICS pieces'' are copyrighted works of their respective
+creators. Files produced by ``zic2xpm'' are for PERSONAL USE ONLY
+and may NOT be redistributed without explicit permission from
+the original creator(s) of the pieces.
+
+ at ifnottex
+ at node Copyright
+ at unnumbered Copyright
+ at include copyright.texi
+ at end ifnottex
+
+ at node Copying
+ at unnumbered GNU GENERAL PUBLIC LICENSE
+ at include gpl.texinfo
+
+ at c noman
+ at node Index
+ at unnumbered Index
+
+ at printindex cp
+ at contents
+ at c end noman
+
+ at bye
diff --git a/xboard.texinfo.in b/xboard.texinfo.in
deleted file mode 100644
index 8aea968..0000000
--- a/xboard.texinfo.in
+++ /dev/null
@@ -1,10 +0,0 @@
-\input texinfo	@c -*-texinfo-*-
- at c %**start of header
- at setfilename xboard.info
- at settitle XBoard
- at c %**end of header
-
- at set VERSION @VERSION at .@PATCHLEVEL@
-
- at include xboard.texi
- at bye
diff --git a/xboard.txt b/xboard.txt
deleted file mode 100644
index 4441dc3..0000000
--- a/xboard.txt
+++ /dev/null
@@ -1,2509 +0,0 @@
-xboard(6)                                                            xboard(6)
-
-NNAAMMEE
-       xboard - X graphical user interface for chess
-
-SSYYNNOOPPSSIISS
-       xxbbooaarrdd [[ooppttiioonnss]]
-       xxbbooaarrdd --iiccss --iiccsshhoosstt hhoossttnnaammee [[ooppttiioonnss]]
-       xxbbooaarrdd --nnccpp [[ooppttiioonnss]]
-       ||ppxxbbooaarrdd
-       ccmmaaiill [[ooppttiioonnss]]
-
-DDEESSCCRRIIPPTTIIOONN
-       XBoard  is a graphical chessboard that can serve as a user interface to
-       chess engines (such as GNU Chess), the Internet  Chess  Servers,  elec-
-       tronic  mail  correspondence  chess,  or  your  own collection of saved
-       games.
-
-       This manual documents version 4.2.7 of XBoard.
-
-MMAAJJOORR MMOODDEESS
-       XBoard always runs in one of four major modes.  You  select  the  major
-       mode from the command line when you start up XBoard.
-
-       xxbbooaarrdd [[ooppttiioonnss]]
-              As  an interface to GNU Chess or another chess engine running on
-              your machine, XBoard lets you play a game against  the  machine,
-              set  up  arbitrary  positions,  force  variations,  watch a game
-              between two chess engines,  interactively  analyze  your  stored
-              games or set up and analyze arbitrary positions.  (Note: Not all
-              chess engines support analysis.)
-
-       xxbbooaarrdd --iiccss --iiccsshhoosstt hhoossttnnaammee [[ooppttiioonnss]]
-              As Internet Chess Server (ICS) interface, XBoard lets  you  play
-              against  other  ICS  users,  observe  games they are playing, or
-              review games that have  recently  finished.   Most  of  the  ICS
-              "wild" chess variants are supported, including bughouse.
-
-       xxbbooaarrdd --nnccpp [[ooppttiioonnss]]
-              XBoard  can  also  be used simply as an electronic chessboard to
-              play through games. It will read and write game files and  allow
-              you  to  play  through  variations  manually.  You can use it to
-              browse games off the net or review games you have saved.   These
-              features are also available in the other modes.
-
-       ||ppxxbbooaarrdd
-              If  you  want  to pipe games into XBoard, use the supplied shell
-              script `pxboard'.  For example, from the news reader `xrn', find
-              a  message  with one or more games in it, click the Save button,
-              and type `|pxboard' as the file name.
-
-       ccmmaaiill [[ooppttiioonnss]]
-              As an interface to electronic mail correspondence chess,  XBoard
-              works  with the cmail program. See _C_M_a_i_l below for instructions.
-
-MMEENNUUSS,, BBUUTTTTOONNSS,, AANNDD KKEEYYSS
-       To move a piece, you can drag it with the left mouse button, or you can
-       click  the  left  mouse button once on the piece, then once more on the
-       destination square.  To drop a new piece on a square (when applicable),
-       press  the  middle or the right mouse button over the square and select
-       from the popup menu.  In cases where you can drop  either  a  white  or
-       black  piece,  use the middle button (or shift+right) for white and the
-       right button (or shift+middle) for black.  When you are playing a  bug-
-       house  game  on an Internet Chess Server, a list of the offboard pieces
-       that each player has available is shown in the window title  after  the
-       player's  name;  in addition, the piece menus show the number of pieces
-       available of each type.
-
-       All other XBoard commands are available from the  menu  bar.  The  most
-       frequently  used commands also have shortcut keys or on-screen buttons.
-
-       When XBoard is iconized, its graphical icon is a white knight if it  is
-       White's  turn  to  move,  a  black  knight  if it is Black's turn.  See
-       Iconize in _K_e_y_s below if you have  problems  getting  this  feature  to
-       work.
-
-   FFiillee MMeennuu
-       RReesseett  Resets  XBoard  and  the  chess engine to the beginning of a new
-              chess game. The `r' key is a keyboard  equivalent.  In  Internet
-              Chess  Server  mode,  clears  the  current state of XBoard, then
-              resynchronizes with the ICS by sending a refresh command. If you
-              want  to  stop playing, observing, or examining an ICS game, use
-              an appropriate command from the Action menu, not  `Reset'.   See
-              _A_c_t_i_o_n _M_e_n_u.
-
-       LLooaadd GGaammee
-              Plays  a  game  from  a  record  file. The `g' key is a keyboard
-              equivalent.  A popup dialog prompts you for the  file  name.  If
-              the file contains more than one game, a second popup dialog dis-
-              plays a list of games (with information  drawn  from  their  PGN
-              tags,  if  any),  and  you can select the one you want. Alterna-
-              tively, you can load the Nth game in the file directly, by  typ-
-              ing the number `N' after the file name, separated by a space.
-
-              The  game  file parser will accept PGN (portable game notation),
-              or in fact almost any file  that  contains  moves  in  algebraic
-              notation.   Notation  of  the form `P at f7' is accepted for piece-
-              drops in bughouse games; this is a nonstandard extension to PGN.
-              If  the  file includes a PGN position (FEN tag), or an old-style
-              XBoard position diagram bracketed by `[--' and `--]' before  the
-              first move, the game starts from that position. Text enclosed in
-              parentheses, square brackets, or curly braces is assumed  to  be
-              commentary  and  is displayed in a pop-up window. Any other text
-              in the file is ignored. PGN variations (enclosed in parentheses)
-              are  treated  as  comments; XBoard is not able to walk variation
-              trees.  The nonstandard PGN tag  [Variant  "varname"]  functions
-              similarly  to  the  -variant  command-line  option  (see below),
-              allowing games in certain chess variants to be loaded.  There is
-              also a heuristic to recognize chess variants from the Event tag,
-              by looking for the strings that the Internet Chess  Servers  put
-              there when saving variant ("wild") games.
-
-       LLooaadd NNeexxtt GGaammee
-              Loads  the  next game from the last game record file you loaded.
-              The shifted `N' key is a keyboard equivalent.
-
-       LLooaadd PPrreevviioouuss GGaammee
-              Loads the previous game from  the  last  game  record  file  you
-              loaded.   The  shifted  `P'  key  is a keyboard equivalent.  Not
-              available if the last game was loaded from a pipe.
-
-       RReellooaadd SSaammee GGaammee
-              Reloads the last game you loaded.  Not  available  if  the  last
-              game was loaded from a pipe.
-
-       SSaavvee GGaammee
-              Appends  a record of the current game to a file.  A popup dialog
-              prompts you for the file name. If the game did  not  begin  with
-              the  standard  starting  position,  the  game  file includes the
-              starting position used. Games are saved  in  the  PGN  (portable
-              game  notation)  format, unless the oldSaveStyle option is true,
-              in which case they are saved in an older format that is specific
-              to XBoard. Both formats are human-readable, and both can be read
-              back by the `Load Game' command.  Notation of the form `P at f7' is
-              accepted  for  piece-drops in bughouse games; this is a nonstan-
-              dard extension to PGN.
-
-       CCooppyy GGaammee
-              Copies a record of the current game to an internal clipboard  in
-              PGN  format and sets the X selection to the game text.  The game
-              can be pasted to another application (such as a text  editor  or
-              another  copy of XBoard) using that application's paste command.
-              In many X applications, such as  xterm  and  emacs,  the  middle
-              mouse  button  can  be used for pasting; in XBoard, you must use
-              the Paste Game command.
-
-       PPaassttee GGaammee
-              Interprets the current X selection as a game  record  and  loads
-              it, as with Load Game.
-
-       LLooaadd PPoossiittiioonn
-              Sets up a position from a position file.  A popup dialog prompts
-              you for the file name. If the file contains more than one  saved
-              position,  and  you  want to load the Nth one, type the number N
-              after the file name, separated by a space. Position  files  must
-              be in FEN (Forsythe-Edwards notation), or in the format that the
-              Save Position command writes when oldSaveStyle is turned on.
-
-       LLooaadd NNeexxtt PPoossiittiioonn
-              Loads the next position from the last position file you  loaded.
-
-       LLooaadd PPrreevviioouuss PPoossiittiioonn
-              Loads  the  previous  position  from  the last position file you
-              loaded.  Not available if the last position was  loaded  from  a
-              pipe.
-
-       RReellooaadd SSaammee PPoossiittiioonn
-              Reloads the last position you loaded.  Not available if the last
-              position was loaded from a pipe.
-
-       SSaavvee PPoossiittiioonn
-              Appends a diagram of the current position to a  file.   A  popup
-              dialog prompts you for the file name. Positions are saved in FEN
-              (Forsythe-Edwards notation)  format  unless  the  `oldSaveStyle'
-              option is true, in which case they are saved in an older, human-
-              readable format that is specific to XBoard. Both formats can  be
-              read back by the `Load Position' command.
-
-       CCooppyy PPoossiittiioonn
-              Copies the current position to an internal clipboard in FEN for-
-              mat and sets the X selection to the position text.  The position
-              can  be  pasted to another application (such as a text editor or
-              another copy of XBoard) using that application's paste  command.
-              In  many  X  applications,  such  as xterm and emacs, the middle
-              mouse button can be used for pasting; in XBoard,  you  must  use
-              the Paste Position command.
-
-       PPaassttee PPoossiittiioonn
-              Interprets  the  current X selection as a FEN position and loads
-              it, as with Load Position.
-
-       MMaaiill MMoovvee
-       RReellooaadd CCMMaaiill MMeessssaaggee
-              See _C_M_a_i_l.
-
-       EExxiitt   Exits from XBoard. The shifted `Q' key is a keyboard equivalent.
-
-   MMooddee MMeennuu
-       MMaacchhiinnee WWhhiittee
-              Tells the chess engine to play White.
-
-       MMaacchhiinnee BBllaacckk
-              Tells the chess engine to play Black.
-
-       TTwwoo MMaacchhiinneess
-              Plays a game between two chess engines.
-
-       AAnnaallyyssiiss MMooddee
-              XBoard  tells  the  chess  engine to start analyzing the current
-              game/position and shows you the  analysis  as  you  move  pieces
-              around.   Note: Some chess engines do not support Analysis mode.
-
-              To set up a position to analyze, you do the following:
-
-              1. Select Edit Position from the Mode Menu
-
-              2. Set up the position.  Use the middle  and  right  buttons  to
-              bring up the white and black piece menus.
-
-              3.  When  you  are  finished, click on either the Black or White
-              clock to tell XBoard which side moves first.
-
-              4. Select Analysis Mode from the Mode Menu to start  the  analy-
-              sis.
-
-       AAnnaallyyzzee FFiillee
-              This  option  lets you load a game from a file (PGN, XBoard for-
-              mat, etc.)  and analyze it. When you select this  menu  item,  a
-              popup  window  appears  and asks for a filename to load.  If the
-              file contains multiple games, another popup  appears  that  lets
-              you  select  which  game  you  wish to analyze.  After a game is
-              loaded, use the XBoard arrow buttons to step  forwards/backwards
-              through  the  game  and  watch  the  analysis.  Note: Some chess
-              engines do not support Analysis mode.
-
-       IICCSS CClliieenntt
-              This is the normal mode when XBoard  is  connected  to  a  chess
-              server.  If you have moved into Edit Game or Edit Position mode,
-              you can select this option to get out.
-
-              To use xboard in ICS mode, run it in  the  foreground  with  the
-              -ics  option,  and  use the terminal you started it from to type
-              commands and receive text responses from the chess server.   See
-              _C_h_e_s_s _S_e_r_v_e_r_s below for more information.
-
-              XBoard  activates  some  special  position/game editing features
-              when you use the `examine' or `bsetup' commands on ICS  and  you
-              have  `ICS  Client'  selected  on the Mode menu.  First, you can
-              issue the ICS position-editing commands with  the  mouse.   Move
-              pieces  by dragging with mouse button 1.  To drop a new piece on
-              a square, press mouse button 2  or  3  over  the  square.   This
-              brings  up  a  menu  of  white pieces (button 2) or black pieces
-              (button 3).  Additional menu choices let you empty the square or
-              clear  the  board.  Click on the White or Black clock to set the
-              side to play.  You cannot set the side to play or drag pieces to
-              arbitrary  squares  while examining on ICC, but you can do so in
-              `bsetup' mode on FICS.  In addition,  the  menu  commands  `For-
-              ward',  `Backward',  `Pause',  and `Stop Examining' have special
-              functions in this mode; see below.
-
-       EEddiitt GGaammee
-              Allows you to make moves for both Black and White, and to change
-              moves  after  backing up with the `Backward' command. The clocks
-              do not run.
-
-              In chess engine mode, the chess engine continues to check  moves
-              for legality but does not participate in the game. You can bring
-              the chess engine into the game  by  selecting  `Machine  White',
-              `Machine Black', or `Two Machines'.
-
-              In  ICS  mode,  the  moves  are not sent to the ICS: `Edit Game'
-              takes XBoard out of ICS Client mode  and  lets  you  edit  games
-              locally.   If  you want to edit games on ICS in a way that other
-              ICS users can see, use the ICS `examine' command or start an ICS
-              match against yourself.
-
-       EEddiitt PPoossiittiioonn
-              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 white pieces (button 2) or
-              black 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 word White or Black at the top of the screen.
-              Selecting  `Edit  Position'  causes XBoard to discard all remem-
-              bered moves in the current game.
-
-              In ICS mode, changes made to the position by `Edit Position' are
-              not  sent  to  the ICS: `Edit Position' takes XBoard out of `ICS
-              Client' mode and lets you edit positions locally. If you want to
-              edit positions on ICS in a way that other ICS users can see, use
-              the ICS `examine' command, or start an ICS match  against  your-
-              self.  (See also the ICS Client topic above.)
-
-       TTrraaiinniinngg
-              Training  mode  lets you interactively guess the moves of a game
-              for one of the players. You guess the next move of the  game  by
-              playing  the  move  on the board. If the move played matches the
-              next move of the game, the move is accepted and  the  opponent's
-              response  is  autoplayed.   If  the move played is incorrect, an
-              error message is displayed.  You can select this mode only while
-              loading  a  game  (that is, after selecting `Load Game' from the
-              File menu).  While XBoard is in `Training' mode, the  navigation
-              buttons are disabled.
-
-       SShhooww GGaammee LLiisstt
-              Shows  or  hides  the  list of games generated by the last `Load
-              Game' command.
-
-       EEddiitt TTaaggss
-              Lets you edit the PGN (portable game notation) tags for the cur-
-              rent game. After editing, the tags must still conform to the PGN
-              tag syntax:
-
-                  <tag-section> ::= <tag-pair> <tag-section>
-                                          <empty>
-                  <tag-pair> ::= [ <tag-name> <tag-value> ]
-                  <tag-name> ::= <identifier>
-                  <tag-value> ::= <string>
-
-              See the PGN Standard for full details. Here is an example:
-
-                  [Event "Portoroz Interzonal"]
-                  [Site "Portoroz, Yugoslavia"]
-                  [Date "1958.08.16"]
-                  [Round "8"]
-                  [White "Robert J. Fischer"]
-                  [Black "Bent Larsen"]
-                  [Result "1-0"]
-
-              Any characters that  do  not  match  this  syntax  are  silently
-              ignored.  Note  that the PGN standard requires all games to have
-              at least the seven tags shown above. Any that you omit  will  be
-              filled in by XBoard with `?' (unknown value), or `-' (inapplica-
-              ble value).
-
-       EEddiitt CCoommmmeenntt
-              Adds or modifies a comment on the current position. Comments are
-              saved  by  `Save  Game'  and are displayed by `Load Game', `For-
-              ward', and `Backward'.
-
-       IICCSS IInnppuutt BBooxx
-              If this option is set in ICS mode, XBoard creates an extra  win-
-              dow  that you can use for typing in ICS commands.  The input box
-              is especially useful if you want to type in something long or do
-              some  editing on your input, because output from ICS doesn't get
-              mixed in with your typing as it would in the main terminal  win-
-              dow.
-
-       PPaauussee  Pauses  updates  to  the board, and if you are playing against a
-              chess engine,  also  pauses  your  clock.  To  continue,  select
-              `Pause'  again, and the display will automatically update to the
-              latest position.  The `P' button and keyboard `p' key are equiv-
-              alents.
-
-              If  you select Pause when you are playing against a chess engine
-              and it is not your move, the chess engine's clock will  continue
-              to  run  and it will eventually make a move, at which point both
-              clocks will stop. Since board updates are paused,  however,  you
-              will  not see the move until you exit from Pause mode (or select
-              Forward).  This behavior is meant to simulate adjournment with a
-              sealed move.
-
-              If  you select Pause while you are observing or examining a game
-              on a chess server, you can step backward and forward in the cur-
-              rent  history  of  the examined game without affecting the other
-              observers and examiners, and without having  your  display  jump
-              forward  to the latest position each time a move is made. Select
-              Pause again to reconnect yourself to the current  state  of  the
-              game on ICS.
-
-              If  you  select  `Pause'  while you are loading a game, the game
-              stops loading. You can load more  moves  manually  by  selecting
-              `Forward',  or  resume  automatic  loading  by selecting `Pause'
-              again.
-
-   AAccttiioonn MMeennuu
-       AAcccceepptt Accepts a pending match offer. If there is more than  one  offer
-              pending,  you  will  have  to  type  in  a more specific command
-              instead of using this menu choice.
-
-       DDeecclliinnee
-              Declines a pending offer (match, draw, adjourn, etc.). If  there
-              is  more than one offer pending, you will have to type in a more
-              specific command instead of using this menu choice.
-
-       CCaallll FFllaagg
-              Calls your opponent's flag, claiming a win on time, or  claiming
-              a draw if you are both out of time. You can also call your oppo-
-              nent's flag by clicking on his clock or by pressing the keyboard
-              `t' key.
-
-       DDrraaww   Offers  a  draw  to  your opponent, accepts a pending draw offer
-              from your opponent, or  claims  a  draw  by  repetition  or  the
-              50-move  rule, as appropriate. The `d' key is a keyboard equiva-
-              lent.
-
-       AAddjjoouurrnn
-              Asks your opponent to agree to adjourning the current  game,  or
-              agrees to a pending adjournment offer from your opponent.
-
-       AAbboorrtt  Asks  your  opponent  to  agree to aborting the current game, or
-              agrees to a pending abort offer from your opponent.  An  aborted
-              game  ends immediately without affecting either player's rating.
-
-       RReessiiggnn Resigns the game to your opponent. The shifted `R' key is a key-
-              board equivalent.
-
-       SSttoopp OObbsseerrvviinngg
-              Ends  your participation in observing a game, by issuing the ICS
-              observe command with no arguments. ICS mode only.
-
-       SSttoopp EExxaammiinniinngg
-              Ends your participation in examining a game, by issuing the  ICS
-              unexamine command. ICS mode only.
-
-   SStteepp MMeennuu
-       BBaacckkwwaarrdd
-              Steps  backward through a series of remembered moves.  The `[<]'
-              button and the `b' key are equivalents.  In  addition,  pressing
-              the Control key steps back one move, and releasing it steps for-
-              ward again.
-
-              In most modes, `Backward' only lets you look back at  old  posi-
-              tions;  it  does  not retract moves. This is the case if you are
-              playing against a chess engine, playing or observing a  game  on
-              an  ICS,  or loading a game.  If you select `Backward' in any of
-              these situations, you will not be allowed to  make  a  different
-              move.  Use  `Retract  Move' or `Edit Game' if you want to change
-              past moves.
-
-              If you are examining an ICS game,  the  behavior  of  `Backward'
-              depends  on  whether  XBoard  is in Pause mode. If Pause mode is
-              off, `Backward' issues the ICS backward command, which backs  up
-              everyone's  view  of the game and allows you to make a different
-              move. If Pause mode is on, `Backward' only backs up  your  local
-              view.
-
-       FFoorrwwaarrdd
-              Steps  forward through a series of remembered moves (undoing the
-              effect of `Backward') or forward through a game file. The  `[>]'
-              button and the `f' key are equivalents.
-
-              If  you  are  examining  an  ICS  game,  the behavior of Forward
-              depends on whether XBoard is in Pause mode.  If  Pause  mode  is
-              off,  `Forward'  issues  the  ICS  forward  command, which moves
-              everyone's view of the game forward along the current  line.  If
-              Pause  mode is on, `Forward' only moves your local view forward,
-              and it will not go past the position that the game was  in  when
-              you paused.
-
-       BBaacckk ttoo SSttaarrtt
-              Jumps  backward  to  the  first remembered position in the game.
-              The `[<<]' button and the shifted `B' key are equivalents.
-
-              In most modes, Back to Start only lets  you  look  back  at  old
-              positions;  it  does  not retract moves. This is the case if you
-              are playing against a local chess engine, playing or observing a
-              game  on  a chess server, or loading a game. If you select `Back
-              to Start' in any of these situations, you will not be allowed to
-              make  different  moves. Use `Retract Move' or `Edit Game' if you
-              want to change past moves; or use Reset to start a new game.
-
-              If you are examining an ICS game, the behavior of @samp{Back  to
-              Start} depends on whether XBoard is in Pause mode. If Pause mode
-              is off, `Back to Start' issues the ICS  `backward  999999'  com-
-              mand,  which  backs  up everyone's view of the game to the start
-              and allows you to make different moves. If  Pause  mode  is  on,
-              @samp{Back to Start} only backs up your local view.
-
-       FFoorrwwaarrdd ttoo EEnndd
-              Jumps  forward  to the last remembered position in the game. The
-              `[>>]' button and the shifted `F' key are equivalents.
-
-              If you are examining an ICS game, the behavior of  @samp{Forward
-              to  End}  depends  on  whether XBoard is in Pause mode. If Pause
-              mode is off, `Forward to End' issues the  ICS  `forward  999999'
-              command,  which moves everyone's view of the game forward to the
-              end of the current line. If Pause mode is on, `Forward  to  End'
-              only  moves your local view forward, and it will not go past the
-              position that the game was in when you paused.
-
-       RReevveerrtt If you are examining an ICS game and Pause mode is  off,  issues
-              the ICS command `revert'.
-
-       TTrruunnccaattee GGaammee
-              Discards  all  remembered  moves  of the game beyond the current
-              position. Puts XBoard into `Edit Game' mode if it was not  there
-              already.
-
-       MMoovvee NNooww
-              Forces  the  chess engine to move immediately. Chess engine mode
-              only.
-
-       RReettrraacctt MMoovvee
-              Retracts your last move. In chess engine mode, you can  do  this
-              only  after  the  chess  engine has replied to your move; if the
-              chess engine is still thinking, use `Move  Now'  first.  In  ICS
-              mode,  `Retract  Move' issues the command `takeback 1' or `take-
-              back 2' depending on whether  it  is  your  opponent's  move  or
-              yours.
-
-   OOppttiioonnss MMeennuu
-       AAllwwaayyss QQuueeeenn
-              If  this  option  is off, XBoard brings up a dialog box whenever
-              you move a pawn to the last rank, asking what piece you want  to
-              promote it to. If the option is true, your pawns are always pro-
-              moted to queens. Your opponent can still underpromote.
-
-       AAnniimmaattee DDrraaggggiinngg
-              If Animate Dragging is on, while you are dragging a  piece  with
-              the  mouse,  an image of the piece follows the mouse cursor.  If
-              Animate Dragging is off, there is no visual feedback  while  you
-              are dragging a piece, but if Animate Moving is on, the move will
-              be animated when it is complete.
-
-       AAnniimmaattee MMoovviinngg
-              If Animate Moving is on, all piece moves are animated.  An image
-              of  the  piece  is  shown  moving from the old square to the new
-              square when the move is completed (unless the move  was  already
-              animated  by  Animate  Dragging).   If  Animate Moving is off, a
-              moved piece instantly disappears from its old square  and  reap-
-              pears on its new square when the move is complete.
-
-       AAuuttoo CCoommmmeenntt
-              If  this  option  is  on,  any remarks made on ICS while you are
-              observing or playing a game are recorded as  a  comment  on  the
-              current  move.  This includes remarks made with the ICS commands
-              `say', `tell', `whisper',  and  `kibitz'.   Limitation:  remarks
-              that you type yourself are not recognized; XBoard scans only the
-              output from ICS, not the input you type to it.
-
-       AAuuttoo FFllaagg
-              If this option is on and one player runs out of time before  the
-              other,  XBoard  will automatically call his flag, claiming a win
-              on time.  In ICS mode, Auto Flag will only call your  opponent's
-              flag,  not  yours, and the ICS may award you a draw instead of a
-              win if you have insufficient mating material.   In  local  chess
-              engine  mode,  XBoard may call either player's flag and will not
-              take material into account.
-
-       AAuuttoo FFlliipp VViieeww
-              If the Auto Flip View option is on when you start  a  game,  the
-              board  will  be  automatically  oriented so that your pawns move
-              from the bottom of the window towards the top.
-
-       AAuuttoo OObbsseerrvvee
-              If this option is on and you add a player to your `gnotify' list
-              on  ICS,  XBoard will automatically observe all of that player's
-              games, unless you are doing something else (such as observing or
-              playing a game of your own) when one starts.  The games are dis-
-              played from the point of view of  the  player  on  your  gnotify
-              list;  that  is,  his  pawns  move from the bottom of the window
-              towards the top.  Exceptions:  If both players in a game are  on
-              your gnotify list, if your ICS `highlight' variable is set to 0,
-              or if the ICS you are using does not properly support  observing
-              from  Black's  point of view, you will see the game from White's
-              point of view.
-
-       AAuuttoo RRaaiissee BBooaarrdd
-              If this option is on, whenever a new game begins, the chessboard
-              window is deiconized (if necessary) and raised to the top of the
-              stack of windows.
-
-       AAuuttoo SSaavvee
-              If this option is true, at the end of every game XBoard  prompts
-              you for a file name and appends a record of the game to the file
-              you specify.  Disabled if the `saveGameFile' command-line option
-              is  set,  as  in  that case all games are saved to the specified
-              file.  See _L_o_a_d _a_n_d _S_a_v_e _o_p_t_i_o_n_s.
-
-       BBlliinnddffoolldd
-              If this option is on, XBoard displays the  board  as  usual  but
-              does  not display pieces or move highlights.  You can still move
-              in the usual way (with the mouse  or  by  typing  moves  in  ICS
-              mode), even though the pieces are invisible.
-
-       FFllaasshh MMoovveess
-              If  this  option  is on, whenever a move is completed, the moved
-              piece flashes.  The number of times  to  flash  is  set  by  the
-              flashCount  command-line option; it defaults to 3 if Flash Moves
-              is first turned on from the menu.
-
-       FFlliipp VViieeww
-              Inverts your view of the chess board for  the  duration  of  the
-              current  game.  Starting a new game returns the board to normal.
-              The `v' key is a keyboard equivalent.
-
-              If you are playing a game on an ICS, the board  is  always  ori-
-              ented  at the start of the game so that your pawns move from the
-              bottom of the window towards the top.  Otherwise,  the  starting
-              orientation is determined by the `flipView' command line option;
-              if it is false (the default), White's pawns move from bottom  to
-              top at the start of each game; if it is true, Black's pawns move
-              from bottom to top. See _U_s_e_r _i_n_t_e_r_f_a_c_e _o_p_t_i_o_n_s.
-
-       GGeett MMoovvee LLiisstt
-              If this option is on, whenever XBoard receives the  first  board
-              of  a  new ICS game (or a different game from the one it is cur-
-              rently displaying), it retrieves the list of past moves from the
-              ICS.   You  can  then  review  the  moves with the `Forward' and
-              `Backward' commands or save them with `Save  Game'.   You  might
-              want  to turn off this option if you are observing several blitz
-              games at once, to keep from wasting time and  network  bandwidth
-              fetching  the  move  lists  over  and  over.  When you turn this
-              option on from the menu, XBoard  immediately  fetches  the  move
-              list of the current game (if any).
-
-       HHiigghhlliigghhtt LLaasstt MMoovvee
-              If Highlight Last Move is on, after a move is made, the starting
-              and ending squares remain highlighted. In  addition,  after  you
-              use  Backward  or Back to Start, the starting and ending squares
-              of the last move to be unmade are highlighted.
-
-       MMoovvee SSoouunndd
-              If this option is on, XBoard alerts you by playing a sound after
-              each  of  your  opponent's moves (or after every move if you are
-              observing a game on the Internet Chess Server).   The  sound  is
-              not  played after moves you make or moves read from a saved game
-              file. By default, the sound is the terminal bell,  but  on  some
-              systems  you  can  change it to a sound file using the soundMove
-              option; see below.
-
-              If you turn on this option when using XBoard with  the  Internet
-              Chess  Server,  you  will probably want to give the `set bell 0'
-              command to the ICS, since otherwise the ICS will ring the termi-
-              nal  bell  after every move (not just yours). (The `.icsrc' file
-              is a good place for this; see _I_C_S _o_p_t_i_o_n_s.)
-
-       IICCSS AAllaarrmm
-              When this option is on, an alarm sound is played when your clock
-              counts  down  to  the icsAlarmTime (by default, 5 seconds) in an
-              ICS game.  For games with time controls that include  an  incre-
-              ment,  the  alarm  will sound each time the clock counts down to
-              the icsAlarmTime.  By default, the alarm sound is  the  terminal
-              bell,  but  on  some  systems  you can change it to a sound file
-              using the soundIcsAlarm option; see below.
-
-       OOlldd SSaavvee SSttyyllee
-              If this option is off, XBoard saves games in PGN (portable  game
-              notation)  and positions in FEN (Forsythe-Edwards notation).  If
-              the option is on, a save style that  is  compatible  with  older
-              versions  of  XBoard is used instead.  The old position style is
-              more human-readable than FEN; the old game style has no particu-
-              lar advantages.
-
-       PPeerriiooddiicc UUppddaatteess
-              If  this  option is off (or if you are using a chess engine that
-              does not support periodic updates),  the  analysis  window  will
-              only be updated when the analysis changes. If this option is on,
-              the Analysis Window will be updated every two seconds.
-
-       PPoonnddeerr NNeexxtt MMoovvee
-              If this option is off, the chess engine will think only when  it
-              is  on  move.   If  the option is on, the engine will also think
-              while waiting for you to make your move.
-
-       PPooppuupp EExxiitt MMeessssaaggee
-              If this option is on, when XBoard wants  to  display  a  message
-              just  before  exiting, it brings up a modal dialog box and waits
-              for you to click OK before  exiting.   If  the  option  is  off,
-              XBoard  prints  the message to standard error (the terminal) and
-              exits immediately.
-
-       PPooppuupp MMoovvee EErrrroorrss
-              If this option is off, when you make an error in moving (such as
-              attempting an illegal move or moving the wrong color piece), the
-              error message is displayed in the message area.  If  the  option
-              is  on,  move  errors  are displayed in small popup windows like
-              other errors.  You can dismiss an error popup either by clicking
-              its  OK  button  or by clicking anywhere on the board, including
-              downclicking to start a move.
-
-       PPrreemmoovvee
-              If this option is on while playing a game on  an  ICS,  you  can
-              register  your  next  planned move before it is your turn.  Move
-              the piece with the mouse in the ordinary way, and  the  starting
-              and ending squares will be highlighted with a special color (red
-              by default).  When it is your turn, if your registered  move  is
-              legal,  XBoard  will send it to ICS immediately; if not, it will
-              be ignored and you can make a different  move.   If  you  change
-              your  mind  about your premove, either make a different move, or
-              double-click on any piece to cancel the move entirely.
-
-       QQuuiieett PPllaayy
-              If this option is on, XBoard will  automatically  issue  an  ICS
-              `set shout 0' command whenever you start a game and a `set shout
-              1' command whenever you finish one.  Thus, you will not be  dis-
-              tracted by shouts from other ICS users while playing.
-
-       SShhooww CCoooorrddss
-              If  this  option  is  on,  XBoard displays algebraic coordinates
-              along the board's left and bottom edges.
-
-       SShhooww TThhiinnkkiinngg
-              If this option is set, the chess engine's notion  of  the  score
-              and  best line of play from the current position is displayed as
-              it is thinking. The score indicates how many pawns ahead (or  if
-              negative,  behind)  the  chess  engine  thinks it is. In matches
-              between two machines, the score is prefixed by  `W'  or  `B'  to
-              indicate  whether it is showing White's thinking or Black's, and
-              only the thinking of the engine that is on move is shown.
-
-       TTeesstt LLeeggaalliittyy
-              If this option is on, XBoard tests whether the moves you try  to
-              make  with  the  mouse  are legal and refuses to let you make an
-              illegal move.  Moves loaded from a file  with  `Load  Game'  are
-              also checked.  If the option is off, all moves are accepted, but
-              if a local chess engine or the ICS is active,  they  will  still
-              reject  illegal moves.  Turning off this option is useful if you
-              are playing a chess variant with  rules  that  XBoard  does  not
-              understand.   (Bughouse,  suicide,  and  wild variants where the
-              king may castle after starting on the d file are generally  sup-
-              ported with Test Legality on.)
-
-   HHeellpp MMeennuu
-       IInnffoo XXBBooaarrdd
-              Displays the XBoard documentation in info format.  For this fea-
-              ture to work, you must have the GNU info  program  installed  on
-              your  system,  and the file `xboard.info' must either be present
-              in the current working directory, or have been installed by  the
-              `make install' command when you built XBoard.
-
-       MMaann XXBBooaarrdd
-              Displays  the XBoard documentation in man page format.  For this
-              feature to work, the file `xboard.6' must have been installed by
-              the `make install' command when you built XBoard, and the direc-
-              tory it was placed in must be on the search path for  your  sys-
-              tem's `man' command.
-
-       HHiinntt   Displays a move hint from the chess engine.
-
-       BBooookk   Displays  a list of possible moves from the chess engine's open-
-              ing book.  The exact format depends on what chess engine you are
-              using.  With GNU Chess 4, the first column gives moves, the sec-
-              ond column gives one possible response for each  move,  and  the
-              third  column shows the number of lines in the book that include
-              the move from the first column. If you select  this  option  and
-              nothing happens, the chess engine is out of its book or does not
-              support this feature.
-
-       AAbboouutt XXBBooaarrdd
-              Shows the current XBoard version number.
-
-   OOtthheerr SShhoorrttccuutt KKeeyyss
-       IIccoonniizzee
-              Pressing the `i' or `c' key iconizes XBoard. The graphical  icon
-              displays a white knight if it is White's move, or a black knight
-              if it is Black's move. If your X window  manager  displays  only
-              text  icons,  not graphical ones, check its documentation; there
-              is probably a way to enable graphical icons.  If you  get  black
-              and white reversed, we would like to hear about it; see _P_r_o_b_l_e_m_s
-              below for instructions on how to report this problem.
-
-       You can add or remove shortcut keys using the X resources  `form.trans-
-       lations'.  Here  is  an  example  of what would go in your `.Xdefaults'
-       file:
-
-           XBoard*form.translations: \
-             Shift<Key>?: AboutGameProc() \n\
-             <Key>y: AcceptProc() \n\
-             <Key>n: DeclineProc() \n\
-             <Key>i: NothingProc()
-
-       Binding a key to `NothingProc' makes it do nothing, thus removing it as
-       a shortcut key. The XBoard commands that can be bound to keys are:
-
-           AbortProc, AboutGameProc, AboutProc, AcceptProc, AdjournProc,
-           AlwaysQueenProc, AnalysisModeProc, AnalyzeFileProc,
-           AnimateDraggingProc, AnimateMovingProc, AutobsProc, AutoflagProc,
-           AutoflipProc, AutoraiseProc, AutosaveProc, BackwardProc,
-           BlindfoldProc, BookProc, CallFlagProc, CopyGameProc, CopyPositionProc,
-           DebugProc, DeclineProc, DrawProc, EditCommentProc, EditGameProc,
-           EditPositionProc, EditTagsProc, EnterKeyProc, FlashMovesProc,
-           FlipViewProc, ForwardProc, GetMoveListProc, HighlightLastMoveProc,
-           HintProc, Iconify, IcsAlarmProc, IcsClientProc, IcsInputBoxProc,
-           InfoProc, LoadGameProc, LoadNextGameProc, LoadNextPositionProc,
-           LoadPositionProc, LoadPrevGameProc, LoadPrevPositionProc,
-           LoadSelectedProc, MachineBlackProc, MachineWhiteProc, MailMoveProc,
-           ManProc, MoveNowProc, MoveSoundProc, NothingProc, OldSaveStyleProc,
-           PasteGameProc, PastePositionProc, PauseProc, PeriodicUpdatesProc,
-           PonderNextMoveProc, PopupExitMessageProc, PopupMoveErrorsProc,
-           PremoveProc, QuietPlayProc, QuitProc, ReloadCmailMsgProc,
-           ReloadGameProc, ReloadPositionProc, RematchProc, ResetProc,
-           ResignProc, RetractMoveProc, RevertProc, SaveGameProc,
-           SavePositionProc, ShowCoordsProc, ShowGameListProc, ShowThinkingProc,
-           StopExaminingProc, StopObservingProc, TestLegalityProc, ToEndProc,
-           ToStartProc, TrainingProc, TruncateGameProc, and TwoMachinesProc.
-
-OOPPTTIIOONNSS
-       This section documents the command-line options to XBoard.  You can set
-       these options in two ways: by typing them on the shell command line you
-       use  to  start  XBoard, or by setting them as X resources (typically in
-       your `.Xdefaults' file).  Many of the options cannot be  changed  while
-       XBoard  is  running;  others set the initial state of items that can be
-       changed with the _O_p_t_i_o_n_s menu.
-
-       Most of the options have both a long name and a short name. To  turn  a
-       boolean  option  on  or off from the command line, either give its long
-       name followed by the value true or false (`-longOptionName  true'),  or
-       give  just  the short name to turn the option on (`-opt'), or the short
-       name preceded by `x' to turn the option off (`-xopt'). For options that
-       take strings or numbers as values, you can use the long or short option
-       names interchangeably.
-
-       Each option corresponds to an X resource with the same name, so if  you
-       like,  you can set options in your `.Xdefaults' file or in a file named
-       `XBoard' in your home directory.  For options that have two names,  the
-       longer  one is the name of the corresponding X resource; the short name
-       is not recognized.  To turn  a  boolean  option  on  or  off  as  an  X
-       resource,  give  its  long  name  followed  by  the value true or false
-       (`XBoard*longOptionName: true').
-
-   CChheessss EEnnggiinnee OOppttiioonnss
-       --ttcc oorr --ttiimmeeCCoonnttrrooll mmiinnuutteess[[::sseeccoonnddss]]
-              Each player begins with  his  clock  set  to  the  `timeControl'
-              period.  Default: 5 minutes.  The additional options `movesPerS-
-              ession' and `timeIncrement' are mutually exclusive.
-
-       --mmppss oorr --mmoovveessPPeerrSSeessssiioonn mmoovveess
-              When both players  have  made  `movesPerSession'  moves,  a  new
-              `timeControl'  period  is  added  to  both  clocks.  Default: 40
-              moves.
-
-       --iinncc oorr --ttiimmeeIInnccrreemmeenntt sseeccoonnddss
-              If this  option  is  specified,  `movesPerSession'  is  ignored.
-              Instead,  after  each player's move, `timeIncrement' seconds are
-              added to his clock.  Use `-inc 0' if you  want  to  require  the
-              entire  game  to  be played in one `timeControl' period, with no
-              increment.  Default: -1, which specifies `movesPerSession' mode.
-
-       --cclloocckk//--xxcclloocckk oorr --cclloocckkMMooddee ttrruuee//ffaallssee
-              Determines whether or not to display the chess clocks. If clock-
-              Mode is false, the clocks are not shown, but the side that is to
-              play  next  is  still  highlighted. Also, unless `searchTime' is
-              set, the chess engine still keeps track of the  clock  time  and
-              uses it to determine how fast to make its moves.
-
-       --sstt oorr --sseeaarrcchhTTiimmee mmiinnuutteess[[::sseeccoonnddss]]
-              Tells the chess engine to spend at most the given amount of time
-              searching for each of its moves. Without this option, the  chess
-              engine  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.
-
-       --ddeepptthh oorr --sseeaarrcchhDDeepptthh nnuummbbeerr
-              Tells the chess engine to look ahead at most the given number of
-              moves when searching for a move to make.  Without  this  option,
-              the chess engine chooses its search depth based on the number of
-              moves and amount of time remaining until the next time  control.
-              With  the option, the engine will cut off its search early if it
-              reaches the specified depth.
-
-       --tthhiinnkkiinngg//--xxtthhiinnkkiinngg oorr --sshhoowwTThhiinnkkiinngg ttrruuee//ffaallssee
-              Sets the Show Thinking option. See _O_p_t_i_o_n_s _M_e_n_u. Default: false.
-
-       --ppoonnddeerr//--xxppoonnddeerr oorr --ppoonnddeerrNNeexxttMMoovvee ttrruuee//ffaallssee
-              Sets  the  Ponder  Next  Move  menu  option.  See  _O_p_t_i_o_n_s _M_e_n_u.
-              Default: true.
-
-       --mmgg oorr --mmaattcchhGGaammeess nn
-              Automatically runs an n-game match between  two  chess  engines,
-              with  alternating  colors.   If the `loadGameFile' or `loadPosi-
-              tionFile' option is set, XBoard starts each game with the  given
-              opening  moves or the given position; otherwise, the games start
-              with the standard initial chess position.  If the `saveGameFile'
-              option  is  set,  a move record for the match is appended to the
-              specified file. If the `savePositionFile'  option  is  set,  the
-              final  position reached in each game of the match is appended to
-              the specified file. When the match is over, XBoard displays  the
-              match score and exits. Default: 0 (do not run a match).
-
-       --mmmm//--xxmmmm oorr --mmaattcchhMMooddee ttrruuee//ffaallssee
-              Setting   `matchMode'   to   true   is   equivalent  to  setting
-              `matchGames' to 1.
-
-       --ffccpp oorr --ffiirrssttCChheessssPPrrooggrraamm pprrooggrraamm
-              Name of first chess engine.  Default: `gnuchessx'.
-
-       --ssccpp oorr --sseeccoonnddCChheessssPPrrooggrraamm pprrooggrraamm
-              Name of second chess engine, if needed.  A second  chess  engine
-              is   started  only  in  Two  Machines  (match)  mode.   Default:
-              `gnuchessx'.
-
-       --ffbb//--xxffbb oorr --ffiirrssttPPllaayyssBBllaacckk ttrruuee//ffaallssee
-              In games between two chess engines,  firstChessProgram  normally
-              plays  white.   If  this option is true, firstChessProgram plays
-              black.  In a multi-game match, this option  affects  the  colors
-              only  for  the  first  game;  they still alternate in subsequent
-              games.
-
-       --ffhh oorr --ffiirrssttHHoosstt hhoosstt
-       --sshh oorr --sseeccoonnddHHoosstt hhoosstt
-              Hosts on which the chess engines are to  run.  The  default  for
-              each  is  `localhost'.  If you specify another host, XBoard uses
-              `rsh' to run the chess engine there. (You can substitute a  dif-
-              ferent  remote  shell  program  for  rsh using the `remoteShell'
-              option described below.)
-
-       --ffdd oorr --ffiirrssttDDiirreeccttoorryy ddiirr
-       --ssdd oorr --sseeccoonnddDDiirreeccttoorryy ddiirr
-              Working directories in which the chess engines are  to  be  run.
-              The  default  is  "", which means to run the chess engine in the
-              same working directory as  XBoard  itself.   (See  the  CHESSDIR
-              environment  variable.)   This option is effective only when the
-              chess engine is being run on the local host; it does not work if
-              the engine is run remotely using the -fh or -sh option.
-
-       --iinniittSSttrriinngg ssttrriinngg
-       --sseeccoonnddIInniittSSttrriinngg ssttrriinngg
-              The  string  that  is sent to initialize each chess engine for a
-              new game.  Default:
-
-                  new
-                  random
-
-              Setting this option from the command line is tricky, because you
-              must  type in real newline characters, including one at the very
-              end.  In most shells you can do this by entering a `\' character
-              followed  by a newline. It is easier to set the option from your
-              `.Xdefaults' file; in that case you can  include  the  character
-              sequence  `\n' in the string, and it will be converted to a new-
-              line.
-
-              If you change this option, don't remove the `new' command; it is
-              required by all chess engines to start a new game.
-
-              You  can  remove  the `random' command if you like; including it
-              causes GNU Chess 4 to randomize its move selection  slightly  so
-              that it doesn't play the same moves in every game.  Even without
-              `random', GNU Chess 4 randomizes its choice of  moves  from  its
-              opening  book.   Many  other  chess  engines ignore this command
-              entirely and always (or never) randomize.
-
-              You can also try adding other commands to  the  initString;  see
-              the documentation of the chess engine you are using for details.
-
-       --ffiirrssttCCoommppuutteerrSSttrriinngg ssttrriinngg
-       --sseeccoonnddCCoommppuutteerrSSttrriinngg ssttrriinngg
-              The string that is sent to the chess engine if its  opponent  is
-              another  computer  chess  engine.   The default is `computer\n'.
-              Probably the only useful alternative is the empty  string  (`'),
-              which  keeps  the engine from knowing that it is playing another
-              computer.
-
-       --rreeuussee//--xxrreeuussee oorr --rreeuusseeFFiirrsstt ttrruuee//ffaallssee
-       --rreeuussee22//--xxrreeuussee22 oorr --rreeuusseeSSeeccoonndd ttrruuee//ffaallssee
-              If the option is false, XBoard kills off the chess engine  after
-              every game and starts it again for the next game.  If the option
-              is true (the default), XBoard starts the chess engine only  once
-              and  uses  it repeatedly to play multiple games.  Some old chess
-              engines may not work properly when reuse is turned on, but  oth-
-              erwise games will start faster if it is left on.
-
-       --ffiirrssttPPrroottooccoollVVeerrssiioonn vveerrssiioonn--nnuummbbeerr
-       --sseeccoonnddPPrroottooccoollVVeerrssiioonn vveerrssiioonn--nnuummbbeerr
-              This option specifies which version of the chess engine communi-
-              cation protocol to use.  By default, version-number  is  2.   In
-              version  1,  the  "protover"  command is not sent to the engine;
-              since version 1 is a subset of version 2, nothing else  changes.
-              Other values for version-number are not supported.
-
-   IInntteerrnneett CChheessss SSeerrvveerr OOppttiioonnss
-       --iiccss//--xxiiccss oorr --iinntteerrnneettCChheessssSSeerrvveerrMMooddee ttrruuee//ffaallssee
-              Connect  with an Internet Chess Server to play chess against its
-              other users, observe games they are  playing,  or  review  games
-              that have recently finished. Default: false.
-
-       --iiccsshhoosstt oorr --iinntteerrnneettCChheessssSSeerrvveerrHHoosstt hhoosstt
-              The Internet host name or address of the chess server to connect
-              to when in ICS mode. Default: `chessclub.com'.  Another  popular
-              chess  server  to  try is `freechess.org'.  If your site doesn't
-              have a working Internet name server,  try  specifying  the  host
-              address  in  numeric  form.   You  may  also need to specify the
-              numeric address when using the icshelper option  with  timestamp
-              or timeseal (see below).
-
-       --iiccssppoorrtt oorr --iinntteerrnneettCChheessssSSeerrvveerrPPoorrtt ppoorrtt--nnuummbbeerr
-              The  port number to use when connecting to a chess server in ICS
-              mode. Default: 5000.
-
-       --iiccsshheellppeerr oorr --iinntteerrnneettCChheessssSSeerrvveerrHHeellppeerr pprroogg--nnaammee
-              An external helper program used to communicate  with  the  chess
-              server.  You would set it to "timestamp" for ICC (chessclub.com)
-              or "timeseal" for  FICS  (freechess.org),  after  obtaining  the
-              correct version of timestamp or timeseal for your computer.  See
-              "help timestamp" on ICC  and  "help  timeseal"  on  FICS.   This
-              option is shorthand for `-useTelnet -telnetProgram program'.
-
-       --tteellnneett//--xxtteellnneett oorr --uusseeTTeellnneett ttrruuee//ffaallssee
-              This  option is poorly named; it should be called useHelper.  If
-              set to true, it instructs XBoard to run an external  program  to
-              communicate  with the Internet Chess Server.  The program to use
-              is given by the telnetProgram option.  If the  option  is  false
-              (the default), XBoard opens a TCP socket and uses its own inter-
-              nal implementation of the telnet protocol  to  communicate  with
-              the ICS. See _F_i_r_e_w_a_l_l_s.
-
-       --tteellnneettPPrrooggrraamm pprroogg--nnaammee
-              This  option is poorly named; it should be called helperProgram.
-              It gives the name of the telnet program  to  be  used  with  the
-              `gateway' and `useTelnet' options.  The default is `telnet'. The
-              telnet  program  is  invoked   with   the   value   of   `inter-
-              netChessServerHost'  as  its  first  argument  and  the value of
-              `internetChessServerPort' as its  second  argument.   See  _F_i_r_e_-
-              _w_a_l_l_s.
-
-       --ggaatteewwaayy hhoosstt--nnaammee
-              If  this  option is set to a host name, XBoard communicates with
-              the Internet Chess Server by using `rsh' to run the  `telnetPro-
-              gram'  on  the  given  host,  instead  of using its own internal
-              implementation of the telnet protocol. You can substitute a dif-
-              ferent  remote  shell  program for `rsh' using the `remoteShell'
-              option described below.  See _F_i_r_e_w_a_l_l_s.
-
-       --iinntteerrnneettCChheessssSSeerrvveerrCCoommmmPPoorrtt oorr --iiccssccoommmm ddeevv--nnaammee
-              If this option is set, XBoard communicates with the ICS  through
-              the  given character I/O device instead of opening a TCP connec-
-              tion.  Use this option if your system does not have any kind  of
-              Internet  connection itself (not even a SLIP or PPP connection),
-              but you do have dialup access (or a hardwired terminal line)  to
-              an  Internet  service  provider from which you can telnet to the
-              ICS.
-
-              The support for this option in XBoard is minimal.  You  need  to
-              set  all communication parameters and tty modes before you enter
-              XBoard.
-
-              Use a script something like this:
-
-                  stty raw -echo 9600 > /dev/tty00
-                  xboard -ics -icscomm /dev/tty00
-
-              Here replace `/dev/tty00' with the name of the device that  your
-              modem  is  connected  to.  You  might  have  to add several more
-              options to these stty commands. See the man pages for `stty' and
-              `tty' if you run into problems. Also, on many systems stty works
-              on its standard input instead of standard output, so you have to
-              use `<' instead of `>'.
-
-              If  you  are  using  linux,  try starting with the script below.
-              Change it as necessary for your installation.
-
-                  #!/bin/sh -f
-                  # configure modem and fire up XBoard
-
-                  # configure modem
-                  (
-                    stty 2400 ; stty raw ; stty hupcl ; stty -clocal
-                    stty ignbrk ; stty ignpar ; stty ixon ; stty ixoff
-                    stty -iexten ; stty -echo
-                  ) < /dev/modem
-                  xboard -ics -icscomm /dev/modem
-
-              After you start XBoard in this way, type whatever  commands  are
-              necessary  to  dial  out  to  your Internet provider and log in.
-              Then telnet to ICS, using a command like  `telnet  chessclub.com
-              5000'.   Important:  See the paragraph below about extra echoes,
-              in _L_i_m_i_t_a_t_i_o_n_s.
-
-       --iiccssllooggoonn oorr --iinntteerrnneettCChheessssSSeerrvveerrLLooggoonnSSccrriipptt ffiillee--nnaammee
-              Whenever XBoard connects to the Internet  Chess  Server,  if  it
-              finds  a  file  with the name given in this option, it feeds the
-              file's contents to the ICS as commands. The default file name is
-              `.icsrc'.   Usually  the  first  two lines of the file should be
-              your ICS user name and password.  The  file  can  be  either  in
-              $CHESSDIR, in XBoard's working directory if CHESSDIR is not set,
-              or in your home directory.
-
-       --mmssLLooggiinnDDeellaayy ddeellaayy
-              If you experience trouble logging on to an ICS  when  using  the
-              `-icslogon'  option,  inserting some delay between characters of
-              the logon script may help. This option adds `delay' milliseconds
-              of delay between characters. Good values to try are 100 and 250.
-
-       --iiccssiinnppuutt//--xxiiccssiinnppuutt oorr --iinntteerrnneettCChheessssSSeerrvveerrIInnppuuttBBooxx ttrruuee//ffaallssee
-              Sets the ICS Input Box menu  option.  See  _M_o_d_e  _M_e_n_u.  Default:
-              false.
-
-       --aauuttooccoommmm//--xxaauuttooccoommmm oorr --aauuttooCCoommmmeenntt ttrruuee//ffaallssee
-              Sets  the  Auto  Comment menu option. See _O_p_t_i_o_n_s _M_e_n_u. Default:
-              false.
-
-       --aauuttooffllaagg//--xxaauuttooffllaagg oorr --aauuttooCCaallllFFllaagg ttrruuee//ffaallssee
-              Sets the Auto Flag menu  option.   See  _O_p_t_i_o_n_s  _M_e_n_u.  Default:
-              false.
-
-       --aauuttoobbss//--xxaauuttoobbss oorr --aauuttooOObbsseerrvvee ttrruuee//ffaallssee
-              Sets  the  Auto Observe menu option.  See _O_p_t_i_o_n_s _M_e_n_u. Default:
-              false.
-
-       --mmoovveess//--xxmmoovveess oorr --ggeettMMoovveeLLiisstt ttrruuee//ffaallssee
-              Sets the Get Move List menu option.  See _O_p_t_i_o_n_s _M_e_n_u.  Default:
-              true.
-
-       --aallaarrmm//--xxaallaarrmm oorr --iiccssAAllaarrmm ttrruuee//ffaallssee
-              Sets  the  ICS  Alarm  menu  option.  See _O_p_t_i_o_n_s _M_e_n_u. Default:
-              true.
-
-       --iiccssAAllaarrmmTTiimmee mmss
-              Sets the time in milliseconds for the  ICS  Alarm  menu  option.
-              See _O_p_t_i_o_n_s _M_e_n_u. Default: 5000.
-
-       --pprree//--xxpprree or --pprreemmoovvee ttrruuee//ffaallssee
-              Sets the Premove menu option. See _O_p_t_i_o_n_s _M_e_n_u. Default: true.
-
-       --qquuiieett//--xxqquuiieett oorr --qquuiieettPPllaayy ttrruuee//ffaallssee
-              Sets  the  Quiet  Play menu option.  See _O_p_t_i_o_n_s _M_e_n_u.  Default:
-              false.
-
-       --ccoolloorriizzeeMMeessssaaggeess oorr --ccoolloorriizzee
-              Setting colorizeMessages to true tells XBoard  to  colorize  the
-              messages received from the ICS.  Colorization works only if your
-              xterm supports ISO 6429 escape sequences for changing text  col-
-              ors.
-
-       --ccoolloorrSShhoouutt ffoorreeggrroouunndd,,bbaacckkggrroouunndd,,bboolldd
-       --ccoolloorrSSSShhoouutt ffoorreeggrroouunndd,,bbaacckkggrroouunndd,,bboolldd
-       --ccoolloorrCChhaannnneell11 ffoorreeggrroouunndd,,bbaacckkggrroouunndd,,bboolldd
-       --ccoolloorrCChhaannnneell ffoorreeggrroouunndd,,bbaacckkggrroouunndd,,bboolldd
-       --ccoolloorrKKiibbiittzz ffoorreeggrroouunndd,,bbaacckkggrroouunndd,,bboolldd
-       --ccoolloorrTTeellll ffoorreeggrroouunndd,,bbaacckkggrroouunndd,,bboolldd
-       --ccoolloorrCChhaalllleeggee ffoorreeggrroouunndd,,bbaacckkggrroouunndd,,bboolldd
-       --ccoolloorrRReeqquueesstt ffoorreeggrroouunndd,,bbaacckkggrroouunndd,,bboolldd
-       --ccoolloorrSSeeeekk ffoorreeggrroouunndd,,bbaacckkggrroouunndd,,bboolldd
-       --ccoolloorrNNoorrmmaall ffoorreeggrroouunndd,,bbaacckkggrroouunndd,,bboolldd
-              These  options set the colors used when colorizing ICS messages.
-              All ICS messages are  grouped  into  one  of  these  categories:
-              shout,  sshout,  channel  1,  other channel, kibitz, tell, chal-
-              lenge, request (including abort, adjourn, draw, pause, and take-
-              back), or normal (all other messages).
-
-              Each foreground or background argument can be one of the follow-
-              ing: black, red, green, yellow, blue, magenta, cyan,  white,  or
-              default.  Here ``default'' means the default foreground or back-
-              ground color of your xterm.  Bold can be 1 or 0.  If  background
-              is  omitted,  ``default''  is  assumed; if bold is omitted, 0 is
-              assumed.
-
-              Here is an example of how to set the colors in your `.Xdefaults'
-              file.   The  colors  shown here are the default values; you will
-              get them if you turn `-colorize' on without specifying your  own
-              colors.
-
-                  xboard*colorizeMessages: true
-                  xboard*colorShout: green
-                  xboard*colorSShout: green, black, 1
-                  xboard*colorChannel1: cyan
-                  xboard*colorChannel: cyan, black, 1
-                  xboard*colorKibitz: magenta, black, 1
-                  xboard*colorTell: yellow, black, 1
-                  xboard*colorChallenge: red, black, 1
-                  xboard*colorRequest: red
-                  xboard*colorSeek: blue
-                  xboard*colorNormal: default
-
-       --ssoouunnddPPrrooggrraamm pprrooggnnaammee
-              If  this  option  is  set  to  a  sound-playing  program that is
-              installed and working on your  system,  XBoard  can  play  sound
-              files when certain events occur, listed below.  The default pro-
-              gram name is "play".  If any of the sound options is set to "$",
-              the  event  rings the terminal bell by sending a ^G character to
-              standard output, instead of playing a sound file.  If an  option
-              is  set  to  the  empty  string  "", no sound is played for that
-              event.
-
-       --ssoouunnddSShhoouutt ffiilleennaammee
-       --ssoouunnddSSSShhoouutt ffiilleennaammee
-       --ssoouunnddCChhaannnneell ffiilleennaammee
-       --ssoouunnddKKiibbiittzz ffiilleennaammee
-       --ssoouunnddTTeellll ffiilleennaammee
-       --ssoouunnddCChhaalllleennggee ffiilleennaammee
-       --ssoouunnddRReeqquueesstt ffiilleennaammee
-       --ssoouunnddSSeeeekk ffiilleennaammee
-              These sounds are triggered in the same way as  the  colorization
-              events described above.  They all default to "", no sound.  They
-              are played only if the colorizeMessages is on.
-
-       --ssoouunnddMMoovvee ffiilleennaammee
-              This sound is used by the Move Sound menu option.  Default: "$".
-
-       --ssoouunnddIIccssAAllaarrmm ffiilleennaammee
-              This  sound is used by the ICS Alarm menu option.  Default: "$".
-
-       --ssoouunnddIIccssWWiinn ffiilleennaammee
-              This sound is played when you win an ICS game.  Default: ""  (no
-              sound).
-
-       --ssoouunnddIIccssLLoossss ffiilleennaammee
-              This sound is played when you lose an ICS game.  Default: "" (no
-              sound).
-
-       --ssoouunnddIIccssDDrraaww ffiilleennaammee
-              This sound is played when you draw an ICS game.  Default: "" (no
-              sound).
-
-       --ssoouunnddIIccssUUnnffiinniisshheedd ffiilleennaammee
-              This sound is played when an ICS game that you are participating
-              in is aborted,  adjourned,  or  otherwise  ends  inconclusively.
-              Default: "" (no sound).
-
-              Here  is  an example of how to set the sounds in your .Xdefaults
-              file:
-
-                  xboard*soundShout: shout.wav
-                  xboard*soundSShout: sshout.wav
-                  xboard*soundChannel1: channel1.wav
-                  xboard*soundChannel: channel.wav
-                  xboard*soundKibitz: kibitz.wav
-                  xboard*soundTell: tell.wav
-                  xboard*soundChallenge: challenge.wav
-                  xboard*soundRequest: request.wav
-                  xboard*soundSeek: seek.wav
-                  xboard*soundMove: move.wav
-                  xboard*soundIcsWin: win.wav
-                  xboard*soundIcsLoss: lose.wav
-                  xboard*soundIcsDraw: draw.wav
-                  xboard*soundIcsUnfinished: unfinished.wav
-                  xboard*soundIcsAlarm: alarm.wav
-
-   LLooaadd aanndd SSaavvee OOppttiioonnss
-       --llggff oorr --llooaaddGGaammeeFFiillee ffiillee
-       --llggii oorr --llooaaddGGaammeeIInnddeexx iinnddeexx
-              If the `loadGameFile' option is set, XBoard loads the  specified
-              game  file  at startup. The file name `-' specifies the standard
-              input. If there is more than one game in the file,  XBoard  pops
-              up  a  menu  of the available games, with entries based on their
-              PGN (Portable  Game  Notation)  tags.   If  the  `loadGameIndex'
-              option  is  set to `N', the menu is suppressed and the N th game
-              found in the file is loaded immediately.  The menu is also  sup-
-              pressed if `matchMode' is enabled or if the game file is a pipe;
-              in these cases the first game in the file is loaded immediately.
-              Use  the `pxboard' shell script provided with XBoard if you want
-              to pipe in files containing multiple games  and  still  see  the
-              menu.
-
-       --ttdd oorr --ttiimmeeDDeellaayy sseeccoonnddss
-              Time  delay between moves during `Load Game'. Fractional seconds
-              are allowed; try `-td 0.4'. A  time  delay  value  of  -1  tells
-              XBoard  not to step through game files automatically. Default: 1
-              second.
-
-       --ssggff oorr --ssaavveeGGaammeeFFiillee ffiillee
-              If this option is set, XBoard appends a  record  of  every  game
-              played  to  the  specified file. The file name `-' specifies the
-              standard output.
-
-       --aauuttoossaavvee//--xxaauuttoossaavvee oorr --aauuttooSSaavveeGGaammeess ttrruuee//ffaallssee
-              Sets the Auto Save menu option.   See  _O_p_t_i_o_n_s  _M_e_n_u.   Default:
-              false.  Ignored if `saveGameFile' is set.
-
-       --llppff oorr --llooaaddPPoossiittiioonnFFiillee ffiillee
-       --llppii oorr --llooaaddPPoossiittiioonnIInnddeexx iinnddeexx
-              If the `loadPositionFile' option is set, XBoard loads the speci-
-              fied position file at startup. The file name `-'  specifies  the
-              standard  input.  If the `loadPositionIndex' option is set to N,
-              the Nth position found in the  file  is  loaded;  otherwise  the
-              first position is loaded.
-
-       --ssppff oorr --ssaavveePPoossiittiioonnFFiillee ffiillee
-              If this option is set, XBoard appends the final position reached
-              in every game played to the specified file. The  file  name  `-'
-              specifies the standard output.
-
-       --oollddssaavvee//--xxoollddssaavvee oorr --oollddSSaavveeSSttyyllee ttrruuee//ffaallssee
-              Sets  the  Old  Save  Style  menu  option.   See  _O_p_t_i_o_n_s  _M_e_n_u.
-              Default: false.
-
-   UUsseerr IInntteerrffaaccee OOppttiioonnss
-       --ddiissppllaayy
-       --ggeeoommeettrryy
-       --iiccoonniicc
-              These and most other standard Xt options are accepted.
-
-       --mmoovveessoouunndd//--xxmmoovveessoouunndd oorr --rriinnggBBeellllAAfftteerrMMoovveess ttrruuee//ffaallssee
-              Sets the Move Sound menu option.  See  _O_p_t_i_o_n_s  _M_e_n_u.   Default:
-              false.  For compatibility with old XBoard versions, -bell/-xbell
-              are also accepted as abbreviations for this option.
-
-       --eexxiitt//--xxeexxiitt oorr --ppooppuuppEExxiittMMeessssaaggee ttrruuee//ffaallssee
-              Sets the Popup Exit Message  menu  option.   See  _O_p_t_i_o_n_s  _M_e_n_u.
-              Default: true.
-
-       --ppooppuupp//--xxppooppuupp oorr --ppooppuuppMMoovveeEErrrroorrss ttrruuee//ffaallssee
-              Sets  the  Popup  Move  Errors  menu  option.  See _O_p_t_i_o_n_s _M_e_n_u.
-              Default: false.
-
-       --qquueeeenn//--xxqquueeeenn oorr --aallwwaayyssPPrroommootteeTTooQQuueeeenn ttrruuee//ffaallssee
-              Sets the Always Queen menu option.  See _O_p_t_i_o_n_s _M_e_n_u.   Default:
-              false.
-
-       --lleeggaall//--xxlleeggaall oorr --tteessttLLeeggaalliittyy ttrruuee//ffaallssee
-              Sets the Test Legality menu option.  See _O_p_t_i_o_n_s _M_e_n_u.  Default:
-              true.
-
-       --ssiizzee oorr --bbooaarrddSSiizzee ((ssiizzeeNNaammee || nn11,,nn22,,nn33,,nn44,,nn55,,nn66,,nn77))
-              Determines how large the board will be, by selecting  the  pixel
-              size  of  the  pieces and setting a few related parameters.  The
-              sizeName can be one of: Titanic, giving  129x129  pixel  pieces,
-              Colossal  116x116,  Giant  108x108, Huge 95x95, Big 87x87, Large
-              80x80, Bulky 72x72, Medium 64x64, Moderate 58x58, Average 54x54,
-              Middling  49x49, Mediocre 45x45, Small 40x40, Slim 37x37, Petite
-              33x33, Dinky 29x29, Teeny 25x25, or Tiny 21x21.  Pieces  of  all
-              these  sizes  are built into XBoard.  Other sizes can be used if
-              you have  them;  see  the  pixmapDirectory  and  bitmapDirectory
-              options.   The default depends on the size of your screen; it is
-              approximately the largest size that will fit without clipping.
-
-              You can select other sizes or vary other  layout  parameters  by
-              providing  a  list of comma-separated values (with no spaces) as
-              the argument.  You do not need to provide all  the  values;  for
-              any  you  omit from the end of the list, defaults are taken from
-              the nearest built-in size.  The value `n1' gives the piece size,
-              `n2'  the  width  of  the black border between squares, `n3' the
-              desired size for the clockFont, `n4' the desired  size  for  the
-              coordFont,  `n5' the desired size for the default font, `n6' the
-              smallLayout flag (0 or 1), and `n7' the tinyLayout  flag  (0  or
-              1).   All  dimensions  are  in  pixels.   If  the border between
-              squares is eliminated (0 width), the various  highlight  options
-              will  not  work,  as there is nowhere to draw the highlight.  If
-              smallLayout is 1 and `titleInWindow' is true, the window  layout
-              is rearranged to make more room for the title.  If tinyLayout is
-              1, the labels on the menu bar are abbreviated to  one  character
-              each and the buttons in the button bar are made narrower.
-
-       --ccoooorrddss//--xxccoooorrddss oorr --sshhoowwCCoooorrddss ttrruuee//ffaallssee
-              Sets  the  Show Coords menu option.  See _O_p_t_i_o_n_s _M_e_n_u.  Default:
-              false.  The `coordFont' option specifies what font to use.
-
-       --aauuttoorraaiissee//--xxaauuttoorraaiissee oorr --aauuttooRRaaiisseeBBooaarrdd ttrruuee//ffaallssee
-              Sets the Auto  Raise  Board  menu  option.   See  _O_p_t_i_o_n_s  _M_e_n_u.
-              Default: true.
-
-       --aauuttoofflliipp//--xxaauuttoofflliipp oorr --aauuttooFFlliippVViieeww ttrruuee//ffaallssee
-              Sets  the  Auto  Flip  View  menu  option.   See  _O_p_t_i_o_n_s  _M_e_n_u.
-              Default: true.
-
-       --fflliipp//--xxfflliipp oorr --fflliippVViieeww ttrruuee//ffaallssee
-              If Auto Flip View is not set, or if you are  observing  but  not
-              participating  in  a  game, then the positioning of the board at
-              the start of each game  depends  on  the  flipView  option.   If
-              flipView is false (the default), the board is positioned so that
-              the white pawns move from the bottom to the top;  if  true,  the
-              black  pawns  move from the bottom to the top.  In any case, the
-              Flip menu option (see _O_p_t_i_o_n_s _M_e_n_u) can  be  used  to  flip  the
-              board after the game starts.
-
-       --ttiittllee//--xxttiittllee oorr --ttiittlleeIInnWWiinnddooww ttrruuee//ffaallssee
-              If  this  option  is true, XBoard displays player names (for ICS
-              games) and game file names (for `Load  Game')  inside  its  main
-              window.  If  the option is false (the default), this information
-              is displayed only in the window banner. You probably won't  want
-              to  set  this option unless the information is not showing up in
-              the banner, as happens with a few X window managers.
-
-       --bbuuttttoonnss//--xxbbuuttttoonnss oorr --sshhoowwBBuuttttoonnBBaarr TTrruuee//FFaallssee
-              If this option is False, xboard omits the [<<] [<] [P] [>]  [>>]
-              button  bar  from  the  window,  allowing the message line to be
-              wider.  You can still get the functions of these  buttons  using
-              the menus or their keyboard shortcuts.  Default: true.
-
-       --mmoonnoo//--xxmmoonnoo oorr --mmoonnooMMooddee ttrruuee//ffaallssee
-              Determines  whether  XBoard displays its pieces and squares with
-              two colors (true) or four (false). You shouldn't have to specify
-              `monoMode'; XBoard will determine if it is necessary.
-
-       --ffllaasshhCCoouunntt ccoouunntt
-       --ffllaasshhRRaattee rraattee
-       --ffllaasshh//--xxffllaasshh
-              These  options enable flashing of pieces when they land on their
-              destination square.  `flashCount' tells XBoard how many times to
-              flash  a  piece  after  it  lands  on  its  destination  square.
-              `flashRate' controls the rate of flashing (flashes/sec).  Abbre-
-              viations:  `flash'  sets  flashCount to 3.  `xflash' sets flash-
-              Count to 0.  Defaults:  flashCount=0 (no flashing), flashRate=5.
-
-       --hhiigghhlliigghhtt//--xxhhiigghhlliigghhtt oorr --hhiigghhlliigghhttLLaassttMMoovvee ttrruuee//ffaallssee
-              Sets  the  Highlight  Last  Move  menu option. See _O_p_t_i_o_n_s _M_e_n_u.
-              Default: false.
-
-       --bblliinndd//--xxbblliinndd oorr --bblliinnddffoolldd ttrruuee//ffaallssee
-              Sets the Blindfold menu option.   See  _O_p_t_i_o_n_s  _M_e_n_u.   Default:
-              false.
-
-       --cclloocckkFFoonntt ffoonntt
-              The  font  used for the clocks. If the option value is a pattern
-              that does not specify the font size, XBoard tries to  choose  an
-              appropriate  font  for  the  board  size  being  used.  Default:
-              -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
-
-       --ccoooorrddFFoonntt ffoonntt
-              The font used for rank and file coordinate  labels  if  `showCo-
-              ords'  is  true.  If the option value is a pattern that does not
-              specify the font size, XBoard tries  to  choose  an  appropriate
-              font for the board size being used.  Default: -*-helvetica-bold-
-              r-normal--*-*-*-*-*-*-*-*.
-
-       --ffoonntt ffoonntt
-              The font used for popup dialogs, menus, comments, etc.   If  the
-              option  value  is a pattern that does not specify the font size,
-              XBoard tries to choose an appropriate font for  the  board  size
-              being       used.       Default:      -*-helvetica-medium-r-nor-
-              mal--*-*-*-*-*-*-*-*.
-
-       --ffoonnttSSiizzeeTToolleerraannccee ttooll
-              In the font selection algorithm, a nonscalable font will be pre-
-              ferred  over a scalable font if the nonscalable font's size dif-
-              fers by `tol' pixels or less from the desired size.  A value  of
-              -1  will force a scalable font to always be used if available; a
-              value of 0 will use a nonscalable font only if it is exactly the
-              right  size;  a  large value (say 1000) will force a nonscalable
-              font to always be used if available.  Default: 4.
-
-       --bbmm oorr --bbiittmmaappDDiirreeccttoorryy ddiirr
-       --ppiixxmmaapp oorr --ppiixxmmaappDDiirreeccttoorryy ddiirr
-              These options control what piece images xboard uses.  The XBoard
-              distribution includes one set of pixmap pieces in xpm format, in
-              the directory `pixmaps', and one set of  bitmap  pieces  in  xbm
-              format, in the directory `bitmaps'.  Pixmap pieces give a better
-              appearance on the screen: the white pieces  have  dark  borders,
-              and  the  black  pieces  have  opaque  internal  details.   With
-              bitmaps, neither piece color has  a  border,  and  the  internal
-              details are transparent; you see the square color or other back-
-              ground color through them.
-
-              If XBoard is configured and compiled on a system  that  includes
-              libXpm, the X pixmap library, the xpm pixmap pieces are compiled
-              in as the default.  A different xpm piece set can be selected at
-              runtime with the `pixmapDirectory' option, or a bitmap piece set
-              can be selected with the `bitmapDirectory' option.
-
-              If XBoard is configured and compiled on a system that  does  not
-              include  libXpm  (or  the `--disable-xpm' option is given to the
-              configure program), the bitmap pieces are  compiled  in  as  the
-              default.  It is not possible to use xpm pieces in this case, but
-              pixmap pieces in another format called "xim" can be used by giv-
-              ing  the `pixmapDirectory' option.  Or again, a different bitmap
-              piece set can be selected with the `bitmapDirectory' option.
-
-              Files in the `bitmapDirectory' must be  named  as  follows:  The
-              first character of a piece bitmap name gives the piece it repre-
-              sents (`p', `n', `b', `r', `q', or  `k'),  the  next  characters
-              give  the  size  in  pixels,  the  following character indicates
-              whether the piece is solid or outline  (`s'  or  `o'),  and  the
-              extension  is `.bm'.  For example, a solid 80x80 knight would be
-              named  `n80s.bm'.   The  outline  bitmaps  are  used   only   in
-              monochrome  mode.   If  bitmap  pieces  are  compiled in and the
-              bitmapDirectory is missing some files, the  compiled  in  pieces
-              are used instead.
-
-              If  the  bitmapDirectory option is given, it is also possible to
-              replace xboard's icons and menu checkmark,  by  supplying  files
-              named `icon_white.bm', `icon_black.bm', and `checkmark.bm'.
-
-              For  more  information  about pixmap pieces and how to get addi-
-              tional sets, see _z_i_c_2_x_p_m below.
-
-       --wwhhiitteePPiieecceeCCoolloorr ccoolloorr
-       --bbllaacckkPPiieecceeCCoolloorr ccoolloorr
-       --lliigghhttSSqquuaarreeCCoolloorr ccoolloorr
-       --ddaarrkkSSqquuaarreeCCoolloorr ccoolloorr
-       --hhiigghhlliigghhttSSqquuaarreeCCoolloorr ccoolloorr
-              Colors to use for the pieces, squares,  and  square  highlights.
-              Defaults:
-
-                  -whitePieceColor       #FFFFCC
-                  -blackPieceColor       #202020
-                  -lightSquareColor      #C8C365
-                  -darkSquareColor       #77A26D
-                  -highlightSquareColor  #FFFF00
-                  -premoveHighlightColor #FF0000
-
-              On a grayscale monitor you might prefer:
-
-                  -whitePieceColor       gray100
-                  -blackPieceColor       gray0
-                  -lightSquareColor      gray80
-                  -darkSquareColor       gray60
-                  -highlightSquareColor  gray100
-                  -premoveHighlightColor gray70
-
-       --ddrraagg//--xxddrraagg oorr --aanniimmaatteeDDrraaggggiinngg ttrruuee//ffaallssee
-              Sets  the  Animate  Dragging  menu  option.  See  _O_p_t_i_o_n_s  _M_e_n_u.
-              Default: true.
-
-       --aanniimmaattee//--xxaanniimmaattee oorr --aanniimmaatteeMMoovviinngg ttrruuee//ffaallssee
-              Sets the Animate Moving menu option. See _O_p_t_i_o_n_s _M_e_n_u.  Default:
-              true.
-
-       --aanniimmaatteeSSppeeeedd nn
-              Number  of  milliseconds delay between each animation frame when
-              Animate Moves is on.
-
-   OOtthheerr OOppttiioonnss
-       --nnccpp//--xxnnccpp oorr --nnooCChheessssPPrrooggrraamm ttrruuee//ffaallssee
-              If this option is true, XBoard acts as a passive chessboard;  it
-              does  not  start  a  chess engine at all. Turning on this option
-              also turns off clockMode. Default: false.
-
-       --mmooddee oorr --iinniittiiaallMMooddee mmooddeennaammee
-              If this option is given, XBoard selects the given modename  from
-              the  Mode menu after starting and (if applicable) processing the
-              loadGameFile or loadPositionFile option. Default: "" (no  selec-
-              tion).   Other  supported values are MachineWhite, MachineBlack,
-              TwoMachines, Analysis, AnalyzeFile, EditGame, EditPosition,  and
-              Training.
-
-       --vvaarriiaanntt vvaarrnnaammee
-              Activates  preliminary,  partial support for playing chess vari-
-              ants against a local engine or editing variant games.  This flag
-              is not needed in ICS mode.  Recognized variant names are:
-
-                  normal        Normal chess
-                  wildcastle    Shuffle chess, king can castle from d file
-                  nocastle      Shuffle chess, no castling allowed
-                  fischerandom  Fischer Random shuffle chess
-                  bughouse      Bughouse, ICC/FICS rules
-                  crazyhouse    Crazyhouse, ICC/FICS rules
-                  losers        Lose all pieces or get mated (ICC wild 17)
-                  suicide       Lose all pieces including king (FICS)
-                  giveaway      Try to have no legal moves (ICC wild 26)
-                  twokings      Weird ICC wild 9
-                  kriegspiel    Opponent's pieces are invisible
-                  atomic        Capturing piece explodes (ICC wild 27)
-                  3check        Win by giving check 3 times (ICC wild 25)
-                  shatranj      An ancient precursor of chess (ICC wild 28)
-                  unknown       Catchall for other unknown variants
-
-              In the shuffle variants, xboard does not shuffle the pieces, but
-              you can do it by hand using Edit Position.   Some  variants  are
-              supported  only  in  ICS mode, including fischerandom, bughouse,
-              and kriegspiel.  The winning/drawing  conditions  in  crazyhouse
-              (offboard  interposition  on  mate),  losers, suicide, giveaway,
-              atomic, and 3check are not  fully  understood.   In  crazyhouse,
-              xboard  does not yet keep track of offboard pieces.  Shatranj is
-              unsupported, but it may be usable if you turn off Test Legality.
-
-       --ddeebbuugg//--xxddeebbuugg oorr --ddeebbuuggMMooddee ttrruuee//ffaallssee
-              Turns on debugging printout.
-
-       --rrsshh oorr --rreemmootteeSShheellll sshheellll--nnaammee
-              Name  of  the command used to run programs remotely. The default
-              is `rsh' or `remsh', determined when XBoard  is  configured  and
-              compiled.
-
-       --rruusseerr oorr --rreemmootteeUUsseerr uusseerr--nnaammee
-              User  name  on  the remote system when running programs with the
-              `remoteShell'. The default is your local user name.
-
-CCHHEESSSS SSEERRVVEERRSS
-       An "Internet Chess Server", or "ICS", is a place on the Internet  where
-       people  can  get together to play chess, watch other people's games, or
-       just chat.  You can use either `telnet' or a client program like XBoard
-       to  connect  to the server.  There are thousands of registered users on
-       the different ICS hosts, and it is not unusual  to  meet  200  on  both
-       chessclub.com and freechess.org.
-
-       Most  people  can  just  type  `xboard  -ics' to start XBoard as an ICS
-       client.  Invoking XBoard in this way connects you to the Internet Chess
-       Club  (ICC), a commercial ICS.  You can log in there as a guest even if
-       you do not have a paid account.  To connect to  the  largest  Free  ICS
-       (FICS),  use  the command `xboard -ics -icshost freechess.org' instead,
-       or substitute a different host name to connect to  your  favorite  ICS.
-       For a full description of command-line options that control the connec-
-       tion to ICS and change the default  values  of  ICS  options,  see  _I_C_S
-       _o_p_t_i_o_n_s.
-
-       While  you  are  running  XBoard as an ICS client, you use the terminal
-       window that you started XBoard from as a place to type in commands  and
-       read information that is not available on the chessboard.
-
-       The first time you need to use the terminal is to enter your login name
-       and password, if you are a registered player. (You  don't  need  to  do
-       this  manually;  the  `icsLogon'  option  can  do  it for you.  See _I_C_S
-       _o_p_t_i_o_n_s.)  If you are not registered, enter `g' as your name,  and  the
-       server will pick a unique guest name for you.
-
-       Some useful ICS commands include
-
-       hheellpp <<ttooppiicc>>
-              to get help on the given <topic>. To get a list of possible top-
-              ics type "help" without topic.  Try the help command before  you
-              ask other people on the server for help.
-
-              For example `help register' tells you how to become a registered
-              ICS player.
-
-       wwhhoo <<ffllaaggss>>
-              to see a list of people who are logged on.  Administrators (peo-
-              ple  you  should  talk to if you have a problem) are marked with
-              the character `*', an asterisk. The <flags> allow you to display
-              only  selected  players:  For  example, `who of' shows a list of
-              players who are interested in playing but do not have  an  oppo-
-              nent.
-
-       ggaammeess  to see what games are being played
-
-       mmaattcchh <<ppllaayyeerr>> [[<<mmiinnss>>]] [[<<iinncc>>]]
-              to challenge another player to a game. Both opponents get <mins>
-              minutes for the game, and <inc> seconds will be added after each
-              move.   If another player challenges you, the server asks if you
-              want to accept the challenge; use the `accept' or `decline' com-
-              mands to answer.
-
-       aacccceepptt
-       ddeecclliinnee
-              to  accept  or decline another player's offer.  The offer may be
-              to start a new game, or to  agree  to  a  `draw',  `adjourn'  or
-              `abort' the current game. See _A_c_t_i_o_n _M_e_n_u.
-
-              If  you  have  more than one pending offer (for example, if more
-              than one player is challenging you, or if your  opponent  offers
-              both  a  draw and to adjourn the game), you have to supply addi-
-              tional information, by typing something like `accept  <player>',
-              `accept draw', or `draw'.
-
-       ddrraaww
-       aaddjjoouurrnn
-       aabboorrtt  asks  your  opponent  to  terminate  a game by mutual agreement.
-              Adjourned games can  be  continued  later.   Your  opponent  can
-              either  `decline'  your  offer  or accept it (by typing the same
-              command or typing `accept').  In some cases these commands  work
-              immediately,  without  asking your opponent to agree.  For exam-
-              ple, you can abort the game unilaterally if your opponent is out
-              of  time,  and you can claim a draw by repetition or the 50-move
-              rule if available simply by typing `draw'.
-
-       ffiinnggeerr <<ppllaayyeerr>>
-              to get information about the  given  <player>.  (Default:  your-
-              self.)
-
-       vvaarrss   to get a list of personal settings
-
-       sseett <<vvaarr>> <<vvaalluuee>>
-              to modify these settings
-
-       oobbsseerrvvee <<ppllaayyeerr>>
-              to observe an ongoing game of the given <player>.
-
-       eexxaammiinnee
-       oollddmmoovveess
-              to review a recently completed game
-
-       Some special XBoard features are activated when you are in examine mode
-       on ICS.  See the descriptions of the menu  commands  `Forward',  `Back-
-       ward',  `Pause',  `ICS  Client', and `Stop Examining' on the _S_t_e_p _M_e_n_u,
-       _M_o_d_e _M_e_n_u, and _O_p_t_i_o_n_s _M_e_n_u.
-
-FFIIRREEWWAALLLLSS
-       By default, XBoard communicates with an Internet Chess Server by  open-
-       ing a TCP socket directly from the machine it is running on to the ICS.
-       If there is a firewall between your machine and  the  ICS,  this  won't
-       work.  Here  are  some recipes for getting around common kinds of fire-
-       walls using special options to XBoard.  Important: See the paragraph in
-       the below about extra echoes, in _L_i_m_i_t_a_t_i_o_n_s.
-
-       Suppose  that you can't telnet directly to ICS, but you can telnet to a
-       firewall host, log in, and then telnet from there to  ICS.   Let's  say
-       the firewall is called `firewall.example.com'. Set command-line options
-       as follows:
-
-           xboard -ics -icshost firewall.example.com -icsport 23
-
-       Or in your `.Xdefaults' file:
-
-           XBoard*internetChessServerHost: firewall.example.com
-           XBoard*internetChessServerPort: 23
-
-       Then when you run XBoard in ICS mode, you will be prompted to log in to
-       the  firewall  host.  This works because port 23 is the standard telnet
-       login service. Do so, then telnet to ICS, using a command like  `telnet
-       chessclub.com 5000', or whatever command the firewall provides for tel-
-       netting to port 5000.
-
-       If your firewall lets you  telnet  (or  rlogin)  to  remote  hosts  but
-       doesn't  let you telnet to port 5000, you may be able to connect to the
-       chess server on port 23 instead, which is the port the  telnet  program
-       uses  by  default.   Some  chess servers support this (including chess-
-       club.com and freechess.org), while some do not.
-
-       If your chess server does not allow connections on  port  23  and  your
-       firewall  does not allow you to connect to other ports, you may be able
-       to connect by hopping through another host outside  the  firewall  that
-       you have an account on.  For instance, suppose you have a shell account
-       at `foo.edu'. Follow the recipe above, but instead  of  typing  `telnet
-       chessclub.com  5000' to the firewall, type `telnet foo.edu' (or `rlogin
-       foo.edu'), log in there, and then type `telnet chessclub.com 5000'.
-
-       Suppose that you can't telnet directly to ICS, but you can use  rsh  to
-       run  programs  on  a  firewall  host,  and that host can telnet to ICS.
-       Let's say the firewall is called  `rsh.example.com'.  Set  command-line
-       options as follows:
-
-           xboard -ics -gateway rsh.example.com -icshost chessclub.com
-
-       Or in your `.Xdefaults' file:
-
-           XBoard*gateway: rsh.example.com
-           XBoard*internetChessServerHost: chessclub.com
-
-       Then  when  you  run  XBoard in ICS mode, it will connect to the ICS by
-       using `rsh' to run the command  `telnet  chessclub.com  5000'  on  host
-       `rsh.example.com'.
-
-       Suppose  that  you  can telnet anywhere you want, but you have to run a
-       special program called `ptelnet' to do so.
-
-       First, we'll consider the easy case, in  which  `ptelnet  chessclub.com
-       5000'  gets  you  to  the  chess server.  In this case set command line
-       options as follows:
-
-           xboard -ics -telnet -telnetProgram ptelnet
-
-       Or in your `.Xdefaults' file:
-
-           XBoard*useTelnet: true
-           XBoard*telnetProgram: ptelnet
-
-       Then when you run XBoard in ICS mode, it will issue the command  `ptel-
-       net chessclub.com 5000' to connect to the ICS.
-
-       Next,  suppose that `ptelnet chessclub.com 5000' doesn't work; that is,
-       your `ptelnet' program doesn't let you connect to alternative ports. As
-       noted  above,  your  chess  server  may allow you to connect on port 23
-       instead.  In that case, just add the option `-icsport ""' to the  above
-       command,  or add `XBoard*internetChessServerPort:' to your `.Xdefaults'
-       file.  But if your chess server doesn't let you connect on port 23, you
-       will  have to find some other host outside the firewall and hop through
-       it. For instance, suppose you have a shell account  at  `foo.edu'.  Set
-       command line options as follows:
-
-           xboard -ics -telnet -telnetProgram ptelnet -icshost foo.edu -icsport ""
-
-       Or in your `.Xdefaults' file:
-
-           XBoard*useTelnet: true
-           XBoard*telnetProgram: ptelnet
-           XBoard*internetChessServerHost: foo.edu
-           XBoard*internetChessServerPort:
-
-       Then  when you run XBoard in ICS mode, it will issue the command `ptel-
-       net foo.edu' to connect to your account at  `foo.edu'.  Log  in  there,
-       then type `telnet chessclub.com 5000'.
-
-       ICC  timestamp  and  FICS  timeseal do not work through some firewalls.
-       You can use them only if your firewall gives  a  clean  TCP  connection
-       with  a  full  8-bit wide path.  If your firewall allows you to get out
-       only by running a special telnet program, you can't  use  timestamp  or
-       timeseal  across it.  But if you have access to a computer just outside
-       your firewall, and you have much lower netlag when talking to that com-
-       puter  than to the ICS, it might be worthwhile running timestamp there.
-       Follow the instructions above for hopping through a  host  outside  the
-       firewall  (foo.edu  in  the  example), but run timestamp or timeseal on
-       that host instead of telnet.
-
-       Suppose that you have a SOCKS firewall that will give you a clean 8-bit
-       wide  TCP  connection to the chess server, but only after you authenti-
-       cate yourself via the SOCKS protocol.  In that case, you could  make  a
-       socksified  version of XBoard and run that.  If you are using timestamp
-       or timeseal, you will to socksify it, not XBoard; this may be difficult
-       seeing that ICC and FICS do not provide source code for these programs.
-       Socksification is beyond the scope of this document, but see the  SOCKS
-       Web  site  at  http://www.socks.permeo.com/.  If you are missing SOCKS,
-       try http://www.funbureau.com/.
-
-EENNVVIIRROONNMMEENNTT VVAARRIIAABBLLEESS
-       Game and position files are found in a directory named by  the  `CHESS-
-       DIR'  environment  variable.  If  this variable is not set, the current
-       working directory is  used.  If  `CHESSDIR'  is  set,  XBoard  actually
-       changes  its  working directory to `$CHESSDIR', so any files written by
-       the chess engine will be placed there too.
-
-LLIIMMIITTAATTIIOONNSS AANNDD KKNNOOWWNN BBUUGGSS
-       There is no way for two people running copies of XBoard  to  play  each
-       other without going through an Internet Chess Server.
-
-       Under  some circumstances, your ICS password may be echoed when you log
-       on.
-
-       If you are connecting to the ICS  by  running  telnet  on  an  Internet
-       provider  or  firewall  host,  you  may find that each line you type is
-       echoed back an extra time after  you  hit  <Enter>.  If  your  Internet
-       provider is a Unix system, you can probably turn its echo off by typing
-       `stty -echo' after you log in, and/or typing <^E><Enter>  (Ctrl+E  fol-
-       lowed  by  the  Enter  key) to the telnet program after you have logged
-       into ICS.  It is a good idea to do this if you can, because  the  extra
-       echo can occasionally confuse XBoard's parsing routines.
-
-       The game parser recognizes only algebraic notation.
-
-       The internal move legality tester does not look at the game history, so
-       in some cases it misses illegal castling or en  passant  captures.   It
-       permits  castling  with the king on the d file because this is possible
-       in some "wild 1" games on ICS.  It does not check piece drops  in  bug-
-       house and crazyhouse to see if you actually hold the piece you are try-
-       ing to drop.  However, if you attempt an  illegal  move  when  using  a
-       chess engine or chess server, XBoard will accept the error message that
-       comes back, undo the move, and let you try another.
-
-       Fischer Random castling is not understood.  You can probably play  Fis-
-       cher  Random  successfully on ICS by typing castling moves into the ICS
-       Interaction window, but they will not be animated correctly, and  saved
-       games will not be loaded correctly if castling occurs.
-
-       FEN  positions  saved by XBoard never include correct information about
-       whether castling is legal or how many half-moves have been  made  since
-       the  last  irreversible  move, and sometimes may not correctly indicate
-       when en passant capture is available.
-
-       The mate detector does not understand  that  non-contact  mate  is  not
-       really  mate  in bughouse and crazyhouse.  The only problem this causes
-       while playing is minor: a `#' (mate indicator) character will  show  up
-       after  a  non-contact  mating  move  in  the move list; XBoard will not
-       assume the game is over at that point.  However, if you are  editing  a
-       game, Edit Game mode will be terminated by a non-contact mate.
-
-       The  menus  may  not  work if your keyboard is in Caps Lock or Num Lock
-       mode.  This seems to be a problem with the Athena menu widget,  not  an
-       XBoard bug.
-
-       Also  see  the  ToDo file included with the distribution for many other
-       possible bugs, limitations, and ideas for improvement  that  have  been
-       suggested.
-
-RREEPPOORRTTIINNGG PPRROOBBLLEEMMSS
-       Report bugs and problems with XBoard to `<bug-xboard at gnu.org>'.
-
-       Please  use the `script' program to start a typescript, run XBoard with
-       the `-debug' option, and include the typescript output in your message.
-       Also tell us what kind of machine and what operating system version you
-       are using.  The command `uname -a' will often tell you this.  Here is a
-       sample of approximately what you should type:
-
-           script
-           uname -a
-           ./configure
-           make
-           ./xboard -debug
-           exit
-           mail bug-xboard at gnu.org
-           Subject: Your short description of the problem
-           Your detailed description of the problem
-           ~r typescript
-           .
-
-       If you improve XBoard, please send a message about your changes, and we
-       will get in touch with you about merging them in to the  main  line  of
-       development.     Also    see    our    Web    site   at   http://savan-
-       nah.gnu.org/projects/xboard/.
-
-AAUUTTHHOORRSS AANNDD CCOONNTTRRIIBBUUTTOORRSS
-       Tim Mann has been responsible for XBoard versions 1.3 and  beyond,  and
-       for  WinBoard, a port of XBoard to Microsoft Win32 (Windows NT and Win-
-       dows 95).
-
-       Mark Williams contributed the initial (WinBoard-only) implementation of
-       many  new  features added to both XBoard and WinBoard in version 4.1.0,
-       including copy/paste, premove, icsAlarm, autoFlipView,  training  mode,
-       auto  raise,  and blindfold.  Ben Nye contributed X copy/paste code for
-       XBoard.
-
-       Hugh Fisher added animated piece movement to XBoard,  and  Henrik  Gram
-       (henrikg at funcom.com)  added  it  to  WinBoard.   Frank  McIngvale added
-       click/click moving, the Analysis modes, piece flashing,  ZIICS  import,
-       and  ICS text colorization to XBoard.  Jochen Wiedmann ported XBoard to
-       the Amiga, creating AmyBoard, and converted the documentation  to  tex-
-       info.   Elmar  Bartel  contributed  the new piece bitmaps introduced in
-       version 3.2.  John Chanak contributed the initial implementation of ICS
-       mode.  The color scheme and the old 80x80 piece bitmaps were taken from
-       Wayne Christopher's `XChess' program.
-
-       Chris Sears and Dan Sears wrote the original XBoard.  They were respon-
-       sible for versions 1.0 through 1.2.
-
-       Evan  Welsh wrote `CMail'.  Patrick Surry helped in designing, testing,
-       and documenting CMail.
-
-CCMMAAIILL
-       The `cmail' program can help you play chess by email with opponents  of
-       your choice using XBoard as an interface.
-
-       You will usually run `cmail' without giving any options.
-
-   CCMMaaiill ooppttiioonnss
-       --hh     Displays `cmail' usage information.
-
-       --cc     Shows  the  conditions  of  the GNU General Public License.  See
-              _C_o_p_y_i_n_g.
-
-       --ww     Shows the warranty notice of the  GNU  General  Public  License.
-              See _C_o_p_y_i_n_g.
-
-       --vv
-       --xxvv    Provides  or  inhibits  verbose  output from `cmail' and XBoard,
-              useful for debugging. The `-xv' form  also  inhibits  the  cmail
-              introduction message.
-
-       --mmaaiill
-       --xxmmaaiill Invokes or inhibits the sending of a mail message containing the
-              move.
-
-       --xxbbooaarrdd
-       --xxxxbbooaarrdd
-              Invokes or inhibits the running of XBoard on the game file.
-
-       --rreeuussee
-       --xxrreeuussee
-              Invokes or inhibits the reuse of an existing XBoard  to  display
-              the current game.
-
-       --rreemmaaiill
-              Resends  the last mail message for that game. This inhibits run-
-              ning XBoard.
-
-       --ggaammee <<nnaammee>>
-              The name of the game to be processed.
-
-       --wwggaammeess <<nnuummbbeerr>>
-       --bbggaammeess <<nnuummbbeerr>>
-       --ggaammeess <<nnuummbbeerr>>
-              Number of games to start as White, as Black or in total. Default
-              is  1 as white and none as black. If only one color is specified
-              then none of the other color is assumed. If no color  is  speci-
-              fied  then  equal  numbers of White and Black games are started,
-              with the extra game being as White if an  odd  number  of  total
-              games is specified.
-
-       --mmee <<sshhoorrtt nnaammee>>
-       --oopppp <<sshhoorrtt nnaammee>>
-              A one-word alias for yourself or your opponent.
-
-       --wwnnaammee <<ffuullll nnaammee>>
-       --bbnnaammee <<ffuullll nnaammee>>
-       --nnaammee <<ffuullll nnaammee>>
-       --ooppppnnaammee <<ffuullll nnaammee>>
-              The full name of White, Black, yourself or your opponent.
-
-       --wwnnaa <<nneett aaddddrreessss>>
-       --bbnnaa <<nneett aaddddrreessss>>
-       --nnaa <<nneett aaddddrreessss>>
-       --ooppppnnaa <<nneett aaddddrreessss>>
-              The email address of White, Black, yourself or your opponent.
-
-       --ddiirr <<ddiirreeccttoorryy>>
-              The directory in which `cmail' keeps its files. This defaults to
-              the environment variable `$CMAIL_DIR' or failing that,  `$CHESS-
-              DIR',  `$HOME/Chess' or `~/Chess'. It will be created if it does
-              not exist.
-
-       --aarrccddiirr <<ddiirreeccttoorryy>>
-              The  directory  in  which  `cmail'  archives  completed   games.
-              Defaults  to the environment variable `$CMAIL_ARCDIR' or, in its
-              absence, the same directory as cmail  keeps  its  working  files
-              (above).
-
-       --mmaaiillpprroogg <<mmaaiill pprrooggrraamm>>
-              The  program used by cmail to send email messages. This defaults
-              to the environment variable `$CMAIL_MAILPROG'  or  failing  that
-              `/usr/ucb/Mail', `/usr/ucb/mail' or `Mail'. You will need to set
-              this variable if none of the above paths fit your system.
-
-       --ggaammeessFFiillee <<ffiillee>>
-              A file containing a list of games  with  email  addresses.  This
-              defaults  to  the environment variable `$CMAIL_GAMES' or failing
-              that `.cmailgames'.
-
-       --aalliiaasseessFFiillee <<ffiillee>>
-              A file containing one  or  more  aliases  for  a  set  of  email
-              addresses.   This   defaults   to   the   environment   variable
-              `$CMAIL_ALIASES' or failing that `.cmailaliases'.
-
-       --llooggFFiillee <<ffiillee>>
-              A file in which to dump  verbose  debugging  messages  that  are
-              invoked with the `-v' option.
-
-       --eevveenntt <<eevveenntt>>
-              The PGN Event tag (default `Email correspondence game').
-
-       --ssiittee <<ssiittee>>
-              The PGN Site tag (default `NET').
-
-       --rroouunndd <<rroouunndd>>
-              The PGN Round tag (default `-', not applicable).
-
-       --mmooddee <<mmooddee>>
-              The PGN Mode tag (default `EM', Electronic Mail).
-
-       OOtthheerr ooppttiioonnss
-              Any  option flags not listed above are passed through to XBoard.
-              Invoking XBoard through CMail changes the default values of  two
-              XBoard  options:  The  default  value  for  `-noChessProgram' is
-              changed to true; that is, by default no chess engine is started.
-              The  default value for `-timeDelay' is changed to 0; that is, by
-              default XBoard immediately goes to the end of the game as played
-              so  far, rather than stepping through the moves one by one.  You
-              can still set these options to whatever  values  you  prefer  by
-              supplying them on CMail's command line.  See _O_p_t_i_o_n_s.
-
-   SSttaarrttiinngg aa CCMMaaiill GGaammee
-       Type  `cmail'  from  a shell to start a game as white. After an opening
-       message, you will be prompted for a game name, which is optional --  if
-       you  simply  press  <Enter>,  the game name will take the form `you-VS-
-       opponent'. You will next be prompted for the short name of  your  oppo-
-       nent.  If  you  haven't  played  this  person  before, you will also be
-       prompted for his/her email address. `cmail' will then invoke XBoard  in
-       the  background.  Make  your first move and select `Mail Move' from the
-       `File' menu. See _F_i_l_e _M_e_n_u. If all is well, `cmail' will mail a copy of
-       the move to your opponent. If you select `Exit' without having selected
-       `Mail Move' then no move will be made.
-
-   AAnnsswweerriinngg aa MMoovvee
-       When you receive a message from an opponent containing a move in one of
-       your  games,  simply  pipe the message through `cmail'. In some mailers
-       this is as simple as typing `| cmail' when viewing the  message,  while
-       in  others  you  may have to save the message to a file and do `cmail <
-       file' at the command line. In either case `cmail' will display the game
-       using  XBoard.  If you didn't exit XBoard when you made your first move
-       then `cmail' will do its best to use the  existing  XBoard  instead  of
-       starting  a  new  one.  As  before, simply make a move and select `Mail
-       Move' from the `File' menu. See _F_i_l_e _M_e_n_u. `cmail' will try to use  the
-       XBoard  that  was  most recently used to display the current game. This
-       means that many games can be in progress simultaneously, each with  its
-       own active XBoard.
-
-       If  you  want  to look at the history or explore a variation, go ahead,
-       but you must return to the current position before  XBoard  will  allow
-       you  to  mail  a  move.  If you edit the game's history you must select
-       `Reload Same Game' from the `File' menu to get  back  to  the  original
-       position,  then  make  the  move  you  want and select `Mail Move'.  As
-       before, if you decide you aren't ready to make a move just yet you  can
-       either  select  `Exit' without sending a move or just leave XBoard run-
-       ning until you are ready.
-
-   MMuullttii--GGaammee MMeessssaaggeess
-       It is possible to have a `cmail' message  carry  more  than  one  game.
-       This  feature was implemented to handle IECG (International Email Chess
-       Group) matches, where a match consists of one game as white and one  as
-       black,  with  moves  transmitted simultaneously. In case there are more
-       general  uses,  `cmail'  itself  places  no  limit  on  the  number  of
-       black/white games contained in a message; however, XBoard does.
-
-   CCoommpplleettiinngg aa GGaammee
-       Because XBoard can detect checkmate and stalemate, `cmail' handles game
-       termination sensibly. As well as resignation, the `Action' menu  allows
-       draws to be offered and accepted for `cmail' games.
-
-       For  multi-game  messages, only unfinished and just-finished games will
-       be included in email messages. When all the games  are  finished,  they
-       are  archived  in  the  user's  archive directory, and similarly in the
-       opponent's when he or she pipes the final message through `cmail'.  The
-       archive file name includes the date the game was started.
-
-   KKnnoowwnn CCMMaaiill PPrroobblleemmss
-       It's possible that a strange conjunction of conditions may occasionally
-       mean that `cmail' has trouble reactivating an existing XBoard. If  this
-       should  happen, simply trying it again should work.  If not, remove the
-       file that stores the XBoard's PID (`game.pid')  or  use  the  `-xreuse'
-       option to force `cmail' to start a new XBoard.
-
-       Versions of `cmail' after 2.16 no longer understand the old file format
-       that XBoard used to use and so cannot be used to correspond with anyone
-       using an older version.
-
-       Versions  of `cmail' older than 2.11 do not handle multi-game messages,
-       so multi-game correspondence is not possible with  opponents  using  an
-       older version.
-
-OOTTHHEERR PPRROOGGRRAAMMSS YYOOUU CCAANN UUSSEE WWIITTHH XXBBOOAARRDD
-       Here are some other programs you can use with XBoard
-
-   GGNNUU CChheessss
-       The GNU Chess engine is available from:
-
-       ftp://ftp.gnu.org/gnu/gnuchess/
-
-       You  can  use  XBoard to play a game against GNU Chess, or to interface
-       GNU Chess to an ICS.
-
-   CCrraaffttyy
-       Crafty is a chess engine written by Bob Hyatt.  You can use  XBoard  to
-       play  a game against Crafty, hook Crafty up to an ICS, or use Crafty to
-       interactively analyze games and positions for you.
-
-       Crafty is a strong, rapidly evolving chess program. This rapid pace  of
-       development  is good, because it means Crafty is always getting better.
-       This can sometimes cause problems  with  backwards  compatibility,  but
-       usually  the  latest  version  of Crafty will work well with the latest
-       version of XBoard.  Crafty can be obtained from its author's FTP  site:
-       ftp://ftp.cis.uab.edu/hyatt/.
-
-       To  use  Crafty  with XBoard, give the -fcp and -fd options as follows,
-       where <crafty's directory> is the  directory  in  which  you  installed
-       Crafty and placed its book and other support files.
-
-   zziicc22xxppmm
-       The  ``zic2xpm'' program is used to import chess sets from the ZIICS(*)
-       program into XBoard. ``zic2xpm'' is part of  the  XBoard  distribution.
-       ZIICS is available from:
-
-       ftp://ftp.freechess.org/pub/chess/DOS/ziics131.exe
-
-       To import ZIICS pieces, do this:
-
-       11.. UUnnzziipp zziiiiccss113311..eexxee iinnttoo aa ddiirreeccttoorryy::
-
-                  unzip -L ziics131.exe -d ~/ziics
-
-       22.. UUssee zziicc22xxppmm ttoo ccoonnvveerrtt aa sseett ooff ppiieecceess ttoo XXBBooaarrdd ffoorrmmaatt..
-
-              For  example,  let's  say  you want to use the FRITZ4 set. These
-              files are named ``fritz4.*'' in the ZIICS distribution.
-
-                  mkdir ~/fritz4
-                  cd ~/fritz4
-                  zic2xpm ~/ziics/fritz4.*
-
-       33.. GGiivvee XXBBooaarrdd tthhee ````--ppiixxmmaapp'''' ooppttiioonn wwhheenn ssttaarrttiinngg uupp,, ee..gg..::
-
-                  xboard -pixmap ~/fritz4
-
-              Alternatively, you can add this line to your .Xdefaults file:
-
-                  xboard*pixmapDirectory: ~/fritz4
-
-       (*) ZIICS is a  separate  copyrighted  work  of  Andy  McFarland.   The
-       ``ZIICS  pieces''  are  copyrighted works of their respective creators.
-       Files produced by ``zic2xpm'' are for PERSONAL USE ONLY and may NOT  be
-       redistributed  without explicit permission from the original creator(s)
-       of the pieces.
-
-CCOOPPYYRRIIGGHHTT
-       Copyright  (C)  1991  Digital  Equipment  Corporation,  Maynard,   Mas-
-       sachusetts.
-
-       All Rights Reserved.
-
-       Permission  to  use, copy, modify, and distribute this software and its
-       documentation for any purpose and without fee is hereby  granted,  pro-
-       vided  that  the  above  copyright notice appear in all copies and that
-       both that copyright notice and this permission notice  appear  in  sup-
-       porting  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, includ-
-       ing all implied warranties of merchantability and fitness.  In no event
-       shall Digital be liable for any special, indirect or consequential dam-
-       ages 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.
-
-       Enhancements copyright (C) 1992-2003 Free Software Foundation, Inc.
-
-       Published by the Free Software Foundation
-       59 Temple Place - Suite 330
-       Boston, MA 02111-1307 USA
-
-       Permission  is  granted  to make and distribute verbatim copies of this
-       manual provided the copyright notice and  this  permission  notice  are
-       preserved on all copies.
-
-       Permission  is granted to copy and distribute modified versions of this
-       manual under the conditions for verbatim copying,  provided  also  that
-       the  section  entitled  ``GNU  General  Public  License,''  is included
-       exactly as in the original, and  provided  that  the  entire  resulting
-       derived  work  is  distributed  under  the terms of a permission notice
-       identical to this one.
-
-       Permission is granted to copy and distribute translations of this  man-
-       ual into another language, under the above conditions for modified ver-
-       sions, except that the section entitled ``GNU General Public License,''
-       and this permission notice, may be included in translations approved by
-       the Free Software Foundation instead of in the original English.
-
-GGNNUU GGEENNEERRAALL PPUUBBLLIICC LLIICCEENNSSEE
-       Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-       59 Temple Place, Suite 330, Boston, MA 02111 USA
-
-       Everyone is permitted to copy and distribute verbatim copies
-       of this license document, but changing it is not allowed.
-
-         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 Pub-
-       lic 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 any-
-       one  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 soft-
-       ware.   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 modi-
-       fication follow.
-
-       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  copy-
-       right  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 limi-
-       tation 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  run-
-       ning  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.
-
-       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 Pro-
-       gram.
-
-       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.
-
-       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:
-
-       You  must  cause  the modified files to carry prominent notices stating
-       that you changed the files and the date of any change.
-
-       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.
-
-       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 redis-
-       tribute 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 identifi-
-       able 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 collec-
-       tive 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.
-
-       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  Sec-
-       tions 1 and 2 above provided that you also do one of the following:
-
-       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,
-
-       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  Sec-
-       tions  1  and  2 above on a medium customarily used for software inter-
-       change; or,
-
-       Accompany it with the information you received as to the offer to  dis-
-       tribute  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 Sub-
-       section 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.
-
-       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,  par-
-       ties  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.
-
-       You  are not required to accept this License, since you have not signed
-       it.  However, nothing else grants you  permission  to  modify  or  dis-
-       tribute the Program or its derivative works.  These actions are prohib-
-       ited 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.
-
-       Each time you redistribute the Program (or any work based on  the  Pro-
-       gram), 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.
-
-       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  dis-
-       tribute  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 circum-
-       stances.
-
-       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 imple-
-       mented 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.
-
-       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 coun-
-       tries, 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.
-
-       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 ver-
-       sion number of this License, you may choose any version ever  published
-       by the Free Software Foundation.
-
-       If  you  wish  to incorporate parts of the Program into other free pro-
-       grams 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.
-
-       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.
-
-       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  DAM-
-       AGES,  INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAM-
-       AGES 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.
-
-         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 AN 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., 59 Temple Place, Suite 330, Boston, MA 02111 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 appro-
-       priate 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  pro-
-       gram.
-
-       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 applica-
-       tions with the library.  If this is what you want to do,  use  the  GNU
-       Library General Public License instead of this License.
-
-GNU                                 $Date:                           xboard(6)
diff --git a/xedittags.c b/xedittags.c
index d7d0751..6c12a37 100644
--- a/xedittags.c
+++ b/xedittags.c
@@ -1,29 +1,26 @@
 /*
  * xedittags.c -- Tags edit window, part of X front end for XBoard
- * $Id: xedittags.c,v 2.1 2003/10/27 19:21:00 mann Exp $
+ * $Id$
  *
- * Copyright 1995 Free Software Foundation, Inc.
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
  *
- * See the file ChangeLog for a revision history.
- */
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include "config.h"
 
@@ -85,6 +82,15 @@ extern char *getenv();
 #include "backend.h"
 #include "xboard.h"
 #include "xedittags.h"
+#include "gettext.h"
+
+#ifdef ENABLE_NLS
+# define  _(s) gettext (s)
+# define N_(s) gettext_noop (s)
+#else
+# define  _(s) (s)
+# define N_(s)  s
+#endif
 
 extern Widget formWidget, shellWidget, boardWidget, menuBarWidget;
 extern Display *xDisplay;
@@ -113,9 +119,9 @@ void TagsCallback(w, client_data, call_data)
     XtSetArg(args[j], XtNlabel, &name);  j++;
     XtGetValues(w, args, j);
 
-    if (strcmp(name, "close") == 0) {
+    if (strcmp(name, _("close")) == 0) {
 	TagsPopDown();
-    } else if (strcmp(name, "edit") == 0) {
+    } else if (strcmp(name, _("edit")) == 0) {
 	TagsPopDown();
 	EditTagsEvent();
     }
@@ -135,16 +141,16 @@ void EditTagsCallback(w, client_data, call_data)
     XtSetArg(args[j], XtNlabel, &name);  j++;
     XtGetValues(w, args, j);
 
-    if (strcmp(name, "ok") == 0) {
+    if (strcmp(name, _("ok")) == 0) {
 	textw = XtNameToWidget(editTagsShell, "*form.text");
 	j = 0;
 	XtSetArg(args[j], XtNstring, &val); j++;
 	XtGetValues(textw, args, j);
 	ReplaceTags(val, &gameInfo);
 	TagsPopDown();
-    } else if (strcmp(name, "cancel") == 0) {
+    } else if (strcmp(name, _("cancel")) == 0) {
 	TagsPopDown();
-    } else if (strcmp(name, "clear") == 0) {
+    } else if (strcmp(name, _("clear")) == 0) {
 	textw = XtNameToWidget(editTagsShell, "*form.text");
 	XtCallActionProc(textw, "select-all", NULL, NULL, 0);
 	XtCallActionProc(textw, "kill-selection", NULL, NULL, 0);
@@ -233,7 +239,7 @@ Widget TagsCreate(name, text, msg, mutable, callback)
 	XtSetArg(args[j], XtNleft, XtChainLeft); j++;
 	XtSetArg(args[j], XtNright, XtChainLeft); j++;
 	b_ok = b =
-	  XtCreateManagedWidget("ok", commandWidgetClass, form, args, j);
+	  XtCreateManagedWidget(_("ok"), commandWidgetClass, form, args, j);
 	XtAddCallback(b_ok, XtNcallback, callback, (XtPointer) 0);
 
 	j = 0;
@@ -244,7 +250,7 @@ Widget TagsCreate(name, text, msg, mutable, callback)
 	XtSetArg(args[j], XtNleft, XtChainLeft); j++;
 	XtSetArg(args[j], XtNright, XtChainLeft); j++;
 	b_cancel = b =
-	  XtCreateManagedWidget("cancel", commandWidgetClass, form, args, j);
+	  XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j);
 	XtAddCallback(b_cancel, XtNcallback, callback, (XtPointer) 0);
 
 #if 0
@@ -267,7 +273,7 @@ Widget TagsCreate(name, text, msg, mutable, callback)
 	XtSetArg(args[j], XtNleft, XtChainLeft); j++;
 	XtSetArg(args[j], XtNright, XtChainLeft); j++;
 	b_close = b =
-	  XtCreateManagedWidget("close", commandWidgetClass, form, args, j);
+	  XtCreateManagedWidget(_("close"), commandWidgetClass, form, args, j);
 	XtAddCallback(b_close, XtNcallback, callback, (XtPointer) 0);
 
 	j = 0;
@@ -278,7 +284,7 @@ Widget TagsCreate(name, text, msg, mutable, callback)
 	XtSetArg(args[j], XtNleft, XtChainLeft); j++;
 	XtSetArg(args[j], XtNright, XtChainLeft); j++;
 	b_edit = b =
-	  XtCreateManagedWidget("edit", commandWidgetClass, form, args, j);
+	  XtCreateManagedWidget(_("edit"), commandWidgetClass, form, args, j);
 	XtAddCallback(b_edit, XtNcallback, callback, (XtPointer) 0);
     }
 
@@ -331,7 +337,7 @@ void TagsPopUp(tags, msg)
     if (editTagsUp) TagsPopDown();
     if (tagsShell == NULL) {
 	tagsShell =
-	  TagsCreate("Tags", tags, msg, False, TagsCallback);
+	  TagsCreate(_("Tags"), tags, msg, False, TagsCallback);
     } else {
 	textw = XtNameToWidget(tagsShell, "*form.text");
 	j = 0;
@@ -339,7 +345,7 @@ void TagsPopUp(tags, msg)
 	XtSetValues(textw, args, j);
 	j = 0;
 	XtSetArg(args[j], XtNiconName, (XtArgVal) "Tags");  j++;
-	XtSetArg(args[j], XtNtitle, (XtArgVal) "Tags");  j++;
+	XtSetArg(args[j], XtNtitle, (XtArgVal) _("Tags"));  j++;
 	XtSetValues(tagsShell, args, j);
 	msgw = XtNameToWidget(tagsShell, "*form.msg");
 	if (msgw) {
@@ -370,7 +376,7 @@ void EditTagsPopUp(tags)
     if (tagsUp) TagsPopDown();
     if (editTagsShell == NULL) {
 	editTagsShell =
-	  TagsCreate("Edit tags", tags, NULL, True, EditTagsCallback); 
+	  TagsCreate(_("Edit tags"), tags, NULL, True, EditTagsCallback); 
     } else {
 	textw = XtNameToWidget(editTagsShell, "*form.text");
 	j = 0;
@@ -378,7 +384,7 @@ void EditTagsPopUp(tags)
 	XtSetValues(textw, args, j);
 	j = 0;
 	XtSetArg(args[j], XtNiconName, (XtArgVal) "Edit Tags");  j++;
-	XtSetArg(args[j], XtNtitle, (XtArgVal) "Edit Tags");  j++;
+	XtSetArg(args[j], XtNtitle, (XtArgVal) _("Edit Tags"));  j++;
 	XtSetValues(editTagsShell, args, j);
     }
 
diff --git a/xedittags.h b/xedittags.h
index a1b6f2c..d7762b7 100644
--- a/xedittags.h
+++ b/xedittags.h
@@ -2,28 +2,25 @@
  * xedittags.h
  * $Id: xedittags.h,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
  *
- * See the file ChangeLog for a revision history.
- */
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #ifndef _XEDITTAGS_H
 #define _XEDITTAGS_H 1
diff --git a/xengineoutput.c b/xengineoutput.c
new file mode 100644
index 0000000..0ff63c6
--- /dev/null
+++ b/xengineoutput.c
@@ -0,0 +1,966 @@
+/*
+ * Engine output (PV)
+ *
+ * Author: Alessandro Scotti (Dec 2005)
+ *
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ *
+ * ------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
+#include <sys/types.h>
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else /* not STDC_HEADERS */
+extern char *getenv();
+# if HAVE_STRING_H
+#  include <string.h>
+# else /* not HAVE_STRING_H */
+#  include <strings.h>
+# endif /* not HAVE_STRING_H */
+#endif /* not STDC_HEADERS */
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Shell.h>
+#include <X11/Xaw/Dialog.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/List.h>
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeBSB.h>
+#include <X11/Xaw/SmeLine.h>
+#include <X11/Xaw/Box.h>
+#include <X11/Xaw/Paned.h>
+#include <X11/Xaw/MenuButton.h>
+#include <X11/cursorfont.h>
+#include <X11/Xaw/Text.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/Viewport.h>
+
+#include "common.h"
+#include "frontend.h"
+#include "backend.h"
+#include "xboard.h"
+// Add xengineo.h later
+#include "gettext.h"
+
+#ifdef ENABLE_NLS
+# define  _(s) gettext (s)
+# define N_(s) gettext_noop (s)
+#else
+# define  _(s) (s)
+# define N_(s)  s
+#endif
+
+#include <X11/xpm.h>
+
+// [HGM] pixmaps of some ICONS used in the engine-outut window
+#include "pixmaps/WHITE_14.xpm"
+#include "pixmaps/BLACK_14.xpm"
+#include "pixmaps/CLEAR_14.xpm"
+#include "pixmaps/UNKNOWN_14.xpm"
+#include "pixmaps/THINKING_14.xpm"
+#include "pixmaps/PONDER_14.xpm"
+#include "pixmaps/ANALYZING_14.xpm"
+
+#ifdef SNAP
+#include "wsnap.h"
+#endif
+
+#define _LL_ 100
+
+// imports from xboard.c
+extern Widget formWidget, shellWidget, boardWidget, menuBarWidget;
+extern Display *xDisplay;
+extern Window xBoardWindow;
+extern int squareSize;
+extern Pixmap xMarkPixmap, wIconPixmap, bIconPixmap;
+extern char *layoutName;
+
+// temporary kludge to avoid compile errors untill all Windows code has been replaced
+#define HICON int *
+#define HWND  int *
+
+// [HGM] define numbers to indicate icons, for referring to them in platform-independent way
+#define nColorBlack   1
+#define nColorWhite   2
+#define nColorUnknown 3
+#define nClear        4
+#define nPondering    5
+#define nThinking     6
+#define nAnalyzing    7
+
+Pixmap icons[8]; // [HGM] this front-end array translates back-end icon indicator to handle
+
+// [HGM] same for output fields (note that there are two of each type, one per color)
+#define nColorIcon 1
+#define nStateIcon 2
+#define nLabel     3
+#define nStateData 4
+#define nLabelNPS  5
+#define nMemo      6
+
+Widget outputField[2][7]; // [HGM] front-end array to translate output field to window handle
+
+void EngineOutputPopDown();
+void engineOutputPopUp(char *title, char *text);
+int  EngineOutputIsUp();
+static void SetEngineColorIcon( int which );
+
+#define SHOW_PONDERING
+
+/* Imports from backend.c */
+char * SavePart(char *str);
+extern int opponentKibitzes;
+
+/* Imports from winboard.c */
+//extern HWND engineOutputDialog;
+extern Arg layoutArgs[2], formArgs[2], messageArgs[4];
+
+//extern WindowPlacement wpEngineOutput;
+
+Position engineOutputX = -1, engineOutputY = -1;
+Dimension engineOutputW, engineOutputH;
+Widget engineOutputShell;
+int engineOutputDialogUp;
+
+/* Module variables */
+#define H_MARGIN            2
+#define V_MARGIN            2
+#define LABEL_V_DISTANCE    1   /* Distance between label and memo */
+#define SPLITTER_SIZE       4   /* Distance between first memo and second label */
+
+#define ICON_SIZE           14
+
+#define STATE_UNKNOWN   -1
+#define STATE_THINKING   0
+#define STATE_IDLE       1
+#define STATE_PONDERING  2
+#define STATE_ANALYZING  3
+
+static int  windowMode = 1;
+
+static int  needInit = TRUE;
+
+static int  lastDepth[2] = { -1, -1 };
+static int  lastForwardMostMove[2] = { -1, -1 };
+static int  engineState[2] = { -1, -1 };
+
+typedef struct {
+    char * name;
+    int which;
+    int depth;
+    u64 nodes;
+    int score;
+    int time;
+    char * pv;
+    char * hint;
+    int an_move_index;
+    int an_move_count;
+} EngineOutputData;
+
+static int VerifyDisplayMode();
+static void UpdateControls( EngineOutputData * ed );
+static SetEngineState( int which, int state, char * state_data );
+
+void ReadIcon(char *pixData[], int iconNr)
+{
+    int r;
+
+	if ((r=XpmCreatePixmapFromData(xDisplay, XtWindow(outputField[0][nColorIcon]),
+				       pixData,
+				       &(icons[iconNr]),
+				       NULL, NULL /*&attr*/)) != 0) {
+	  fprintf(stderr, _("Error %d loading icon image\n"), r);
+	  exit(1); 
+	}	
+}
+
+static void InitializeEngineOutput()
+{ int i;
+
+        ReadIcon(WHITE_14,   nColorWhite);
+        ReadIcon(BLACK_14,   nColorBlack);
+        ReadIcon(UNKNOWN_14, nColorUnknown);
+
+        ReadIcon(CLEAR_14,   nClear);
+        ReadIcon(PONDER_14,  nPondering);
+        ReadIcon(THINK_14,   nThinking);
+        ReadIcon(ANALYZE_14, nAnalyzing);
+}
+
+void DoSetWindowText(int which, int field, char *s_label)
+{ 
+	Arg arg;
+
+	XtSetArg(arg, XtNlabel, (XtArgVal) s_label);
+	XtSetValues(outputField[which][field], &arg, 1);
+}
+
+static void InsertIntoMemo( int which, char * text )
+{
+	Arg arg; XawTextBlock t; Widget edit;
+
+	t.ptr = text; t.firstPos = 0; t.length = strlen(text); t.format = XawFmt8Bit;
+	edit = XtNameToWidget(engineOutputShell, which ? "*form2.text" : "*form.text");
+	XawTextReplace(edit, 0, 0, &t);
+//	XtSetArg(arg, XtNstring, (XtArgVal) text);
+//	XtSetValues(outputField[which][nMemo], &arg, 1);
+}
+
+static void SetIcon( int which, int field, int nIcon )
+{
+    Arg arg;
+
+    if( nIcon != 0 ) {
+	XtSetArg(arg, XtNleftBitmap, (XtArgVal) icons[nIcon]);
+	XtSetValues(outputField[which][field], &arg, 1);
+    }
+}
+
+void DoClearMemo(int which)
+{ 
+    Arg args[16];
+    int j;
+    Widget edit;
+
+	edit = XtNameToWidget(engineOutputShell, which ? "*form2.text" : "*form.text");
+	XtCallActionProc(edit, "select-all", NULL, NULL, 0);
+	XtCallActionProc(edit, "kill-selection", NULL, NULL, 0);
+}
+
+// The following routines are mutated clones of the commentPopUp routines
+
+void PositionControlSet(which, form, bw_width)
+     int which;
+     Widget form;
+     Dimension bw_width;
+{
+    Arg args[16];
+    Widget edit, NameWidget, ColorWidget, ModeWidget, MoveWidget, NodesWidget;
+    int j, mutable=1;
+    j = 0;
+    XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;
+    XtSetArg(args[j], XtNlabel,     (XtArgVal) ""); j++;
+    XtSetArg(args[j], XtNtop,       XtChainTop); j++;
+    XtSetArg(args[j], XtNbottom,    XtChainTop); j++;
+    XtSetArg(args[j], XtNleft,      XtChainLeft); j++;
+    XtSetArg(args[j], XtNright,     XtChainLeft); j++;
+    XtSetArg(args[j], XtNheight,    (XtArgVal) 16); j++;
+    XtSetArg(args[j], XtNwidth,     (XtArgVal) 17); j++;
+    outputField[which][nColorIcon] = ColorWidget =
+      XtCreateManagedWidget("Color", labelWidgetClass,
+		     form, args, j);
+
+    j = 0;
+    XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;
+    XtSetArg(args[j], XtNjustify,   (XtArgVal) XtJustifyLeft); j++;
+    XtSetArg(args[j], XtNfromHoriz, (XtArgVal) ColorWidget); j++;
+    XtSetArg(args[j], XtNtop,       XtChainTop); j++;
+    XtSetArg(args[j], XtNbottom,    XtChainTop); j++;
+    XtSetArg(args[j], XtNleft,      XtChainLeft); j++;
+    XtSetArg(args[j], XtNheight,    (XtArgVal) 16); j++;
+    XtSetArg(args[j], XtNwidth,     (XtArgVal) bw_width/2 - 57); j++;
+    outputField[which][nLabel] = NameWidget =
+      XtCreateManagedWidget("Engine", labelWidgetClass,
+		     form, args, j);
+
+    j = 0;
+    XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;
+    XtSetArg(args[j], XtNlabel,     (XtArgVal) ""); j++;
+    XtSetArg(args[j], XtNfromHoriz, (XtArgVal) NameWidget); j++;
+    XtSetArg(args[j], XtNtop,       XtChainTop); j++;
+    XtSetArg(args[j], XtNbottom,    XtChainTop); j++;
+    XtSetArg(args[j], XtNheight,    (XtArgVal) 16); j++;
+    XtSetArg(args[j], XtNwidth,     (XtArgVal) 20); j++;
+    outputField[which][nStateIcon] = ModeWidget =
+      XtCreateManagedWidget("Mode", labelWidgetClass,
+		     form, args, j);
+
+    j = 0;
+    XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;
+    XtSetArg(args[j], XtNjustify,   (XtArgVal) XtJustifyLeft); j++;
+    XtSetArg(args[j], XtNlabel,     (XtArgVal) ""); j++;
+    XtSetArg(args[j], XtNfromHoriz, (XtArgVal) ModeWidget); j++;
+    XtSetArg(args[j], XtNtop,       XtChainTop); j++;
+    XtSetArg(args[j], XtNbottom,    XtChainTop); j++;
+    XtSetArg(args[j], XtNright,     XtChainRight); j++;
+    XtSetArg(args[j], XtNheight,    (XtArgVal) 16); j++;
+    XtSetArg(args[j], XtNwidth,     (XtArgVal) bw_width/2 - 102); j++;
+    outputField[which][nStateData] = MoveWidget =
+      XtCreateManagedWidget("Move", labelWidgetClass,
+		     form, args, j);
+
+    j = 0;
+    XtSetArg(args[j], XtNborderWidth, (XtArgVal) 0); j++;
+    XtSetArg(args[j], XtNjustify,   (XtArgVal) XtJustifyRight); j++;
+    XtSetArg(args[j], XtNlabel,     (XtArgVal) _("NPS")); j++;
+    XtSetArg(args[j], XtNfromHoriz, (XtArgVal) MoveWidget); j++;
+    XtSetArg(args[j], XtNtop,       XtChainTop); j++;
+    XtSetArg(args[j], XtNbottom,    XtChainTop); j++;
+    XtSetArg(args[j], XtNleft,      XtChainRight); j++;
+    XtSetArg(args[j], XtNright,     XtChainRight); j++;
+    XtSetArg(args[j], XtNheight,    (XtArgVal) 16); j++;
+    XtSetArg(args[j], XtNwidth,     (XtArgVal) 100); j++;
+    outputField[which][nLabelNPS] = NodesWidget =
+      XtCreateManagedWidget("Nodes", labelWidgetClass,
+		     form, args, j);
+
+    // create "text" within "form"
+    j = 0;
+    if (mutable) {
+	XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+	XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+    }
+    XtSetArg(args[j], XtNstring, "");  j++;
+    XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    XtSetArg(args[j], XtNwidth, bw_width);  j++; /*force wider than buttons*/
+#if 0
+    XtSetArg(args[j], XtNscrollVertical, XawtextScrollWhenNeeded);  j++;
+#else
+    /* !!Work around an apparent bug in XFree86 4.0.1 (X11R6.4.3) */
+    XtSetArg(args[j], XtNscrollVertical, XawtextScrollAlways);  j++;
+    XtSetArg(args[j], XtNscrollHorizontal, XawtextScrollWhenNeeded);  j++;
+#endif
+//    XtSetArg(args[j], XtNautoFill, True);  j++;
+//    XtSetArg(args[j], XtNwrap, XawtextWrapWord); j++;
+    outputField[which][nMemo] = edit =
+      XtCreateManagedWidget("text", asciiTextWidgetClass, form, args, j);
+
+    j = 0;
+    XtSetArg(args[j], XtNfromVert, ColorWidget); j++;
+//    XtSetArg(args[j], XtNresizable, (XtArgVal) True); j++;
+    XtSetValues(edit, args, j);
+}
+
+Widget EngineOutputCreate(name, text)
+     char *name, *text;
+{
+    Arg args[16];
+    Widget shell, layout, form, form2, edit;
+    Dimension bw_width, bw_height;
+    int j;
+
+    // get board width
+    j = 0;
+    XtSetArg(args[j], XtNwidth,  &bw_width);  j++;
+    XtSetArg(args[j], XtNheight, &bw_height);  j++;
+    XtGetValues(boardWidget, args, j);
+
+    // define form within layout within shell.
+    j = 0;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    shell =
+      XtCreatePopupShell(name, transientShellWidgetClass,
+			 shellWidget, args, j);
+    layout =
+      XtCreateManagedWidget(layoutName, formWidgetClass, shell,
+			    layoutArgs, XtNumber(layoutArgs));
+    // divide window vertically into two equal parts, by creating two forms
+    form =
+      XtCreateManagedWidget("form", formWidgetClass, layout,
+			    formArgs, XtNumber(formArgs));
+    form2 =
+      XtCreateManagedWidget("form2", formWidgetClass, layout,
+			    formArgs, XtNumber(formArgs));
+    j = 0;
+    XtSetArg(args[j], XtNfromVert,  (XtArgVal) form); j++;
+    XtSetValues(form2, args, j);
+    // make sure width is known in advance, for better placement of child widgets
+    j = 0;
+    XtSetArg(args[j], XtNwidth,     (XtArgVal) bw_width-16); j++;
+    XtSetArg(args[j], XtNheight,    (XtArgVal) bw_height/2); j++;
+    XtSetValues(shell, args, j);
+
+    // fill up both forms with control elements
+    PositionControlSet(0, form,  bw_width);
+    PositionControlSet(1, form2, bw_width);
+
+    XtRealizeWidget(shell);
+
+    if (engineOutputX == -1) {
+	int xx, yy;
+	Window junk;
+	Dimension pw_height;
+	Dimension ew_height;
+#if 0
+	j = 0;
+	XtSetArg(args[j], XtNheight, &ew_height);  j++;
+	XtGetValues(edit, args, j);
+
+	j = 0;
+	XtSetArg(args[j], XtNheight, &pw_height);  j++;
+	XtGetValues(shell, args, j);
+	engineOutputH = pw_height + (lines - 1) * ew_height;
+	engineOutputW = bw_width - 16;
+#else
+	engineOutputH = bw_height/2;
+	engineOutputW = bw_width-16;
+#endif
+
+	XSync(xDisplay, False);
+#ifdef NOTDEF
+	/* This code seems to tickle an X bug if it is executed too soon
+	   after xboard starts up.  The coordinates get transformed as if
+	   the main window was positioned at (0, 0).
+	   */
+	XtTranslateCoords(shellWidget,
+			  (bw_width - engineOutputW) / 2, 0 - engineOutputH / 2,
+			  &engineOutputX, &engineOutputY);
+#else  /*!NOTDEF*/
+        XTranslateCoordinates(xDisplay, XtWindow(shellWidget),
+			      RootWindowOfScreen(XtScreen(shellWidget)),
+			      (bw_width - engineOutputW) / 2, 0 - engineOutputH / 2,
+			      &xx, &yy, &junk);
+	engineOutputX = xx;
+	engineOutputY = yy;
+#endif /*!NOTDEF*/
+	if (engineOutputY < 0) engineOutputY = 0; /*avoid positioning top offscreen*/
+    }
+    j = 0;
+    XtSetArg(args[j], XtNheight, engineOutputH);  j++;
+    XtSetArg(args[j], XtNwidth, engineOutputW);  j++;
+    XtSetArg(args[j], XtNx, engineOutputX);  j++;
+    XtSetArg(args[j], XtNy, engineOutputY);  j++;
+    XtSetValues(shell, args, j);
+//    XtSetKeyboardFocus(shell, edit);
+
+    return shell;
+}
+
+void ResizeWindowControls(shell, mode)
+	Widget shell;
+	int mode;
+{
+    Widget form1, form2;
+    Arg args[16];
+    int j;
+    Dimension ew_height, tmp;
+
+    form1 = XtNameToWidget(shell, "*form");
+    form2 = XtNameToWidget(shell, "*form2");
+
+    j = 0;
+    XtSetArg(args[j], XtNheight, (XtArgVal) &ew_height); j++;
+    XtGetValues(form1, args, j);
+    j = 0;
+    XtSetArg(args[j], XtNheight, (XtArgVal) &tmp); j++;
+    XtGetValues(form2, args, j);
+    ew_height += tmp; // total height
+
+    if(mode==0) {
+	j = 0;
+	XtSetArg(args[j], XtNheight, (XtArgVal) 5); j++;
+	XtSetValues(form2, args, j);
+	j = 0;
+	XtSetArg(args[j], XtNheight, (XtArgVal) (ew_height-5)); j++;
+	XtSetValues(form1, args, j);
+    } else {
+	j = 0;
+	XtSetArg(args[j], XtNheight, (XtArgVal) (ew_height/2)); j++;
+	XtSetValues(form1, args, j);
+	j = 0;
+	XtSetArg(args[j], XtNheight, (XtArgVal) (ew_height/2)); j++;
+	XtSetValues(form2, args, j);
+    }
+}
+
+void EngineOutputPopUp(title, text)
+     char *title, *text;
+{
+    Arg args[16];
+    int j;
+    Widget edit;
+
+    if (engineOutputShell == NULL) {
+	engineOutputShell =
+	  EngineOutputCreate(title, text);
+	XtRealizeWidget(engineOutputShell);
+	CatchDeleteWindow(engineOutputShell, "EngineOutputPopDown");
+	if( needInit ) {
+	    InitializeEngineOutput();
+	    needInit = FALSE;
+	}
+        SetEngineColorIcon( 0 );
+        SetEngineColorIcon( 1 );
+        SetEngineState( 0, STATE_IDLE, "" );
+        SetEngineState( 1, STATE_IDLE, "" );
+    } else {
+	edit = XtNameToWidget(engineOutputShell, "*form.text");
+	j = 0;
+	XtSetArg(args[j], XtNstring, text); j++;
+	XtSetValues(edit, args, j);
+	j = 0;
+	XtSetArg(args[j], XtNiconName, (XtArgVal) title);   j++;
+	XtSetArg(args[j], XtNtitle, (XtArgVal) title);      j++;
+	XtSetValues(engineOutputShell, args, j);
+    }
+
+    XtPopup(engineOutputShell, XtGrabNone);
+    XSync(xDisplay, False);
+
+    j=0;
+    XtSetArg(args[j], XtNleftBitmap, xMarkPixmap); j++;
+    XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Engine Output"),
+		args, j);
+
+    engineOutputDialogUp = True;
+    ShowThinkingEvent(); // [HGM] thinking: might need to prompt engine for thinking output
+}
+
+void EngineOutputPopDown()
+{
+    Arg args[16];
+    int j;
+
+    if (!engineOutputDialogUp) return;
+    DoClearMemo(1);
+    j = 0;
+    XtSetArg(args[j], XtNx, &engineOutputX); j++;
+    XtSetArg(args[j], XtNy, &engineOutputY); j++;
+    XtSetArg(args[j], XtNwidth, &engineOutputW); j++;
+    XtSetArg(args[j], XtNheight, &engineOutputH); j++;
+    XtGetValues(engineOutputShell, args, j);
+    XtPopdown(engineOutputShell);
+    XSync(xDisplay, False);
+    j=0;
+    XtSetArg(args[j], XtNleftBitmap, None); j++;
+    XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Engine Output"),
+		args, j);
+
+    engineOutputDialogUp = False;
+    ShowThinkingEvent(); // [HGM] thinking: might need to shut off thinking output
+}
+
+//------------------------ pure back-end routines -------------------------------
+
+
+// back end, due to front-end wrapper for SetWindowText, and new SetIcon arguments
+static SetEngineState( int which, int state, char * state_data )
+{
+    int x_which = 1 - which;
+
+    if( engineState[ which ] != state ) {
+        engineState[ which ] = state;
+
+        switch( state ) {
+        case STATE_THINKING:
+            SetIcon( which, nStateIcon, nThinking );
+            if( engineState[ x_which ] == STATE_THINKING ) {
+                SetEngineState( x_which, STATE_IDLE, "" );
+            }
+            break;
+        case STATE_PONDERING:
+            SetIcon( which, nStateIcon, nPondering );
+            break;
+        case STATE_ANALYZING:
+            SetIcon( which, nStateIcon, nAnalyzing );
+            break;
+        default:
+            SetIcon( which, nStateIcon, nClear );
+            break;
+        }
+    }
+
+    if( state_data != 0 ) {
+        DoSetWindowText( which, nStateData, state_data );
+    }
+}
+
+// back end, now the front-end wrapper ClearMemo is used, and ed no longer contains handles.
+void EngineOutputUpdate( FrontEndProgramStats * stats )
+{
+    EngineOutputData ed;
+    int clearMemo = FALSE;
+    int which;
+    int depth;
+
+    if( stats == 0 ) {
+        SetEngineState( 0, STATE_IDLE, "" );
+        SetEngineState( 1, STATE_IDLE, "" );
+        return;
+    }
+
+    if(gameMode == IcsObserving && !appData.icsEngineAnalyze)
+	return; // [HGM] kibitz: shut up engine if we are observing an ICS game
+
+    which = stats->which;
+    depth = stats->depth;
+
+    if( which < 0 || which > 1 || depth < 0 || stats->time < 0 || stats->pv == 0 ) {
+        return;
+    }
+
+    if( engineOutputShell == NULL ) {
+        return;
+    }
+
+    VerifyDisplayMode();
+
+    ed.which = which;
+    ed.depth = depth;
+    ed.nodes = stats->nodes;
+    ed.score = stats->score;
+    ed.time = stats->time;
+    ed.pv = stats->pv;
+    ed.hint = stats->hint;
+    ed.an_move_index = stats->an_move_index;
+    ed.an_move_count = stats->an_move_count;
+
+    /* Get target control. [HGM] this is moved to front end, which get them from a table */
+    if( which == 0 ) {
+        ed.name = first.tidy;
+    }
+    else {
+        ed.name = second.tidy;
+    }
+
+    /* Clear memo if needed */
+    if( lastDepth[which] > depth || (lastDepth[which] == depth && depth <= 1) ) {
+        clearMemo = TRUE;
+    }
+
+    if( lastForwardMostMove[which] != forwardMostMove ) {
+        clearMemo = TRUE;
+    }
+
+    if( clearMemo ) DoClearMemo(which);
+
+    /* Update */
+    lastDepth[which] = depth;
+    lastForwardMostMove[which] = forwardMostMove;
+
+    if( ed.pv != 0 && ed.pv[0] == ' ' ) {
+        if( strncmp( ed.pv, " no PV", 6 ) == 0 ) { /* Hack on hack! :-O */
+            ed.pv = "";
+        }
+    }
+
+    UpdateControls( &ed );
+}
+
+#define ENGINE_COLOR_WHITE      'w'
+#define ENGINE_COLOR_BLACK      'b'
+#define ENGINE_COLOR_UNKNOWN    ' '
+
+// pure back end
+char GetEngineColor( int which )
+{
+    char result = ENGINE_COLOR_UNKNOWN;
+
+    if( which == 0 || which == 1 ) {
+        ChessProgramState * cps;
+
+        switch (gameMode) {
+        case MachinePlaysBlack:
+        case IcsPlayingBlack:
+            result = ENGINE_COLOR_BLACK;
+            break;
+        case MachinePlaysWhite:
+        case IcsPlayingWhite:
+            result = ENGINE_COLOR_WHITE;
+            break;
+        case AnalyzeMode:
+        case AnalyzeFile:
+            result = WhiteOnMove(forwardMostMove) ? ENGINE_COLOR_WHITE : ENGINE_COLOR_BLACK;
+            break;
+        case TwoMachinesPlay:
+            cps = (which == 0) ? &first : &second;
+            result = cps->twoMachinesColor[0];
+            result = result == 'w' ? ENGINE_COLOR_WHITE : ENGINE_COLOR_BLACK;
+            break;
+        }
+    }
+
+    return result;
+}
+
+// pure back end
+char GetActiveEngineColor()
+{
+    char result = ENGINE_COLOR_UNKNOWN;
+
+    if( gameMode == TwoMachinesPlay ) {
+        result = WhiteOnMove(forwardMostMove) ? ENGINE_COLOR_WHITE : ENGINE_COLOR_BLACK;
+    }
+
+    return result;
+}
+
+// pure back end
+static int IsEnginePondering( int which )
+{
+    int result = FALSE;
+
+    switch (gameMode) {
+    case MachinePlaysBlack:
+    case IcsPlayingBlack:
+        if( WhiteOnMove(forwardMostMove) ) result = TRUE;
+        break;
+    case MachinePlaysWhite:
+    case IcsPlayingWhite:
+        if( ! WhiteOnMove(forwardMostMove) ) result = TRUE;
+        break;
+    case TwoMachinesPlay:
+        if( GetActiveEngineColor() != ENGINE_COLOR_UNKNOWN ) {
+            if( GetEngineColor( which ) != GetActiveEngineColor() ) result = TRUE;
+        }
+        break;
+    }
+
+    return result;
+}
+
+// back end
+static void SetDisplayMode( int mode )
+{
+    if( windowMode != mode ) {
+        windowMode = mode;
+
+        ResizeWindowControls( engineOutputShell, mode );
+    }
+}
+
+// pure back end
+int VerifyDisplayMode()
+{
+    int mode;
+
+    /* Get proper mode for current game */
+    switch( gameMode ) {
+    case IcsObserving:    // [HGM] ICS analyze
+	if(!appData.icsEngineAnalyze) return;
+    case AnalyzeMode:
+    case AnalyzeFile:
+    case MachinePlaysWhite:
+    case MachinePlaysBlack:
+        mode = 0;
+        break;
+    case IcsPlayingWhite:
+    case IcsPlayingBlack:
+        mode = appData.zippyPlay && opponentKibitzes; // [HGM] kibitz
+        break;
+    case TwoMachinesPlay:
+        mode = 1;
+        break;
+    default:
+        /* Do not change */
+        return;
+    }
+
+    SetDisplayMode( mode );
+}
+
+// back end. Determine what icon to se in the color-icon field, and print it
+static void SetEngineColorIcon( int which )
+{
+    char color = GetEngineColor(which);
+    int nicon = 0;
+
+    if( color == ENGINE_COLOR_BLACK )
+        nicon = nColorBlack;
+    else if( color == ENGINE_COLOR_WHITE )
+        nicon = nColorWhite;
+    else
+        nicon = nColorUnknown;
+
+    SetIcon( which, nColorIcon, nicon );
+}
+
+#define MAX_NAME_LENGTH 32
+
+// pure back end, now SetWindowText is called via wrapper DoSetWindowText
+static void UpdateControls( EngineOutputData * ed )
+{
+    int isPondering = FALSE;
+
+    char s_label[MAX_NAME_LENGTH + 32];
+    
+    char * name = ed->name;
+
+    /* Label */
+    if( name == 0 || *name == '\0' ) {
+        name = "?";
+    }
+
+    strncpy( s_label, name, MAX_NAME_LENGTH );
+    s_label[ MAX_NAME_LENGTH-1 ] = '\0';
+
+#ifdef SHOW_PONDERING
+    if( IsEnginePondering( ed->which ) ) {
+        char buf[8];
+
+        buf[0] = '\0';
+
+        if( ed->hint != 0 && *ed->hint != '\0' ) {
+            strncpy( buf, ed->hint, sizeof(buf) );
+            buf[sizeof(buf)-1] = '\0';
+        }
+        else if( ed->pv != 0 && *ed->pv != '\0' ) {
+            char * sep = strchr( ed->pv, ' ' );
+            int buflen = sizeof(buf);
+
+            if( sep != NULL ) {
+                buflen = sep - ed->pv + 1;
+                if( buflen > sizeof(buf) ) buflen = sizeof(buf);
+            }
+
+            strncpy( buf, ed->pv, buflen );
+            buf[ buflen-1 ] = '\0';
+        }
+
+        SetEngineState( ed->which, STATE_PONDERING, buf );
+    }
+    else if( gameMode == TwoMachinesPlay ) {
+        SetEngineState( ed->which, STATE_THINKING, "" );
+    }
+    else if( gameMode == AnalyzeMode || gameMode == AnalyzeFile 
+	  || gameMode == IcsObserving && appData.icsEngineAnalyze) { // [HGM] ICS-analyze
+        char buf[64];
+        int time_secs = ed->time / 100;
+        int time_mins = time_secs / 60;
+
+        buf[0] = '\0';
+
+        if( ed->an_move_index != 0 && ed->an_move_count != 0 && *ed->hint != '\0' ) {
+            char mov[16];
+
+            strncpy( mov, ed->hint, sizeof(mov) );
+            mov[ sizeof(mov)-1 ] = '\0';
+
+            sprintf( buf, "%d/%d: %s [%02d:%02d:%02d]", ed->an_move_index, ed->an_move_count, mov, time_mins / 60, time_mins % 60, time_secs % 60 );
+        }
+
+        SetEngineState( ed->which, STATE_ANALYZING, buf );
+    }
+    else {
+        SetEngineState( ed->which, STATE_IDLE, "" );
+    }
+#endif
+
+    DoSetWindowText( ed->which, nLabel, s_label );
+
+    s_label[0] = '\0';
+
+    if( ed->time > 0 && ed->nodes > 0 ) {
+        unsigned long nps_100 = ed->nodes / ed->time;
+
+        if( nps_100 < 100000 ) {
+            sprintf( s_label, _("NPS: %lu"), nps_100 * 100 );
+        }
+        else {
+            sprintf( s_label, _("NPS: %.1fk"), nps_100 / 10.0 );
+        }
+    }
+
+    DoSetWindowText( ed->which, nLabelNPS, s_label );
+
+    /* Memo */
+    if( ed->pv != 0 && *ed->pv != '\0' ) {
+        char s_nodes[24];
+        char s_score[16];
+        char s_time[24];
+        char buf[256];
+        int buflen;
+        int time_secs = ed->time / 100;
+        int time_cent = ed->time % 100;
+
+        /* Nodes */
+        if( ed->nodes < 1000000 ) {
+            sprintf( s_nodes, u64Display, ed->nodes );
+        }
+        else {
+            sprintf( s_nodes, "%.1fM", u64ToDouble(ed->nodes) / 1000000.0 );
+        }
+
+        /* Score */
+        if( ed->score > 0 ) {
+            sprintf( s_score, "+%.2f", ed->score / 100.0 );
+        } else
+            sprintf( s_score, "%.2f", ed->score / 100.0 );
+
+        /* Time */
+        sprintf( s_time, "%d:%02d.%02d", time_secs / 60, time_secs % 60, time_cent );
+
+        /* Put all together... */
+        sprintf( buf, "%3d  %s  %s\t%s\t", ed->depth, s_score, s_nodes, s_time );
+
+        /* Add PV */
+        buflen = strlen(buf);
+
+        strncpy( buf + buflen, ed->pv, sizeof(buf) - buflen );
+
+        buf[ sizeof(buf) - 3 ] = '\0';
+
+        strcat( buf + buflen, "\n" );
+
+        /* Update memo */
+        InsertIntoMemo( ed->which, buf );
+    }
+
+    /* Colors */
+    SetEngineColorIcon( ed->which );
+}
+
+// back end
+int EngineOutputIsUp()
+{
+    return engineOutputDialogUp;
+}
+
+void
+EngineOutputProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+  if (engineOutputDialogUp) {
+    EngineOutputPopDown();
+  } else {
+    EngineOutputPopUp(_("engine output"),_("This feature is experimental"));
+  }
+//  ToNrEvent(currentMove);
+}
+
+// [HGM] kibitz: write kibitz line; split window for it if necessary
+void OutputKibitz(char *text)
+{
+	if(!EngineOutputIsUp()) return;
+	if(!opponentKibitzes) DoClearMemo(1);
+	opponentKibitzes = TRUE; // thas causes split window DisplayMode in ICS modes.
+	VerifyDisplayMode();
+	DoSetWindowText(1, nLabel, gameMode == IcsPlayingWhite ? gameInfo.black : gameInfo.white); // opponent name
+	SetIcon( 1, nColorIcon,  gameMode == IcsPlayingWhite ? nColorBlack : nColorWhite);
+	InsertIntoMemo(1, text);
+}
diff --git a/xgamelist.c b/xgamelist.c
index 4f4812e..c0a19ff 100644
--- a/xgamelist.c
+++ b/xgamelist.c
@@ -1,29 +1,25 @@
 /*
  * xgamelist.c -- Game list window, part of X front end for XBoard
- * $Id: xgamelist.c,v 2.1 2003/10/27 19:21:00 mann Exp $
+ * $Id$
  *
- * Copyright 1995 Free Software Foundation, Inc.
- *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
  *
- * See the file ChangeLog for a revision history.
- */
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #include "config.h"
 
@@ -85,6 +81,16 @@ extern char *getenv();
 #include "backend.h"
 #include "xboard.h"
 #include "xgamelist.h"
+#include "gettext.h"
+
+#ifdef ENABLE_NLS
+# define  _(s) gettext (s)
+# define N_(s) gettext_noop (s)
+#else
+# define  _(s) (s)
+# define N_(s)  s
+#endif
+
 
 extern Widget formWidget, shellWidget, boardWidget, menuBarWidget;
 extern Display *xDisplay;
@@ -177,7 +183,7 @@ GameListCreate(name, callback, client_data)
     XtSetArg(args[j], XtNleft, XtChainLeft); j++;
     XtSetArg(args[j], XtNright, XtChainLeft); j++;
     b_load =
-      XtCreateManagedWidget("load", commandWidgetClass, form, args, j);
+      XtCreateManagedWidget(_("load"), commandWidgetClass, form, args, j);
     XtAddCallback(b_load, XtNcallback, callback, client_data);
 
     j = 0;
@@ -188,7 +194,7 @@ GameListCreate(name, callback, client_data)
     XtSetArg(args[j], XtNleft, XtChainLeft); j++;
     XtSetArg(args[j], XtNright, XtChainLeft); j++;
     b_loadprev =
-      XtCreateManagedWidget("prev", commandWidgetClass, form, args, j);
+      XtCreateManagedWidget(_("prev"), commandWidgetClass, form, args, j);
     XtAddCallback(b_loadprev, XtNcallback, callback, client_data);
 
     j = 0;
@@ -199,7 +205,7 @@ GameListCreate(name, callback, client_data)
     XtSetArg(args[j], XtNleft, XtChainLeft); j++;
     XtSetArg(args[j], XtNright, XtChainLeft); j++;
     b_loadnext =
-      XtCreateManagedWidget("next", commandWidgetClass, form, args, j);
+      XtCreateManagedWidget(_("next"), commandWidgetClass, form, args, j);
     XtAddCallback(b_loadnext, XtNcallback, callback, client_data);
 
     j = 0;
@@ -210,7 +216,7 @@ GameListCreate(name, callback, client_data)
     XtSetArg(args[j], XtNleft, XtChainLeft); j++;
     XtSetArg(args[j], XtNright, XtChainLeft); j++;
     b_close =
-      XtCreateManagedWidget("close", commandWidgetClass, form, args, j);
+      XtCreateManagedWidget(_("close"), commandWidgetClass, form, args, j);
     XtAddCallback(b_close, XtNcallback, callback, client_data);
 
     if (glc->x == -1) {
@@ -276,29 +282,29 @@ GameListCallback(w, client_data, call_data)
     XtSetArg(args[j], XtNlabel, &name);  j++;
     XtGetValues(w, args, j);
 
-    if (strcmp(name, "close") == 0) {
+    if (strcmp(name, _("close")) == 0) {
 	GameListPopDown();
 	return;
     }
     listwidg = XtNameToWidget(glc->shell, "*form.viewport.list");
     rs = XawListShowCurrent(listwidg);
-    if (strcmp(name, "load") == 0) {
+    if (strcmp(name, _("load")) == 0) {
 	index = rs->list_index;
 	if (index < 0) {
-	    DisplayError("No game selected", 0);
+	    DisplayError(_("No game selected"), 0);
 	    return;
 	}
-    } else if (strcmp(name, "next") == 0) {
+    } else if (strcmp(name, _("next")) == 0) {
 	index = rs->list_index + 1;
 	if (index >= ((ListGame *) gameList.tailPred)->number) {
-	    DisplayError("Can't go forward any further", 0);
+	    DisplayError(_("Can't go forward any further"), 0);
 	    return;
 	}
 	XawListHighlight(listwidg, index);
-    } else if (strcmp(name, "prev") == 0) {
+    } else if (strcmp(name, _("prev")) == 0) {
 	index = rs->list_index - 1;
 	if (index < 0) {
-	    DisplayError("Can't back up any further", 0);
+	    DisplayError(_("Can't back up any further"), 0);
 	    return;
 	}
 	XawListHighlight(listwidg, index);
@@ -399,7 +405,7 @@ ShowGameListProc(w, event, prms, nprms)
     int j;
 
     if (glc == NULL) {
-	DisplayError("There is no game list", 0);
+	DisplayError(_("There is no game list"), 0);
 	return;
     }
     if (glc->up) {
diff --git a/xgamelist.h b/xgamelist.h
index 99e266a..eb2f8d2 100644
--- a/xgamelist.h
+++ b/xgamelist.h
@@ -2,28 +2,24 @@
  * xgamelist.h -- Game list window, part of X front end for XBoard
  * $Id: xgamelist.h,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
- *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
  *
- * See the file ChangeLog for a revision history.
- */
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #ifndef _XGAMEL_H
 #define _XGAMEL_H 1
diff --git a/xhistory.c b/xhistory.c
index 7f02ab8..5e8ba35 100644
--- a/xhistory.c
+++ b/xhistory.c
@@ -1,484 +1,501 @@
-/*
- * xhistory.c -- Move list window, part of X front end for XBoard
- * $Id: xhistory.c,v 2.1 2003/10/27 19:21:00 mann Exp $
- *
- * Copyright 2000 Free Software Foundation, Inc.
- *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
- * ------------------------------------------------------------------------
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- *
- * See the file ChangeLog for a revision history.
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-#include <sys/types.h>
-
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <string.h>
-#else /* not STDC_HEADERS */
-extern char *getenv();
-# if HAVE_STRING_H
-#  include <string.h>
-# else /* not HAVE_STRING_H */
-#  include <strings.h>
-# endif /* not HAVE_STRING_H */
-#endif /* not STDC_HEADERS */
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#include <X11/Intrinsic.h>
-#include <X11/StringDefs.h>
-#include <X11/Shell.h>
-#include <X11/Xaw/Dialog.h>
-#include <X11/Xaw/Form.h>
-#include <X11/Xaw/List.h>
-#include <X11/Xaw/Label.h>
-#include <X11/Xaw/SimpleMenu.h>
-#include <X11/Xaw/SmeBSB.h>
-#include <X11/Xaw/SmeLine.h>
-#include <X11/Xaw/Box.h>
-#include <X11/Xaw/Paned.h>
-#include <X11/Xaw/MenuButton.h>
-#include <X11/cursorfont.h>
-#include <X11/Xaw/Text.h>
-#include <X11/Xaw/AsciiText.h>
-#include <X11/Xaw/Viewport.h>
-
-#include "common.h"
-#include "frontend.h"
-#include "backend.h"
-#include "xboard.h"
-#include "xhistory.h"
-
-
-#define _LL_ 100
-
-extern Widget formWidget, shellWidget, boardWidget, menuBarWidget;
-extern Display *xDisplay;
-extern int squareSize;
-extern Pixmap xMarkPixmap;
-extern char *layoutName;
-
-struct History{
-  String *Nr,*white,*black;
-  int     aNr;  /* space actually alocated */  
-  Widget mvn,mvw,mvb,vbox,viewport,sh;
-  char Up;
-};
-
-struct History *hist=0;
-String dots=" ... ";
-
-void
-HistoryPopDown(w, client_data, call_data)
-     Widget w;
-     XtPointer client_data, call_data;
-{
-  Arg args[16];
-  int j;
-  if(hist)
-
-  XtPopdown(hist->sh);
-  hist->Up=False;
-
-  j=0;
-  XtSetArg(args[j], XtNleftBitmap, None); j++;
-  XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Move List"),
-		args, j);
-}
-
-void HistoryMoveProc(Widget w, XtPointer closure, XtPointer call_data)
-{
-    int to;
-    XawListReturnStruct *R = (XawListReturnStruct *) call_data;
-    if (w == hist->mvn || w == hist->mvw) {
-      to=2*R->list_index-1;
-      ToNrEvent(to);
-    }
-    else if (w == hist->mvb) {
-      to=2*R->list_index;
-      ToNrEvent(to);
-    }
-}
-
-void HistoryAlloc(int len){
-  int i;
-  if(hist){
-    free(hist->Nr[0]);free(hist->white[0]);free(hist->black[0]);
-    free(hist->Nr);free(hist->white);free(hist->black);
-  }
-  else{
-    hist=(struct History*)malloc(sizeof(struct History)); 
-  }
-    hist->aNr=len;
-    hist->Nr=(String*)malloc(hist->aNr*sizeof(String*));
-    hist->white=(String*)malloc(hist->aNr*sizeof(String*));
-    hist->black=(String*)malloc(hist->aNr*sizeof(String*));
-    
-    hist->Nr[0]=(String)malloc(hist->aNr*6);
-    hist->white[0]=(String)malloc(hist->aNr*MOVE_LEN);
-    hist->black[0]=(String)malloc(hist->aNr*MOVE_LEN);
-
-      sprintf(hist->Nr[0],"    ");
-      sprintf(hist->white[0],"White ");
-      sprintf(hist->black[0],"Black ");
-    for(i=1;i<hist->aNr;i++){
-      hist->Nr[i]= hist->Nr[i-1]+6;
-      hist->white[i]= hist->white[i-1]+MOVE_LEN;
-      hist->black[i]= hist->black[i-1]+MOVE_LEN;
-      sprintf(hist->Nr[i],"%i.",i);
-      sprintf(hist->white[i],"-----");
-      sprintf(hist->black[i],"-----");
-     }
-}
-
-
-#if 1
-/* Find empty space inside vbox form widget and redistribute it amongst
-   the list widgets inside it. */
-/* This version sort of works */
-void
-HistoryFill()
-{
-  Dimension w, bw;
-  long extra;
-  Position x, x1, x2;
-  int j, dd;
-  Arg args[16];
-
-  j = 0;
-  XtSetArg(args[j], XtNx, &x);  j++;
-  XtSetArg(args[j], XtNwidth, &w);  j++;
-  XtSetArg(args[j], XtNborderWidth, &bw);  j++;
-  XtGetValues(hist->mvb, args, j);
-  x1 = x + w + 2*bw;
-
-  j = 0;
-  XtSetArg(args[j], XtNwidth, &w);  j++;
-  XtSetArg(args[j], XtNdefaultDistance, &dd);  j++;
-  XtGetValues(hist->vbox, args, j);
-  x2 = w - dd;
-
-  extra = x2 - x1;
-  if (extra < 0) {
-    extra = -((-extra)/2);
-  } else {
-    extra = extra/2;
-  }
- 
-  j = 0;
-  XtSetArg(args[j], XtNwidth, &w);  j++;
-  XtGetValues(hist->mvw, args, j);
-  w += extra;
-  j = 0;
-  XtSetArg(args[j], XtNwidth, w);  j++;
-  XtSetValues(hist->mvw, args, j);
-
-  j = 0;
-  XtSetArg(args[j], XtNwidth, &w);  j++;
-  XtGetValues(hist->mvb, args, j);
-  w += extra;
-  j = 0;
-  XtSetArg(args[j], XtNwidth, w);  j++;
-  XtSetValues(hist->mvb, args, j);
-}
-#else
-/* Find empty space inside vbox form widget and redistribute it amongst
-   the list widgets inside it. */
-/* This version doesn't work */
-void
-HistoryFill()
-{
-  Arg args[16];
-  Dimension fw, niw, wiw, biw, nbw, wbw, bbw;
-  int j, nl, wl, bl, fdd;
-  long extra;
-
-  j = 0;
-  XtSetArg(args[j], XtNwidth, &fw);  j++;
-  XtSetArg(args[j], XtNdefaultDistance, &fdd);  j++;
-  XtGetValues(hist->vbox, args, j);
-
-  j = 0;
-  XtSetArg(args[j], XtNlongest, &nl);  j++;
-  XtSetArg(args[j], XtNinternalWidth, &niw);  j++;
-  XtSetArg(args[j], XtNborderWidth, &nbw);  j++;
-  XtGetValues(hist->mvn, args, j);
-
-  j = 0;
-  XtSetArg(args[j], XtNlongest, &wl);  j++;
-  XtSetArg(args[j], XtNinternalWidth, &wiw);  j++;
-  XtSetArg(args[j], XtNborderWidth, &wbw);  j++;
-  XtGetValues(hist->mvw, args, j);
-
-  j = 0;
-  XtSetArg(args[j], XtNlongest, &bl);  j++;
-  XtSetArg(args[j], XtNinternalWidth, &biw);  j++;
-  XtSetArg(args[j], XtNborderWidth, &bbw);  j++;
-  XtGetValues(hist->mvb, args, j);
-
-  extra = fw - 4*fdd -
-    nl - 1 - 2*niw - 2*nbw - wl - 2*wiw - 2*wbw - bl - 2*biw - 2*bbw;
-  if (extra < 0) extra = 0;
-
-  j = 0;
-  XtSetArg(args[j], XtNwidth, nl + 1 + 2*niw);  j++;
-  XtSetValues(hist->mvn, args, j);
-
-  j = 0;
-  XtSetArg(args[j], XtNwidth, wl + 2*wiw + extra/2);  j++;
-  XtSetValues(hist->mvw, args, j);
-
-  j = 0;
-  XtSetArg(args[j], XtNwidth, bl + 2*biw + extra/2);  j++;
-  XtSetValues(hist->mvb, args, j);
-}
-#endif
-
-void HistorySet(char movelist[][2*MOVE_LEN],int first,int last,int current){
-  int i,b,m;
-  if(hist){
-    if(last >= hist->aNr) HistoryAlloc(last+_LL_);
-    for(i=0;i<last;i++) {
-      if((i%2)==0) { 
-	if(movelist[i][0]) {
-	  char* p = strchr(movelist[i], ' ');
-	  if (p) {
-	    strncpy(hist->white[i/2+1], movelist[i], p-movelist[i]);
-	    hist->white[i/2+1][p-movelist[i]] = NULLCHAR;
-	  } else {
-	    strcpy(hist->white[i/2+1],movelist[i]);
-	  }	    
-	} else {
-	  strcpy(hist->white[i/2+1],dots);
-      	}
-      } else {
-	if(movelist[i][0]) {
-	  char* p = strchr(movelist[i], ' ');
-	  if (p) {
-	    strncpy(hist->black[i/2+1], movelist[i], p-movelist[i]);
-	    hist->black[i/2+1][p-movelist[i]] = NULLCHAR;
-	  } else {
-	    strcpy(hist->black[i/2+1],movelist[i]);
-	  }	    
-	} else {
-	  strcpy(hist->black[i/2+1],"");
-      	}
-      }
-    }
-    strcpy(hist->black[last/2+1],"");
-    b=first/2;
-    m=(last+3)/2-b;
-    XawFormDoLayout(hist->vbox, False);
-    XawListChange(hist->mvn,hist->Nr+b,m,0,True);
-    XawListChange(hist->mvw,hist->white+b,m,0,True);
-    XawListChange(hist->mvb,hist->black+b,m,0,True);
-    HistoryFill();
-    XawFormDoLayout(hist->vbox, True);
-    if(current<0){
-      XawListUnhighlight(hist->mvw);
-      XawListUnhighlight(hist->mvb);
-    }
-    else if((current%2)==0){
-      XawListHighlight(hist->mvw, current/2+1);
-      XawListUnhighlight(hist->mvb);
-    }
-    else{
-      XawListUnhighlight(hist->mvw);
-      if(current) XawListHighlight(hist->mvb, current/2+1);
-      else XawListUnhighlight(hist->mvb);
-    }
-  }
-}
-
-Widget HistoryCreate()
-{
-    Arg args[16];
-    int i,j;
-
-    Widget layout,form,b_close;
-    String trstr=
-             "<Key>Up: BackwardProc() \n \
-             <Key>Left: BackwardProc() \n \
-             <Key>Down: ForwardProc() \n \
-             <Key>Right: ForwardProc() \n";
-    /*--- allocate memory for move-strings ---*/
-    HistoryAlloc(_LL_);
-   
-    /*-------- create the widgets ---------------*/
-    j = 0;
-    XtSetArg(args[j], XtNresizable, True);  j++;
-    XtSetArg(args[j], XtNallowShellResize, True);  j++;   
-#if TOPLEVEL
-    hist->sh =
-      XtCreatePopupShell("Move list", topLevelShellWidgetClass,
-			 shellWidget, args, j);
-#else
-    hist->sh =
-      XtCreatePopupShell("Move list", transientShellWidgetClass,
-			 shellWidget, args, j);
-#endif        
-    j = 0;
-    XtSetArg(args[j], XtNborderWidth, 0); j++;
-    XtSetArg(args[j], XtNdefaultDistance, 0);  j++;
-      layout =
-      XtCreateManagedWidget(layoutName, formWidgetClass, hist->sh,
-			    args, j);
-    
-    j = 0;
-    XtSetArg(args[j], XtNborderWidth, 0); j++;
-    XtSetArg(args[j], XtNresizable, True);  j++;
-  
-    form =
-      XtCreateManagedWidget("form", formWidgetClass, layout, args, j);
-     j=0;
-
-    j = 0;
-
-    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
-    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
-    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
-    XtSetArg(args[j], XtNright, XtChainRight);  j++;
-
-    XtSetArg(args[j], XtNborderWidth, 1); j++;
-    XtSetArg(args[j], XtNresizable, False);  j++;
-    XtSetArg(args[j], XtNallowVert, True); j++;
-    XtSetArg(args[j], XtNallowHoriz, True);  j++;
-    XtSetArg(args[j], XtNforceBars, False); j++;
-    XtSetArg(args[j], XtNheight, 280); j++;
-    hist->viewport =
-      XtCreateManagedWidget("viewport", viewportWidgetClass,
-			    form, args, j);
-    j=0;
-    XtSetArg(args[j], XtNborderWidth, 0); j++;
-    XtSetArg(args[j], XtNorientation,XtorientHorizontal);j++;
-    hist->vbox =
-      XtCreateManagedWidget("vbox", formWidgetClass, hist->viewport, args, j);
-    
-    j=0;
-    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
-    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
-    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
-    XtSetArg(args[j], XtNright, XtChainLeft);  j++;    
-     
-    XtSetArg(args[j], XtNdefaultColumns, 1);  j++;
-    XtSetArg(args[j], XtNforceColumns, True);  j++;
-    XtSetArg(args[j], XtNverticalList, True);  j++;
-    XtSetArg(args[j], XtNborderWidth, 0); j++;
-    XtSetArg(args[j], XtNresizable,True);j++;
-    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
-    hist->mvn = XtCreateManagedWidget("movesn", listWidgetClass,
-				      hist->vbox, args, j);
-    XtAddCallback(hist->mvn, XtNcallback, HistoryMoveProc, (XtPointer) hist);
-
-    j=0;
-    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
-    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
-    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
-    XtSetArg(args[j], XtNright, XtRubber);  j++;    
-    
-    XtSetArg(args[j], XtNdefaultColumns, 1);  j++;
-    XtSetArg(args[j], XtNforceColumns, True);  j++;
-    XtSetArg(args[j], XtNverticalList, True);  j++;
-    XtSetArg(args[j], XtNborderWidth, 0); j++;
-    XtSetArg(args[j], XtNresizable,True);j++;
-    XtSetArg(args[j], XtNfromHoriz, hist->mvn);  j++;
-    hist->mvw = XtCreateManagedWidget("movesw", listWidgetClass,
-				      hist->vbox, args, j);
-    XtAddCallback(hist->mvw, XtNcallback, HistoryMoveProc, (XtPointer) hist);
-
-    j=0;
-    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
-    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
-    XtSetArg(args[j], XtNleft, XtRubber);  j++;
-    XtSetArg(args[j], XtNright,  XtRubber);  j++;
-    
-    XtSetArg(args[j], XtNdefaultColumns, 1);  j++;
-    XtSetArg(args[j], XtNforceColumns, True);  j++;
-    XtSetArg(args[j], XtNverticalList, True);  j++;
-    XtSetArg(args[j], XtNborderWidth, 0); j++;
-    XtSetArg(args[j], XtNresizable,True);j++;
-    XtSetArg(args[j], XtNfromHoriz, hist->mvw);  j++;
-    hist->mvb = XtCreateManagedWidget("movesb", listWidgetClass,
-				      hist->vbox, args, j);
-    XtAddCallback(hist->mvb, XtNcallback, HistoryMoveProc, (XtPointer) hist);
-
-    j=0;
-    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
-    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
-    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
-    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
-    XtSetArg(args[j], XtNfromVert, hist->viewport);  j++;
-    b_close= XtCreateManagedWidget("Close", commandWidgetClass,
-				   form, args, j);   
-    XtAddCallback(b_close, XtNcallback, HistoryPopDown, (XtPointer) 0);
-
-    XtAugmentTranslations(hist->sh,XtParseTranslationTable (trstr)); 
-
-    XtRealizeWidget(hist->sh);
-    CatchDeleteWindow(hist->sh, "HistoryPopDown");
-
-    for(i=1;i<hist->aNr;i++){
-      strcpy(hist->white[i],dots);
-      strcpy(hist->black[i],"");
-     }
-   
-    return hist->sh;
-}
-
-void
-HistoryPopUp()
-{
-  Arg args[16];
-  int j;
-
-  if(!hist) HistoryCreate();
-  XtPopup(hist->sh, XtGrabNone);
-  j=0;
-  XtSetArg(args[j], XtNleftBitmap, xMarkPixmap); j++;
-  XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Move List"),
-		args, j);
-  hist->Up=True;
-}
-
- 
-void
-HistoryShowProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-  if (!hist) {
-    HistoryCreate();
-    HistoryPopUp();
-  } else if (hist->Up) {
-    HistoryPopDown(0,0,0);
-  } else {
-    HistoryPopUp();
-  }
-  ToNrEvent(currentMove);
-}
- 
+/*
+ * xhistory.c -- Move list window, part of X front end for XBoard
+ * $Id$
+ *
+ * Copyright 2000,2009 Free Software Foundation, Inc.
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
+#include <sys/types.h>
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else /* not STDC_HEADERS */
+extern char *getenv();
+# if HAVE_STRING_H
+#  include <string.h>
+# else /* not HAVE_STRING_H */
+#  include <strings.h>
+# endif /* not HAVE_STRING_H */
+#endif /* not STDC_HEADERS */
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Shell.h>
+#include <X11/Xaw/Dialog.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/List.h>
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeBSB.h>
+#include <X11/Xaw/SmeLine.h>
+#include <X11/Xaw/Box.h>
+#include <X11/Xaw/Paned.h>
+#include <X11/Xaw/MenuButton.h>
+#include <X11/cursorfont.h>
+#include <X11/Xaw/Text.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/Viewport.h>
+
+#include "common.h"
+#include "frontend.h"
+#include "backend.h"
+#include "xboard.h"
+#include "xhistory.h"
+#include "gettext.h"
+
+#ifdef ENABLE_NLS
+# define  _(s) gettext (s)
+# define N_(s) gettext_noop (s)
+#else
+# define  _(s) (s)
+# define N_(s)  s
+#endif
+
+#define _LL_ 100
+
+extern Widget formWidget, shellWidget, boardWidget, menuBarWidget;
+extern Display *xDisplay;
+extern int squareSize;
+extern Pixmap xMarkPixmap;
+extern char *layoutName;
+
+struct History{
+  String *Nr,*white,*black;
+  int     aNr;  /* space actually alocated */  
+  Widget mvn,mvw,mvb,vbox,viewport,sh;
+  char Up;
+};
+
+struct History *hist=0;
+String dots=" ... ";
+Position gameHistoryX, gameHistoryY;
+
+void
+HistoryPopDown(w, client_data, call_data)
+     Widget w;
+     XtPointer client_data, call_data;
+{
+  Arg args[16];
+  int j;
+  if(hist) {
+    // [HGM] remember old position
+    j = 0;
+    XtSetArg(args[j], XtNx, &gameHistoryX);  j++;
+    XtSetArg(args[j], XtNy, &gameHistoryY);  j++;
+    XtGetValues(hist->sh, args, j);
+
+    XtPopdown(hist->sh);
+    hist->Up=False;
+  }
+  j=0;
+  XtSetArg(args[j], XtNleftBitmap, None); j++;
+  XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Move List"),
+		args, j);
+}
+
+void HistoryMoveProc(Widget w, XtPointer closure, XtPointer call_data)
+{
+    int to;
+    XawListReturnStruct *R = (XawListReturnStruct *) call_data;
+    if (w == hist->mvn || w == hist->mvw) {
+      to=2*R->list_index-1;
+      ToNrEvent(to);
+    }
+    else if (w == hist->mvb) {
+      to=2*R->list_index;
+      ToNrEvent(to);
+    }
+}
+
+void HistoryAlloc(int len){
+  int i;
+  if(hist){
+    free(hist->Nr[0]);free(hist->white[0]);free(hist->black[0]);
+    free(hist->Nr);free(hist->white);free(hist->black);
+  }
+  else{
+    hist=(struct History*)malloc(sizeof(struct History)); 
+  }
+    hist->aNr=len;
+    hist->Nr=(String*)malloc(hist->aNr*sizeof(String*));
+    hist->white=(String*)malloc(hist->aNr*sizeof(String*));
+    hist->black=(String*)malloc(hist->aNr*sizeof(String*));
+    
+    hist->Nr[0]=(String)malloc(hist->aNr*6);
+    hist->white[0]=(String)malloc(hist->aNr*MOVE_LEN);
+    hist->black[0]=(String)malloc(hist->aNr*MOVE_LEN);
+
+      sprintf(hist->Nr[0],"    ");
+      sprintf(hist->white[0],_("White "));
+      sprintf(hist->black[0],_("Black "));
+    for(i=1;i<hist->aNr;i++){
+      hist->Nr[i]= hist->Nr[i-1]+6;
+      hist->white[i]= hist->white[i-1]+MOVE_LEN;
+      hist->black[i]= hist->black[i-1]+MOVE_LEN;
+      sprintf(hist->Nr[i],"%i.",i);
+      sprintf(hist->white[i],"-----");
+      sprintf(hist->black[i],"-----");
+     }
+}
+
+
+#if 1
+/* Find empty space inside vbox form widget and redistribute it amongst
+   the list widgets inside it. */
+/* This version sort of works */
+void
+HistoryFill()
+{
+  Dimension w, bw;
+  long extra;
+  Position x, x1, x2;
+  int j, dd;
+  Arg args[16];
+
+  j = 0;
+  XtSetArg(args[j], XtNx, &x);  j++;
+  XtSetArg(args[j], XtNwidth, &w);  j++;
+  XtSetArg(args[j], XtNborderWidth, &bw);  j++;
+  XtGetValues(hist->mvb, args, j);
+  x1 = x + w + 2*bw;
+
+  j = 0;
+  XtSetArg(args[j], XtNwidth, &w);  j++;
+  XtSetArg(args[j], XtNdefaultDistance, &dd);  j++;
+  XtGetValues(hist->vbox, args, j);
+  x2 = w - dd;
+
+  extra = x2 - x1;
+  if (extra < 0) {
+    extra = -((-extra)/2);
+  } else {
+    extra = extra/2;
+  }
+ 
+  j = 0;
+  XtSetArg(args[j], XtNwidth, &w);  j++;
+  XtGetValues(hist->mvw, args, j);
+  w += extra;
+  j = 0;
+  XtSetArg(args[j], XtNwidth, w);  j++;
+  XtSetValues(hist->mvw, args, j);
+
+  j = 0;
+  XtSetArg(args[j], XtNwidth, &w);  j++;
+  XtGetValues(hist->mvb, args, j);
+  w += extra;
+  j = 0;
+  XtSetArg(args[j], XtNwidth, w);  j++;
+  XtSetValues(hist->mvb, args, j);
+}
+#else
+/* Find empty space inside vbox form widget and redistribute it amongst
+   the list widgets inside it. */
+/* This version doesn't work */
+void
+HistoryFill()
+{
+  Arg args[16];
+  Dimension fw, niw, wiw, biw, nbw, wbw, bbw;
+  int j, nl, wl, bl, fdd;
+  long extra;
+
+  j = 0;
+  XtSetArg(args[j], XtNwidth, &fw);  j++;
+  XtSetArg(args[j], XtNdefaultDistance, &fdd);  j++;
+  XtGetValues(hist->vbox, args, j);
+
+  j = 0;
+  XtSetArg(args[j], XtNlongest, &nl);  j++;
+  XtSetArg(args[j], XtNinternalWidth, &niw);  j++;
+  XtSetArg(args[j], XtNborderWidth, &nbw);  j++;
+  XtGetValues(hist->mvn, args, j);
+
+  j = 0;
+  XtSetArg(args[j], XtNlongest, &wl);  j++;
+  XtSetArg(args[j], XtNinternalWidth, &wiw);  j++;
+  XtSetArg(args[j], XtNborderWidth, &wbw);  j++;
+  XtGetValues(hist->mvw, args, j);
+
+  j = 0;
+  XtSetArg(args[j], XtNlongest, &bl);  j++;
+  XtSetArg(args[j], XtNinternalWidth, &biw);  j++;
+  XtSetArg(args[j], XtNborderWidth, &bbw);  j++;
+  XtGetValues(hist->mvb, args, j);
+
+  extra = fw - 4*fdd -
+    nl - 1 - 2*niw - 2*nbw - wl - 2*wiw - 2*wbw - bl - 2*biw - 2*bbw;
+  if (extra < 0) extra = 0;
+
+  j = 0;
+  XtSetArg(args[j], XtNwidth, nl + 1 + 2*niw);  j++;
+  XtSetValues(hist->mvn, args, j);
+
+  j = 0;
+  XtSetArg(args[j], XtNwidth, wl + 2*wiw + extra/2);  j++;
+  XtSetValues(hist->mvw, args, j);
+
+  j = 0;
+  XtSetArg(args[j], XtNwidth, bl + 2*biw + extra/2);  j++;
+  XtSetValues(hist->mvb, args, j);
+}
+#endif
+
+void HistorySet(char movelist[][2*MOVE_LEN],int first,int last,int current){
+  int i,b,m;
+  if(hist){
+    if(last >= hist->aNr) HistoryAlloc(last+_LL_);
+    for(i=0;i<last;i++) {
+      if((i%2)==0) { 
+	if(movelist[i][0]) {
+	  char* p = strchr(movelist[i], ' ');
+	  if (p) {
+	    strncpy(hist->white[i/2+1], movelist[i], p-movelist[i]);
+	    hist->white[i/2+1][p-movelist[i]] = NULLCHAR;
+	  } else {
+	    strcpy(hist->white[i/2+1],movelist[i]);
+	  }	    
+	} else {
+	  strcpy(hist->white[i/2+1],dots);
+      	}
+      } else {
+	if(movelist[i][0]) {
+	  char* p = strchr(movelist[i], ' ');
+	  if (p) {
+	    strncpy(hist->black[i/2+1], movelist[i], p-movelist[i]);
+	    hist->black[i/2+1][p-movelist[i]] = NULLCHAR;
+	  } else {
+	    strcpy(hist->black[i/2+1],movelist[i]);
+	  }	    
+	} else {
+	  strcpy(hist->black[i/2+1],"");
+      	}
+      }
+    }
+    strcpy(hist->black[last/2+1],"");
+    b=first/2;
+    m=(last+3)/2-b;
+    XawFormDoLayout(hist->vbox, False);
+    XawListChange(hist->mvn,hist->Nr+b,m,0,True);
+    XawListChange(hist->mvw,hist->white+b,m,0,True);
+    XawListChange(hist->mvb,hist->black+b,m,0,True);
+    HistoryFill();
+    XawFormDoLayout(hist->vbox, True);
+    if(current<0){
+      XawListUnhighlight(hist->mvw);
+      XawListUnhighlight(hist->mvb);
+    }
+    else if((current%2)==0){
+      XawListHighlight(hist->mvw, current/2+1);
+      XawListUnhighlight(hist->mvb);
+    }
+    else{
+      XawListUnhighlight(hist->mvw);
+      if(current) XawListHighlight(hist->mvb, current/2+1);
+      else XawListUnhighlight(hist->mvb);
+    }
+  }
+}
+
+Widget HistoryCreate()
+{
+    Arg args[16];
+    int i,j;
+
+    Widget layout,form,b_close;
+    String trstr=
+             "<Key>Up: BackwardProc() \n \
+             <Key>Left: BackwardProc() \n \
+             <Key>Down: ForwardProc() \n \
+             <Key>Right: ForwardProc() \n";
+    /*--- allocate memory for move-strings ---*/
+    HistoryAlloc(_LL_);
+   
+    /*-------- create the widgets ---------------*/
+    j = 0;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    XtSetArg(args[j], XtNallowShellResize, True);  j++;   
+#if TOPLEVEL
+    hist->sh =
+      XtCreatePopupShell(_("Move list"), topLevelShellWidgetClass,
+			 shellWidget, args, j);
+#else
+    hist->sh =
+      XtCreatePopupShell(_("Move list"), transientShellWidgetClass,
+			 shellWidget, args, j);
+#endif        
+    j = 0;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNdefaultDistance, 0);  j++;
+      layout =
+      XtCreateManagedWidget(layoutName, formWidgetClass, hist->sh,
+			    args, j);
+    
+    j = 0;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+  
+    form =
+      XtCreateManagedWidget("form", formWidgetClass, layout, args, j);
+     j=0;
+
+    j = 0;
+
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+
+    XtSetArg(args[j], XtNborderWidth, 1); j++;
+    XtSetArg(args[j], XtNresizable, False);  j++;
+    XtSetArg(args[j], XtNallowVert, True); j++;
+    XtSetArg(args[j], XtNallowHoriz, True);  j++;
+    XtSetArg(args[j], XtNforceBars, False); j++;
+    XtSetArg(args[j], XtNheight, 280); j++;
+    hist->viewport =
+      XtCreateManagedWidget("viewport", viewportWidgetClass,
+			    form, args, j);
+    j=0;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNorientation,XtorientHorizontal);j++;
+    hist->vbox =
+      XtCreateManagedWidget("vbox", formWidgetClass, hist->viewport, args, j);
+    
+    j=0;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;    
+     
+    XtSetArg(args[j], XtNdefaultColumns, 1);  j++;
+    XtSetArg(args[j], XtNforceColumns, True);  j++;
+    XtSetArg(args[j], XtNverticalList, True);  j++;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNresizable,True);j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    hist->mvn = XtCreateManagedWidget("movesn", listWidgetClass,
+				      hist->vbox, args, j);
+    XtAddCallback(hist->mvn, XtNcallback, HistoryMoveProc, (XtPointer) hist);
+
+    j=0;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtRubber);  j++;    
+    
+    XtSetArg(args[j], XtNdefaultColumns, 1);  j++;
+    XtSetArg(args[j], XtNforceColumns, True);  j++;
+    XtSetArg(args[j], XtNverticalList, True);  j++;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNresizable,True);j++;
+    XtSetArg(args[j], XtNfromHoriz, hist->mvn);  j++;
+    hist->mvw = XtCreateManagedWidget("movesw", listWidgetClass,
+				      hist->vbox, args, j);
+    XtAddCallback(hist->mvw, XtNcallback, HistoryMoveProc, (XtPointer) hist);
+
+    j=0;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtRubber);  j++;
+    XtSetArg(args[j], XtNright,  XtRubber);  j++;
+    
+    XtSetArg(args[j], XtNdefaultColumns, 1);  j++;
+    XtSetArg(args[j], XtNforceColumns, True);  j++;
+    XtSetArg(args[j], XtNverticalList, True);  j++;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNresizable,True);j++;
+    XtSetArg(args[j], XtNfromHoriz, hist->mvw);  j++;
+    hist->mvb = XtCreateManagedWidget("movesb", listWidgetClass,
+				      hist->vbox, args, j);
+    XtAddCallback(hist->mvb, XtNcallback, HistoryMoveProc, (XtPointer) hist);
+
+    j=0;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNfromVert, hist->viewport);  j++;
+    b_close= XtCreateManagedWidget(_("Close"), commandWidgetClass,
+				   form, args, j);   
+    XtAddCallback(b_close, XtNcallback, HistoryPopDown, (XtPointer) 0);
+
+    XtAugmentTranslations(hist->sh,XtParseTranslationTable (trstr)); 
+
+    XtRealizeWidget(hist->sh);
+    CatchDeleteWindow(hist->sh, "HistoryPopDown");
+
+    for(i=1;i<hist->aNr;i++){
+      strcpy(hist->white[i],dots);
+      strcpy(hist->black[i],"");
+     }
+   
+    return hist->sh;
+}
+
+void
+HistoryPopUp()
+{
+  Arg args[16];
+  int j;
+
+  if(!hist) HistoryCreate();
+  XtPopup(hist->sh, XtGrabNone);
+
+  // [HGM] restore old position
+  j = 0;
+  XtSetArg(args[j], XtNx, gameHistoryX);  j++;
+  XtSetArg(args[j], XtNy, gameHistoryY);  j++;
+  XtSetValues(hist->sh, args, j);
+
+  j=0;
+  XtSetArg(args[j], XtNleftBitmap, xMarkPixmap); j++;
+  XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Move List"),
+		args, j);
+  hist->Up=True;
+}
+
+ 
+void
+HistoryShowProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+  if (!hist) {
+    HistoryCreate();
+    HistoryPopUp();
+  } else if (hist->Up) {
+    HistoryPopDown(0,0,0);
+  } else {
+    HistoryPopUp();
+  }
+  ToNrEvent(currentMove);
+}
+ 
diff --git a/xhistory.h b/xhistory.h
index 6a375ba..7b069c4 100644
--- a/xhistory.h
+++ b/xhistory.h
@@ -2,28 +2,24 @@
  * xgamelist.h -- Game list window, part of X front end for XBoard
  * $Id: xhistory.h,v 2.1 2003/10/27 19:21:00 mann Exp $
  *
- * Copyright 1995 Free Software Foundation, Inc.
- *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * Copyright 1995,2009 Free Software Foundation, Inc.
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
  *
- * See the file ChangeLog for a revision history.
- */
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 #ifndef _XHISTL_H
 #define _XHISTL_H 1
diff --git a/xoptions.c b/xoptions.c
new file mode 100644
index 0000000..7e1603e
--- /dev/null
+++ b/xoptions.c
@@ -0,0 +1,1728 @@
+/*
+ * xoptions.c -- Move list window, part of X front end for XBoard
+ *
+ * Copyright 2000,2009 Free Software Foundation, Inc.
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+// [HGM] this file is the counterpart of woptions.c, containing xboard popup menus
+// similar to those of WinBoard, to set the most common options interactively.
+
+#include "config.h"
+
+#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
+#include <sys/types.h>
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else /* not STDC_HEADERS */
+extern char *getenv();
+# if HAVE_STRING_H
+#  include <string.h>
+# else /* not HAVE_STRING_H */
+#  include <strings.h>
+# endif /* not HAVE_STRING_H */
+#endif /* not STDC_HEADERS */
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Shell.h>
+#include <X11/Xaw/Dialog.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/List.h>
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeBSB.h>
+#include <X11/Xaw/SmeLine.h>
+#include <X11/Xaw/Box.h>
+#include <X11/Xaw/Paned.h>
+#include <X11/Xaw/MenuButton.h>
+#include <X11/cursorfont.h>
+#include <X11/Xaw/Text.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/Viewport.h>
+#include <X11/Xaw/Toggle.h>
+
+#include "common.h"
+#include "backend.h"
+#include "xboard.h"
+#include "gettext.h"
+
+#ifdef ENABLE_NLS
+# define  _(s) gettext (s)
+# define N_(s) gettext_noop (s)
+#else
+# define  _(s) (s)
+# define N_(s)  s
+#endif
+
+extern Widget formWidget, shellWidget, boardWidget, menuBarWidget;
+extern Display *xDisplay;
+extern int squareSize;
+extern Pixmap xMarkPixmap;
+extern char *layoutName;
+extern Window xBoardWindow;
+extern Arg layoutArgs[2], formArgs[2];
+Pixel timerForegroundPixel, timerBackgroundPixel;
+
+// [HGM] the following code for makng menu popups was cloned from the FileNamePopUp routines
+
+static Widget previous = NULL;
+
+void SetFocus(Widget w, XtPointer data, XEvent *event, Boolean *b)
+{
+    Arg args;
+
+    if(previous) {
+	XtSetArg(args, XtNdisplayCaret, False);
+	XtSetValues(previous, &args, 1);
+    }
+    XtSetArg(args, XtNdisplayCaret, True);
+    XtSetValues(w, &args, 1);
+    XtSetKeyboardFocus((Widget) data, w);
+    previous = w;
+}
+
+//--------------------------- New Shuffle Game --------------------------------------------
+extern int shuffleOpenings;
+extern int startedFromPositionFile;
+int shuffleUp;
+Widget shuffleShell;
+
+void ShufflePopDown()
+{
+    if (!shuffleUp) return;
+    XtPopdown(shuffleShell);
+    XtDestroyWidget(shuffleShell);
+    shuffleUp = False;
+    ModeHighlight();
+}
+
+void ShuffleCallback(w, client_data, call_data)
+     Widget w;
+     XtPointer client_data, call_data;
+{
+    String name;
+    Widget w2;
+    Arg args[16];
+    char buf[80];
+    
+    XtSetArg(args[0], XtNlabel, &name);
+    XtGetValues(w, args, 1);
+    
+    if (strcmp(name, _("cancel")) == 0) {
+        ShufflePopDown();
+        return;
+    }
+    if (strcmp(name, _("off")) == 0) {
+        ShufflePopDown();
+	shuffleOpenings = False; // [HGM] should be moved to New Variant menu, once we have it!
+	ResetGameEvent();
+	AnalysisPopDown();
+        return;
+    }
+    if (strcmp(name, _("random")) == 0) {
+	sprintf(buf, "%d", rand());
+	XtSetArg(args[0],XtNvalue, buf); // erase bad (non-numeric) value
+	XtSetValues(XtParent(w), args, 1);
+        return;
+    }
+    if (strcmp(name, _("ok")) == 0) {
+	int nr; String name;
+        name = XawDialogGetValueString(w2 = XtParent(w));
+	if(sscanf(name ,"%d",&nr) != 1) {
+	    sprintf(buf, "%d", appData.defaultFrcPosition);
+	    XtSetArg(args[0],XtNvalue, buf); // erase bad (non-numeric) value
+	    XtSetValues(w2, args, 1);
+	    return;
+	}
+	appData.defaultFrcPosition = nr;
+	shuffleOpenings = True;
+        ShufflePopDown();
+	ResetGameEvent();
+	AnalysisPopDown();
+        return;
+    }
+}
+
+void ShufflePopUp()
+{
+    Arg args[16];
+    Widget popup, layout, dialog, edit;
+    Window root, child;
+    int x, y, i;
+    int win_x, win_y;
+    unsigned int mask;
+    char def[80];
+    
+    i = 0;
+    XtSetArg(args[i], XtNresizable, True); i++;
+    XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++;
+    shuffleShell = popup =
+      XtCreatePopupShell(_("New Shuffle Game"), transientShellWidgetClass,
+			 shellWidget, args, i);
+    
+    layout =
+      XtCreateManagedWidget(layoutName, formWidgetClass, popup,
+			    layoutArgs, XtNumber(layoutArgs));
+  
+    sprintf(def, "%d\n", appData.defaultFrcPosition);
+    i = 0;
+    XtSetArg(args[i], XtNlabel, _("Start-position number:")); i++;
+    XtSetArg(args[i], XtNvalue, def); i++;
+    XtSetArg(args[i], XtNborderWidth, 0); i++;
+    dialog = XtCreateManagedWidget(_("Shuffle"), dialogWidgetClass,
+				   layout, args, i);
+    
+//    XtSetArg(args[0], XtNeditType, XawtextEdit);  // [HGM] can't get edit to work decently
+//    XtSetArg(args[1], XtNuseStringInPlace, False);
+//    XtSetValues(dialog, args, 2);
+
+    XawDialogAddButton(dialog, _("ok"), ShuffleCallback, (XtPointer) dialog);
+    XawDialogAddButton(dialog, _("cancel"), ShuffleCallback, (XtPointer) dialog);
+    XawDialogAddButton(dialog, _("random"), ShuffleCallback, (XtPointer) dialog);
+    XawDialogAddButton(dialog, _("off"), ShuffleCallback, (XtPointer) dialog);
+    
+    XtRealizeWidget(popup);
+    CatchDeleteWindow(popup, "ShufflePopDown");
+    
+    XQueryPointer(xDisplay, xBoardWindow, &root, &child,
+		  &x, &y, &win_x, &win_y, &mask);
+    
+    XtSetArg(args[0], XtNx, x - 10);
+    XtSetArg(args[1], XtNy, y - 30);
+    XtSetValues(popup, args, 2);
+    
+    XtPopup(popup, XtGrabExclusive);
+    shuffleUp = True;
+    
+    edit = XtNameToWidget(dialog, "*value");
+
+    XtSetKeyboardFocus(popup, edit);
+}
+
+void ShuffleMenuProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+//    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
+//	Reset(FALSE, TRUE);
+//    }
+    ShufflePopUp();
+}
+
+//--------------------------- Time-Control Menu Popup ----------------------------------
+int TimeControlUp;
+Widget TimeControlShell;
+int tcInc;
+Widget tcMess1, tcMess2, tcData, tcTime, tcOdds1, tcOdds2;
+int tcIncrement, tcMoves;
+
+void TimeControlPopDown()
+{
+    if (!TimeControlUp) return;
+    XtPopdown(TimeControlShell);
+    XtDestroyWidget(TimeControlShell);
+    TimeControlUp = False;
+    ModeHighlight();
+}
+
+void TimeControlCallback(w, client_data, call_data)
+     Widget w;
+     XtPointer client_data, call_data;
+{
+    String name, txt;
+    Widget w2;
+    Arg args[16];
+    char buf[80];
+    int j;
+
+    XtSetArg(args[0], XtNlabel, &name);
+    XtGetValues(w, args, 1);
+    
+    if (strcmp(name, _("classical")) == 0) {
+	if(!tcInc) return;
+	j=0;
+	XtSetArg(args[j], XtNlabel, _("minutes for each")); j++;
+	XtSetValues(tcMess1, args, j);
+	j=0;
+	XtSetArg(args[j], XtNlabel, _("moves")); j++;
+	XtSetValues(tcMess2, args, j);
+	j=0;
+	XtSetArg(args[j], XtNstring, &name); j++;
+	XtGetValues(tcData, args, j);
+	tcIncrement = 0; sscanf(name, "%d", &tcIncrement);
+	sprintf(buf, "%d", tcMoves);
+	j=0;
+	XtSetArg(args[j], XtNstring, buf); j++;
+	XtSetValues(tcData, args, j);
+	tcInc = False;
+        return;
+    }
+    if (strcmp(name, _("incremental")) == 0) {
+	if(tcInc) return;
+	j=0;
+	XtSetArg(args[j], XtNlabel, _("minutes, plus")); j++;
+	XtSetValues(tcMess1, args, j);
+	j=0;
+	XtSetArg(args[j], XtNlabel, _("sec/move")); j++;
+	XtSetValues(tcMess2, args, j);
+	j=0;
+	XtSetArg(args[j], XtNstring, &name); j++;
+	XtGetValues(tcData, args, j);
+	tcMoves = appData.movesPerSession; sscanf(name, "%d", &tcMoves);
+	sprintf(buf, "%d", tcIncrement);
+	j=0;
+	XtSetArg(args[j], XtNstring, buf); j++;
+	XtSetValues(tcData, args, j);
+	tcInc = True;
+        return;
+    }
+    if (strcmp(name, _(" OK ")) == 0) {
+	int inc, mps, tc, ok;
+	XtSetArg(args[0], XtNstring, &txt);
+	XtGetValues(tcData, args, 1);
+	if(tcInc) {
+	    ok = sscanf(txt, "%d", &inc); mps = 0;
+	    if(!ok && txt[0] == 0) { inc = 0; ok = 1; } // accept empty string as zero
+	    ok &= (inc >= 0);
+	} else {
+	    ok = sscanf(txt, "%d", &mps); inc = -1;
+	    ok &= (mps > 0);
+	}
+	if(ok != 1) {
+	    XtSetArg(args[0], XtNstring, ""); // erase any offending input
+	    XtSetValues(tcData, args, 1);
+	    return;
+	}
+	XtSetArg(args[0], XtNstring, &txt);
+	XtGetValues(tcTime, args, 1);
+	if(!ParseTimeControl(txt, inc, mps)) {
+	    XtSetArg(args[0], XtNstring, ""); // erase any offending input
+	    XtSetValues(tcTime, args, 1);
+	    DisplayError(_("Bad Time-Control String"), 0);
+	    return;
+	}
+	appData.movesPerSession = mps;
+	appData.timeIncrement = inc;
+	appData.timeControl = strdup(txt);
+	XtSetArg(args[0], XtNstring, &txt);
+	XtGetValues(tcOdds1, args, 1);
+	appData.firstTimeOdds = first.timeOdds 
+		= (sscanf(txt, "%d", &j) == 1 && j > 0) ? j : 1;
+	XtGetValues(tcOdds2, args, 1);
+	appData.secondTimeOdds = second.timeOdds 
+		= (sscanf(txt, "%d", &j) == 1 && j > 0) ? j : 1;
+
+	Reset(True, True);
+        TimeControlPopDown();
+        return;
+    }
+}
+
+void TimeControlPopUp()
+{
+    Arg args[16];
+    Widget popup, layout, form, edit, b_ok, b_cancel, b_clas, b_inc, mess;
+    Window root, child;
+    int x, y, i, j;
+    int win_x, win_y;
+    unsigned int mask;
+    char def[80];
+    
+    tcInc = (appData.timeIncrement >= 0);
+    tcMoves = appData.movesPerSession; tcIncrement = appData.timeIncrement;
+    if(!tcInc) tcIncrement = 0;
+    sprintf(def, "%d", tcInc ? tcIncrement : tcMoves);
+
+    i = 0;
+    XtSetArg(args[i], XtNresizable, True); i++;
+//    XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++;
+    TimeControlShell = popup =
+      XtCreatePopupShell(_("TimeControl Menu"), transientShellWidgetClass,
+			 shellWidget, args, i);
+    
+    layout =
+      XtCreateManagedWidget(layoutName, formWidgetClass, popup,
+			    layoutArgs, XtNumber(layoutArgs));
+  
+    form =
+      XtCreateManagedWidget(layoutName, formWidgetClass, layout,
+			    formArgs, XtNumber(formArgs));
+  
+    j = 0;
+//    XtSetArg(args[j], XtNwidth,     (XtArgVal) 300); j++;
+//    XtSetArg(args[j], XtNheight,    (XtArgVal) 85); j++;
+    XtSetValues(popup, args, j);
+
+    j= 0;
+    XtSetArg(args[j], XtNborderWidth, 1); j++;
+    XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+    XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+    XtSetArg(args[j], XtNstring, appData.timeControl);  j++;
+    XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    XtSetArg(args[j], XtNwidth,  85);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    tcTime = XtCreateManagedWidget("TC", asciiTextWidgetClass, form, args, j);
+    XtAddEventHandler(tcTime, ButtonPressMask, False, SetFocus, (XtPointer) popup);
+
+    j= 0;
+    XtSetArg(args[j], XtNlabel, tcInc ? _("   minutes, plus   ") : _("minutes for each")); j++;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNfromHoriz, tcTime); j++;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainRight);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+  //  XtSetArg(args[j], XtNwidth,  100);  j++;
+  //  XtSetArg(args[j], XtNheight, 20);  j++;
+    tcMess1 = XtCreateManagedWidget("TCtext", labelWidgetClass, form, args, j);
+
+    j= 0;
+    XtSetArg(args[j], XtNborderWidth, 1); j++;
+    XtSetArg(args[j], XtNfromHoriz, tcMess1); j++;
+    XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+    XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+    XtSetArg(args[j], XtNstring, def);  j++;
+    XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainRight);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    XtSetArg(args[j], XtNwidth,  40);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    tcData = XtCreateManagedWidget("MPS", asciiTextWidgetClass, form, args, j);
+    XtAddEventHandler(tcData, ButtonPressMask, False, SetFocus, (XtPointer) popup);
+
+    j= 0;
+    XtSetArg(args[j], XtNlabel, tcInc ? _("sec/move") : _("moves     ")); j++;
+    XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNfromHoriz, tcData); j++;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainRight);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+//    XtSetArg(args[j], XtNwidth,  80);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    tcMess2 = XtCreateManagedWidget("MPStext", labelWidgetClass,
+				   form, args, j);
+
+    j= 0;
+    XtSetArg(args[j], XtNborderWidth, 1); j++;
+    XtSetArg(args[j], XtNfromVert, tcTime); j++;
+    XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+    XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+    XtSetArg(args[j], XtNstring, "1");  j++;
+    XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    XtSetArg(args[j], XtNwidth,  40);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    tcOdds1 = XtCreateManagedWidget("Odds1", asciiTextWidgetClass, form, args, j);
+    XtAddEventHandler(tcOdds1, ButtonPressMask, False, SetFocus, (XtPointer) popup);
+
+    j= 0;
+    XtSetArg(args[j], XtNborderWidth, 1); j++;
+    XtSetArg(args[j], XtNfromVert, tcTime); j++;
+    XtSetArg(args[j], XtNfromHoriz, tcOdds1); j++;
+    XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+    XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+    XtSetArg(args[j], XtNstring, "1");  j++;
+    XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    XtSetArg(args[j], XtNwidth,  40);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    tcOdds2 = XtCreateManagedWidget("Odds2", asciiTextWidgetClass, form, args, j);
+    XtAddEventHandler(tcOdds2, ButtonPressMask, False, SetFocus, (XtPointer) popup);
+
+    j= 0;
+    XtSetArg(args[j], XtNlabel, _("Engine #1 and #2 Time-Odds Factors")); j++;
+    XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNfromVert, tcTime); j++;
+    XtSetArg(args[j], XtNfromHoriz, tcOdds2); j++;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+//    XtSetArg(args[j], XtNwidth,  200);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    mess = XtCreateManagedWidget("Oddstext", labelWidgetClass,
+				   form, args, j);
+    j=0;
+    XtSetArg(args[j], XtNfromVert, tcOdds1);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    b_clas= XtCreateManagedWidget(_("classical"), commandWidgetClass,
+				   form, args, j);   
+    XtAddCallback(b_clas, XtNcallback, TimeControlCallback, (XtPointer) 0);
+
+    j=0;
+    XtSetArg(args[j], XtNfromVert, tcOdds1);  j++;
+    XtSetArg(args[j], XtNfromHoriz, b_clas);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    b_inc = XtCreateManagedWidget(_("incremental"), commandWidgetClass,
+				   form, args, j);   
+    XtAddCallback(b_inc, XtNcallback, TimeControlCallback, (XtPointer) 0);
+
+    j=0;
+    XtSetArg(args[j], XtNfromVert, tcOdds1);  j++;
+    XtSetArg(args[j], XtNfromHoriz, tcData);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainRight);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    b_ok= XtCreateManagedWidget(_(" OK "), commandWidgetClass,
+				   form, args, j);   
+    XtAddCallback(b_ok, XtNcallback, TimeControlCallback, (XtPointer) 0);
+
+    j=0;
+    XtSetArg(args[j], XtNfromVert, tcOdds1);  j++;
+    XtSetArg(args[j], XtNfromHoriz, b_ok);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainRight);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    b_cancel= XtCreateManagedWidget(_("cancel"), commandWidgetClass,
+				   form, args, j);   
+    XtAddCallback(b_cancel, XtNcallback, TimeControlPopDown, (XtPointer) 0);
+
+    XtRealizeWidget(popup);
+    CatchDeleteWindow(popup, "TimeControlPopDown");
+    
+    XQueryPointer(xDisplay, xBoardWindow, &root, &child,
+		  &x, &y, &win_x, &win_y, &mask);
+    
+    XtSetArg(args[0], XtNx, x - 10);
+    XtSetArg(args[1], XtNy, y - 30);
+    XtSetValues(popup, args, 2);
+    
+    XtPopup(popup, XtGrabExclusive);
+    TimeControlUp = True;
+    
+    previous = NULL;
+    SetFocus(tcTime, popup, (XEvent*) NULL, False);
+//    XtSetKeyboardFocus(popup, tcTime);
+}
+
+void TimeControlProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+   TimeControlPopUp();
+}
+
+//--------------------------- Engine-Options Menu Popup ----------------------------------
+int EngineUp;
+Widget EngineShell;
+extern int adjudicateLossThreshold;
+
+Widget engDrawMoves, engThreshold, engRule, engRepeat;
+
+void EnginePopDown()
+{
+    if (!EngineUp) return;
+    XtPopdown(EngineShell);
+    XtDestroyWidget(EngineShell);
+    EngineUp = False;
+    ModeHighlight();
+}
+
+int ReadToggle(Widget w)
+{
+    Arg args; Boolean res;
+
+    XtSetArg(args, XtNstate, &res);
+    XtGetValues(w, &args, 1);
+
+    return res;
+}
+
+Widget w1, w2, w3, w4, w5, w6, w7, w8;
+
+void EngineCallback(w, client_data, call_data)
+     Widget w;
+     XtPointer client_data, call_data;
+{
+    String name;
+    Widget s2;
+    Arg args[16];
+    char buf[80];
+    int j;
+    
+    XtSetArg(args[0], XtNlabel, &name);
+    XtGetValues(w, args, 1);
+    
+    if (strcmp(name, _("OK")) == 0) {
+	// read all switches
+	appData.periodicUpdates = ReadToggle(w1);
+//	appData.hideThinkingFromHuman = ReadToggle(w2);
+	appData.firstScoreIsAbsolute  = ReadToggle(w3);
+	appData.secondScoreIsAbsolute = ReadToggle(w4);
+	appData.testClaims    = ReadToggle(w5);
+	appData.checkMates    = ReadToggle(w6);
+	appData.materialDraws = ReadToggle(w7);
+	appData.trivialDraws  = ReadToggle(w8);
+
+	// adjust setting in other menu for duplicates 
+	// (perhaps duplicates should be removed from general Option Menu?)
+//	XtSetArg(args[0], XtNleftBitmap, appData.showThinking ? xMarkPixmap : None);
+//	XtSetValues(XtNameToWidget(menuBarWidget,
+//				   "menuOptions.Show Thinking"), args, 1);
+
+	// read out numeric controls, simply ignore bad formats for now
+	XtSetArg(args[0], XtNstring, &name);
+	XtGetValues(engDrawMoves, args, 1);
+	if(sscanf(name, "%d", &j) == 1) appData.adjudicateDrawMoves = j;
+	XtGetValues(engThreshold, args, 1);
+	if(sscanf(name, "%d", &j) == 1) 
+		adjudicateLossThreshold = appData.adjudicateLossThreshold = -j; // inverted!
+	XtGetValues(engRule, args, 1);
+	if(sscanf(name, "%d", &j) == 1) appData.ruleMoves = j;
+	XtGetValues(engRepeat, args, 1);
+	if(sscanf(name, "%d", &j) == 1) appData.drawRepeats = j;
+
+        EnginePopDown();
+	ShowThinkingEvent(); // [HGM] thinking: score adjudication might need thinking output
+        return;
+    }
+}
+
+void EnginePopUp()
+{
+    Arg args[16];
+    Widget popup, layout, form, edit, b_ok, b_cancel, b_clas, b_inc, s1; 
+    Window root, child;
+    int x, y, i, j, width;
+    int win_x, win_y;
+    unsigned int mask;
+    char def[80];
+    
+    tcInc = (appData.timeIncrement >= 0);
+    tcMoves = appData.movesPerSession; tcIncrement = appData.timeIncrement;
+    if(!tcInc) tcIncrement = 0;
+    sprintf(def, "%d", tcInc ? tcIncrement : tcMoves);
+
+    i = 0;
+    XtSetArg(args[i], XtNresizable, True); i++;
+//    XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++;
+    EngineShell = popup =
+      XtCreatePopupShell(_("Adjudications"), transientShellWidgetClass,
+			 shellWidget, args, i);
+    
+    layout =
+      XtCreateManagedWidget(layoutName, formWidgetClass, popup,
+			    layoutArgs, XtNumber(layoutArgs));
+  
+    form =
+      XtCreateManagedWidget(layoutName, formWidgetClass, layout,
+			    formArgs, XtNumber(formArgs));
+  
+    j = 0;
+//    XtSetArg(args[j], XtNwidth,     (XtArgVal) 250); j++;
+//    XtSetArg(args[j], XtNheight,    (XtArgVal) 400); j++;
+//    XtSetValues(popup, args, j);
+
+    j = 0;
+//    XtSetArg(args[j], XtNwidth,       (XtArgVal) 250); j++;
+//    XtSetArg(args[j], XtNheight,      (XtArgVal) 20); j++;
+    XtSetArg(args[j], XtNleft,        (XtArgVal) XtChainLeft); j++;
+    XtSetArg(args[j], XtNright,       (XtArgVal) XtChainRight); j++;
+    XtSetArg(args[j], XtNstate,       appData.periodicUpdates); j++;
+//    XtSetArg(args[j], XtNjustify,     (XtArgVal) XtJustifyLeft); j++;
+    w1 = XtCreateManagedWidget(_("Periodic Updates (Analysis Mode)"), toggleWidgetClass, form, args, j);
+
+    XtSetArg(args[j], XtNwidth,       (XtArgVal) &width);
+    XtGetValues(w1, &args[j], 1);
+
+//    XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) w1);
+//    XtSetArg(args[j-3], XtNstate,       appData.hideThinkingFromHuman);
+//    w2 = XtCreateManagedWidget(_("Hide Thinking from Human"), toggleWidgetClass, form, args, j);
+
+    XtSetArg(args[j], XtNwidth,       (XtArgVal) width); j++;
+    XtSetArg(args[j-2], XtNstate,     appData.firstScoreIsAbsolute);
+    XtSetArg(args[j], XtNfromVert,    (XtArgVal) w1); j++;
+    w3 = XtCreateManagedWidget(_("Engine #1 Score is Absolute"), toggleWidgetClass, form, args, j);
+
+    XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) w3);
+    XtSetArg(args[j-3], XtNstate,       appData.secondScoreIsAbsolute);
+    w4 = XtCreateManagedWidget(_("Engine #2 Score is Absolute"), toggleWidgetClass, form, args, j);
+
+    s1 = XtCreateManagedWidget(_("\nEngine-Engine Adjudications:"), labelWidgetClass, form, args, 3);
+
+    XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) s1);
+    XtSetArg(args[j-3], XtNstate,       appData.testClaims);
+    w5 = XtCreateManagedWidget(_("Verify Engine Result Claims"), toggleWidgetClass, form, args, j);
+
+    XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) w5);
+    XtSetArg(args[j-3], XtNstate,       appData.checkMates);
+    w6 = XtCreateManagedWidget(_("Detect All Mates"), toggleWidgetClass, form, args, j);
+
+    XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) w6);
+    XtSetArg(args[j-3], XtNstate,       appData.materialDraws);
+    w7 = XtCreateManagedWidget(_("Draw when Insuff. Mating Material"), toggleWidgetClass, form, args, j);
+
+    XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) w7);
+    XtSetArg(args[j-3], XtNstate,       appData.trivialDraws);
+    w8 = XtCreateManagedWidget(_("Adjudicate Trivial Draws"), toggleWidgetClass, form, args, j);
+
+    XtSetArg(args[0], XtNfromVert,  (XtArgVal) w4);
+    XtSetArg(args[1], XtNborderWidth, (XtArgVal) 0);
+    XtSetValues(s1, args, 2);
+
+    sprintf(def, "%d", appData.adjudicateDrawMoves);
+    j= 0;
+    XtSetArg(args[j], XtNborderWidth, 1); j++;
+    XtSetArg(args[j], XtNfromVert, w8); j++;
+    XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+    XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+    XtSetArg(args[j], XtNstring, def);  j++;
+    XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    XtSetArg(args[j], XtNwidth,  60);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    engDrawMoves = XtCreateManagedWidget("Length", asciiTextWidgetClass, form, args, j);
+    XtAddEventHandler(engDrawMoves, ButtonPressMask, False, SetFocus, (XtPointer) popup);
+
+    j= 0;
+    XtSetArg(args[j], XtNlabel, _(" moves maximum, then draw")); j++;
+    XtSetArg(args[j], XtNjustify,     (XtArgVal) XtJustifyLeft); j++;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNfromVert, w8); j++;
+    XtSetArg(args[j], XtNfromHoriz, engDrawMoves); j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+//    XtSetArg(args[j], XtNwidth,  170);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    tcMess1 = XtCreateManagedWidget("TCtext", labelWidgetClass, form, args, j);
+
+    sprintf(def, "%d", -appData.adjudicateLossThreshold); // inverted!
+    j= 0;
+    XtSetArg(args[j], XtNborderWidth, 1); j++;
+    XtSetArg(args[j], XtNfromVert, engDrawMoves); j++;
+    XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+    XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+    XtSetArg(args[j], XtNstring, def);  j++;
+    XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    XtSetArg(args[j], XtNwidth,  60);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    engThreshold = XtCreateManagedWidget("Threshold", asciiTextWidgetClass, form, args, j);
+    XtAddEventHandler(engThreshold, ButtonPressMask, False, SetFocus, (XtPointer) popup);
+
+    j= 0;
+    XtSetArg(args[j], XtNlabel, _("-centiPawn lead is win")); j++;
+    XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNfromVert, engDrawMoves); j++;
+    XtSetArg(args[j], XtNfromHoriz, engThreshold); j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+//    XtSetArg(args[j], XtNwidth,  150);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    tcMess2 = XtCreateManagedWidget("MPStext", labelWidgetClass, form, args, j);
+
+    sprintf(def, "%d", appData.ruleMoves);
+    j= 0;
+    XtSetArg(args[j], XtNborderWidth, 1); j++;
+    XtSetArg(args[j], XtNfromVert, engThreshold); j++;
+    XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+    XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+    XtSetArg(args[j], XtNstring, def);  j++;
+    XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    XtSetArg(args[j], XtNwidth,  30);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    engRule = XtCreateManagedWidget("Rule", asciiTextWidgetClass, form, args, j);
+    XtAddEventHandler(engRule, ButtonPressMask, False, SetFocus, (XtPointer) popup);
+
+    j= 0;
+    XtSetArg(args[j], XtNlabel, _("-move rule applied")); j++;
+    XtSetArg(args[j], XtNjustify,     (XtArgVal) XtJustifyLeft); j++;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNfromVert, engThreshold); j++;
+    XtSetArg(args[j], XtNfromHoriz, engRule); j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+//    XtSetArg(args[j], XtNwidth,  130);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    tcMess1 = XtCreateManagedWidget("TCtext", labelWidgetClass, form, args, j);
+
+    sprintf(def, "%d", appData.drawRepeats);
+    j= 0;
+    XtSetArg(args[j], XtNborderWidth, 1); j++;
+    XtSetArg(args[j], XtNfromVert, engRule); j++;
+    XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+    XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+    XtSetArg(args[j], XtNstring, def);  j++;
+    XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNresizable, True);  j++;
+    XtSetArg(args[j], XtNwidth,  30);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    engRepeat = XtCreateManagedWidget("Repeats", asciiTextWidgetClass, form, args, j);
+    XtAddEventHandler(engRepeat, ButtonPressMask, False, SetFocus, (XtPointer) popup);
+
+    j= 0;
+    XtSetArg(args[j], XtNlabel, _("-fold repeat is draw")); j++;
+    XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++;
+    XtSetArg(args[j], XtNborderWidth, 0); j++;
+    XtSetArg(args[j], XtNfromVert, engRule); j++;
+    XtSetArg(args[j], XtNfromHoriz, engRepeat); j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+//    XtSetArg(args[j], XtNwidth,  130);  j++;
+//    XtSetArg(args[j], XtNheight, 20);  j++;
+    tcMess2 = XtCreateManagedWidget("MPStext", labelWidgetClass, form, args, j);
+
+    j=0;
+    XtSetArg(args[j], XtNfromVert, engRepeat);  j++;
+    XtSetArg(args[j], XtNfromHoriz, tcMess2);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainRight);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    b_ok= XtCreateManagedWidget(_("OK"), commandWidgetClass, form, args, j);   
+    XtAddCallback(b_ok, XtNcallback, EngineCallback, (XtPointer) 0);
+
+    j=0;
+    XtSetArg(args[j], XtNfromVert, engRepeat);  j++;
+    XtSetArg(args[j], XtNfromHoriz, b_ok);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainRight);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    b_cancel= XtCreateManagedWidget(_("cancel"), commandWidgetClass,
+				   form, args, j);   
+    XtAddCallback(b_cancel, XtNcallback, EnginePopDown, (XtPointer) 0);
+
+    XtRealizeWidget(popup);
+    CatchDeleteWindow(popup, "EnginePopDown");
+    
+    XQueryPointer(xDisplay, xBoardWindow, &root, &child,
+		  &x, &y, &win_x, &win_y, &mask);
+    
+    XtSetArg(args[0], XtNx, x - 10);
+    XtSetArg(args[1], XtNy, y - 30);
+    XtSetValues(popup, args, 2);
+    
+    XtPopup(popup, XtGrabExclusive);
+    EngineUp = True;
+    
+    previous = NULL;
+    SetFocus(engThreshold, popup, (XEvent*) NULL, False);
+}
+
+void EngineMenuProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+   EnginePopUp();
+}
+
+//--------------------------- New-Variant Menu PopUp -----------------------------------
+struct NewVarButton {
+  char   *name;
+  char *color;
+  Widget handle;
+  VariantClass variant;
+};
+
+struct NewVarButton buttonDesc[] = {
+    {N_("normal"),            "#FFFFFF", 0, VariantNormal},
+    {N_("FRC"),               "#FFFFFF", 0, VariantFischeRandom},
+    {N_("wild castle"),       "#FFFFFF", 0, VariantWildCastle},
+    {N_("no castle"),         "#FFFFFF", 0, VariantNoCastle},
+    {N_("knightmate"),        "#FFFFFF", 0, VariantKnightmate},
+    {N_("berolina"),          "#FFFFFF", 0, VariantBerolina},
+    {N_("cylinder"),          "#FFFFFF", 0, VariantCylinder},
+    {N_("shatranj"),          "#FFFFFF", 0, VariantShatranj},
+    {N_("atomic"),            "#FFFFFF", 0, VariantAtomic},
+    {N_("two kings"),         "#FFFFFF", 0, VariantTwoKings},
+    {N_("3-checks"),          "#FFFFFF", 0, Variant3Check},
+    {N_("suicide"),           "#FFFFBF", 0, VariantSuicide},
+    {N_("give-away"),         "#FFFFBF", 0, VariantGiveaway},
+    {N_("losers"),            "#FFFFBF", 0, VariantLosers},
+    {N_("fairy"),             "#BFBFBF", 0, VariantFairy},
+    {N_("Superchess"),        "#FFBFBF", 0, VariantSuper},
+    {N_("crazyhouse"),        "#FFBFBF", 0, VariantCrazyhouse},
+    {N_("bughouse"),          "#FFBFBF", 0, VariantBughouse},
+    {N_("shogi (9x9)"),       "#BFFFFF", 0, VariantShogi},
+    {N_("xiangqi (9x10)"),    "#BFFFFF", 0, VariantXiangqi},
+    {N_("courier (12x8)"),    "#BFFFBF", 0, VariantCourier},
+    {N_("janus (10x8)"),      "#BFBFFF", 0, VariantJanus},
+    {N_("Capablanca (10x8)"), "#BFBFFF", 0, VariantCapablanca},
+    {N_("CRC (10x8)"),        "#BFBFFF", 0, VariantCapaRandom},
+#ifdef GOTHIC
+    {N_("Gothic (10x8)"),     "#BFBFFF", 0, VariantGothic},
+#endif
+#ifdef FALCON
+    {N_("Falcon (10x8)"),     "#BFBFFF", 0, VariantFalcon},
+#endif
+    {NULL,                0, 0, (VariantClass) 0}
+};
+
+int NewVariantUp;
+Widget NewVariantShell;
+
+void NewVariantPopDown()
+{
+    if (!NewVariantUp) return;
+    XtPopdown(NewVariantShell);
+    XtDestroyWidget(NewVariantShell);
+    NewVariantUp = False;
+    ModeHighlight();
+}
+
+void NewVariantCallback(w, client_data, call_data)
+     Widget w;
+     XtPointer client_data, call_data;
+{
+    String name;
+    Widget w2;
+    Arg args[16];
+    char buf[80];
+    VariantClass v;
+    
+    XtSetArg(args[0], XtNlabel, &name);
+    XtGetValues(w, args, 1);
+    
+    if (strcmp(name, _("  OK  ")) == 0) {
+	int nr = (int) XawToggleGetCurrent(buttonDesc[0].handle) - 1;
+	if(nr < 0) return;
+	v = buttonDesc[nr].variant;
+	if(!appData.noChessProgram) { 
+	    char *name = VariantName(v), buf[MSG_SIZ];
+	    if (first.protocolVersion > 1 && StrStr(first.variants, name) == NULL) {
+		/* [HGM] in protocol 2 we check if variant is suported by engine */
+		sprintf(buf, _("Variant %s not supported by %s"), name, first.tidy);
+		DisplayError(buf, 0);
+//		NewVariantPopDown();
+		return; /* ignore OK if first engine does not support it */
+	    } else
+	    if (second.initDone && second.protocolVersion > 1 && StrStr(second.variants, name) == NULL) {
+		sprintf(buf, _("Warning: second engine (%s) does not support this!"), second.tidy);
+		DisplayError(buf, 0);   /* use of second engine is optional; only warn user */
+	    }
+	}
+
+	gameInfo.variant = v;
+	appData.variant = VariantName(v);
+
+	shuffleOpenings = FALSE; /* [HGM] shuffle: possible shuffle reset when we switch */
+	startedFromPositionFile = FALSE; /* [HGM] loadPos: no longer valid in new variant */
+	appData.pieceToCharTable = NULL;
+	Reset(True, True);
+        NewVariantPopDown();
+        return;
+    }
+}
+
+void NewVariantPopUp()
+{
+    Arg args[16];
+    Widget popup, layout, dialog, edit, form, last = NULL, b_ok, b_cancel;
+    Window root, child;
+    int x, y, i, j;
+    int win_x, win_y;
+    unsigned int mask;
+    char def[80];
+    XrmValue vFrom, vTo;
+
+    i = 0;
+    XtSetArg(args[i], XtNresizable, True); i++;
+//    XtSetArg(args[i], XtNwidth, 250); i++;
+//    XtSetArg(args[i], XtNheight, 300); i++;
+    NewVariantShell = popup =
+      XtCreatePopupShell(_("NewVariant Menu"), transientShellWidgetClass,
+			 shellWidget, args, i);
+    
+    layout =
+      XtCreateManagedWidget(layoutName, formWidgetClass, popup,
+			    layoutArgs, XtNumber(layoutArgs));
+  
+    form =
+      XtCreateManagedWidget("form", formWidgetClass, layout,
+			    formArgs, XtNumber(formArgs));
+  
+    for(i = 0; buttonDesc[i].name != NULL; i++) {
+	Pixel buttonColor;
+	if (!appData.monoMode) {
+	    vFrom.addr = (caddr_t) buttonDesc[i].color;
+	    vFrom.size = strlen(buttonDesc[i].color);
+	    XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
+	    if (vTo.addr == NULL) {
+	  	buttonColor = (Pixel) -1;
+	    } else {
+		buttonColor = *(Pixel *) vTo.addr;
+	    }
+	}
+    
+	j = 0;
+	XtSetArg(args[j], XtNradioGroup, last); j++;
+	XtSetArg(args[j], XtNwidth, 125); j++;
+//	XtSetArg(args[j], XtNheight, 16); j++;
+	XtSetArg(args[j], XtNfromVert, i == 15 ? NULL : last); j++;
+	XtSetArg(args[j], XtNfromHoriz, i < 15 ? NULL : buttonDesc[i-15].handle); j++;
+	XtSetArg(args[j], XtNradioData, i+1); j++;
+	XtSetArg(args[j], XtNbackground, buttonColor); j++;
+	XtSetArg(args[j], XtNstate, gameInfo.variant == buttonDesc[i].variant); j++;
+	buttonDesc[i].handle = last =
+	    XtCreateManagedWidget(buttonDesc[i].name, toggleWidgetClass, form, args, j);
+    }
+
+    j=0;
+    XtSetArg(args[j], XtNfromVert, buttonDesc[12].handle);  j++;
+    XtSetArg(args[j], XtNfromHoriz, buttonDesc[12].handle);  j++;
+    XtSetArg(args[j], XtNheight, 35); j++;
+//    XtSetArg(args[j], XtNwidth, 60); j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainRight);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    b_cancel= XtCreateManagedWidget(_("CANCEL"), commandWidgetClass, form, args, j);   
+    XtAddCallback(b_cancel, XtNcallback, NewVariantPopDown, (XtPointer) 0);
+
+    j=0;
+    XtSetArg(args[j], XtNfromHoriz, b_cancel);  j++;
+    XtSetArg(args[j], XtNfromVert, buttonDesc[12].handle);  j++;
+    XtSetArg(args[j], XtNheight, 35); j++;
+//    XtSetArg(args[j], XtNwidth, 60); j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainRight);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    b_ok= XtCreateManagedWidget(_("  OK  "), commandWidgetClass, form, args, j);   
+    XtAddCallback(b_ok, XtNcallback, NewVariantCallback, (XtPointer) 0);
+
+    XtRealizeWidget(popup);
+    CatchDeleteWindow(popup, "NewVariantPopDown");
+    
+    XQueryPointer(xDisplay, xBoardWindow, &root, &child,
+		  &x, &y, &win_x, &win_y, &mask);
+    
+    XtSetArg(args[0], XtNx, x - 10);
+    XtSetArg(args[1], XtNy, y - 30);
+    XtSetValues(popup, args, 2);
+    
+    XtPopup(popup, XtGrabExclusive);
+    NewVariantUp = True;
+}
+
+void NewVariantProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+   NewVariantPopUp();
+}
+
+//--------------------------- UCI Menu Popup ------------------------------------------
+int UciUp;
+Widget UciShell;
+
+struct UciControl {
+  char *name;
+  Widget handle;
+  void *ptr;
+};
+
+struct UciControl controlDesc[] = {
+  {N_("maximum nr of CPUs:"), 0, &appData.smpCores},
+  {N_("Polyglot Directory:"), 0, &appData.polyglotDir},
+  {N_("Hash Size (MB):"),     0, &appData.defaultHashSize},
+  {N_("EGTB Path:"),          0, &appData.defaultPathEGTB},
+  {N_("EGTB Cache (MB):"),    0, &appData.defaultCacheSizeEGTB},
+  {N_("Polyglot Book:"),      0, &appData.polyglotBook},
+  {NULL, 0, NULL},
+};
+
+void UciPopDown()
+{
+    if (!UciUp) return;
+    XtPopdown(UciShell);
+    XtDestroyWidget(UciShell);
+    UciUp = False;
+    ModeHighlight();
+}
+
+void UciCallback(w, client_data, call_data)
+     Widget w;
+     XtPointer client_data, call_data;
+{
+    String name;
+    Arg args[16];
+    char buf[80];
+    int oldCores = appData.smpCores, ponder = 0;
+    
+    XtSetArg(args[0], XtNlabel, &name);
+    XtGetValues(w, args, 1);
+    
+    if (strcmp(name, _("OK")) == 0) {
+	int nr, i, j; String name;
+	for(i=0; i<6; i++) {
+	    XtSetArg(args[0], XtNstring, &name);
+	    XtGetValues(controlDesc[i].handle, args, 1);
+	    if(i&1) {
+		if(name)
+		    *(char**) controlDesc[i].ptr = strdup(name);
+	    } else {
+		if(sscanf(name, "%d", &j) == 1) 
+		    *(int*) controlDesc[i].ptr = j;
+	    }
+	}
+	XtSetArg(args[0], XtNstate, &appData.usePolyglotBook);
+	XtGetValues(w1, args, 1);
+	XtSetArg(args[0], XtNstate, &appData.firstHasOwnBookUCI);
+	XtGetValues(w2, args, 1);
+	XtSetArg(args[0], XtNstate, &appData.secondHasOwnBookUCI);
+	XtGetValues(w3, args, 1);
+	XtSetArg(args[0], XtNstate, &ponder);
+	XtGetValues(w4, args, 1);
+
+	// adjust setting in other menu for duplicates 
+	// (perhaps duplicates should be removed from general Option Menu?)
+	XtSetArg(args[0], XtNleftBitmap, ponder ? xMarkPixmap : None);
+	XtSetValues(XtNameToWidget(menuBarWidget,
+				   "menuOptions.Ponder Next Move"), args, 1);
+
+	// make sure changes are sent to first engine by re-initializing it
+	// if it was already started pre-emptively at end of previous game
+	if(gameMode == BeginningOfGame) Reset(True, True); else {
+	    // Some changed setting need immediate sending always.
+	    PonderNextMoveEvent(ponder);
+	    if(oldCores != appData.smpCores)
+		NewSettingEvent(False, "cores", appData.smpCores);
+      }
+      UciPopDown();
+      return;
+    }
+}
+
+void UciPopUp()
+{
+    Arg args[16];
+    Widget popup, layout, dialog, edit, form, b_ok, b_cancel, last = NULL, new, upperLeft;
+    Window root, child;
+    int x, y, i, j;
+    int win_x, win_y;
+    unsigned int mask;
+    char def[80];
+    
+    i = 0;
+    XtSetArg(args[i], XtNresizable, True); i++;
+//    XtSetArg(args[i], XtNwidth, 300); i++;
+    UciShell = popup =
+      XtCreatePopupShell(_("Engine Settings"), transientShellWidgetClass,
+			 shellWidget, args, i);
+    
+    layout =
+      XtCreateManagedWidget(layoutName, formWidgetClass, popup,
+			    layoutArgs, XtNumber(layoutArgs));
+  
+    
+    form =
+      XtCreateManagedWidget("form", formWidgetClass, layout,
+			    formArgs, XtNumber(formArgs));
+  
+    j = 0;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+//    XtSetArg(args[j], XtNheight, 20); j++;
+    for(i = 0; controlDesc[i].name != NULL; i++) {
+	j = 3;
+	XtSetArg(args[j], XtNfromVert, last); j++;
+//	XtSetArg(args[j], XtNwidth, 130); j++;
+	XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++;
+	XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+	XtSetArg(args[j], XtNborderWidth, 0); j++;
+	new = XtCreateManagedWidget(controlDesc[i].name, labelWidgetClass, form, args, j);
+	if(i==0) upperLeft = new;
+
+	j = 4;
+	XtSetArg(args[j], XtNborderWidth, 1); j++;
+	XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+	XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+	XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+	XtSetArg(args[j], XtNright, XtChainRight);  j++;
+	XtSetArg(args[j], XtNresizable, True);  j++;
+	XtSetArg(args[j], XtNwidth, i&1 ? 245 : 50); j++;
+	if(i&1) {
+	    XtSetArg(args[j], XtNstring, * (char**) controlDesc[i].ptr ? 
+					 * (char**) controlDesc[i].ptr : ""); j++;
+	} else {
+	    sprintf(def, "%d", * (int*) controlDesc[i].ptr);
+	    XtSetArg(args[j], XtNstring, def); j++;
+	}
+	XtSetArg(args[j], XtNfromHoriz, upperLeft); j++;
+	controlDesc[i].handle = last =
+	    XtCreateManagedWidget("text", asciiTextWidgetClass, form, args, j);
+	XtAddEventHandler(last, ButtonPressMask, False, SetFocus, (XtPointer) popup);
+    }
+
+    j=0;
+    XtSetArg(args[j], XtNfromHoriz, controlDesc[0].handle);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainTop);  j++;
+    XtSetArg(args[j], XtNtop, XtChainTop);  j++;
+    XtSetArg(args[j], XtNleft, XtChainRight);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    XtSetArg(args[j], XtNstate, appData.ponderNextMove);  j++;
+    w4 = XtCreateManagedWidget(_("Ponder"), toggleWidgetClass, form, args, j);   
+
+    j=0;
+    XtSetArg(args[j], XtNfromVert, last);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    b_ok = XtCreateManagedWidget(_("OK"), commandWidgetClass, form, args, j);   
+    XtAddCallback(b_ok, XtNcallback, UciCallback, (XtPointer) 0);
+
+    XtSetArg(args[j], XtNfromHoriz, b_ok);  j++;
+    b_cancel = XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j);   
+    XtAddCallback(b_cancel, XtNcallback, UciPopDown, (XtPointer) 0);
+
+    j = 5;
+    XtSetArg(args[j], XtNfromHoriz, upperLeft);  j++;
+    XtSetArg(args[j], XtNstate, appData.usePolyglotBook);  j++;
+    w1 = XtCreateManagedWidget(_(" use book "), toggleWidgetClass, form, args, j);   
+//    XtAddCallback(w1, XtNcallback, UciCallback, (XtPointer) 0);
+
+    j = 5;
+    XtSetArg(args[j], XtNfromHoriz, w1);  j++;
+    XtSetArg(args[j], XtNstate, appData.firstHasOwnBookUCI);  j++;
+    w2 = XtCreateManagedWidget(_("own book 1"), toggleWidgetClass, form, args, j);   
+//    XtAddCallback(w2, XtNcallback, UciCallback, (XtPointer) 0);
+
+    j = 5;
+    XtSetArg(args[j], XtNfromHoriz, w2);  j++;
+    XtSetArg(args[j], XtNstate, appData.secondHasOwnBookUCI);  j++;
+    w3 = XtCreateManagedWidget(_("own book 2"), toggleWidgetClass, form, args, j);   
+//    XtAddCallback(w3, XtNcallback, UciCallback, (XtPointer) 0);
+
+    XtRealizeWidget(popup);
+    CatchDeleteWindow(popup, "UciPopDown");
+    
+    XQueryPointer(xDisplay, xBoardWindow, &root, &child,
+		  &x, &y, &win_x, &win_y, &mask);
+    
+    XtSetArg(args[0], XtNx, x - 10);
+    XtSetArg(args[1], XtNy, y - 30);
+    XtSetValues(popup, args, 2);
+    
+    XtPopup(popup, XtGrabExclusive);
+    UciUp = True;
+
+    previous = NULL;
+    SetFocus(controlDesc[2].handle, popup, (XEvent*) NULL, False);
+//    XtSetKeyboardFocus(popup, controlDesc[1].handle);
+}
+
+void UciMenuProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+   UciPopUp();
+}
+
+//--------------------------- Engine-specific options menu ----------------------------------
+
+int SettingsUp;
+Widget SettingsShell;
+int values[MAX_OPTIONS];
+ChessProgramState *currentCps;
+
+void SettingsPopDown()
+{
+    if (!SettingsUp) return;
+    XtPopdown(SettingsShell);
+    XtDestroyWidget(SettingsShell);
+    SettingsUp = False;
+    ModeHighlight();
+}
+
+void SpinCallback(w, client_data, call_data)
+     Widget w;
+     XtPointer client_data, call_data;
+{
+    String name, val;
+    Widget w2;
+    Arg args[16];
+    char buf[MSG_SIZ];
+    int i, j;
+    
+    XtSetArg(args[0], XtNlabel, &name);
+    XtGetValues(w, args, 1);
+    
+    j = 0;
+    XtSetArg(args[0], XtNstring, &val);
+    XtGetValues(currentCps->option[(int)client_data].handle, args, 1);
+    sscanf(val, "%d", &j);
+    if (strcmp(name, "+") == 0) {
+	if(++j > currentCps->option[(int)client_data].max) return;
+    } else
+    if (strcmp(name, "-") == 0) {
+	if(--j < currentCps->option[(int)client_data].min) return;
+    } else return;
+    sprintf(buf, "%d", j);
+    XtSetArg(args[0], XtNstring, buf);
+    XtSetValues(currentCps->option[(int)client_data].handle, args, 1);
+}
+
+void SettingsCallback(w, client_data, call_data)
+     Widget w;
+     XtPointer client_data, call_data;
+{
+    String name, val;
+    Widget w2;
+    Arg args[16];
+    char buf[MSG_SIZ];
+    int i, j;
+    
+    XtSetArg(args[0], XtNlabel, &name);
+    XtGetValues(w, args, 1);
+    
+    if (strcmp(name, _("cancel")) == 0) {
+        SettingsPopDown();
+        return;
+    }
+    if (strcmp(name, _("OK")) == 0 || (int)client_data) { // save buttons imply OK
+	int nr;
+
+	for(i=0; i<currentCps->nrOptions; i++) { // send all options that had to be OK-ed to engine
+	    switch(currentCps->option[i].type) {
+		case TextBox:
+		    XtSetArg(args[0], XtNstring, &val);
+		    XtGetValues(currentCps->option[i].handle, args, 1);
+		    if(strcmp(currentCps->option[i].textValue, val)) {
+			strcpy(currentCps->option[i].textValue, val);
+			sprintf(buf, "option %s=%s\n", currentCps->option[i].name, val);
+			SendToProgram(buf, currentCps);
+		    }
+		    break;
+		case Spin:
+		    XtSetArg(args[0], XtNstring, &val);
+		    XtGetValues(currentCps->option[i].handle, args, 1);
+		    sscanf(val, "%d", &j);
+		    if(j > currentCps->option[i].max) j = currentCps->option[i].max;
+		    if(j < currentCps->option[i].min) j = currentCps->option[i].min;
+		    if(currentCps->option[i].value != j) {
+			currentCps->option[i].value = j;
+			sprintf(buf, "option %s=%d\n", currentCps->option[i].name, j);
+			SendToProgram(buf, currentCps);
+		    }
+		    break;
+		case CheckBox:
+		    j = 0;
+		    XtSetArg(args[0], XtNstate, &j);
+		    XtGetValues(currentCps->option[i].handle, args, 1);
+		    if(currentCps->option[i].value != j) {
+			currentCps->option[i].value = j;
+			sprintf(buf, "option %s=%d\n", currentCps->option[i].name, j);
+			SendToProgram(buf, currentCps);
+		    }
+		    break;
+		case ComboBox:
+		    if(currentCps->option[i].value != values[i]) {
+			currentCps->option[i].value = values[i];
+			sprintf(buf, "option %s=%s\n", currentCps->option[i].name, 
+				((char**)currentCps->option[i].textValue)[values[i]]);
+			SendToProgram(buf, currentCps);
+		    }
+		    break;
+	    }
+	}
+	if((int)client_data) { // send save-button command to engine
+	    sprintf(buf, "option %s\n", name);
+	    SendToProgram(buf, currentCps);
+	}
+        SettingsPopDown();
+        return;
+    }
+    sprintf(buf, "option %s\n", name);
+    SendToProgram(buf, currentCps);
+}
+
+void ComboSelect(w, addr, index) // callback for all combo items
+     Widget w;
+     caddr_t addr;
+     caddr_t index;
+{
+    Arg args[16];
+    int i = ((int)addr)>>8;
+    int j = 255 & (int) addr;
+
+    values[i] = j; // store in temporary, for transfer at OK
+    XtSetArg(args[0], XtNlabel, ((char**)currentCps->option[i].textValue)[j]);
+    XtSetValues(currentCps->option[i].handle, args, 1);
+}
+
+void CreateComboPopup(parent, name, n, mb)
+     Widget parent;
+     String name;
+     int n;
+     char *mb[];
+{
+    int i=0, j;
+    Widget menu, entry;
+    Arg args[16];
+
+    menu = XtCreatePopupShell(name, simpleMenuWidgetClass,
+			      parent, NULL, 0);
+    j = 0;
+    XtSetArg(args[j], XtNwidth, 100);  j++;
+//    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    while (mb[i] != NULL) {
+	    entry = XtCreateManagedWidget(mb[i], smeBSBObjectClass,
+					  menu, args, j);
+	    XtAddCallback(entry, XtNcallback,
+			  (XtCallbackProc) ComboSelect,
+			  (caddr_t) (256*n+i));
+	i++;
+    }
+}	
+
+void SettingsPopUp(ChessProgramState *cps)
+{
+    Arg args[16];
+    Widget popup, layout, dialog, edit, form, oldform, last, b_ok, b_cancel;
+    Window root, child;
+    int x, y, i, j;
+    int win_x, win_y;
+    unsigned int mask;
+    char def[80], *p, *q;
+
+    // to do: start up second engine if needed
+    if(!cps->initDone || !cps->nrOptions) return; // nothing to be done
+    currentCps = cps;
+
+    i = 0;
+    XtSetArg(args[i], XtNresizable, True); i++;
+    SettingsShell = popup =
+      XtCreatePopupShell(_("Settings Menu"), transientShellWidgetClass,
+			 shellWidget, args, i);
+    
+    layout =
+      XtCreateManagedWidget(layoutName, formWidgetClass, popup,
+			    layoutArgs, XtNumber(layoutArgs));
+  
+    form =
+      XtCreateManagedWidget(layoutName, formWidgetClass, layout,
+			    formArgs, XtNumber(formArgs));
+  
+    last = NULL;
+    for(i=0; i<cps->nrOptions; i++) {
+	Widget box;
+	switch(cps->option[i].type) {
+	  case Spin:
+	    sprintf(def, "%d", cps->option[i].value);
+	  case TextBox:
+	    j=0;
+	    XtSetArg(args[j], XtNfromVert, last);  j++;
+	    XtSetArg(args[j], XtNborderWidth, 0);  j++;
+	    XtSetArg(args[j], XtNjustify, XtJustifyLeft);  j++;
+	    dialog = XtCreateManagedWidget(cps->option[i].name, labelWidgetClass, form, args, j);   
+	    j=0;
+	    XtSetArg(args[j], XtNfromVert, last);  j++;
+	    XtSetArg(args[j], XtNfromHoriz, dialog);  j++;
+	    XtSetArg(args[j], XtNborderWidth, 1); j++;
+	    XtSetArg(args[j], XtNwidth, cps->option[i].type == Spin ? 40 : 100); j++;
+	    XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;
+	    XtSetArg(args[j], XtNuseStringInPlace, False);  j++;
+	    XtSetArg(args[j], XtNdisplayCaret, False);  j++;
+	    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+	    XtSetArg(args[j], XtNresizable, True);  j++;
+	    XtSetArg(args[j], XtNstring, cps->option[i].type==Spin ? def : cps->option[i].textValue);  j++;
+	    edit = last;
+	    cps->option[i].handle = (void*)
+		(last = XtCreateManagedWidget("text", asciiTextWidgetClass, form, args, j));   
+	    XtAddEventHandler(box, ButtonPressMask, False, SetFocus, (XtPointer) popup);
+	    if(cps->option[i].type == TextBox) break;
+	    // add increment and decrement controls for spin
+	    j=0;
+	    XtSetArg(args[j], XtNfromVert, edit);  j++;
+	    XtSetArg(args[j], XtNfromHoriz, box);  j++;
+	    XtSetArg(args[j], XtNheight, 10);  j++;
+	    XtSetArg(args[j], XtNwidth, 20);  j++;
+	    edit = XtCreateManagedWidget("+", commandWidgetClass, form, args, j);
+	    XtAddCallback(edit, XtNcallback, SpinCallback, (XtPointer) i);
+	    j=0;
+	    XtSetArg(args[j], XtNfromVert, edit);  j++;
+	    XtSetArg(args[j], XtNfromHoriz, last);  j++;
+	    XtSetArg(args[j], XtNheight, 10);  j++;
+	    XtSetArg(args[j], XtNwidth, 20);  j++;
+	    last = XtCreateManagedWidget("-", commandWidgetClass, form, args, j);
+	    XtAddCallback(last, XtNcallback, SpinCallback, (XtPointer) i);
+	    break;
+	  case CheckBox:
+	    j=0;
+	    XtSetArg(args[j], XtNfromVert, last);  j++;
+	    XtSetArg(args[j], XtNwidth, 10);  j++;
+	    XtSetArg(args[j], XtNheight, 10);  j++;
+	    XtSetArg(args[j], XtNstate, cps->option[i].value);  j++;
+	    cps->option[i].handle = (void*) 
+		(dialog = XtCreateManagedWidget(" ", toggleWidgetClass, form, args, j));   
+	    j=0;
+	    XtSetArg(args[j], XtNfromVert, last);  j++;
+	    XtSetArg(args[j], XtNfromHoriz, dialog);  j++;
+	    XtSetArg(args[j], XtNborderWidth, 0);  j++;
+	    XtSetArg(args[j], XtNjustify, XtJustifyLeft);  j++;
+	    last = XtCreateManagedWidget(cps->option[i].name, labelWidgetClass, form, args, j);
+	    break;
+	  case SaveButton:
+	  case Button:
+	    j=0;
+	    XtSetArg(args[j], XtNfromVert, last);  j++;
+	    XtSetArg(args[j], XtNstate, cps->option[i].value);  j++;
+	    cps->option[i].handle = (void*) 
+		(last = XtCreateManagedWidget(cps->option[i].name, commandWidgetClass, form, args, j));   
+	    XtAddCallback(last, XtNcallback, SettingsCallback, (XtPointer) (cps->option[i].type == SaveButton));
+	    break;
+	  case ComboBox:
+	    j=0;
+	    XtSetArg(args[j], XtNfromVert, last);  j++;
+	    XtSetArg(args[j], XtNborderWidth, 0);  j++;
+	    XtSetArg(args[j], XtNjustify, XtJustifyLeft);  j++;
+	    dialog = XtCreateManagedWidget(cps->option[i].name, labelWidgetClass, form, args, j);
+
+	    j=0;
+	    XtSetArg(args[j], XtNfromVert, last);  j++;
+	    XtSetArg(args[j], XtNfromHoriz, dialog);  j++;
+	    XtSetArg(args[j], XtNwidth, 100);  j++;
+	    XtSetArg(args[j], XtNmenuName, XtNewString(cps->option[i].name));  j++;
+	    XtSetArg(args[j], XtNlabel, ((char**)cps->option[i].textValue)[cps->option[i].value]);  j++;
+	    cps->option[i].handle = (void*) 
+		(last = XtCreateManagedWidget(" ", menuButtonWidgetClass, form, args, j));   
+	    CreateComboPopup(last, cps->option[i].name, i, (char **) cps->option[i].textValue);
+	    values[i] = cps->option[i].value;
+	    break;
+	}
+    }
+
+    j=0;
+    XtSetArg(args[j], XtNfromVert, last);  j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;
+    b_ok = XtCreateManagedWidget(_("OK"), commandWidgetClass, form, args, j);   
+    XtAddCallback(b_ok, XtNcallback, SettingsCallback, (XtPointer) 0);
+
+    XtSetArg(args[j], XtNfromHoriz, b_ok);  j++;
+    b_cancel = XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j);   
+    XtAddCallback(b_cancel, XtNcallback, SettingsPopDown, (XtPointer) 0);
+
+    XtRealizeWidget(popup);
+    CatchDeleteWindow(popup, "SettingsPopDown");
+    
+    XQueryPointer(xDisplay, xBoardWindow, &root, &child,
+		  &x, &y, &win_x, &win_y, &mask);
+    
+    XtSetArg(args[0], XtNx, x - 10);
+    XtSetArg(args[1], XtNy, y - 30);
+    XtSetValues(popup, args, 2);
+    
+    XtPopup(popup, XtGrabExclusive);
+    SettingsUp = True;
+
+    previous = NULL;
+    SetFocus(edit, popup, (XEvent*) NULL, False);
+}
+
+void FirstSettingsProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+   SettingsPopUp(&first);
+}
+
+void SecondSettingsProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+   SettingsPopUp(&second);
+}
+
+//--------------------------- General Popup for Cloning ----------------------------------
+#if 0
+int XXXUp;
+Widget XXXShell;
+
+void XXXPopDown()
+{
+    if (!XXXUp) return;
+    XtPopdown(XXXShell);
+    XtDestroyWidget(XXXShell);
+    XXXUp = False;
+    ModeHighlight();
+}
+
+void XXXCallback(w, client_data, call_data)
+     Widget w;
+     XtPointer client_data, call_data;
+{
+    String name;
+    Widget w2;
+    Arg args[16];
+    char buf[80];
+    
+    XtSetArg(args[0], XtNlabel, &name);
+    XtGetValues(w, args, 1);
+    
+    if (strcmp(name, _("cancel")) == 0) {
+        XXXPopDown();
+        return;
+    }
+    if (strcmp(name, _("ok")) == 0) {
+	int nr; String name;
+        name = XawDialogGetValueString(w2 = XtParent(w));
+	if(sscanf(name ,"%d",&nr) != 1) {
+	    sprintf(buf, "%d", appData.defaultFrcPosition);
+	    XtSetArg(args[0],XtNvalue, buf); // erase bad (non-numeric) value
+	    XtSetValues(w2, args, 1);
+	    return;
+	}
+        XXXPopDown();
+        return;
+    }
+}
+
+void XXXPopUp()
+{
+    Arg args[16];
+    Widget popup, layout, dialog, edit;
+    Window root, child;
+    int x, y, i;
+    int win_x, win_y;
+    unsigned int mask;
+    char def[80];
+    
+    i = 0;
+    XtSetArg(args[i], XtNresizable, True); i++;
+    XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++;
+    XXXShell = popup =
+      XtCreatePopupShell(_("XXX Menu"), transientShellWidgetClass,
+			 shellWidget, args, i);
+    
+    layout =
+      XtCreateManagedWidget(layoutName, formWidgetClass, popup,
+			    layoutArgs, XtNumber(layoutArgs));
+  
+    sprintf(def, "%d\n", appData.defaultFrcPosition);
+    i = 0;
+    XtSetArg(args[i], XtNlabel, ""); i++;
+    XtSetArg(args[i], XtNvalue, def); i++;
+    XtSetArg(args[i], XtNborderWidth, 0); i++;
+    dialog = XtCreateManagedWidget("XXX", dialogWidgetClass,
+				   layout, args, i);
+    
+    XawDialogAddButton(dialog, _("ok"), XXXCallback, (XtPointer) dialog);
+    XawDialogAddButton(dialog, _("cancel"), XXXCallback, (XtPointer) dialog);
+    
+    XtRealizeWidget(popup);
+    CatchDeleteWindow(popup, "XXXPopDown");
+    
+    XQueryPointer(xDisplay, xBoardWindow, &root, &child,
+		  &x, &y, &win_x, &win_y, &mask);
+    
+    XtSetArg(args[0], XtNx, x - 10);
+    XtSetArg(args[1], XtNy, y - 30);
+    XtSetValues(popup, args, 2);
+    
+    XtPopup(popup, XtGrabExclusive);
+    XXXUp = True;
+    
+    edit = XtNameToWidget(dialog, "*value");
+
+    previous = NULL;
+    SetFocus(engThreshold, popup, (XEvent*) NULL, False);
+}
+
+void XXXMenuProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+   XXXPopUp();
+}
+#endif
+
diff --git a/zic2xpm.c b/zic2xpm.c
index 7d816ed..b96817f 100644
--- a/zic2xpm.c
+++ b/zic2xpm.c
@@ -4,7 +4,7 @@
 	Program to convert pieces from ZIICS format to XPM & XIM format.
 	(C version)  By Frank McIngvale <frankm at hiwaay.net>.
 
-	Copyright (C) 1996 Free Software Foundation, Inc.
+	Copyright (C) 1996,2009 Free Software Foundation, Inc.
 
 	NOTICE: The piece images distributed with ZIICS are
 	    copyrighted works of their original creators.  Images 
@@ -24,20 +24,23 @@
             by experimentation, and without access to any
             of Borland Inc.'s BGI library source code.
 
-	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.  However, the above notices
-	MUST BE RETAINED in any copy that you redistribute or modify.
 
-	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.
+	    GNU XBoard is free software: you can redistribute it
+	    and/or modify it under the terms of the GNU General Public
+	    License as published by the Free Software Foundation,
+	    either version 3 of the License, or (at your option) any
+	    later version.
+	    
+	    GNU XBoard is distributed in the hope that it will be
+	    useful, but WITHOUT ANY WARRANTY; without even the implied
+	    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+	    PURPOSE. See the GNU General Public License for more
+	    details.
+	    
+	    You should have received a copy of the GNU General Public
+	    License along with this program. If not, see
+	    http://www.gnu.org/licenses/.
 
-	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., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
 
 	** If you find a bug in zic2xpm.c, please report it to me,
   	   Frank McIngvale (frankm at hiwaay.net) so that I may fix it. **
diff --git a/zic2xpm.man b/zic2xpm.man
index 9a6769d..9aa60b0 100644
--- a/zic2xpm.man
+++ b/zic2xpm.man
@@ -1,4 +1,4 @@
-.\" Copyright (C) 1996 Free Software Foundation, Inc.
+.\" Copyright (C) 1996,2009 Free Software Foundation, Inc.
 .\" See section COPYING below.
 .TH zic2xpm 6 "11 Apr 1996" "zic2xpm 2.0" "Games"
 .SH NAME
@@ -38,7 +38,7 @@ Please report any bugs to
 .SH AUTHOR
 Frank McIngvale (frankm at hiwaay.net)
 .SH COPYING
-Copyright (C) 1996 Free Software Foundation, Inc.
+Copyright (C) 1996,2009 Free Software Foundation, Inc.
 .PP
 NOTICE: The piece images distributed with ZIICS are
 copyrighted works of their original creators.  Images 
@@ -60,7 +60,7 @@ of Borland Inc.'s BGI library source code.
 .PP
 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
+the Free Software Foundation; either version 3 of the License, or
 (at your option) any later version.  However, the above notices
 MUST BE RETAINED in any copy that you redistribute or modify.
 .PP
@@ -70,5 +70,4 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 .PP
 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., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+along with this program; if not, see http://www.gnu.org/licenses/.
diff --git a/zic2xpm.txt b/zic2xpm.txt
deleted file mode 100644
index 6eb6c7e..0000000
--- a/zic2xpm.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-zic2xpm(6)                           Games                          zic2xpm(6)
-
-NNAAMMEE
-       zic2xpm  -  Tool  to  convert  ZIICS chess pieces into XBoard (XPM/XIM)
-       pieces.
-
-SSYYNNOOPPSSIISS
-       zic2xpm ffiillee11 [[ffiillee22 ......]]
-
-DDEESSCCRRIIPPTTIIOONN
-       zziicc22xxppmm converts one or more ZIICS piece files into a format  that  can
-       be  used  by XBoard.  If you give more than one filename, be aware that
-       multiple sets of the same size cannot exist in one directory.  Multiple
-       sets of different sizes can exist in a single directory.
-
-EEXXAAMMPPLLEE
-       If  you  wanted  to  make  a  directory  containing  the sets SET2.V32,
-       SET2.V40, SET2.V50, and SET2.V56, all of which are located in  ~/ziics,
-       you could do:
-
-             mkdir Sets
-             cd Sets
-             zic2xpm ~/ziics/SET2.*
-
-       You would then run XBoard like this:
-
-            xboard -pixmap Sets
-
-BBUUGGSS
-       Please report any bugs to ffrraannkkmm@@hhiiwwaaaayy..nneett
-
-SSEEEE AALLSSOO
-        xxbbooaarrdd(66).
-
-AAUUTTHHOORR
-       Frank McIngvale (frankm at hiwaay.net)
-
-CCOOPPYYIINNGG
-       Copyright (C) 1996 Free Software Foundation, Inc.
-
-       NOTICE:  The  piece images distributed with ZIICS are copyrighted works
-       of their original creators.  Images converted with zic2xpm may  not  be
-       redistributed  without the permission of the copyright holders.  Do not
-       contact the authors of zic2xpm or of ZIICS itself  to  request  permis-
-       sion.
-
-       NOTICE:    The  format  of  the  ZIICS  piece  file  was  gleaned  from
-       SHOWSETS.PAS, a part of ZIICS.  Thanks to Andy McFarland (Zek  on  ICC)
-       for  making  this source available!  ZIICS is a completely separate and
-       copyrighted work of Andy McFarland.   Use  and  distribution  of  ZIICS
-       falls under the ZIICS license, NOT the GNU General Public License.
-
-       NOTICE:  The format of the VGA imageblocks was determined by experimen-
-       tation, and without access to any of Borland Inc.'s BGI library  source
-       code.
-
-       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.  However, the above notices MUST BE RETAINED
-       in any copy that you redistribute or modify.
-
-       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 Gen-
-       eral 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.,
-       59 Temple Place, Suite 330, Boston, MA 02111 USA.
-
-zic2xpm 2.0                       11 Apr 1996                       zic2xpm(6)
diff --git a/zippy.c b/zippy.c
index c15b0b3..8114437 100644
--- a/zippy.c
+++ b/zippy.c
@@ -1,1073 +1,1154 @@
-/*
- * zippy.c -- Implements Zippy the Pinhead chess player on ICS in XBoard
- * $Id: zippy.c,v 2.2 2003/11/25 05:25:20 mann Exp $
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-2001 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 XBoard distributed
- * by the Free Software Foundation:
- * ------------------------------------------------------------------------
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <ctype.h>
-
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <string.h>
-#else /* not STDC_HEADERS */
-extern char *getenv();
-# if HAVE_STRING_H
-#  include <string.h>
-# else /* not HAVE_STRING_H */
-#  include <strings.h>
-# endif /* not HAVE_STRING_H */
-#endif /* not STDC_HEADERS */
-
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#define HI "hlelo "
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#include "common.h"
-#include "zippy.h"
-#include "frontend.h"
-#include "backend.h"
-#include "backendz.h"
-
-static char zippyPartner[MSG_SIZ];
-static char zippyLastOpp[MSG_SIZ];
-static int zippyConsecGames;
-static time_t zippyLastGameEnd;
-
-void ZippyInit()
-{
-    char *p;
-
-    /* Get name of Zippy lines file */
-    p = getenv("ZIPPYLINES");
-    if (p != NULL) {
-      appData.zippyLines = p;
-    }
-
-    /* Get word that Zippy thinks is insulting */
-    p = getenv("ZIPPYPINHEAD");
-    if (p != NULL) {
-      appData.zippyPinhead = p;
-    }
-
-    /* What password is used for remote control? */
-    p = getenv("ZIPPYPASSWORD");
-    if (p != NULL) {
-      appData.zippyPassword = p;
-    }
-
-    /* What password is used for remote commands to gnuchess? */
-    p = getenv("ZIPPYPASSWORD2");
-    if (p != NULL) {
-      appData.zippyPassword2 = p;
-    }
-
-    /* Joke feature for people who try an old password */
-    p = getenv("ZIPPYWRONGPASSWORD");
-    if (p != NULL) {
-      appData.zippyWrongPassword = p;
-    }
-
-    /* While testing, I want to accept challenges from only one person
-       (namely, my "anonymous" account), so I set an environment
-       variable ZIPPYACCEPTONLY. */
-    p = getenv("ZIPPYACCEPTONLY");
-    if ( p != NULL ) {
-      appData.zippyAcceptOnly = p;
-    }
-    
-    /* Should Zippy use "i" command? */
-    /* Defaults to 1=true */
-    p = getenv("ZIPPYUSEI");
-    if (p != NULL) {
-      appData.zippyUseI = atoi(p);
-    }
-
-    /* How does Zippy handle bughouse partnering? */
-    /* 0=say we can't play, 1=manual partnering, 2=auto partnering */
-    p = getenv("ZIPPYBUGHOUSE");
-    if (p != NULL) {
-      appData.zippyBughouse = atoi(p);
-    }
-
-    /* Does Zippy abort games with Crafty? */
-    /* Defaults to 0=false */
-    p = getenv("ZIPPYNOPLAYCRAFTY");
-    if (p != NULL) {
-      appData.zippyNoplayCrafty = atoi(p);
-    }
-
-    /* What ICS command does Zippy send at game end?  Default: "gameend". */
-    p = getenv("ZIPPYGAMEEND");
-    if (p != NULL) {
-      appData.zippyGameEnd = p;
-    }
-
-    /* What ICS command does Zippy send at game start?  Default: none. */
-    p = getenv("ZIPPYGAMESTART");
-    if (p != NULL) {
-      appData.zippyGameStart = p;
-    }
-
-    /* Should Zippy accept adjourns? */
-    /* Defaults to 0=false */
-    p = getenv("ZIPPYADJOURN");
-    if (p != NULL) {
-      appData.zippyAdjourn = atoi(p);
-    }
-
-    /* Should Zippy accept aborts? */
-    /* Defaults to 0=false */
-    p = getenv("ZIPPYABORT");
-    if (p != NULL) {
-      appData.zippyAbort = atoi(p);
-    }
-
-    /* Should Zippy play chess variants (besides bughouse)? */
-    p = getenv("ZIPPYVARIANTS");
-    if (p != NULL) {
-      appData.zippyVariants = p;
-    }
-    strcpy(first.variants, appData.zippyVariants);
-
-    srandom(time(NULL));
-}
-
-/*
- * Routines to implement Zippy talking
- */
-
-
-char *swifties[] = { 
-    "i acclaims:", "i admonishes:", "i advertises:", "i advises:",
-    "i advocates:", "i affirms:", "i alleges:", "i anathematizes:",
-    "i animadverts:", "i announces:", "i apostrophizes:",
-    "i appeals:", "i applauds:", "i approves:", "i argues:",
-    "i articulates:", "i asserts:", "i asseverates:", "i attests:",
-    "i avers:", "i avows:", "i baas:", "i babbles:", "i banters:",
-    "i barks:", "i bawls:", "i bays:", "i begs:", "i belches:",
-    "i bellows:", "i belts out:", "i berates:", "i beshrews:",
-    "i blabbers:", "i blabs:", "i blares:", "i blasphemes:",
-    "i blasts:", "i blathers:", "i bleats:", "i blithers:",
-    "i blubbers:", "i blurts out:", "i blusters:", "i boasts:",
-    "i brags:", "i brays:", "i broadcasts:", "i burbles:",
-    "i buzzes:", "i cachinnates:", "i cackles:", "i caterwauls:",
-    "i calumniates:", "i caws:", "i censures:", "i chants:",
-    "i chatters:", "i cheeps:", "i cheers:", "i chides:", "i chins:",
-    "i chirps:", "i chortles:", "i chuckles:", "i claims:",
-    "i clamors:", "i clucks:", "i commands:", "i commends:",
-    "i comments:", "i commiserates:", "i communicates:",
-    "i complains:", "i concludes:", "i confabulates:", "i confesses:",
-    "i coos:", "i coughs:", "i counsels:", "i cries:", "i croaks:",
-    "i crows:", "i curses:", "i daydreams:", "i debates:",
-    "i declaims:", "i declares:", "i delivers:", "i denounces:",
-    "i deposes:", "i directs:", "i discloses:", "i disparages:",
-    "i discourses:", "i divulges:", "i documents:", "i drawls:",
-    "i dreams:", "i drivels:", "i drones:", "i effuses:",
-    /*"i ejaculates:",*/ "i elucidates:", "i emotes:", "i endorses:",
-    "i enthuses:", "i entreats:", "i enunciates:", "i eulogizes:",
-    "i exclaims:", "i execrates:", "i exhorts:", "i expatiates:",
-    "i explains:", "i explicates:", "i explodes:", "i exposes:",
-    "i exposits:", "i expounds:", "i expresses:", "i extols:",
-    "i exults:", "i fantasizes:", "i fibs:", "i filibusters:",
-    "i flatters:", "i flutes:", "i fools:", "i free-associates:",
-    "i fulminates:", "i gabbles:", "i gabs:", "i gasps:",
-    "i giggles:", "i gossips:", "i gripes:", "i groans:", "i growls:",
-    "i grunts:", "i guesses:", "i guffaws:", "i gushes:", "i hails:",
-    "i hallucinates:", "i harangues:", "i harmonizes:", "i hectors:",
-    "i hints:", "i hisses:", "i hollers:", "i honks:", "i hoots:",
-    "i hosannas:", "i howls:", "i hums:", "i hypothecates:",
-    "i hypothesizes:", "i imagines:", "i implies:", "i implores:",
-    "i imprecates:", "i indicates:", "i infers:",
-    "i informs everyone:",  "i instructs:", "i interjects:", 
-    "i interposes:", "i intimates:", "i intones:", "i introspects:",
-    "i inveighs:", "i jabbers:", "i japes:", "i jests:", "i jibes:",
-    "i jives:", "i jokes:", "i joshes:", "i keens:", "i laments:",
-    "i lauds:", "i laughs:", "i lectures:", "i lies:", "i lilts:",
-    "i lisps:", "i maintains:", "i maledicts:", "i maunders:",
-    "i meows:", "i mewls:", "i mimes:", "i minces:", "i moans:",
-    "i moos:", "i mourns:", "i mouths:", "i mumbles:", "i murmurs:",
-    "i muses:", "i mutters:", "i nags:", "i natters:", "i neighs:",
-    "i notes:", "i nuncupates:", "i objurgates:", "i observes:",
-    "i offers:", "i oinks:", "i opines:", "i orates:", "i orders:",
-    "i panegyrizes:", "i pantomimes:", "i pants:", "i peals:",
-    "i peeps:", "i perorates:", "i persuades:", "i petitions:",
-    "i phonates:", "i pipes up:", "i pitches:", "i pleads:",
-    "i points out:", "i pontificates:", "i postulates:", "i praises:",
-    "i prates:", "i prattles:", "i preaches:", "i prescribes:",
-    "i prevaricates:", "i proclaims:", "i projects:", "i pronounces:",
-    "i proposes:", "i proscribes:", "i quacks:", "i queries:",
-    "i questions:", "i quips:", "i quotes:", "i rages:", "i rambles:",
-    "i rants:", "i raps:", "i rasps:", "i rattles:", "i raves:",
-    "i reacts:", "i recites:", "i recommends:", "i records:",
-    "i reiterates:", "i rejoins:", "i releases:", "i remarks:",
-    "i reminisces:", "i remonstrates:", "i repeats:", "i replies:",
-    "i reports:", "i reprimands:", "i reproaches:", "i reproves:",
-    "i resounds:", "i responds:", "i retorts:", "i reveals:",
-    "i reviles:", "i roars:", "i rumbles:", "i sanctions:",
-    "i satirizes:", "i sauces:", "i scolds:", "i screams:",
-    "i screeches:", "i semaphores:", "i sends:", "i sermonizes:",
-    "i shrieks:", "i sibilates:", "i sighs:", "i signals:",
-    "i signifies:", "i signs:", "i sings:", "i slurs:", "i snaps:",
-    "i snarls:", "i sneezes:", "i snickers:", "i sniggers:",
-    "i snivels:", "i snores:", "i snorts:", "i sobs:",
-    "i soliloquizes:", "i sounds off:", "i sounds out:", "i speaks:",
-    "i spews:", "i spits out:", "i splutters:", "i spoofs:",
-    "i spouts:", "i sputters:", "i squalls:", "i squawks:",
-    "i squeaks:", "i squeals:", "i stammers:", "i states:",
-    "i stresses:", "i stutters:", "i submits:", "i suggests:",
-    "i summarizes:", "i sums up:", "i swears:", "i talks:",
-    "i tattles:", "i teases:", "i telegraphs:", "i testifies:",
-    "i threatens:", "i thunders:", "i titters:", "i tongue-lashes:",
-    "i toots:", "i transcribes:", "i transmits:", "i trills:",
-    "i trumpets:", "i twaddles:", "i tweets:", "i twitters:",
-    "i types:", "i upbraids:", "i urges:", "i utters:", "i ventures:",
-    "i vibrates:", "i vilifies:", "i vituperates:", "i vocalizes:",
-    "i vociferates:", "i voices:", "i waffles:", "i wails:",
-    "i warbles:", "i warns:", "i weeps:", "i wheezes:", "i whimpers:",
-    "i whines:", "i whinnies:", "i whistles:", "i wisecracks:",
-    "i witnesses:", "i woofs:", "i writes:", "i yammers:", "i yawps:",
-    "i yells:", "i yelps:", "i yodels:", "i yowls:", "i zings:",
-};
-
-#define MAX_SPEECH 250
-
-void Speak(how, whom) 
-     char *how, *whom;
-{
-    static FILE *zipfile = NULL;
-    static struct stat zipstat;
-    char zipbuf[MAX_SPEECH + 1];
-    static time_t lastShout = 0;
-    time_t now;
-    char  *p;
-    int c, speechlen;
-    Boolean done;
-		
-    if (strcmp(how, "shout") == 0) {
-	now = time((time_t *) NULL);
-	if (now - lastShout < 1*60) return;
-	lastShout = now;
-	if (appData.zippyUseI) {
-	    how = swifties[(unsigned) random() %
-			   (sizeof(swifties)/sizeof(char *))];
-	}
-    }
-
-    if (zipfile == NULL) {
-	zipfile = fopen(appData.zippyLines, "r");
-	if (zipfile == NULL) {
-	    DisplayFatalError("Can't open Zippy lines file", errno, 1);
-	    return;
-	}
-	fstat(fileno(zipfile), &zipstat);
-    }
-		
-    for (;;) {
-	fseek(zipfile, (unsigned) random() % zipstat.st_size, 0);
-	do {
-	  c = getc(zipfile);
-	} while (c != NULLCHAR && c != '^' && c != EOF);
-	if (c == EOF) continue;
-	while ((c = getc(zipfile)) == '\n') ;
-	if (c == EOF) continue;
-	break;
-    }
-    done = FALSE;
-
-    /* Don't use ics_prefix; we need to let FICS expand the alias i -> it,
-       but use the real command "i" on ICC */
-    strcpy(zipbuf, how);
-    strcat(zipbuf, " ");
-    if (whom != NULL) {
-	strcat(zipbuf, whom);
-	strcat(zipbuf, " ");
-    }
-    speechlen = strlen(zipbuf);
-    p = zipbuf + speechlen;
-
-    while (++speechlen < MAX_SPEECH) {
-	if (c == NULLCHAR || c == '^') {
-	    *p++ = '\n';
-	    *p = '\0';
-	    SendToICS(zipbuf);
-	    return;
-	} else if (c == '\n') {
-	    *p++ = ' ';
-	    do {
-		c = getc(zipfile);
-	    } while (c == ' ');
-	} else if (c == EOF) {
-	    break;
-	} else {
-	    *p++ = c;
-	    c = getc(zipfile);
-	}
-    }
-    /* Tried to say something too long, or junk at the end of the
-       file.  Try something else. */
-    Speak(how, whom);  /* tail recursion */
-}
-
-int ZippyCalled(str)
-     char *str;
-{
-    return ics_handle[0] != NULLCHAR && StrCaseStr(str, ics_handle) != NULL;
-}
-
-static char opp_name[128][32];
-static int num_opps=0;
-
-int ZippyControl(buf, i)
-     char *buf;
-     int *i;
-{
-    char *player, *p;
-    char reply[MSG_SIZ];
-
-#if TRIVIA
-#include "trivia.c"
-#endif
-
-    /* Possibly reject Crafty as opponent */
-    if (appData.zippyPlay && appData.zippyNoplayCrafty && forwardMostMove < 4
-	&& looking_at(buf, i, "* kibitzes: Hello from Crafty")) {
-        player = StripHighlightAndTitle(star_match[0]);
-	if ((gameMode == IcsPlayingWhite &&
-	     StrCaseCmp(player, gameInfo.black) == 0) ||
-	    (gameMode == IcsPlayingBlack &&
-	     StrCaseCmp(player, gameInfo.white) == 0)) {
-
-	  sprintf(reply, "%ssay This computer does not play Crafty clones\n%sabort\n%s+noplay %s\n",
-		  ics_prefix, ics_prefix, ics_prefix, player);
-	  SendToICS(reply);
-	}
-	return TRUE;
-    }
-
-    /* If this is a computer, save the name.  Then later, once the */
-    /* game is really started, we will send the "computer" notice to */
-    /* the engine.  */ 
-    if (appData.zippyPlay &&
-	looking_at(buf, i, "* is in the computer list")) {
-	int i;
-	for (i=0;i<num_opps;i++)
-	  if (!strcmp(opp_name[i],star_match[0])) break;
-	if (i >= num_opps) strcpy(opp_name[num_opps++],star_match[0]);
-    }
-    if (appData.zippyPlay && looking_at(buf, i, "* * is a computer *")) {
-	int i;
-	for (i=0;i<num_opps;i++)
-	  if (!strcmp(opp_name[i],star_match[1])) break;
-	if (i >= num_opps) strcpy(opp_name[num_opps++],star_match[1]);
-    }
-
-    /* Tells and says */
-    if (appData.zippyPlay && 
-	(looking_at(buf, i, "* offers to be your bughouse partner") ||
-	 looking_at(buf, i, "* tells you: [automatic message] I chose you"))) {
-	player = StripHighlightAndTitle(star_match[0]);
-	if (appData.zippyBughouse > 1 && first.initDone) {
-	    sprintf(reply, "%spartner %s\n", ics_prefix, player);
-	    SendToICS(reply);
-	    if (strcmp(zippyPartner, player) != 0) {
-		strcpy(zippyPartner, player);
-		SendToProgram(reply + strlen(ics_prefix), &first);
-	    }
-	} else if (appData.zippyBughouse > 0) {
-	    sprintf(reply, "%sdecline %s\n", ics_prefix, player);
-	    SendToICS(reply);
-	} else {
-	    sprintf(reply, "%stell %s This computer cannot play bughouse\n",
-		    ics_prefix, player);
-	    SendToICS(reply);
-	}
-	return TRUE;
-    }
-
-    if (appData.zippyPlay && appData.zippyBughouse && first.initDone &&
-	looking_at(buf, i, "* agrees to be your partner")) {
-	player = StripHighlightAndTitle(star_match[0]);
-	sprintf(reply, "partner %s\n", player);
-	if (strcmp(zippyPartner, player) != 0) {
-	    strcpy(zippyPartner, player);
-	    SendToProgram(reply, &first);
-	}
-	return TRUE;
-    }
-
-    if (appData.zippyPlay && appData.zippyBughouse && first.initDone &&
-	(looking_at(buf, i, "are no longer *'s partner") ||
-	 looking_at(buf, i,
-		    "* tells you: [automatic message] I'm no longer your"))) {
-	player = StripHighlightAndTitle(star_match[0]);
-	if (strcmp(zippyPartner, player) == 0) {
-	    zippyPartner[0] = NULLCHAR;
-	    SendToProgram("partner\n", &first);
-	}
-	return TRUE;
-    }
-
-    if (appData.zippyPlay && appData.zippyBughouse && first.initDone &&
-	(looking_at(buf, i, "no longer have a bughouse partner") ||
-	 looking_at(buf, i, "partner has disconnected") ||
-	 looking_at(buf, i, "partner has just chosen a new partner"))) {
-      zippyPartner[0] = NULLCHAR;
-      SendToProgram("partner\n", &first);
-      return TRUE;
-    }
-
-    if (appData.zippyPlay && appData.zippyBughouse && first.initDone &&
-	looking_at(buf, i, "* (your partner) tells you: *")) {
-	/* This pattern works on FICS but not ICC */
-	player = StripHighlightAndTitle(star_match[0]);
-	if (strcmp(zippyPartner, player) != 0) {
-	    strcpy(zippyPartner, player);
-	    sprintf(reply, "partner %s\n", player);
-	    SendToProgram(reply, &first);
-	}
-	sprintf(reply, "ptell %s\n", star_match[1]);
-	SendToProgram(reply, &first);
-	return TRUE;
-    }
-
-    if (looking_at(buf, i, "* tells you: *") ||
-	looking_at(buf, i, "* says: *")) {
-	player = StripHighlightAndTitle(star_match[0]);
-	if (appData.zippyPassword[0] != NULLCHAR &&
-	    strncmp(star_match[1], appData.zippyPassword,
-		    strlen(appData.zippyPassword)) == 0) {
-	    p = star_match[1] + strlen(appData.zippyPassword);
-	    while (*p == ' ') p++;
-	    SendToICS(p);
-	    SendToICS("\n");
-	} else if (appData.zippyPassword2[0] != NULLCHAR && first.initDone &&
-	    strncmp(star_match[1], appData.zippyPassword2,
-		    strlen(appData.zippyPassword2)) == 0) {
-	    p = star_match[1] + strlen(appData.zippyPassword2);
-	    while (*p == ' ') p++;
-	    SendToProgram(p, &first);
-	    SendToProgram("\n", &first);
-	} else if (appData.zippyWrongPassword[0] != NULLCHAR &&
-	    strncmp(star_match[1], appData.zippyWrongPassword,
-		    strlen(appData.zippyWrongPassword)) == 0) {
-	    p = star_match[1] + strlen(appData.zippyWrongPassword);
-	    while (*p == ' ') p++;
-	    sprintf(reply, "wrong %s\n", player);
-	    SendToICS(reply);
-	} else if (appData.zippyBughouse && first.initDone &&
-		   strcmp(player, zippyPartner) == 0) {
-	    SendToProgram("ptell ", &first);
-	    SendToProgram(star_match[1], &first);
-	    SendToProgram("\n", &first);
-	} else if (strncmp(star_match[1], HI, 6) == 0) {
-	    extern char* programVersion;
-	    sprintf(reply, "%stell %s %s\n",
-		    ics_prefix, player, programVersion);
-	    SendToICS(reply);
-	} else if (strncmp(star_match[1], "W0W!! ", 6) == 0) {
-	    extern char* programVersion;
-	    sprintf(reply, "%stell %s %s\n", ics_prefix,
-		    player, programVersion);
-	    SendToICS(reply);
-	} else if (appData.zippyTalk && (((unsigned) random() % 10) < 9)) {
-	    if (strcmp(player, ics_handle) != 0) {
-		Speak("tell", player);
-	    }
-	}
-	return TRUE;
-    }
-
-    if (looking_at(buf, i, "* spoofs you:")) {
-        player = StripHighlightAndTitle(star_match[0]);
-        sprintf(reply, "spoofedby %s\n", player);
-        SendToICS(reply);
-    }
-    return FALSE;
-}
-
-int ZippyConverse(buf, i)
-     char *buf;
-     int *i;
-{
-    static char lastgreet[MSG_SIZ];
-    char reply[MSG_SIZ];
-    int oldi;
-
-    /* Shouts and emotes */
-    if (looking_at(buf, i, "--> * *") ||
-	looking_at(buf, i, "* shouts: *")) {
-      if (appData.zippyTalk) {
-	char *player = StripHighlightAndTitle(star_match[0]);
-	if (strcmp(player, ics_handle) == 0) {
-	    return TRUE;
-	} else if (appData.zippyPinhead[0] != NULLCHAR &&
-		   StrCaseStr(star_match[1], appData.zippyPinhead) != NULL) {
-	    sprintf(reply, "insult %s\n", player);
-	    SendToICS(reply);
-	} else if (ZippyCalled(star_match[1])) {
-	    Speak("shout", NULL);
-	}
-      }
-      return TRUE;
-    }
-
-    if (looking_at(buf, i, "* kibitzes: *")) {
-      if (appData.zippyTalk && ((unsigned) random() % 10) < 9) {
-	char *player = StripHighlightAndTitle(star_match[0]);
-	if (strcmp(player, ics_handle) != 0) {
-	    Speak("kibitz", NULL);
-	}
-      }
-      return TRUE;
-    }
-
-    if (looking_at(buf, i, "* whispers: *")) {
-      if (appData.zippyTalk && ((unsigned) random() % 10) < 9) {
-	char *player = StripHighlightAndTitle(star_match[0]);
-	if (strcmp(player, ics_handle) != 0) {
-	    Speak("whisper", NULL);
-	}
-      }
-      return TRUE;
-    }
-
-    /* Messages */
-    if ((looking_at(buf, i, ". * (*:*): *") && isdigit(star_match[1][0])) ||
-	 looking_at(buf, i, ". * at *:*: *")) {
-      if (appData.zippyTalk) {
-	FILE *f;
-	char *player = StripHighlightAndTitle(star_match[0]);
-
-	if (strcmp(player, ics_handle) != 0) {
-	    if (((unsigned) random() % 10) < 9)
-	      Speak("message", player);
-	    f = fopen("zippy.messagelog", "a");
-	    fprintf(f, "%s (%s:%s): %s\n", player,
-		    star_match[1], star_match[2], star_match[3]);
-	    fclose(f);
-	}
-      }
-      return TRUE;
-    }
-
-    /* Channel tells */
-    oldi = *i;
-    if (looking_at(buf, i, "*(*: *")) {
-	char *player;
-	char *channel;
-	if (star_match[0][0] == NULLCHAR  ||
-	    strchr(star_match[0], ' ') ||
-	    strchr(star_match[1], ' ')) {
-	    /* Oops, did not want to match this; probably a message */
-	    *i = oldi;
-	    return FALSE;
-	}
-	if (appData.zippyTalk) {
-	  player = StripHighlightAndTitle(star_match[0]);
-	  channel = strrchr(star_match[1], '(');
-	  if (channel == NULL) {
-	    channel = star_match[1];
-	  } else {
-	    channel++;
-	  }
-	  channel[strlen(channel)-1] = NULLCHAR;
-#if 0
-	  /* Always tell to the channel (probability 90%) */
-	  if (strcmp(player, ics_handle) != 0 &&
-	      ((unsigned) random() % 10) < 9) {
-	    Speak("tell", channel);
-	  }
-#else
-	  /* Tell to the channel only if someone mentions our name */
-	  if (ZippyCalled(star_match[2])) {
-	    Speak("tell", channel);
-	  }
-#endif
-	}
-	return TRUE;
-    }
-
-    if (!appData.zippyTalk) return FALSE;
-
-    if ((looking_at(buf, i, "You have * message") &&
-	 atoi(star_match[0]) != 0) ||
-	looking_at(buf, i, "* has left a message for you") ||
-	looking_at(buf, i, "* just sent you a message")) {
-        sprintf(reply, "%smessages\n%sclearmessages *\n",
-		ics_prefix, ics_prefix);
-	SendToICS(reply);
-	return TRUE;
-    }
-
-    if (looking_at(buf, i, "Notification: * has arrived")) {
-	if (((unsigned) random() % 3) == 0) {
-	    char *player = StripHighlightAndTitle(star_match[0]);
-	    strcpy(lastgreet, player);
-	    sprintf(reply, "greet %s\n", player);
-	    SendToICS(reply);
-	    Speak("tell", player);
-	}
-    }	
-
-    if (looking_at(buf, i, "Notification: * has departed")) {
-	if (((unsigned) random() % 3) == 0) {
-	    char *player = StripHighlightAndTitle(star_match[0]);
-	    sprintf(reply, "farewell %s\n", player);
-	    SendToICS(reply);
-	}
-    }	
-
-    if (looking_at(buf, i, "Not sent -- * is censoring you")) {
-	char *player = StripHighlightAndTitle(star_match[0]);
-	if (strcmp(player, lastgreet) == 0) {
-	    sprintf(reply, "%s-notify %s\n", ics_prefix, player);
-	    SendToICS(reply);
-	}
-    }	
-
-    if (looking_at(buf, i, "command is currently turned off")) {
-	appData.zippyUseI = 0;
-    }
-
-    return FALSE;
-}
-
-void ZippyGameStart(white, black)
-     char *white, *black;
-{
-    if (!first.initDone) {
-      /* Game is starting prematurely.  We can't deal with this */
-      SendToICS(ics_prefix);
-      SendToICS("abort\n");
-      SendToICS(ics_prefix);
-      SendToICS("say Sorry, the chess program is not initialized yet.\n");
-      return;
-    }
-
-    if (appData.zippyGameStart[0] != NULLCHAR) {
-      SendToICS(appData.zippyGameStart);
-      SendToICS("\n");
-    }
-}
-
-void ZippyGameEnd(result, resultDetails)
-     ChessMove result;
-     char *resultDetails;
-{
-    if (appData.zippyAcceptOnly[0] == NULLCHAR &&
-	appData.zippyGameEnd[0] != NULLCHAR) {
-      SendToICS(appData.zippyGameEnd);
-      SendToICS("\n");
-    }
-    zippyLastGameEnd = time(0);
-}
-
-/*
- * Routines to implement Zippy playing chess
- */
-
-void ZippyHandleChallenge(srated, swild, sbase, sincrement, opponent)
-     char *srated, *swild, *sbase, *sincrement, *opponent;
-{
-    char buf[MSG_SIZ];
-    int base, increment;
-    char rated;
-    VariantClass variant;
-    char *varname;
-
-    rated = srated[0];
-    variant = StringToVariant(swild);
-    varname = VariantName(variant);
-    base = atoi(sbase);
-    increment = atoi(sincrement);
-
-    /* If desired, you can insert more code here to decline matches
-       based on rated, variant, base, and increment, but it is
-       easier to use the ICS formula feature instead. */
-
-    if (variant == VariantLoadable) {
-        sprintf(buf,
-	 "%stell %s This computer can't play wild type %s\n%sdecline %s\n",
-		ics_prefix, opponent, swild, ics_prefix, opponent);
-	SendToICS(buf);
-	return;
-    }
-    if (StrStr(appData.zippyVariants, varname) == NULL) {
-        sprintf(buf,
-	 "%stell %s This computer can't play %s [%s], only %s\n%sdecline %s\n",
-		ics_prefix, opponent, swild, varname, appData.zippyVariants,
-		ics_prefix, opponent);
-	SendToICS(buf);
-	return;
-    }
-
-    /* Are we blocking match requests from all but one person? */
-    if (appData.zippyAcceptOnly[0] != NULLCHAR &&
-	StrCaseCmp(opponent, appData.zippyAcceptOnly)) {
-        /* Yes, and this isn't him.  Ignore challenge. */
-	return;
-    }
-    
-    /* Too many consecutive games with same opponent?  If so, make him
-       wait until someone else has played or a timeout has elapsed. */
-    if (appData.zippyMaxGames &&
-	strcmp(opponent, zippyLastOpp) == 0 &&
-	zippyConsecGames >= appData.zippyMaxGames &&
-	difftime(time(0), zippyLastGameEnd) < appData.zippyReplayTimeout) {
-      sprintf(buf, "%stell %s Sorry, you have just played %d consecutive games against %s.  To give others a chance, please wait %d seconds or until someone else has played.\n%sdecline %s\n",
-	      ics_prefix, opponent, zippyConsecGames, ics_handle,
-	      appData.zippyReplayTimeout, ics_prefix, opponent);
-      SendToICS(buf);
-      return;
-    }
-
-    /* Engine not yet initialized or still thinking about last game? */
-    if (!first.initDone || first.lastPing != first.lastPong) {
-      sprintf(buf, "%stell %s I'm not quite ready for a new game yet; try again soon.\n%sdecline %s\n",
-	      ics_prefix, opponent, ics_prefix, opponent);
-      SendToICS(buf);
-      return;
-    }
-
-    sprintf(buf, "%saccept %s\n", ics_prefix, opponent);
-    SendToICS(buf);
-    if (appData.zippyTalk) {
-      Speak("tell", opponent);
-    }
-}
-
-
-/* Accept matches */
-int ZippyMatch(buf, i)
-     char *buf;
-     int *i;
-{
-    if (looking_at(buf, i, "* * match * * requested with * (*)")) {
-
-	ZippyHandleChallenge(star_match[0], star_match[1],
-			     star_match[2], star_match[3],
-			     StripHighlightAndTitle(star_match[4]));
-	return TRUE;
-    }
-
-    /* Old FICS 0-increment form */
-    if (looking_at(buf, i, "* * match * requested with * (*)")) {
-
-	ZippyHandleChallenge(star_match[0], star_match[1],
-			     star_match[2], "0",
-			     StripHighlightAndTitle(star_match[3]));
-	return TRUE;
-    }
-
-    if (looking_at(buf, i,
-		   "* has made an alternate proposal of * * match * *.")) {
-
-	ZippyHandleChallenge(star_match[1], star_match[2],
-			     star_match[3], star_match[4],
-			     StripHighlightAndTitle(star_match[0]));
-	return TRUE;
-    }
-
-    /* FICS wild/nonstandard forms */
-    if (looking_at(buf, i, "Challenge: * (*) *(*) * * * * Loaded from *")) {
-	/* note: star_match[2] can include "[white] " or "[black] "
-	   before our own name. */
-	ZippyHandleChallenge(star_match[4], star_match[8],
-			     star_match[6], star_match[7],
-			     StripHighlightAndTitle(star_match[0]));
-	return TRUE;
-    }
-
-    if (looking_at(buf, i,
-		   "Challenge: * (*) *(*) * * * * : * * Loaded from *")) {
-	/* note: star_match[2] can include "[white] " or "[black] "
-	   before our own name. */
-	ZippyHandleChallenge(star_match[4], star_match[10],
-			     star_match[8], star_match[9],
-			     StripHighlightAndTitle(star_match[0]));
-	return TRUE;
-    }
-
-    /* Regular forms */
-    if (looking_at(buf, i, "Challenge: * (*) *(*) * * * * : * *") |
-	looking_at(buf, i, "Challenge: * (*) *(*) * * * * * *")) {
-	/* note: star_match[2] can include "[white] " or "[black] "
-	   before our own name. */
-	ZippyHandleChallenge(star_match[4], star_match[5],
-			     star_match[8], star_match[9],
-			     StripHighlightAndTitle(star_match[0]));
-	return TRUE;
-    }
-
-    if (looking_at(buf, i, "Challenge: * (*) *(*) * * * *")) {
-	/* note: star_match[2] can include "[white] " or "[black] "
-	   before our own name. */
-	ZippyHandleChallenge(star_match[4], star_match[5],
-			     star_match[6], star_match[7],
-			     StripHighlightAndTitle(star_match[0]));
-	return TRUE;
-    }
-
-    if (looking_at(buf, i, "offers you a draw")) {
-        if (first.sendDrawOffers && first.initDone) {
-	    SendToProgram("draw\n", &first);
-	}
-	return TRUE;
-    }
-
-    if (looking_at(buf, i, "requests that the game be aborted") ||
-        looking_at(buf, i, "would like to abort")) {
-	if (appData.zippyAbort ||
-	    (gameMode == IcsPlayingWhite && whiteTimeRemaining < 0) ||
-	    (gameMode == IcsPlayingBlack && blackTimeRemaining < 0)) {
-	    SendToICS(ics_prefix);
-	    SendToICS("abort\n");
-	} else {
-	    SendToICS(ics_prefix);
-	    if (appData.zippyTalk)
-	      SendToICS("say Whoa no!  I am having FUN!!\n");
-	    else
-	      SendToICS("say Sorry, this computer doesn't accept aborts.\n");
-	}
-	return TRUE;
-    }
-
-    if (looking_at(buf, i, "requests adjournment") ||
-	looking_at(buf, i, "would like to adjourn")) {
-      if (appData.zippyAdjourn) {
-	SendToICS(ics_prefix);
-	SendToICS("adjourn\n");
-      } else {
-	SendToICS(ics_prefix);
-	if (appData.zippyTalk)
-	  SendToICS("say Whoa no!  I am having FUN playing NOW!!\n");
-	else
-	  SendToICS("say Sorry, this computer doesn't accept adjourns.\n");
-      }
-      return TRUE;
-    }
-
-    return FALSE;
-}
-
-/* Initialize chess program with data from the first board 
- * of a new or resumed game.
- */
-void ZippyFirstBoard(moveNum, basetime, increment)
-     int moveNum, basetime, increment;
-{
-    char buf[MSG_SIZ];
-    int w, b;
-    char *opp = (gameMode==IcsPlayingWhite ? gameInfo.black : gameInfo.white);
-    Boolean sentPos = FALSE;
-
-    if (!first.initDone) {
-      /* Game is starting prematurely.  We can't deal with this */
-      SendToICS(ics_prefix);
-      SendToICS("abort\n");
-      SendToICS(ics_prefix);
-      SendToICS("say Sorry, the chess program is not initialized yet.\n");
-      return;
-    }
-
-    /* Send the variant command if needed */
-    if (gameInfo.variant != VariantNormal) {
-      sprintf(buf, "variant %s\n", VariantName(gameInfo.variant));
-      SendToProgram(buf, &first);
-    }
-
-    if ((startedFromSetupPosition && moveNum == 0) ||
-	(!appData.getMoveList && moveNum > 0)) {
-      SendToProgram("force\n", &first);
-      SendBoard(&first, moveNum);
-      sentPos = TRUE;
-    }
-
-    sprintf(buf, "level 0 %d %d\n", basetime, increment);
-    SendToProgram(buf, &first);
-
-    /* Count consecutive games from one opponent */
-    if (strcmp(opp, zippyLastOpp) == 0) {
-      zippyConsecGames++;
-    } else {
-      zippyConsecGames = 1;
-      strcpy(zippyLastOpp, opp);
-    }
-
-    /* Send the "computer" command if the opponent is in the list
-       we've been gathering. */
-    for (w=0; w<num_opps; w++) {
-	if (!strcmp(opp_name[w], opp)) {
-	    SendToProgram(first.computerString, &first);
-	    break;
-	}
-    }
-
-    /* Ratings might be < 0 which means "we haven't seen a ratings
-       message from ICS." Send 0 in that case */
-    w = (gameInfo.whiteRating >= 0) ? gameInfo.whiteRating : 0;
-    b = (gameInfo.blackRating >= 0) ? gameInfo.blackRating : 0;
-    
-    firstMove = FALSE;
-    if (gameMode == IcsPlayingWhite) {
-        if (first.sendName) {
-	  sprintf(buf, "name %s\n", gameInfo.black);
-	  SendToProgram(buf, &first);
-	}
-	strcpy(ics_handle, gameInfo.white);
-	sprintf(buf, "rating %d %d\n", w, b);
-	SendToProgram(buf, &first);
-	if (sentPos) {
-	    /* Position sent above, engine is in force mode */
-	    if (WhiteOnMove(moveNum)) {
-	      /* Engine is on move now */
-	      if (first.sendTime) {
-		if (first.useColors) {
-		  SendToProgram("black\n", &first); /*gnu kludge*/
-		  SendTimeRemaining(&first, TRUE);
-		  SendToProgram("white\n", &first);
-		} else {
-		  SendTimeRemaining(&first, TRUE);
-		}
-	      }
-	      SendToProgram("go\n", &first);
-	    } else {
-	        /* Engine's opponent is on move now */
-	        if (first.usePlayother) {
-		  if (first.sendTime) {
-		    SendTimeRemaining(&first, TRUE);
-		  }
-		  SendToProgram("playother\n", &first);
-		} else {
-		  /* Need to send a "go" after opponent moves */
-		  firstMove = TRUE;
-		}
-	    }
-	} else {
-	    /* Position not sent above, move list might be sent later */
-	    if (moveNum == 0) {
-	        /* No move list coming; at start of game */
-	      if (first.sendTime) {
-		if (first.useColors) {
-		  SendToProgram("black\n", &first); /*gnu kludge*/
-		  SendTimeRemaining(&first, TRUE);
-		  SendToProgram("white\n", &first);
-		} else {
-		  SendTimeRemaining(&first, TRUE);
-		}
-	      }
-	      SendToProgram("go\n", &first);
-	    }
-	}
-    } else if (gameMode == IcsPlayingBlack) {
-        if (first.sendName) {
-	  sprintf(buf, "name %s\n", gameInfo.white);
-	  SendToProgram(buf, &first);
-	}
-	strcpy(ics_handle, gameInfo.black);
-	sprintf(buf, "rating %d %d\n", b, w);
-	SendToProgram(buf, &first);
-	if (sentPos) {
-	    /* Position sent above, engine is in force mode */
-	    if (!WhiteOnMove(moveNum)) {
-	        /* Engine is on move now */
-	      if (first.sendTime) {
-		if (first.useColors) {
-		  SendToProgram("white\n", &first); /*gnu kludge*/
-		  SendTimeRemaining(&first, FALSE);
-		  SendToProgram("black\n", &first);
-		} else {
-		  SendTimeRemaining(&first, FALSE);
-		}
-	      }
-	      SendToProgram("go\n", &first);
-	    } else {
-	        /* Engine's opponent is on move now */
-	        if (first.usePlayother) {
-		  if (first.sendTime) {
-		    SendTimeRemaining(&first, FALSE);
-		  }
-		  SendToProgram("playother\n", &first);
-		} else {
-		  /* Need to send a "go" after opponent moves */
-		  firstMove = TRUE;
-		}
-	    }
-	} else {
-	    /* Position not sent above, move list might be sent later */
-	    /* Nothing needs to be done here */
-	}	
-    }
-}
-
-
-void
-ZippyHoldings(white_holding, black_holding, new_piece)
-     char *white_holding, *black_holding, *new_piece;
-{
-    char buf[MSG_SIZ];
-    if (gameMode != IcsPlayingBlack && gameMode != IcsPlayingWhite) return;
-    sprintf(buf, "holding [%s] [%s] %s\n",
-	    white_holding, black_holding, new_piece);
-    SendToProgram(buf, &first);
-}
+/*
+ * zippy.c -- Implements Zippy the Pinhead chess player on ICS in XBoard
+ * $Id: zippy.c,v 2.2 2003/11/25 05:25:20 mann Exp $
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 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 XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <ctype.h>
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else /* not STDC_HEADERS */
+extern char *getenv();
+# if HAVE_STRING_H
+#  include <string.h>
+# else /* not HAVE_STRING_H */
+#  include <strings.h>
+# endif /* not HAVE_STRING_H */
+#endif /* not STDC_HEADERS */
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+#define HI "hlelo "
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include "common.h"
+#include "zippy.h"
+#include "frontend.h"
+#include "backend.h"
+#include "backendz.h"
+
+char *SendMoveToBookUser P((int nr, ChessProgramState *cps, int initial)); // [HGM] book
+void HandleMachineMove P((char *message, ChessProgramState *cps));
+
+static char zippyPartner[MSG_SIZ];
+static char zippyLastOpp[MSG_SIZ];
+static int zippyConsecGames;
+static time_t zippyLastGameEnd;
+
+extern void mysrandom(unsigned int seed);
+extern int myrandom(void);
+
+void ZippyInit()
+{
+    char *p;
+
+    /* Get name of Zippy lines file */
+    p = getenv("ZIPPYLINES");
+    if (p != NULL) {
+      appData.zippyLines = p;
+    }
+
+    /* Get word that Zippy thinks is insulting */
+    p = getenv("ZIPPYPINHEAD");
+    if (p != NULL) {
+      appData.zippyPinhead = p;
+    }
+
+    /* What password is used for remote control? */
+    p = getenv("ZIPPYPASSWORD");
+    if (p != NULL) {
+      appData.zippyPassword = p;
+    }
+
+    /* What password is used for remote commands to gnuchess? */
+    p = getenv("ZIPPYPASSWORD2");
+    if (p != NULL) {
+      appData.zippyPassword2 = p;
+    }
+
+    /* Joke feature for people who try an old password */
+    p = getenv("ZIPPYWRONGPASSWORD");
+    if (p != NULL) {
+      appData.zippyWrongPassword = p;
+    }
+
+    /* While testing, I want to accept challenges from only one person
+       (namely, my "anonymous" account), so I set an environment
+       variable ZIPPYACCEPTONLY. */
+    p = getenv("ZIPPYACCEPTONLY");
+    if ( p != NULL ) {
+      appData.zippyAcceptOnly = p;
+    }
+    
+    /* Should Zippy use "i" command? */
+    /* Defaults to 1=true */
+    p = getenv("ZIPPYUSEI");
+    if (p != NULL) {
+      appData.zippyUseI = atoi(p);
+    }
+
+    /* How does Zippy handle bughouse partnering? */
+    /* 0=say we can't play, 1=manual partnering, 2=auto partnering */
+    p = getenv("ZIPPYBUGHOUSE");
+    if (p != NULL) {
+      appData.zippyBughouse = atoi(p);
+    }
+
+    /* Does Zippy abort games with Crafty? */
+    /* Defaults to 0=false */
+    p = getenv("ZIPPYNOPLAYCRAFTY");
+    if (p != NULL) {
+      appData.zippyNoplayCrafty = atoi(p);
+    }
+
+    /* What ICS command does Zippy send at game end?  Default: "gameend". */
+    p = getenv("ZIPPYGAMEEND");
+    if (p != NULL) {
+      appData.zippyGameEnd = p;
+    }
+
+    /* What ICS command does Zippy send at game start?  Default: none. */
+    p = getenv("ZIPPYGAMESTART");
+    if (p != NULL) {
+      appData.zippyGameStart = p;
+    }
+
+    /* Should Zippy accept adjourns? */
+    /* Defaults to 0=false */
+    p = getenv("ZIPPYADJOURN");
+    if (p != NULL) {
+      appData.zippyAdjourn = atoi(p);
+    }
+
+    /* Should Zippy accept aborts? */
+    /* Defaults to 0=false */
+    p = getenv("ZIPPYABORT");
+    if (p != NULL) {
+      appData.zippyAbort = atoi(p);
+    }
+
+    /* Should Zippy play chess variants (besides bughouse)? */
+    p = getenv("ZIPPYVARIANTS");
+    if (p != NULL) {
+      appData.zippyVariants = p;
+    }
+    strcpy(first.variants, appData.zippyVariants);
+
+    srandom(time(NULL));
+}
+
+/*
+ * Routines to implement Zippy talking
+ */
+
+
+char *swifties[] = { 
+    "i acclaims:", "i admonishes:", "i advertises:", "i advises:",
+    "i advocates:", "i affirms:", "i alleges:", "i anathematizes:",
+    "i animadverts:", "i announces:", "i apostrophizes:",
+    "i appeals:", "i applauds:", "i approves:", "i argues:",
+    "i articulates:", "i asserts:", "i asseverates:", "i attests:",
+    "i avers:", "i avows:", "i baas:", "i babbles:", "i banters:",
+    "i barks:", "i bawls:", "i bays:", "i begs:", "i belches:",
+    "i bellows:", "i belts out:", "i berates:", "i beshrews:",
+    "i blabbers:", "i blabs:", "i blares:", "i blasphemes:",
+    "i blasts:", "i blathers:", "i bleats:", "i blithers:",
+    "i blubbers:", "i blurts out:", "i blusters:", "i boasts:",
+    "i brags:", "i brays:", "i broadcasts:", "i burbles:",
+    "i buzzes:", "i cachinnates:", "i cackles:", "i caterwauls:",
+    "i calumniates:", "i caws:", "i censures:", "i chants:",
+    "i chatters:", "i cheeps:", "i cheers:", "i chides:", "i chins:",
+    "i chirps:", "i chortles:", "i chuckles:", "i claims:",
+    "i clamors:", "i clucks:", "i commands:", "i commends:",
+    "i comments:", "i commiserates:", "i communicates:",
+    "i complains:", "i concludes:", "i confabulates:", "i confesses:",
+    "i coos:", "i coughs:", "i counsels:", "i cries:", "i croaks:",
+    "i crows:", "i curses:", "i daydreams:", "i debates:",
+    "i declaims:", "i declares:", "i delivers:", "i denounces:",
+    "i deposes:", "i directs:", "i discloses:", "i disparages:",
+    "i discourses:", "i divulges:", "i documents:", "i drawls:",
+    "i dreams:", "i drivels:", "i drones:", "i effuses:",
+    /*"i ejaculates:",*/ "i elucidates:", "i emotes:", "i endorses:",
+    "i enthuses:", "i entreats:", "i enunciates:", "i eulogizes:",
+    "i exclaims:", "i execrates:", "i exhorts:", "i expatiates:",
+    "i explains:", "i explicates:", "i explodes:", "i exposes:",
+    "i exposits:", "i expostulates: ",
+    "i expounds:", "i expresses:", "i extols:",
+    "i exults:", "i fantasizes:", "i fibs:", "i filibusters:",
+    "i flatters:", "i flutes:", "i fools:", "i free-associates:",
+    "i fulminates:", "i gabbles:", "i gabs:", "i gasps:",
+    "i giggles:", "i gossips:", "i gripes:", "i groans:", "i growls:",
+    "i grunts:", "i guesses:", "i guffaws:", "i gushes:", "i hails:",
+    "i hallucinates:", "i harangues:", "i harmonizes:", "i hectors:",
+    "i hints:", "i hisses:", "i hollers:", "i honks:", "i hoots:",
+    "i hosannas:", "i howls:", "i hums:", "i hypothecates:",
+    "i hypothesizes:", "i imagines:", "i implies:", "i implores:",
+    "i imprecates:", "i indicates:", "i infers:",
+    "i informs everyone:",  "i instructs:", "i interjects:", 
+    "i interposes:", "i intimates:", "i intones:", "i introspects:",
+    "i inveighs:", "i jabbers:", "i japes:", "i jests:", "i jibes:",
+    "i jives:", "i jokes:", "i joshes:", "i keens:", "i laments:",
+    "i lauds:", "i laughs:", "i lectures:", "i lies:", "i lilts:",
+    "i lisps:", "i maintains:", "i maledicts:", "i maunders:",
+    "i meows:", "i mewls:", "i mimes:", "i minces:", "i moans:",
+    "i moos:", "i mourns:", "i mouths:", "i mumbles:", "i murmurs:",
+    "i muses:", "i mutters:", "i nags:", "i natters:", "i neighs:",
+    "i notes:", "i nuncupates:", "i objurgates:", "i observes:",
+    "i offers:", "i oinks:", "i opines:", "i orates:", "i orders:",
+    "i panegyrizes:", "i pantomimes:", "i pants:", "i peals:",
+    "i peeps:", "i perorates:", "i persuades:", "i petitions:",
+    "i phonates:", "i pipes up:", "i pitches:", "i pleads:",
+    "i points out:", "i pontificates:", "i postulates:", "i praises:",
+    "i prates:", "i prattles:", "i preaches:", "i prescribes:",
+    "i prevaricates:", "i proclaims:", "i projects:", "i pronounces:",
+    "i proposes:", "i proscribes:", "i quacks:", "i queries:",
+    "i questions:", "i quips:", "i quotes:", "i rages:", "i rambles:",
+    "i rants:", "i raps:", "i rasps:", "i rattles:", "i raves:",
+    "i reacts:", "i recites:", "i recommends:", "i records:",
+    "i reiterates:", "i rejoins:", "i releases:", "i remarks:",
+    "i reminisces:", "i remonstrates:", "i repeats:", "i replies:",
+    "i reports:", "i reprimands:", "i reproaches:", "i reproves:",
+    "i resounds:", "i responds:", "i retorts:", "i reveals:",
+    "i reviles:", "i roars:", "i rumbles:", "i sanctions:",
+    "i satirizes:", "i sauces:", "i scolds:", "i screams:",
+    "i screeches:", "i semaphores:", "i sends:", "i sermonizes:",
+    "i shrieks:", "i sibilates:", "i sighs:", "i signals:",
+    "i signifies:", "i signs:", "i sings:", "i slurs:", "i snaps:",
+    "i snarls:", "i sneezes:", "i snickers:", "i sniggers:",
+    "i snivels:", "i snores:", "i snorts:", "i sobs:",
+    "i soliloquizes:", "i sounds off:", "i sounds out:", "i speaks:",
+    "i spews:", "i spits out:", "i splutters:", "i spoofs:",
+    "i spouts:", "i sputters:", "i squalls:", "i squawks:",
+    "i squeaks:", "i squeals:", "i stammers:", "i states:",
+    "i stresses:", "i stutters:", "i submits:", "i suggests:",
+    "i summarizes:", "i sums up:", "i swears:", "i talks:",
+    "i tattles:", "i teases:", "i telegraphs:", "i testifies:",
+    "i threatens:", "i thunders:", "i titters:", "i tongue-lashes:",
+    "i toots:", "i transcribes:", "i transmits:", "i trills:",
+    "i trumpets:", "i twaddles:", "i tweets:", "i twitters:",
+    "i types:", "i upbraids:", "i urges:", "i utters:", "i ventures:",
+    "i vibrates:", "i vilifies:", "i vituperates:", "i vocalizes:",
+    "i vociferates:", "i voices:", "i waffles:", "i wails:",
+    "i warbles:", "i warns:", "i weeps:", "i wheezes:", "i whimpers:",
+    "i whines:", "i whinnies:", "i whistles:", "i wisecracks:",
+    "i witnesses:", "i woofs:", "i writes:", "i yammers:", "i yawps:",
+    "i yells:", "i yelps:", "i yodels:", "i yowls:", "i zings:",
+};
+
+#define MAX_SPEECH 250
+
+void Speak(how, whom) 
+     char *how, *whom;
+{
+    static FILE *zipfile = NULL;
+    static struct stat zipstat;
+    char zipbuf[MAX_SPEECH + 1];
+    static time_t lastShout = 0;
+    time_t now;
+    char  *p;
+    int c, speechlen;
+    Boolean done;
+		
+    if (strcmp(how, "shout") == 0) {
+	now = time((time_t *) NULL);
+	if (now - lastShout < 1*60) return;
+	lastShout = now;
+	if (appData.zippyUseI) {
+	    how = swifties[(unsigned) random() %
+			   (sizeof(swifties)/sizeof(char *))];
+	}
+    }
+
+    if (zipfile == NULL) {
+	zipfile = fopen(appData.zippyLines, "r");
+	if (zipfile == NULL) {
+	    DisplayFatalError("Can't open Zippy lines file", errno, 1);
+	    return;
+	}
+	fstat(fileno(zipfile), &zipstat);
+    }
+		
+    for (;;) {
+	fseek(zipfile, (unsigned) random() % zipstat.st_size, 0);
+	do {
+	  c = getc(zipfile);
+	} while (c != NULLCHAR && c != '^' && c != EOF);
+	if (c == EOF) continue;
+	while ((c = getc(zipfile)) == '\n') ;
+	if (c == EOF) continue;
+	break;
+    }
+    done = FALSE;
+
+    /* Don't use ics_prefix; we need to let FICS expand the alias i -> it,
+       but use the real command "i" on ICC */
+    strcpy(zipbuf, how);
+    strcat(zipbuf, " ");
+    if (whom != NULL) {
+	strcat(zipbuf, whom);
+	strcat(zipbuf, " ");
+    }
+    speechlen = strlen(zipbuf);
+    p = zipbuf + speechlen;
+
+    while (++speechlen < MAX_SPEECH) {
+	if (c == NULLCHAR || c == '^') {
+	    *p++ = '\n';
+	    *p = '\0';
+	    SendToICS(zipbuf);
+	    return;
+	} else if (c == '\n') {
+	    *p++ = ' ';
+	    do {
+		c = getc(zipfile);
+	    } while (c == ' ');
+	} else if (c == EOF) {
+	    break;
+	} else {
+	    *p++ = c;
+	    c = getc(zipfile);
+	}
+    }
+    /* Tried to say something too long, or junk at the end of the
+       file.  Try something else. */
+    Speak(how, whom);  /* tail recursion */
+}
+
+int ZippyCalled(str)
+     char *str;
+{
+    return ics_handle[0] != NULLCHAR && StrCaseStr(str, ics_handle) != NULL;
+}
+
+static char opp_name[128][32];
+static int num_opps=0;
+
+extern ColorClass curColor;
+
+static void SetCurColor( ColorClass color )
+{
+    curColor = color;
+}
+
+static void ColorizeEx( ColorClass color, int cont )
+{
+    if( appData.colorize ) {
+        Colorize( color, cont );
+        SetCurColor( color );
+    }
+}
+
+int ZippyControl(buf, i)
+     char *buf;
+     int *i;
+{
+    char *player, *p;
+    char reply[MSG_SIZ];
+
+#if TRIVIA
+#include "trivia.c"
+#endif
+
+    /* Possibly reject Crafty as opponent */
+    if (appData.zippyPlay && appData.zippyNoplayCrafty && forwardMostMove < 4
+	&& looking_at(buf, i, "* kibitzes: Hello from Crafty")) 
+    {
+        player = StripHighlightAndTitle(star_match[0]);
+	if ((gameMode == IcsPlayingWhite &&
+	     StrCaseCmp(player, gameInfo.black) == 0) ||
+	    (gameMode == IcsPlayingBlack &&
+	     StrCaseCmp(player, gameInfo.white) == 0)) {
+
+	  sprintf(reply, "%ssay This computer does not play Crafty clones\n%sabort\n%s+noplay %s\n",
+		  ics_prefix, ics_prefix, ics_prefix, player);
+	  SendToICS(reply);
+	}
+	return TRUE;
+    }
+
+    /* If this is a computer, save the name.  Then later, once the */
+    /* game is really started, we will send the "computer" notice to */
+    /* the engine.  */ 
+    if (appData.zippyPlay &&
+	looking_at(buf, i, "* is in the computer list")) {
+	int i;
+	for (i=0;i<num_opps;i++)
+	  if (!strcmp(opp_name[i],star_match[0])) break;
+	if (i >= num_opps) strcpy(opp_name[num_opps++],star_match[0]);
+    }
+    if (appData.zippyPlay && looking_at(buf, i, "* * is a computer *")) {
+	int i;
+	for (i=0;i<num_opps;i++)
+	  if (!strcmp(opp_name[i],star_match[1])) break;
+	if (i >= num_opps) strcpy(opp_name[num_opps++],star_match[1]);
+    }
+
+    /* Tells and says */
+    if (appData.zippyPlay && 
+	(looking_at(buf, i, "* offers to be your bughouse partner") ||
+	 looking_at(buf, i, "* tells you: [automatic message] I chose you"))) {
+	player = StripHighlightAndTitle(star_match[0]);
+	if (appData.zippyBughouse > 1 && first.initDone) {
+	    sprintf(reply, "%spartner %s\n", ics_prefix, player);
+	    SendToICS(reply);
+	    if (strcmp(zippyPartner, player) != 0) {
+		strcpy(zippyPartner, player);
+		SendToProgram(reply + strlen(ics_prefix), &first);
+	    }
+	} else if (appData.zippyBughouse > 0) {
+	    sprintf(reply, "%sdecline %s\n", ics_prefix, player);
+	    SendToICS(reply);
+	} else {
+	    sprintf(reply, "%stell %s This computer cannot play bughouse\n",
+		    ics_prefix, player);
+	    SendToICS(reply);
+	}
+	return TRUE;
+    }
+
+    if (appData.zippyPlay && appData.zippyBughouse && first.initDone &&
+	looking_at(buf, i, "* agrees to be your partner")) {
+	player = StripHighlightAndTitle(star_match[0]);
+	sprintf(reply, "partner %s\n", player);
+	if (strcmp(zippyPartner, player) != 0) {
+	    strcpy(zippyPartner, player);
+	    SendToProgram(reply, &first);
+	}
+	return TRUE;
+    }
+
+    if (appData.zippyPlay && appData.zippyBughouse && first.initDone &&
+	(looking_at(buf, i, "are no longer *'s partner") ||
+	 looking_at(buf, i,
+		    "* tells you: [automatic message] I'm no longer your"))) {
+	player = StripHighlightAndTitle(star_match[0]);
+	if (strcmp(zippyPartner, player) == 0) {
+	    zippyPartner[0] = NULLCHAR;
+	    SendToProgram("partner\n", &first);
+	}
+	return TRUE;
+    }
+
+    if (appData.zippyPlay && appData.zippyBughouse && first.initDone &&
+	(looking_at(buf, i, "no longer have a bughouse partner") ||
+	 looking_at(buf, i, "partner has disconnected") ||
+	 looking_at(buf, i, "partner has just chosen a new partner"))) {
+      zippyPartner[0] = NULLCHAR;
+      SendToProgram("partner\n", &first);
+      return TRUE;
+    }
+
+    if (appData.zippyPlay && appData.zippyBughouse && first.initDone &&
+	looking_at(buf, i, "* (your partner) tells you: *")) {
+	/* This pattern works on FICS but not ICC */
+	player = StripHighlightAndTitle(star_match[0]);
+	if (strcmp(zippyPartner, player) != 0) {
+	    strcpy(zippyPartner, player);
+	    sprintf(reply, "partner %s\n", player);
+	    SendToProgram(reply, &first);
+	}
+	sprintf(reply, "ptell %s\n", star_match[1]);
+	SendToProgram(reply, &first);
+	return TRUE;
+    }
+
+    if (looking_at(buf, i, "* tells you: *") ||
+	looking_at(buf, i, "* says: *")) 
+    {
+	player = StripHighlightAndTitle(star_match[0]);
+	if (appData.zippyPassword[0] != NULLCHAR &&
+	    strncmp(star_match[1], appData.zippyPassword,
+		    strlen(appData.zippyPassword)) == 0) {
+	    p = star_match[1] + strlen(appData.zippyPassword);
+	    while (*p == ' ') p++;
+	    SendToICS(p);
+	    SendToICS("\n");
+	} else if (appData.zippyPassword2[0] != NULLCHAR && first.initDone &&
+	    strncmp(star_match[1], appData.zippyPassword2,
+		    strlen(appData.zippyPassword2)) == 0) {
+	    p = star_match[1] + strlen(appData.zippyPassword2);
+	    while (*p == ' ') p++;
+	    SendToProgram(p, &first);
+	    SendToProgram("\n", &first);
+	} else if (appData.zippyWrongPassword[0] != NULLCHAR &&
+	    strncmp(star_match[1], appData.zippyWrongPassword,
+		    strlen(appData.zippyWrongPassword)) == 0) {
+	    p = star_match[1] + strlen(appData.zippyWrongPassword);
+	    while (*p == ' ') p++;
+	    sprintf(reply, "wrong %s\n", player);
+	    SendToICS(reply);
+	} else if (appData.zippyBughouse && first.initDone &&
+		   strcmp(player, zippyPartner) == 0) {
+	    SendToProgram("ptell ", &first);
+	    SendToProgram(star_match[1], &first);
+	    SendToProgram("\n", &first);
+	} else if (strncmp(star_match[1], HI, 6) == 0) {
+	    extern char* programVersion;
+	    sprintf(reply, "%stell %s %s\n",
+		    ics_prefix, player, programVersion);
+	    SendToICS(reply);
+	} else if (strncmp(star_match[1], "W0W!! ", 6) == 0) {
+	    extern char* programVersion;
+	    sprintf(reply, "%stell %s %s\n", ics_prefix,
+		    player, programVersion);
+	    SendToICS(reply);
+	} else if (appData.zippyTalk && (((unsigned) random() % 10) < 9)) {
+	    if (strcmp(player, ics_handle) != 0) {
+		Speak("tell", player);
+	    }
+	}
+
+        ColorizeEx( ColorTell, FALSE );
+
+	return TRUE;
+    }
+
+    if( appData.colorize && looking_at(buf, i, "* (*) seeking") ) {
+	ColorizeEx(ColorSeek, FALSE);
+        return FALSE;
+    }
+
+    if (looking_at(buf, i, "* spoofs you:")) {
+        player = StripHighlightAndTitle(star_match[0]);
+        sprintf(reply, "spoofedby %s\n", player);
+        SendToICS(reply);
+    }
+
+    return FALSE;
+}
+
+int ZippyConverse(buf, i)
+     char *buf;
+     int *i;
+{
+    static char lastgreet[MSG_SIZ];
+    char reply[MSG_SIZ];
+    int oldi;
+
+    /* Shouts and emotes */
+    if (looking_at(buf, i, "--> * *") ||
+	looking_at(buf, i, "* shouts: *")) 
+    {
+      if (appData.zippyTalk) {
+	char *player = StripHighlightAndTitle(star_match[0]);
+	if (strcmp(player, ics_handle) == 0) {
+	    return TRUE;
+	} else if (appData.zippyPinhead[0] != NULLCHAR &&
+		   StrCaseStr(star_match[1], appData.zippyPinhead) != NULL) {
+	    sprintf(reply, "insult %s\n", player);
+	    SendToICS(reply);
+	} else if (ZippyCalled(star_match[1])) {
+	    Speak("shout", NULL);
+	}
+      }
+
+      ColorizeEx(ColorShout, FALSE);
+
+      return TRUE;
+    }
+
+    if (looking_at(buf, i, "* kibitzes: *")) {
+      if (appData.zippyTalk && ((unsigned) random() % 10) < 9) {
+	char *player = StripHighlightAndTitle(star_match[0]);
+	if (strcmp(player, ics_handle) != 0) {
+	    Speak("kibitz", NULL);
+	}
+      }
+
+      ColorizeEx(ColorKibitz, FALSE);
+
+      return TRUE;
+    }
+
+    if (looking_at(buf, i, "* whispers: *")) {
+      if (appData.zippyTalk && ((unsigned) random() % 10) < 9) {
+	char *player = StripHighlightAndTitle(star_match[0]);
+	if (strcmp(player, ics_handle) != 0) {
+	    Speak("whisper", NULL);
+	}
+      }
+
+      ColorizeEx(ColorKibitz, FALSE);
+
+      return TRUE;
+    }
+
+    /* Messages */
+    if ((looking_at(buf, i, ". * (*:*): *") && isdigit(star_match[1][0])) ||
+	 looking_at(buf, i, ". * at *:*: *")) {
+      if (appData.zippyTalk) {
+	FILE *f;
+	char *player = StripHighlightAndTitle(star_match[0]);
+
+	if (strcmp(player, ics_handle) != 0) {
+	    if (((unsigned) random() % 10) < 9)
+	      Speak("message", player);
+	    f = fopen("zippy.messagelog", "a");
+	    fprintf(f, "%s (%s:%s): %s\n", player,
+		    star_match[1], star_match[2], star_match[3]);
+	    fclose(f);
+	}
+      }
+      return TRUE;
+    }
+
+    /* Channel tells */
+    oldi = *i;
+    if (looking_at(buf, i, "*(*: *")) {
+	char *player;
+	char *channel;
+	if (star_match[0][0] == NULLCHAR  ||
+	    strchr(star_match[0], ' ') ||
+	    strchr(star_match[1], ' ')) {
+	    /* Oops, did not want to match this; probably a message */
+	    *i = oldi;
+	    return FALSE;
+	}
+	if (appData.zippyTalk) {
+	  player = StripHighlightAndTitle(star_match[0]);
+	  channel = strrchr(star_match[1], '(');
+	  if (channel == NULL) {
+	    channel = star_match[1];
+	  } else {
+	    channel++;
+	  }
+	  channel[strlen(channel)-1] = NULLCHAR;
+#if 0
+	  /* Always tell to the channel (probability 90%) */
+	  if (strcmp(player, ics_handle) != 0 &&
+	      ((unsigned) random() % 10) < 9) {
+	    Speak("tell", channel);
+	  }
+#else
+	  /* Tell to the channel only if someone mentions our name */
+	  if (ZippyCalled(star_match[2])) {
+	    Speak("tell", channel);
+	  }
+#endif
+
+          ColorizeEx( atoi(channel) == 1 ? ColorChannel1 : ColorChannel, FALSE );
+	}
+	return TRUE;
+    }
+
+    if (!appData.zippyTalk) return FALSE;
+
+    if ((looking_at(buf, i, "You have * message") &&
+	 atoi(star_match[0]) != 0) ||
+	looking_at(buf, i, "* has left a message for you") ||
+	looking_at(buf, i, "* just sent you a message")) {
+        sprintf(reply, "%smessages\n%sclearmessages *\n",
+		ics_prefix, ics_prefix);
+	SendToICS(reply);
+	return TRUE;
+    }
+
+    if (looking_at(buf, i, "Notification: * has arrived")) {
+	if (((unsigned) random() % 3) == 0) {
+	    char *player = StripHighlightAndTitle(star_match[0]);
+	    strcpy(lastgreet, player);
+	    sprintf(reply, "greet %s\n", player);
+	    SendToICS(reply);
+	    Speak("tell", player);
+	}
+    }	
+
+    if (looking_at(buf, i, "Notification: * has departed")) {
+	if (((unsigned) random() % 3) == 0) {
+	    char *player = StripHighlightAndTitle(star_match[0]);
+	    sprintf(reply, "farewell %s\n", player);
+	    SendToICS(reply);
+	}
+    }	
+
+    if (looking_at(buf, i, "Not sent -- * is censoring you")) {
+	char *player = StripHighlightAndTitle(star_match[0]);
+	if (strcmp(player, lastgreet) == 0) {
+	    sprintf(reply, "%s-notify %s\n", ics_prefix, player);
+	    SendToICS(reply);
+	}
+    }	
+
+    if (looking_at(buf, i, "command is currently turned off")) {
+	appData.zippyUseI = 0;
+    }
+
+    return FALSE;
+}
+
+void ZippyGameStart(white, black)
+     char *white, *black;
+{
+    if (!first.initDone) {
+      /* Game is starting prematurely.  We can't deal with this */
+      SendToICS(ics_prefix);
+      SendToICS("abort\n");
+      SendToICS(ics_prefix);
+      SendToICS("say Sorry, the chess program is not initialized yet.\n");
+      return;
+    }
+
+    if (appData.zippyGameStart[0] != NULLCHAR) {
+      SendToICS(appData.zippyGameStart);
+      SendToICS("\n");
+    }
+}
+
+void ZippyGameEnd(result, resultDetails)
+     ChessMove result;
+     char *resultDetails;
+{
+    if (appData.zippyAcceptOnly[0] == NULLCHAR &&
+	appData.zippyGameEnd[0] != NULLCHAR) {
+      SendToICS(appData.zippyGameEnd);
+      SendToICS("\n");
+    }
+    zippyLastGameEnd = time(0);
+}
+
+/*
+ * Routines to implement Zippy playing chess
+ */
+
+void ZippyHandleChallenge(srated, swild, sbase, sincrement, opponent)
+     char *srated, *swild, *sbase, *sincrement, *opponent;
+{
+    char buf[MSG_SIZ];
+    int base, increment, i=0;
+    char rated;
+    VariantClass variant;
+    char *varname;
+
+    rated = srated[0];
+    variant = StringToVariant(swild);
+    varname = VariantName(variant);
+    base = atoi(sbase);
+    increment = atoi(sincrement);
+
+    /* [DM] If icsAnalyzeEngine active we don't accept automatic games */
+    if (appData.icsActive && appData.icsEngineAnalyze) return;
+
+    /* If desired, you can insert more code here to decline matches
+       based on rated, variant, base, and increment, but it is
+       easier to use the ICS formula feature instead. */
+
+    if (variant == VariantLoadable) {
+        sprintf(buf,
+	 "%stell %s This computer can't play wild type %s\n%sdecline %s\n",
+		ics_prefix, opponent, swild, ics_prefix, opponent);
+	SendToICS(buf);
+	return;
+    }
+    if (StrStr(appData.zippyVariants, varname) == NULL ||
+              ((i=first.protocolVersion) != 1 && StrStr(first.variants, varname) == NULL) /* [HGM] zippyvar */
+                                                          ) {
+        sprintf(buf,
+	 "%stell %s This computer can't play %s [%s], only %s\n%sdecline %s\n",
+		ics_prefix, opponent, swild, varname, 
+                i ? first.variants : appData.zippyVariants,                               /* [HGM] zippyvar */
+		ics_prefix, opponent);
+	SendToICS(buf);
+	return;
+    }
+
+    /* Are we blocking match requests from all but one person? */
+    if (appData.zippyAcceptOnly[0] != NULLCHAR &&
+	StrCaseCmp(opponent, appData.zippyAcceptOnly)) {
+        /* Yes, and this isn't him.  Ignore challenge. */
+	return;
+    }
+    
+    /* Too many consecutive games with same opponent?  If so, make him
+       wait until someone else has played or a timeout has elapsed. */
+    if (appData.zippyMaxGames &&
+	strcmp(opponent, zippyLastOpp) == 0 &&
+	zippyConsecGames >= appData.zippyMaxGames &&
+	difftime(time(0), zippyLastGameEnd) < appData.zippyReplayTimeout) {
+      sprintf(buf, "%stell %s Sorry, you have just played %d consecutive games against %s.  To give others a chance, please wait %d seconds or until someone else has played.\n%sdecline %s\n",
+	      ics_prefix, opponent, zippyConsecGames, ics_handle,
+	      appData.zippyReplayTimeout, ics_prefix, opponent);
+      SendToICS(buf);
+      return;
+    }
+
+    /* Engine not yet initialized or still thinking about last game? */
+    if (!first.initDone || first.lastPing != first.lastPong) {
+      sprintf(buf, "%stell %s I'm not quite ready for a new game yet; try again soon.\n%sdecline %s\n",
+	      ics_prefix, opponent, ics_prefix, opponent);
+      SendToICS(buf);
+      return;
+    }
+
+    sprintf(buf, "%saccept %s\n", ics_prefix, opponent);
+    SendToICS(buf);
+    if (appData.zippyTalk) {
+      Speak("tell", opponent);
+    }
+}
+
+
+/* Accept matches */
+int ZippyMatch(buf, i)
+     char *buf;
+     int *i;
+{
+    if (looking_at(buf, i, "* * match * * requested with * (*)")) {
+
+	ZippyHandleChallenge(star_match[0], star_match[1],
+			     star_match[2], star_match[3],
+			     StripHighlightAndTitle(star_match[4]));
+	return TRUE;
+    }
+
+    /* Old FICS 0-increment form */
+    if (looking_at(buf, i, "* * match * requested with * (*)")) {
+
+	ZippyHandleChallenge(star_match[0], star_match[1],
+			     star_match[2], "0",
+			     StripHighlightAndTitle(star_match[3]));
+	return TRUE;
+    }
+
+    if (looking_at(buf, i,
+		   "* has made an alternate proposal of * * match * *.")) {
+
+	ZippyHandleChallenge(star_match[1], star_match[2],
+			     star_match[3], star_match[4],
+			     StripHighlightAndTitle(star_match[0]));
+	return TRUE;
+    }
+
+    /* FICS wild/nonstandard forms */
+    if (looking_at(buf, i, "Challenge: * (*) *(*) * * * * Loaded from *")) {
+	/* note: star_match[2] can include "[white] " or "[black] "
+	   before our own name. */
+	if(star_match[8] == NULL || star_match[8][0] == 0) // [HGM] chessd: open-source ICS has file on next line
+	     ZippyHandleChallenge(star_match[4], star_match[5],
+			     star_match[6], star_match[7],			     StripHighlightAndTitle(star_match[0]));
+	else ZippyHandleChallenge(star_match[4], star_match[8],
+			     star_match[6], star_match[7],
+			     StripHighlightAndTitle(star_match[0]));
+	return TRUE;
+    }
+
+    if (looking_at(buf, i,
+		   "Challenge: * (*) *(*) * * * * : * * Loaded from *")) {
+	/* note: star_match[2] can include "[white] " or "[black] "
+	   before our own name. */
+	ZippyHandleChallenge(star_match[4], star_match[10],
+			     star_match[8], star_match[9],
+			     StripHighlightAndTitle(star_match[0]));
+	return TRUE;
+    }
+
+    /* Regular forms */
+    if (looking_at(buf, i, "Challenge: * (*) *(*) * * * * : * *") |
+	looking_at(buf, i, "Challenge: * (*) *(*) * * * * * *")) {
+	/* note: star_match[2] can include "[white] " or "[black] "
+	   before our own name. */
+	ZippyHandleChallenge(star_match[4], star_match[5],
+			     star_match[8], star_match[9],
+			     StripHighlightAndTitle(star_match[0]));
+	return TRUE;
+    }
+
+    if (looking_at(buf, i, "Challenge: * (*) *(*) * * * *")) {
+	/* note: star_match[2] can include "[white] " or "[black] "
+	   before our own name. */
+	ZippyHandleChallenge(star_match[4], star_match[5],
+			     star_match[6], star_match[7],
+			     StripHighlightAndTitle(star_match[0]));
+	return TRUE;
+    }
+
+
+    if (ics_type == ICS_ICC) { // [DM]
+        if (looking_at(buf, i, "Your opponent offers you a draw")) {
+            if (first.sendDrawOffers && first.initDone)
+                SendToProgram("draw\n", &first);
+            return TRUE;
+        }
+    } else {
+        if (looking_at(buf, i, "offers you a draw")) {
+            if (first.sendDrawOffers && first.initDone) {
+                SendToProgram("draw\n", &first);
+            }
+            return TRUE;
+        }
+    }
+
+    if (looking_at(buf, i, "requests that the game be aborted") ||
+        looking_at(buf, i, "would like to abort")) {
+	if (appData.zippyAbort ||
+	    (gameMode == IcsPlayingWhite && whiteTimeRemaining < 0) ||
+	    (gameMode == IcsPlayingBlack && blackTimeRemaining < 0)) {
+	    SendToICS(ics_prefix);
+	    SendToICS("abort\n");
+	} else {
+	    SendToICS(ics_prefix);
+	    if (appData.zippyTalk)
+	      SendToICS("say Whoa no!  I am having FUN!!\n");
+	    else
+	      SendToICS("say Sorry, this computer doesn't accept aborts.\n");
+	}
+	return TRUE;
+    }
+
+    if (looking_at(buf, i, "requests adjournment") ||
+	looking_at(buf, i, "would like to adjourn")) {
+      if (appData.zippyAdjourn) {
+	SendToICS(ics_prefix);
+	SendToICS("adjourn\n");
+      } else {
+	SendToICS(ics_prefix);
+	if (appData.zippyTalk)
+	  SendToICS("say Whoa no!  I am having FUN playing NOW!!\n");
+	else
+	  SendToICS("say Sorry, this computer doesn't accept adjourns.\n");
+      }
+      return TRUE;
+    }
+
+    return FALSE;
+}
+
+/* Initialize chess program with data from the first board 
+ * of a new or resumed game.
+ */
+void ZippyFirstBoard(moveNum, basetime, increment)
+     int moveNum, basetime, increment;
+{
+    char buf[MSG_SIZ];
+    int w, b;
+    char *opp = (gameMode==IcsPlayingWhite ? gameInfo.black : gameInfo.white);
+    Boolean sentPos = FALSE;
+    char *bookHit = NULL; // [HGM] book
+
+    if (!first.initDone) {
+      /* Game is starting prematurely.  We can't deal with this */
+      SendToICS(ics_prefix);
+      SendToICS("abort\n");
+      SendToICS(ics_prefix);
+      SendToICS("say Sorry, the chess program is not initialized yet.\n");
+      return;
+    }
+
+    /* Send the variant command if needed */
+    if (gameInfo.variant != VariantNormal) {
+      sprintf(buf, "variant %s\n", VariantName(gameInfo.variant));
+      SendToProgram(buf, &first);
+    }
+
+    if ((startedFromSetupPosition && moveNum == 0) ||
+	(!appData.getMoveList && moveNum > 0)) {
+      SendToProgram("force\n", &first);
+      SendBoard(&first, moveNum);
+      sentPos = TRUE;
+    }
+
+    sprintf(buf, "level 0 %d %d\n", basetime, increment);
+    SendToProgram(buf, &first);
+
+    /* Count consecutive games from one opponent */
+    if (strcmp(opp, zippyLastOpp) == 0) {
+      zippyConsecGames++;
+    } else {
+      zippyConsecGames = 1;
+      strcpy(zippyLastOpp, opp);
+    }
+
+    /* Send the "computer" command if the opponent is in the list
+       we've been gathering. */
+    for (w=0; w<num_opps; w++) {
+	if (!strcmp(opp_name[w], opp)) {
+	    SendToProgram(first.computerString, &first);
+	    break;
+	}
+    }
+
+    /* Ratings might be < 0 which means "we haven't seen a ratings
+       message from ICS." Send 0 in that case */
+    w = (gameInfo.whiteRating >= 0) ? gameInfo.whiteRating : 0;
+    b = (gameInfo.blackRating >= 0) ? gameInfo.blackRating : 0;
+    
+    firstMove = FALSE;
+    if (gameMode == IcsPlayingWhite) {
+        if (first.sendName) {
+	  sprintf(buf, "name %s\n", gameInfo.black);
+	  SendToProgram(buf, &first);
+	}
+	strcpy(ics_handle, gameInfo.white);
+	sprintf(buf, "rating %d %d\n", w, b);
+	SendToProgram(buf, &first);
+	if (sentPos) {
+	    /* Position sent above, engine is in force mode */
+	    if (WhiteOnMove(moveNum)) {
+	      /* Engine is on move now */
+	      if (first.sendTime) {
+		if (first.useColors) {
+		  SendToProgram("black\n", &first); /*gnu kludge*/
+		  SendTimeRemaining(&first, TRUE);
+		  SendToProgram("white\n", &first);
+		} else {
+		  SendTimeRemaining(&first, TRUE);
+		}
+	      }
+	      bookHit = SendMoveToBookUser(forwardMostMove-1, &first, TRUE); // [HGM] book: send go or retrieve book move
+	    } else {
+	        /* Engine's opponent is on move now */
+	        if (first.usePlayother) {
+		  if (first.sendTime) {
+		    SendTimeRemaining(&first, TRUE);
+		  }
+		  SendToProgram("playother\n", &first);
+		} else {
+		  /* Need to send a "go" after opponent moves */
+		  firstMove = TRUE;
+		}
+	    }
+	} else {
+	    /* Position not sent above, move list might be sent later */
+	    if (moveNum == 0) {
+	        /* No move list coming; at start of game */
+	      if (first.sendTime) {
+		if (first.useColors) {
+		  SendToProgram("black\n", &first); /*gnu kludge*/
+		  SendTimeRemaining(&first, TRUE);
+		  SendToProgram("white\n", &first);
+		} else {
+		  SendTimeRemaining(&first, TRUE);
+		}
+	      }
+//	      SendToProgram("go\n", &first);
+	      bookHit = SendMoveToBookUser(forwardMostMove-1, &first, TRUE); // [HGM] book: send go or retrieve book move
+	    }
+	}
+    } else if (gameMode == IcsPlayingBlack) {
+        if (first.sendName) {
+	  sprintf(buf, "name %s\n", gameInfo.white);
+	  SendToProgram(buf, &first);
+	}
+	strcpy(ics_handle, gameInfo.black);
+	sprintf(buf, "rating %d %d\n", b, w);
+	SendToProgram(buf, &first);
+	if (sentPos) {
+	    /* Position sent above, engine is in force mode */
+	    if (!WhiteOnMove(moveNum)) {
+	        /* Engine is on move now */
+	      if (first.sendTime) {
+		if (first.useColors) {
+		  SendToProgram("white\n", &first); /*gnu kludge*/
+		  SendTimeRemaining(&first, FALSE);
+		  SendToProgram("black\n", &first);
+		} else {
+		  SendTimeRemaining(&first, FALSE);
+		}
+	      }
+//	      SendToProgram("go\n", &first);
+	      bookHit = SendMoveToBookUser(forwardMostMove-1, &first, TRUE); // [HGM] book: send go or retrieve book move
+	    } else {
+	        /* Engine's opponent is on move now */
+	        if (first.usePlayother) {
+		  if (first.sendTime) {
+		    SendTimeRemaining(&first, FALSE);
+		  }
+		  SendToProgram("playother\n", &first);
+		} else {
+		  /* Need to send a "go" after opponent moves */
+		  firstMove = TRUE;
+		}
+	    }
+	} else {
+	    /* Position not sent above, move list might be sent later */
+	    /* Nothing needs to be done here */
+	}	
+    }
+
+    if(bookHit) { // [HGM] book: simulate book reply
+	static char bookMove[MSG_SIZ]; // a bit generous?
+
+	programStats.depth = programStats.nodes = programStats.time = 
+	programStats.score = programStats.got_only_move = 0;
+	sprintf(programStats.movelist, "%s (xbook)", bookHit);
+
+	strcpy(bookMove, "move ");
+	strcat(bookMove, bookHit);
+	HandleMachineMove(bookMove, &first);
+    }
+}
+
+
+void
+ZippyHoldings(white_holding, black_holding, new_piece)
+     char *white_holding, *black_holding, *new_piece;
+{
+    char buf[MSG_SIZ];
+    if (gameMode != IcsPlayingBlack && gameMode != IcsPlayingWhite) return;
+    sprintf(buf, "holding [%s] [%s] %s\n",
+	    white_holding, black_holding, new_piece);
+    SendToProgram(buf, &first);
+}
diff --git a/zippy.h b/zippy.h
index c8cf6e8..e2d8761 100644
--- a/zippy.h
+++ b/zippy.h
@@ -2,8 +2,10 @@
  * zippy.h -- Interface to zippy.c module in XBoard
  * $Id: zippy.h,v 2.1 2003/10/27 19:21:01 mann Exp $
  *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.  Enhancements Copyright
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
+ * Foundation, Inc.
  *
  * The following terms apply to Digital Equipment Corporation's copyright
  * interest in XBoard:
@@ -27,24 +29,25 @@
  * SOFTWARE.
  * ------------------------------------------------------------------------
  *
- * The following terms apply to the enhanced version of XBoard distributed
- * by the Free Software Foundation:
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
  * ------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
+ *
+ * GNU XBoard 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.
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * GNU XBoard 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history.  */
 
 void ZippyInit P((void));
 int ZippyControl P((char *buf, int *i));

-- 
UNNAMED PROJECT



More information about the Pkg-games-commits mailing list